Don't use broken DL_AUTO_FUNCTION_ADDRESS()
commitdaf75146de07303ea0c5ad700ec5ef703ec114a1
authorGuy Martin <gmsoft@tuxicoman.be>
Thu, 21 Nov 2013 18:23:16 +0000 (21 13:23 -0500)
committerCarlos O'Donell <carlos@redhat.com>
Thu, 21 Nov 2013 20:52:31 +0000 (21 15:52 -0500)
treeed307e39a90288cbcdf727a7c07addb9f38f65d8
parentd33cafadfe365befa4ca6e0463fa926d56144046
Don't use broken DL_AUTO_FUNCTION_ADDRESS()

On hppa and ia64, the macro DL_AUTO_FUNCTION_ADDRESS() uses the
variable fptr[2] in it's own scope.

The content of fptr[] is thus undefined right after the macro exits.
Newer gcc's (>= 4.7) reuse the stack space of this variable triggering
a segmentation fault in dl-init.c:69.

To fix this we rewrite the macros to make the call directly to init
and fini without needing to pass back a constructed function pointer.
ChangeLog
elf/dl-close.c
elf/dl-fini.c
elf/dl-init.c
ports/ChangeLog.hppa
ports/ChangeLog.ia64
ports/sysdeps/hppa/dl-lookupcfg.h
ports/sysdeps/hppa/dl-machine.h
ports/sysdeps/ia64/dl-lookupcfg.h
ports/sysdeps/ia64/dl-machine.h
sysdeps/generic/ldsodefs.h