This is the mail archive of the
libc-alpha@sourceware.cygnus.com
mailing list for the glibc project.
Re: Problem in rtld.c with gcc-2.95pre
- To: Geoff Keating <geoffk@ozemail.com.au>
- Subject: Re: Problem in rtld.c with gcc-2.95pre
- From: Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
- Date: Sat, 12 Jun 1999 12:14:30 +0200
- Cc: libc-alpha@sourceware.cygnus.com
- References: <199906121005.UAA02960@geoffk.wattle.id.au>
Am Sat, 12 Jun 1999 schrieb Geoff Keating:
>> Mailing-List: contact libc-alpha-help@sourceware.cygnus.com; run by ezmlm
>> From: Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
>> Date: Sat, 12 Jun 1999 11:23:10 +0200
>> Cc: libc-alpha@sourceware.cygnus.com
>
>> Hmm, so is this a bug in gcc or in glibc? Or in both? Wouldn't it be
>> better to just split out the end of _dl_start into a separate
>> function/file? This should be a portable solution for all platforms.
>>
>> FYI, both splitting out the end of _dl_start and using asm volatile("" : : :
>> "r30") solves the problem and the resulting gcc-2.95pre built library passes
>> all tests.
>
>It's certainly a gcc bug; if you say that "memory" was clobbered, gcc
>shouldn't cache the contents of any memory. Otherwise, all sorts of
>tricks become impossible, like switching address spaces mid-program.
I'm not so sure about that. Why should gcc consider read-only memory like the
the GOT as clobberable at all? It's not part of the "user" address space viewed
from gcc, otherwise a simple asm volatile("" : "=m" (&_dl_rtld_map) : : ) would
do the trick. But my knowledge might be to vague here.
>Splitting _dl_start would be one way to make it work on ppc; I don't know
>about on other platforms. Clobbering r30 is likely to stop working
>in future.
Splitting _dl_start should work on all platforms, at least until compilers are
able to inline functions across separate .c files.
Another way would be to force gcc to output something like a gen_blockage(),
but I don't know if that is possible.
Franz.