From: David S. Miller Date: Wed, 24 Aug 2011 06:17:52 +0000 (-0700) Subject: Fix jmpbuf unwind checks on sparc64. X-Git-Tag: upstream/2.30~12140 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2c0b250ae4bc8f14a7c5a5e733d57de6c6745d9c;p=external%2Fglibc.git Fix jmpbuf unwind checks on sparc64. --- diff --git a/ChangeLog b/ChangeLog index 3de98c9..f14b70a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2011-08-23 David S. Miller + + * sysdeps/sparc/sparc64/dl-machine.h (DL_STACK_END): Do not + subtract stack bias. + * sysdeps/sparc/sparc64/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Use + %sp not %fp in calculations. + (_JMPBUF_UNWINDS_ADJ): Likewise. + 2011-08-23 Andreas Schwab * sysdeps/i386/i686/multiarch/strspn.S (ENTRY): Add missing diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h index aaa22d6..3f71a66 100644 --- a/sysdeps/sparc/sparc64/dl-machine.h +++ b/sysdeps/sparc/sparc64/dl-machine.h @@ -264,9 +264,9 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) #define elf_machine_relplt elf_machine_rela /* Undo the sub %sp, 6*8, %sp; add %sp, STACK_BIAS + 22*8, %o0 below - to get at the value we want in __libc_stack_end. */ + (but w/o STACK_BIAS) to get at the value we want in __libc_stack_end. */ #define DL_STACK_END(cookie) \ - ((void *) (((long) (cookie)) - (22 - 6) * 8 - STACK_BIAS)) + ((void *) (((long) (cookie)) - (22 - 6) * 8)) /* Initial entry point code for the dynamic linker. The C function `_dl_start' is the real entry point; diff --git a/sysdeps/sparc/sparc64/jmpbuf-unwind.h b/sysdeps/sparc/sparc64/jmpbuf-unwind.h index f7eed15..f19b649 100644 --- a/sysdeps/sparc/sparc64/jmpbuf-unwind.h +++ b/sysdeps/sparc/sparc64/jmpbuf-unwind.h @@ -24,14 +24,14 @@ /* Test if longjmp to JMPBUF would unwind the frame containing a local variable at ADDRESS. */ #define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((unsigned long int) (address) < (jmpbuf)->uc_mcontext.mc_fp + 2047) + ((unsigned long int) (address) < (jmpbuf)->uc_mcontext.mc_gregs[MC_O6] + 2047) #define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ ((uintptr_t) (_address) - (_adj) \ - < (uintptr_t) (_jmpbuf)[0].uc_mcontext.mc_fp + 2047 - (_adj)) + < (uintptr_t) (_jmpbuf)[0].uc_mcontext.mc_gregs[MC_O6] + 2047 - (_adj)) /* We use the normal lobngjmp for unwinding. */ #define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)