mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
(PTR_MANGLE): Fix cast. * sysdeps/alpha/bits/setjmp.h (_JMPBUF_UNWINDS): Take third argument DEMANGLE, and pass SP value through it. * sysdeps/hppa/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise. * sysdeps/i386/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise. * sysdeps/m68k/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise. * sysdeps/mips/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise. * sysdeps/powerpc/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise. * sysdeps/s390/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise. * sysdeps/sh/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise. * sysdeps/sparc/sparc32/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise. * sysdeps/unix/sysv/linux/ia64/bits/setjmp.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/setjmp.h: Likewise. * sysdeps/x86_64/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise. * hurd/sigunwind.c (_hurdsig_longjmp_from_handler): Pass inline demangler function to _JMPBUF_UNWINDS. * sysdeps/mach/hurd/jmp-unwind.c (demangle_ptr): New function. (_longjmp_unwind): Pass it to _JMPBUF_UNWINDS.
This commit is contained in:
21
ChangeLog
21
ChangeLog
@ -1,5 +1,26 @@
|
|||||||
2005-12-27 Roland McGrath <roland@redhat.com>
|
2005-12-27 Roland McGrath <roland@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
|
||||||
|
(PTR_MANGLE): Fix cast.
|
||||||
|
|
||||||
|
* sysdeps/alpha/bits/setjmp.h (_JMPBUF_UNWINDS): Take third argument
|
||||||
|
DEMANGLE, and pass SP value through it.
|
||||||
|
* sysdeps/hppa/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise.
|
||||||
|
* sysdeps/i386/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise.
|
||||||
|
* sysdeps/m68k/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise.
|
||||||
|
* sysdeps/mips/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise.
|
||||||
|
* sysdeps/powerpc/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise.
|
||||||
|
* sysdeps/s390/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise.
|
||||||
|
* sysdeps/sh/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise.
|
||||||
|
* sysdeps/sparc/sparc32/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/ia64/bits/setjmp.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/bits/setjmp.h: Likewise.
|
||||||
|
* sysdeps/x86_64/bits/setjmp.h (_JMPBUF_UNWINDS): Likewise.
|
||||||
|
* hurd/sigunwind.c (_hurdsig_longjmp_from_handler): Pass inline
|
||||||
|
demangler function to _JMPBUF_UNWINDS.
|
||||||
|
* sysdeps/mach/hurd/jmp-unwind.c (demangle_ptr): New function.
|
||||||
|
(_longjmp_unwind): Pass it to _JMPBUF_UNWINDS.
|
||||||
|
|
||||||
* posix/tst-execle1.c (do_test): Add a const.
|
* posix/tst-execle1.c (do_test): Add a const.
|
||||||
* posix/tst-execle2.c (do_test): Likewise.
|
* posix/tst-execle2.c (do_test): Likewise.
|
||||||
|
|
||||||
|
@ -70,11 +70,19 @@ _hurdsig_longjmp_from_handler (void *data, jmp_buf env, int val)
|
|||||||
|
|
||||||
struct hurd_userlink *link;
|
struct hurd_userlink *link;
|
||||||
|
|
||||||
|
inline uintptr_t demangle_ptr (uintptr_t x)
|
||||||
|
{
|
||||||
|
# ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE (x);
|
||||||
|
# endif
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
/* Continue _longjmp_unwind's job of running the unwind
|
/* Continue _longjmp_unwind's job of running the unwind
|
||||||
forms for frames being unwound, since we will not
|
forms for frames being unwound, since we will not
|
||||||
return to its loop like this one, which called us. */
|
return to its loop like this one, which called us. */
|
||||||
for (link = ss->active_resources;
|
for (link = ss->active_resources;
|
||||||
link && _JMPBUF_UNWINDS (env[0].__jmpbuf, link);
|
link && _JMPBUF_UNWINDS (env[0].__jmpbuf, link, demangle_ptr);
|
||||||
link = link->thread.next)
|
link = link->thread.next)
|
||||||
if (_hurd_userlink_unlink (link))
|
if (_hurd_userlink_unlink (link))
|
||||||
{
|
{
|
||||||
|
@ -1,3 +1,17 @@
|
|||||||
|
2005-12-27 Roland McGrath <roland@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/x86_64/jmpbuf-unwind.h (_jmpbuf_sp): New inline function.
|
||||||
|
(_JMPBUF_UNWINDS_ADJ): Use it, to PTR_DEMANGLE before comparison.
|
||||||
|
* sysdeps/alpha/jmpbuf-unwind.h: Likewise.
|
||||||
|
* sysdeps/i386/jmpbuf-unwind.h: Likewise.
|
||||||
|
* sysdeps/mips/jmpbuf-unwind.h: Likewise.
|
||||||
|
* sysdeps/powerpc/jmpbuf-unwind.h: Likewise.
|
||||||
|
* sysdeps/s390/jmpbuf-unwind.h: Likewise.
|
||||||
|
* sysdeps/sh/jmpbuf-unwind.h: Likewise.
|
||||||
|
* sysdeps/sparc/sparc32/jmpbuf-unwind.h: Likewise.
|
||||||
|
* sysdeps/sparc/sparc64/jmpbuf-unwind.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/ia64/jmpbuf-unwind.h: Likewise.
|
||||||
|
|
||||||
2005-12-27 Jakub Jelinek <jakub@redhat.com>
|
2005-12-27 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h: Add __next
|
* sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h: Add __next
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
||||||
|
|
||||||
@ -20,12 +20,23 @@
|
|||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <unwind.h>
|
#include <unwind.h>
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
||||||
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((unused))
|
||||||
|
_jmpbuf_sp (__jmp_buf regs)
|
||||||
|
{
|
||||||
|
uintptr_t sp = regs[JB_SP];
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE (sp);
|
||||||
|
#endif
|
||||||
|
return sp;
|
||||||
|
}
|
||||||
|
|
||||||
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
||||||
((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj))
|
((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
|
||||||
|
|
||||||
/* We use the normal lobngjmp for unwinding. */
|
/* We use the normal lobngjmp for unwinding. */
|
||||||
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
||||||
|
|
||||||
@ -20,12 +20,23 @@
|
|||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <unwind.h>
|
#include <unwind.h>
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
||||||
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((unused))
|
||||||
|
_jmpbuf_sp (__jmp_buf regs)
|
||||||
|
{
|
||||||
|
uintptr_t sp = regs[JB_SP];
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE (sp);
|
||||||
|
#endif
|
||||||
|
return sp;
|
||||||
|
}
|
||||||
|
|
||||||
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
||||||
((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj))
|
((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
|
||||||
|
|
||||||
/* We use the normal lobngjmp for unwinding. */
|
/* We use the normal lobngjmp for unwinding. */
|
||||||
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
||||||
|
@ -19,12 +19,23 @@
|
|||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <unwind.h>
|
#include <unwind.h>
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
||||||
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((unused))
|
||||||
|
_jmpbuf_sp (__jmp_buf regs)
|
||||||
|
{
|
||||||
|
uintptr_t sp = regs[0].__sp;
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE (sp);
|
||||||
|
#endif
|
||||||
|
return sp;
|
||||||
|
}
|
||||||
|
|
||||||
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
||||||
((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[0].__sp - (_adj))
|
((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
|
||||||
|
|
||||||
/* We use the normal longjmp for unwinding. */
|
/* We use the normal longjmp for unwinding. */
|
||||||
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
||||||
|
|
||||||
@ -20,12 +20,23 @@
|
|||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <unwind.h>
|
#include <unwind.h>
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
||||||
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((unused))
|
||||||
|
_jmpbuf_sp (__jmp_buf regs)
|
||||||
|
{
|
||||||
|
uintptr_t sp = regs[JB_GPR1];
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE (sp);
|
||||||
|
#endif
|
||||||
|
return sp;
|
||||||
|
}
|
||||||
|
|
||||||
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
||||||
((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_GPR1] - (_adj))
|
((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
|
||||||
|
|
||||||
/* We use the normal lobngjmp for unwinding. */
|
/* We use the normal lobngjmp for unwinding. */
|
||||||
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
||||||
|
|
||||||
@ -21,6 +21,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <unwind.h>
|
#include <unwind.h>
|
||||||
#include <bits/wordsize.h>
|
#include <bits/wordsize.h>
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
/* On s390{,x}, CFA is always 96 (resp. 160) bytes above actual
|
/* On s390{,x}, CFA is always 96 (resp. 160) bytes above actual
|
||||||
%r15. */
|
%r15. */
|
||||||
@ -29,9 +30,18 @@
|
|||||||
(void *) (_Unwind_GetCFA (_context) \
|
(void *) (_Unwind_GetCFA (_context) \
|
||||||
- 32 - 2 * __WORDSIZE), _adj)
|
- 32 - 2 * __WORDSIZE), _adj)
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((unused))
|
||||||
|
_jmpbuf_sp (__jmp_buf regs)
|
||||||
|
{
|
||||||
|
uintptr_t sp = regs[0].__gregs[__JB_GPR15];
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE (sp);
|
||||||
|
#endif
|
||||||
|
return sp;
|
||||||
|
}
|
||||||
|
|
||||||
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
||||||
((uintptr_t) (_address) - (_adj) \
|
((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
|
||||||
< (uintptr_t) (_jmpbuf)->__gregs[__JB_GPR15] - (_adj))
|
|
||||||
|
|
||||||
/* We use the normal longjmp for unwinding. */
|
/* We use the normal longjmp for unwinding. */
|
||||||
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
||||||
|
|
||||||
@ -20,12 +20,23 @@
|
|||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <unwind.h>
|
#include <unwind.h>
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
||||||
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
||||||
|
|
||||||
#define _JMPBUF_UNWINDS_ADJ(jmpbuf, address, adj) \
|
static inline uintptr_t __attribute__ ((unused))
|
||||||
((uintptr_t) (address) - (adj) < (uintptr_t) (jmpbuf)[0].__regs[7] - (adj))
|
_jmpbuf_sp (__jmp_buf regs)
|
||||||
|
{
|
||||||
|
uintptr_t sp = regs[0].__regs[7];
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE (sp);
|
||||||
|
#endif
|
||||||
|
return sp;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
||||||
|
((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
|
||||||
|
|
||||||
/* We use the normal lobngjmp for unwinding. */
|
/* We use the normal lobngjmp for unwinding. */
|
||||||
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
||||||
|
|
||||||
@ -20,12 +20,23 @@
|
|||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <unwind.h>
|
#include <unwind.h>
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
||||||
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((unused))
|
||||||
|
_jmpbuf_sp (__jmp_buf regs)
|
||||||
|
{
|
||||||
|
uintptr_t sp = regs[JB_SP];
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE (sp);
|
||||||
|
#endif
|
||||||
|
return sp;
|
||||||
|
}
|
||||||
|
|
||||||
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
||||||
((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj))
|
((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
|
||||||
|
|
||||||
/* We use the normal lobngjmp for unwinding. */
|
/* We use the normal lobngjmp for unwinding. */
|
||||||
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
||||||
|
@ -20,12 +20,23 @@
|
|||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <unwind.h>
|
#include <unwind.h>
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
||||||
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((unused))
|
||||||
|
_jmpbuf_sp (__jmp_buf regs)
|
||||||
|
{
|
||||||
|
uintptr_t sp = regs[0].uc_mcontext.mc_fp;
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE (sp);
|
||||||
|
#endif
|
||||||
|
return sp;
|
||||||
|
}
|
||||||
|
|
||||||
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
||||||
((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[0].uc_mcontext.mc_fp - (_adj))
|
((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
|
||||||
|
|
||||||
/* We use the normal lobngjmp for unwinding. */
|
/* We use the normal lobngjmp for unwinding. */
|
||||||
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
||||||
|
|
||||||
@ -21,12 +21,23 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <unwind.h>
|
#include <unwind.h>
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((unused))
|
||||||
|
_jmpbuf_sp (__jmp_buf regs, int i)
|
||||||
|
{
|
||||||
|
uintptr_t sp = ((unsigned long int *) regs)[i];
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE (sp);
|
||||||
|
#endif
|
||||||
|
return sp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
||||||
({ uintptr_t _cfa = (uintptr_t) _Unwind_GetCFA (_context) - (_adj); \
|
({ uintptr_t _cfa = (uintptr_t) _Unwind_GetCFA (_context) - (_adj); \
|
||||||
(_cfa < (uintptr_t)(((long *)(_jmpbuf))[0]) - (_adj) \
|
(_cfa < _jmpbuf_sp (_jmpbuf, 0) - (_adj) \
|
||||||
|| (_cfa == (uintptr_t)(((long *)(_jmpbuf))[0]) - (_adj) \
|
|| (_cfa == (uintptr_t)(((long *)(_jmpbuf))[0]) - (_adj) \
|
||||||
&& (uintptr_t) _Unwind_GetBSP (_context) - (_adj) \
|
&& ((uintptr_t) _Unwind_GetBSP (_context) - (_adj) \
|
||||||
>= (uintptr_t)(((long *)(_jmpbuf))[17]) - (_adj))); \
|
>= _jmpbuf_sp (_jmpbuf, 17) - (_adj)))); \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
|
||||||
|
|
||||||
@ -20,12 +20,23 @@
|
|||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <unwind.h>
|
#include <unwind.h>
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
||||||
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((unused))
|
||||||
|
_jmpbuf_sp (__jmp_buf regs)
|
||||||
|
{
|
||||||
|
uintptr_t sp = regs[JB_RSP];
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE (sp);
|
||||||
|
#endif
|
||||||
|
return sp;
|
||||||
|
}
|
||||||
|
|
||||||
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
||||||
((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_RSP] - (_adj))
|
((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
|
||||||
|
|
||||||
/* We use the normal lobngjmp for unwinding. */
|
/* We use the normal lobngjmp for unwinding. */
|
||||||
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Define the machine-dependent type `jmp_buf'. Alpha version.
|
/* Define the machine-dependent type `jmp_buf'. Alpha version.
|
||||||
Copyright (C) 1992, 1997, 2003 Free Software Foundation, Inc.
|
Copyright (C) 1992, 1997, 2003, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -80,8 +80,8 @@ typedef long int __jmp_buf[17];
|
|||||||
|
|
||||||
/* Test if longjmp to JMPBUF would unwind the frame containing a local
|
/* Test if longjmp to JMPBUF would unwind the frame containing a local
|
||||||
variable at ADDRESS. */
|
variable at ADDRESS. */
|
||||||
#define _JMPBUF_UNWINDS(_jmpbuf, _address) \
|
#define _JMPBUF_UNWINDS(_jmpbuf, _address, _demangle) \
|
||||||
((void *)(_address) < (void *)((_jmpbuf)[JB_SP]))
|
((void *)(_address) < (void *) _demangle ((_jmpbuf)[JB_SP]))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* bits/setjmp.h */
|
#endif /* bits/setjmp.h */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2000 Free Software Foundation, Inc.
|
/* Copyright (C) 2000, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -39,7 +39,8 @@ typedef double __jmp_buf[21];
|
|||||||
|
|
||||||
/* Test if longjmp to JMPBUF would unwind the frame containing a local
|
/* Test if longjmp to JMPBUF would unwind the frame containing a local
|
||||||
variable at ADDRESS. */
|
variable at ADDRESS. */
|
||||||
#define _JMPBUF_UNWINDS(_jmpbuf, _address) \
|
#define _JMPBUF_UNWINDS(_jmpbuf, _address, _demangle) \
|
||||||
((void *)(_address) > (void *)(((unsigned long *) _jmpbuf)[JB_SP]))
|
((void *) (_address) > \
|
||||||
|
(void *) _demangle ((((unsigned long *) _jmpbuf)[JB_SP])))
|
||||||
|
|
||||||
#endif /* bits/setjmp.h */
|
#endif /* bits/setjmp.h */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc.
|
/* Copyright (C) 1997, 1998, 2000, 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -40,7 +40,7 @@ typedef int __jmp_buf[6];
|
|||||||
|
|
||||||
/* Test if longjmp to JMPBUF would unwind the frame
|
/* Test if longjmp to JMPBUF would unwind the frame
|
||||||
containing a local variable at ADDRESS. */
|
containing a local variable at ADDRESS. */
|
||||||
#define _JMPBUF_UNWINDS(jmpbuf, address) \
|
#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
|
||||||
((void *) (address) < (void *) (jmpbuf)[JB_SP])
|
((void *) (address) < (void *) demangle ((jmpbuf)[JB_SP]))
|
||||||
|
|
||||||
#endif /* bits/setjmp.h */
|
#endif /* bits/setjmp.h */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
/* Copyright (C) 1997, 1998, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -44,7 +44,7 @@ typedef struct
|
|||||||
|
|
||||||
/* Test if longjmp to JMPBUF would unwind the frame
|
/* Test if longjmp to JMPBUF would unwind the frame
|
||||||
containing a local variable at ADDRESS. */
|
containing a local variable at ADDRESS. */
|
||||||
#define _JMPBUF_UNWINDS(jmpbuf, address) \
|
#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
|
||||||
((void *) (address) < (void *) (jmpbuf)->__sp)
|
((void *) (address) < (void *) demangle ((jmpbuf)->__sp))
|
||||||
|
|
||||||
#endif /* bits/setjmp.h */
|
#endif /* bits/setjmp.h */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* _longjmp_unwind -- Clean up stack frames unwound by longjmp. Hurd version.
|
/* _longjmp_unwind -- Clean up stack frames unwound by longjmp. Hurd version.
|
||||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1996, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -28,6 +28,15 @@
|
|||||||
#error "<bits/setjmp.h> fails to define _JMPBUF_UNWINDS"
|
#error "<bits/setjmp.h> fails to define _JMPBUF_UNWINDS"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline uintptr_t
|
||||||
|
demangle_ptr (uintptr_t x)
|
||||||
|
{
|
||||||
|
# ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE (x);
|
||||||
|
# endif
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
/* This function is called by `longjmp' (with its arguments) to restore
|
/* This function is called by `longjmp' (with its arguments) to restore
|
||||||
active resources to a sane state before the frames code using them are
|
active resources to a sane state before the frames code using them are
|
||||||
jumped out of. */
|
jumped out of. */
|
||||||
@ -46,7 +55,7 @@ _longjmp_unwind (jmp_buf env, int val)
|
|||||||
|
|
||||||
/* Remove local signal preemptors being unwound past. */
|
/* Remove local signal preemptors being unwound past. */
|
||||||
while (ss->preemptors &&
|
while (ss->preemptors &&
|
||||||
_JMPBUF_UNWINDS (env[0].__jmpbuf, ss->preemptors))
|
_JMPBUF_UNWINDS (env[0].__jmpbuf, ss->preemptors, demangle_ptr))
|
||||||
ss->preemptors = ss->preemptors->next;
|
ss->preemptors = ss->preemptors->next;
|
||||||
|
|
||||||
__spin_unlock (&ss->lock);
|
__spin_unlock (&ss->lock);
|
||||||
@ -56,7 +65,7 @@ _longjmp_unwind (jmp_buf env, int val)
|
|||||||
in stack frames being unwound by this jump. */
|
in stack frames being unwound by this jump. */
|
||||||
|
|
||||||
for (link = ss->active_resources;
|
for (link = ss->active_resources;
|
||||||
link && _JMPBUF_UNWINDS (env[0].__jmpbuf, link);
|
link && _JMPBUF_UNWINDS (env[0].__jmpbuf, link, demangle_ptr);
|
||||||
link = link->thread.next)
|
link = link->thread.next)
|
||||||
/* Remove this link from the resource's users list,
|
/* Remove this link from the resource's users list,
|
||||||
since the frame using the resource is being unwound.
|
since the frame using the resource is being unwound.
|
||||||
|
@ -80,7 +80,7 @@ typedef struct
|
|||||||
|
|
||||||
/* Test if longjmp to JMPBUF would unwind the frame
|
/* Test if longjmp to JMPBUF would unwind the frame
|
||||||
containing a local variable at ADDRESS. */
|
containing a local variable at ADDRESS. */
|
||||||
#define _JMPBUF_UNWINDS(jmpbuf, address) \
|
#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
|
||||||
((void *) (address) < (void *) (jmpbuf)[0].__sp)
|
((void *) (address) < (void *) demangle ((jmpbuf)[0].__sp))
|
||||||
|
|
||||||
#endif /* _MIPS_BITS_SETJMP_H */
|
#endif /* _MIPS_BITS_SETJMP_H */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1997, 1998, 2000, 2003, 2004 Free Software Foundation, Inc.
|
/* Copyright (C) 1997, 1998, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -74,7 +74,7 @@ typedef long int __jmp_buf[64 + (12 * 4)] __attribute__ ((__aligned__ (16)));
|
|||||||
|
|
||||||
/* Test if longjmp to JMPBUF would unwind the frame
|
/* Test if longjmp to JMPBUF would unwind the frame
|
||||||
containing a local variable at ADDRESS. */
|
containing a local variable at ADDRESS. */
|
||||||
#define _JMPBUF_UNWINDS(jmpbuf, address) \
|
#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
|
||||||
((void *) (address) < (void *) (jmpbuf)[JB_GPR1])
|
((void *) (address) < (void *) demangle ((jmpbuf)[JB_GPR1]))
|
||||||
|
|
||||||
#endif /* bits/setjmp.h */
|
#endif /* bits/setjmp.h */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
|
/* Copyright (C) 2000, 2001, 2002, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -57,7 +57,7 @@ typedef struct {
|
|||||||
|
|
||||||
/* Test if longjmp to JMPBUF would unwind the frame
|
/* Test if longjmp to JMPBUF would unwind the frame
|
||||||
containing a local variable at ADDRESS. */
|
containing a local variable at ADDRESS. */
|
||||||
#define _JMPBUF_UNWINDS(jmpbuf, address) \
|
#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
|
||||||
((void *) (address) < (void *) (jmpbuf)->__gregs[__JB_GPR15])
|
((void *) (address) < (void *) demangle ((jmpbuf)->__gregs[__JB_GPR15]))
|
||||||
|
|
||||||
#endif /* __S390_SETJMP_H__ */
|
#endif /* __S390_SETJMP_H__ */
|
||||||
|
@ -50,7 +50,7 @@ typedef struct
|
|||||||
|
|
||||||
/* Test if longjmp to JMPBUF would unwind the frame
|
/* Test if longjmp to JMPBUF would unwind the frame
|
||||||
containing a local variable at ADDRESS. */
|
containing a local variable at ADDRESS. */
|
||||||
#define _JMPBUF_UNWINDS(jmpbuf, address) \
|
#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
|
||||||
((void *) (address) < (void *) (jmpbuf)[0].__regs[7])
|
((void *) (address) < (void *) demangle ((jmpbuf)[0].__regs[7]))
|
||||||
|
|
||||||
#endif /* bits/setjmp.h */
|
#endif /* bits/setjmp.h */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
/* Copyright (C) 1997, 1998, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -34,5 +34,5 @@ typedef int __jmp_buf[3];
|
|||||||
|
|
||||||
/* Test if longjmp to JMPBUF would unwind the frame
|
/* Test if longjmp to JMPBUF would unwind the frame
|
||||||
containing a local variable at ADDRESS. */
|
containing a local variable at ADDRESS. */
|
||||||
#define _JMPBUF_UNWINDS(jmpbuf, address) \
|
#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
|
||||||
((int) (address) < (jmpbuf)[JB_SP])
|
((int) (address) < demangle ((jmpbuf)[JB_SP]))
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Define the machine-dependent type `jmp_buf'. Linux/IA-64 version.
|
/* Define the machine-dependent type `jmp_buf'. Linux/IA-64 version.
|
||||||
Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
|
Copyright (C) 1999, 2000, 2003, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by David Mosberger-Tang <davidm@hpl.hp.com>.
|
Contributed by David Mosberger-Tang <davidm@hpl.hp.com>.
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ typedef long __jmp_buf[_JBLEN] __attribute__ ((aligned (16))); /* guarantees 128
|
|||||||
|
|
||||||
/* Test if longjmp to JMPBUF would unwind the frame containing a local
|
/* Test if longjmp to JMPBUF would unwind the frame containing a local
|
||||||
variable at ADDRESS. */
|
variable at ADDRESS. */
|
||||||
#define _JMPBUF_UNWINDS(_jmpbuf, _address) \
|
#define _JMPBUF_UNWINDS(_jmpbuf, _address, _demangle) \
|
||||||
((void *)(_address) < (void *)(((long *)_jmpbuf)[0]))
|
((void *) (_address) < (void *) demangle (((long int *) _jmpbuf)[0]))
|
||||||
|
|
||||||
#endif /* bits/setjmp.h */
|
#endif /* bits/setjmp.h */
|
||||||
|
@ -183,7 +183,7 @@
|
|||||||
# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg)
|
# define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg)
|
||||||
# else
|
# else
|
||||||
# define PTR_MANGLE(var) \
|
# define PTR_MANGLE(var) \
|
||||||
(var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ())
|
(var) = (__typeof (var)) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ())
|
||||||
# define PTR_DEMANGLE(var) PTR_MANGLE (var)
|
# define PTR_DEMANGLE(var) PTR_MANGLE (var)
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1997,1999,2000,2003 Free Software Foundation, Inc.
|
/* Copyright (C) 1997,1999,2000,2003, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -59,8 +59,8 @@ typedef struct __sparc64_jmp_buf
|
|||||||
|
|
||||||
/* Test if longjmp to JMPBUF would unwind the frame
|
/* Test if longjmp to JMPBUF would unwind the frame
|
||||||
containing a local variable at ADDRESS. */
|
containing a local variable at ADDRESS. */
|
||||||
#define _JMPBUF_UNWINDS(jmpbuf, address) \
|
#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
|
||||||
((unsigned long int) (address) < (jmpbuf)->uc_mcontext.mc_fp)
|
((unsigned long int) (address) < demangle ((jmpbuf)->uc_mcontext.mc_fp))
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@ -76,8 +76,8 @@ typedef int __jmp_buf[3];
|
|||||||
|
|
||||||
/* Test if longjmp to JMPBUF would unwind the frame
|
/* Test if longjmp to JMPBUF would unwind the frame
|
||||||
containing a local variable at ADDRESS. */
|
containing a local variable at ADDRESS. */
|
||||||
#define _JMPBUF_UNWINDS(jmpbuf, address) \
|
#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
|
||||||
((int) (address) < (jmpbuf)[JB_SP])
|
((int) (address) < demangle ((jmpbuf)[JB_SP]))
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
|
/* Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -67,11 +67,11 @@ typedef int __jmp_buf[6];
|
|||||||
/* Test if longjmp to JMPBUF would unwind the frame
|
/* Test if longjmp to JMPBUF would unwind the frame
|
||||||
containing a local variable at ADDRESS. */
|
containing a local variable at ADDRESS. */
|
||||||
# if __WORDSIZE == 64
|
# if __WORDSIZE == 64
|
||||||
# define _JMPBUF_UNWINDS(jmpbuf, address) \
|
# define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
|
||||||
((void *) (address) < (void *) (jmpbuf)[JB_RSP])
|
((void *) (address) < (void *) demangle ((jmpbuf)[JB_RSP]))
|
||||||
# else
|
# else
|
||||||
# define _JMPBUF_UNWINDS(jmpbuf, address) \
|
# define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
|
||||||
((void *) (address) < (void *) (jmpbuf)[JB_SP])
|
((void *) (address) < (void *) demangle ((jmpbuf)[JB_SP]))
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user