From d1b29e58c17436b3e0cf92c12b1e99ec6b4cd9ba Mon Sep 17 00:00:00 2001 From: Guy Martin Date: Thu, 21 Nov 2013 13:23:16 -0500 Subject: 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. URL: https://bugs.gentoo.org/486618 URL: https://bugs.gentoo.org/486974 (cherry picked from commit daf75146de07303ea0c5ad700ec5ef703ec114a1) --- elf/dl-fini.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'elf/dl-fini.c') diff --git a/elf/dl-fini.c b/elf/dl-fini.c index 6b245f0022..db5269c82f 100644 --- a/elf/dl-fini.c +++ b/elf/dl-fini.c @@ -254,7 +254,7 @@ _dl_fini (void) /* Next try the old-style destructor. */ if (l->l_info[DT_FINI] != NULL) - ((fini_t) DL_DT_FINI_ADDRESS (l, l->l_addr + l->l_info[DT_FINI]->d_un.d_ptr)) (); + DL_CALL_DT_FINI(l, l->l_addr + l->l_info[DT_FINI]->d_un.d_ptr); } #ifdef SHARED -- cgit v1.2.1