PATCH: Optimize protected call for i386
Richard Henderson
rth@redhat.com
Wed May 14 23:27:00 GMT 2003
On Thu, May 15, 2003 at 08:32:53AM +0930, Alan Modra wrote:
> I see. I think this is wrong. gcc needs to emit the normal PIC call,
> ie. "call foo@PLT" so the the linker can set up a plt entry if
> needed.
I disagree.
> A plt entry is needed for protected symbols so that function
> pointer comparisons work, since the x86 ABI uses the .plt entry for
> the value of a function symbol referenced by a dynamic object.
> Consider liba.so exporting a protected symbol foo. Will a function
> pointer, value foo, passed to libb.so compare equal to &foo in
> libb.so? What about a function pointer, value foo, passed from
> libb.so back to liba.so?
None of which has anything to do with call instructions.
If liba.so contains a call to foo, ld *knows* that foo *must*
resolve to the version in liba.so and nowhere else. Thus we
can direct the call to foo without going through a PLT entry.
If you take the address of foo, in *any* DSO, you will not be
using either R_386_PC32 or R_386_PLT32. You'll be using either
R_386_32 or R_386_GOT32.
r~
More information about the Gcc
mailing list