On Monday, February 25, 2002, at 11:34 AM, Ralf Baechle wrote:
On Mon, Feb 25, 2002 at 04:16:20PM +0100, Hartvig Ekner wrote:
.globl ENTRY_POINT
.type ENTRY_POINT,@function
ENTRY_POINT:
#ifdef __PIC__
SET_GP
#else
la $28, _gp
#endif
Makes things work (this code ends in crt1.o). Is this the right place
to
fix it?
Non-PIC code doesn't use $gp, so any reference to $gp is a bug. Note
that we don't support global data optimization for ELF either that is,
-G 0 is the default.
By default non-PIC code *does* use $gp due to the brain damage in gas;
gas defaults to -G 8 unless told otherwise (-KPIC implies -G0 so we
don't see this in PIC code.) gcc won't know anything about this, of
course.
What I'm doing in SUBTARGET_ASM_SPEC is to write something like
"%{fno-pic: %{!G: -G0}}"--if we're not in PIC mode, pass -G0 to gas by
default.
Anyway, once that's straightened out, -G8 does appear to work the way
you'd expect, with the code that Hartvig pasted above---I had written a
byte-for-byte identical patch :-)
Jay
|