This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Bugs using -fPIC on linux (i86 RedHat 5.0)?
- To: Richard Henderson <rth at cygnus dot com>
- Subject: Re: Bugs using -fPIC on linux (i86 RedHat 5.0)?
- From: Jeffrey A Law <law at cygnus dot com>
- Date: Mon, 29 Dec 1997 11:20:46 -0700
- cc: Marius Kjeldahl <marius at funcom dot com>, egcs at cygnus dot com
- Reply-To: law at cygnus dot com
In message <19971229091404.35828@dot.cygnus.com>you write:
> On Mon, Dec 29, 1997 at 03:22:09PM +0100, Marius Kjeldahl wrote:
> > (I do not know _why_ it runs without -fPIC - maybe it simply
> > does not gain me the real benefit of a shared library, meaning several
> > applications will load the library into their own private memory space
> > - just guessing here).
>
> A pretty good guess -- the pages start out shared and then get dirtied
> by the relocations that are applied, which makes them not shared. The
> fact that it does work has its uses though.
>
> > In looking at the temporary assembler file, the lines it objects to is:
> >
> > call @PLT
>
> This is a compiler bug, as the target symbol for the call is missing.
> Can you give us the preprocessed file that generates this problem?
Well, on the x86, I don't see how you can get @PLT without a
function name -- unless the compiler mis-compiled itself or we have
a SYMBOL_REF with a null name. From i386.c:
case SYMBOL_REF:
case LABEL_REF:
if (GET_CODE (x) == SYMBOL_REF)
assemble_name (file, XSTR (x, 0));
else
{
ASM_GENERATE_INTERNAL_LABEL (buf, "L",
CODE_LABEL_NUMBER (XEXP (x, 0)));
assemble_name (asm_out_file, buf);
}
if (GET_CODE (x) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (x))
fprintf (file, "@GOTOFF(%%ebx)");
else if (code == 'P')
fprintf (file, "@PLT");