Re: PIC is wasteful

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 23-06-2011 22:02, Marc Glisse wrote:
On Thu, 23 Jun 2011, Ian Lance Taylor wrote:

Agner Fog <agner@xxxxxxxxx> writes:

I wonder why position-independent code (PIC) and global offset tables
(GOT) are used in shared objects (.so) when these features are wasting
resources and apparently unnecessary. The wasteful use of PIC and GOT
in Linux is apparent in the following questions:

Do you mean you would like -Bsymbolic to be the default ? (or maybe Solaris' -Bdirect)

Thanks for the tip about -Bsymbolic, that's what I want, but it doesn't seem to do the job.
When I compile with -Bsymbolic -fpic I still get a GOT entry in 64 bit mode.

When I compile with -Bsymbolic and without -fpic I get:

relocation R_X86_64_32 against `__gxx_personality_v0' can not be used when making a shared object; recompile with -fPIC

When I compile with -fno-exceptions I don't get this error, but instead I get:

relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC

This 'local symbol' is my function in section .eh_frame. Why does it make .eh_frame when I turn off exception handling?

A further problem in 64 bit mode is that even though I compile with -mcmodel=medium, I get:

relocation R_X86_64_32 against `VariableName' can not be used when making a shared object; recompile with -fPIC

Why does it make 32 bit absolute addresses when I specify -mcmodel=medium? How can I force it to use full 64 bit addresses or 32 bit relative addresses without specifying -fpic?



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux