[Bug other/60465] Compiling glibc-2.17,2.18 with gcc-4.8.2 and binutils-2.23.2,2.24 results in segfaults in _start / elf_get_dynamic_info
slyfox at inbox dot ru
gcc-bugzilla@gcc.gnu.org
Thu Dec 24 22:38:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60465
Sergei Trofimovich <slyfox at inbox dot ru> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |slyfox at inbox dot ru
--- Comment #28 from Sergei Trofimovich <slyfox at inbox dot ru> ---
(In reply to Eric Botcazou from comment #27)
> Thanks. This seems to be a conjunction of several factors, the initial one
> being that the 4.8+ compiler generates (e.g for the reduced testcase at -O):
>
> addl r14 = @ltoffx(_rtld_local#+15032385536), r1
> ;;
> ld8.mov r14 = [r14], _rtld_local#+15032385536
>
> The huge number is not problematic per se, although it very likely runs
> afoul of some limitation/quirk here, since the value loaded from the GOT is
> truncated.
>
> In fact it looks like the value loaded from the GOT is just the huge number,
> that is to say the value of _rtld_local has been zeroed during the
> relocation.
>
> This may come from _rtld_local being in the .sdata section, in which case
> there is a relevant comment in sdata_symbolic_operand:
>
> /* Deny the stupid user trick of addressing outside the object. Such
> things quickly result in GPREL22 relocation overflows. Of course,
> they're also highly undefined. From a pure pedant's point of view
> they deserve a slap on the wrist (such as provided by a relocation
> overflow), but that just leads to bugzilla noise. */
>
> In other words, the compiler skips the efficient @gprel relocation on
> purpose, only to generate the @ltoffx relocation, which doesn't work either
> here...
Hi Eric! I've poked this bug a bit more
and still don't understand what does this instruction mean:
ld8.mov r14 = [r14], _rtld_local#+15032385536
Where is '_rtld_local#+15032385536' offset expected to be used?
More information about the Gcc-bugs
mailing list