RFC: avoid relocations with PC

When PIC code uses a string, this creates a relocation that slows down program startup time. As long as the string is in the same compilation unit as the PIC code this relocation is unnecessary, as the offset of the compiled unit is stored in the program counter, and can be accessed by a stored subtraction/addition. This would mean more instructions at the call site, so the details I would image would require some careful coordination between llvm and lld.

I have a bug for this: https://bugs.llvm.org/show_bug.cgi?id=39049

and would greatly appreciate feedback, and pointers on how to do this.

Thanks!

Shawn Landden

This is happening already given support from the target architecture and
code model. Compile

    const char *f(void) { return "foo"; }

for x86-64 with -fPIC for example (i.e. small code model).

Joerg