This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] Eliminate third argument from _JMPBUF_UNWINDS
- From: Andreas Schwab <schwab at linux-m68k dot org>
- To: libc-alpha at sourceware dot org
- Cc: Roland McGrath <roland at gnu dot org>, Thomas Schwinge <tschwinge at gnu dot org>
- Date: Sun, 15 Jun 2014 16:13:46 +0200
- Subject: [PATCH] Eliminate third argument from _JMPBUF_UNWINDS
- Authentication-results: sourceware.org; auth=none
_JMPBUF_UNWINDS is currently only used by Hurd, and always passes a
function as third argument that matches what various jmpbuf-unwind.h
implementations already do via _jmpbuf_sp (or ignore it anyway).
Eliminate this parameter to simplify its interface, and always to the
demangling in the macro body.
Not tested.
Andreas.
* hurd/sigunwind.c (demangle_ptr): Remove function.
(_hurdsig_longjmp_from_handler): Don't pass demangle_ptr to
_JMPBUF_UNWINDS.
* sysdeps/mach/hurd/jmp-unwind.c (demangle_ptr): Remove function.
(_longjmp_unwind): Don't pass demangle_ptr to _JMPBUF_UNWINDS.
* sysdeps/aarch64/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Remove third
parameter.
* sysdeps/ia64/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Likewise.
* sysdeps/sparc/sparc64/jmpbuf-unwind.h (_JMPBUF_UNWINDS):
Likewise.
* sysdeps/alpha/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Likewise. Use
_jmpbuf_sp instead.
* sysdeps/arm/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Likewise.
* sysdeps/hppa/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Likewise.
* sysdeps/i386/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Likewise.
* sysdeps/m68k/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Likewise.
* sysdeps/microblaze/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Likewise.
* sysdeps/mips/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Likewise.
* sysdeps/powerpc/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Likewise.
* sysdeps/s390/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Likewise.
* sysdeps/sh/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Likewise.
* sysdeps/sparc/sparc32/jmpbuf-unwind.h (_JMPBUF_UNWINDS):
Likewise.
* sysdeps/tile/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Likewise.
* sysdeps/x86_64/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Likewise.
---
hurd/sigunwind.c | 10 +---------
sysdeps/aarch64/jmpbuf-unwind.h | 4 ++--
sysdeps/alpha/jmpbuf-unwind.h | 4 ++--
sysdeps/arm/jmpbuf-unwind.h | 4 ++--
sysdeps/hppa/jmpbuf-unwind.h | 5 ++---
sysdeps/i386/jmpbuf-unwind.h | 4 ++--
sysdeps/ia64/jmpbuf-unwind.h | 4 ++--
sysdeps/m68k/jmpbuf-unwind.h | 4 ++--
sysdeps/mach/hurd/jmp-unwind.c | 13 ++-----------
sysdeps/microblaze/jmpbuf-unwind.h | 4 ++--
sysdeps/mips/jmpbuf-unwind.h | 4 ++--
sysdeps/powerpc/jmpbuf-unwind.h | 4 ++--
sysdeps/s390/jmpbuf-unwind.h | 4 ++--
sysdeps/sh/jmpbuf-unwind.h | 4 ++--
sysdeps/sparc/sparc32/jmpbuf-unwind.h | 4 ++--
sysdeps/sparc/sparc64/jmpbuf-unwind.h | 2 +-
sysdeps/tile/jmpbuf-unwind.h | 4 ++--
sysdeps/x86_64/jmpbuf-unwind.h | 4 ++--
18 files changed, 34 insertions(+), 52 deletions(-)
diff --git a/hurd/sigunwind.c b/hurd/sigunwind.c
index 6121e92..4c44e93 100644
--- a/hurd/sigunwind.c
+++ b/hurd/sigunwind.c
@@ -70,19 +70,11 @@ _hurdsig_longjmp_from_handler (void *data, jmp_buf env, int val)
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
forms for frames being unwound, since we will not
return to its loop like this one, which called us. */
for (link = ss->active_resources;
- link && _JMPBUF_UNWINDS (env[0].__jmpbuf, link, demangle_ptr);
+ link && _JMPBUF_UNWINDS (env[0].__jmpbuf, link);
link = link->thread.next)
if (_hurd_userlink_unlink (link))
{
diff --git a/sysdeps/aarch64/jmpbuf-unwind.h b/sysdeps/aarch64/jmpbuf-unwind.h
index 39a5dc2..83f4b5e 100644
--- a/sysdeps/aarch64/jmpbuf-unwind.h
+++ b/sysdeps/aarch64/jmpbuf-unwind.h
@@ -23,8 +23,8 @@
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
- ((void *) (address) < (void *) demangle (jmpbuf[JB_SP]))
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((uintptr_t) (address) < _jmpbuf_sp (jmpbuf))
#define _JMPBUF_CFA_UNWINDS_ADJ(jmpbuf, context, adj) \
_JMPBUF_UNWINDS_ADJ (jmpbuf, (void *) _Unwind_GetCFA (context), adj)
diff --git a/sysdeps/alpha/jmpbuf-unwind.h b/sysdeps/alpha/jmpbuf-unwind.h
index 1303cbd..41d5fef 100644
--- a/sysdeps/alpha/jmpbuf-unwind.h
+++ b/sysdeps/alpha/jmpbuf-unwind.h
@@ -24,8 +24,8 @@
/* Test if longjmp to JMPBUF would unwind the frame containing a local
variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(_jmpbuf, _address, _demangle) \
- ((void *)(_address) < (void *) _demangle ((_jmpbuf)[JB_SP]))
+#define _JMPBUF_UNWINDS(_jmpbuf, _address) \
+ ((uintptr_t) (_address) < _jmpbuf_sp (_jmpbuf))
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
diff --git a/sysdeps/arm/jmpbuf-unwind.h b/sysdeps/arm/jmpbuf-unwind.h
index 4dfba44..d426214 100644
--- a/sysdeps/arm/jmpbuf-unwind.h
+++ b/sysdeps/arm/jmpbuf-unwind.h
@@ -22,8 +22,8 @@
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
- ((void *) (address) < (void *) demangle (jmpbuf[__JMP_BUF_SP]))
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((uintptr_t) (address) < _jmpbuf_sp (jmpbuf))
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
diff --git a/sysdeps/hppa/jmpbuf-unwind.h b/sysdeps/hppa/jmpbuf-unwind.h
index 2a6788d..0fecbd2 100644
--- a/sysdeps/hppa/jmpbuf-unwind.h
+++ b/sysdeps/hppa/jmpbuf-unwind.h
@@ -21,6 +21,5 @@
/* Test if longjmp to JMPBUF would unwind the frame containing a local
variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(_jmpbuf, _address, _demangle) \
- ((void *) (_address) > \
- (void *) _demangle ((((unsigned long *) _jmpbuf)[JB_SP])))
+#define _JMPBUF_UNWINDS(_jmpbuf, _address) \
+ ((unsigned long) (_address) > ((unsigned long *) _jmpbuf)[JB_SP])
diff --git a/sysdeps/i386/jmpbuf-unwind.h b/sysdeps/i386/jmpbuf-unwind.h
index 81faab2..45a5f8b 100644
--- a/sysdeps/i386/jmpbuf-unwind.h
+++ b/sysdeps/i386/jmpbuf-unwind.h
@@ -24,8 +24,8 @@
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
- ((void *) (address) < (void *) demangle ((jmpbuf)[JB_SP]))
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((uintptr_t) (address) < _jmpbuf_sp (jmpbuf))
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
diff --git a/sysdeps/ia64/jmpbuf-unwind.h b/sysdeps/ia64/jmpbuf-unwind.h
index 40fd72c..160fe7a 100644
--- a/sysdeps/ia64/jmpbuf-unwind.h
+++ b/sysdeps/ia64/jmpbuf-unwind.h
@@ -22,8 +22,8 @@
/* Test if longjmp to JMPBUF would unwind the frame containing a local
variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(_jmpbuf, _address, _demangle) \
- ((void *) (_address) < (void *) (((long int *) _jmpbuf)[0]))
+#define _JMPBUF_UNWINDS(_jmpbuf, _address) \
+ ((void *) (_address) < (void *) ((long int *) _jmpbuf)[0])
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
({ uintptr_t _cfa = (uintptr_t) _Unwind_GetCFA (_context) - (_adj); \
diff --git a/sysdeps/m68k/jmpbuf-unwind.h b/sysdeps/m68k/jmpbuf-unwind.h
index c0c62bc..9db177c 100644
--- a/sysdeps/m68k/jmpbuf-unwind.h
+++ b/sysdeps/m68k/jmpbuf-unwind.h
@@ -22,8 +22,8 @@
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
- ((void *) (address) < (void *) demangle ((uintptr_t) (jmpbuf)->__sp))
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((uintptr_t) (address) < _jmpbuf_sp (jmpbuf))
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
diff --git a/sysdeps/mach/hurd/jmp-unwind.c b/sysdeps/mach/hurd/jmp-unwind.c
index 4df4edb..a7bcb94 100644
--- a/sysdeps/mach/hurd/jmp-unwind.c
+++ b/sysdeps/mach/hurd/jmp-unwind.c
@@ -28,15 +28,6 @@
#error "<jmpbuf-unwind.h> fails to define _JMPBUF_UNWINDS"
#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
active resources to a sane state before the frames code using them are
jumped out of. */
@@ -55,7 +46,7 @@ _longjmp_unwind (jmp_buf env, int val)
/* Remove local signal preemptors being unwound past. */
while (ss->preemptors &&
- _JMPBUF_UNWINDS (env[0].__jmpbuf, ss->preemptors, demangle_ptr))
+ _JMPBUF_UNWINDS (env[0].__jmpbuf, ss->preemptors))
ss->preemptors = ss->preemptors->next;
__spin_unlock (&ss->lock);
@@ -65,7 +56,7 @@ _longjmp_unwind (jmp_buf env, int val)
in stack frames being unwound by this jump. */
for (link = ss->active_resources;
- link && _JMPBUF_UNWINDS (env[0].__jmpbuf, link, demangle_ptr);
+ link && _JMPBUF_UNWINDS (env[0].__jmpbuf, link);
link = link->thread.next)
/* Remove this link from the resource's users list,
since the frame using the resource is being unwound.
diff --git a/sysdeps/microblaze/jmpbuf-unwind.h b/sysdeps/microblaze/jmpbuf-unwind.h
index e17a085..82a13c0 100644
--- a/sysdeps/microblaze/jmpbuf-unwind.h
+++ b/sysdeps/microblaze/jmpbuf-unwind.h
@@ -23,8 +23,8 @@
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
- ((void *) (address) < (void *) demangle ((jmpbuf)[0].__sp))
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((uintptr_t) (address) < _jmpbuf_sp (jmpbuf))
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
diff --git a/sysdeps/mips/jmpbuf-unwind.h b/sysdeps/mips/jmpbuf-unwind.h
index 3126820..a381de0 100644
--- a/sysdeps/mips/jmpbuf-unwind.h
+++ b/sysdeps/mips/jmpbuf-unwind.h
@@ -22,8 +22,8 @@
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
- ((void *) (address) < (void *) demangle ((jmpbuf)[0].__sp))
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((uintptr_t) (address) < _jmpbuf_sp (jmpbuf))
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
_JMPBUF_UNWINDS_ADJ (_jmpbuf, \
diff --git a/sysdeps/powerpc/jmpbuf-unwind.h b/sysdeps/powerpc/jmpbuf-unwind.h
index 70ad88d..cc596c3 100644
--- a/sysdeps/powerpc/jmpbuf-unwind.h
+++ b/sysdeps/powerpc/jmpbuf-unwind.h
@@ -24,8 +24,8 @@
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
- ((void *) (address) < (void *) demangle ((jmpbuf)[JB_GPR1]))
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((uintptr_t) (address) < _jmpbuf_sp (jmpbuf))
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
diff --git a/sysdeps/s390/jmpbuf-unwind.h b/sysdeps/s390/jmpbuf-unwind.h
index a025fff..0d55e28 100644
--- a/sysdeps/s390/jmpbuf-unwind.h
+++ b/sysdeps/s390/jmpbuf-unwind.h
@@ -26,8 +26,8 @@
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
- ((void *) (address) < (void *) demangle ((jmpbuf)->__gregs[__JB_GPR15]))
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((uintptr_t) (address) < _jmpbuf_sp (jmpbuf))
/* On s390{,x}, CFA is always 96 (resp. 160) bytes above actual
diff --git a/sysdeps/sh/jmpbuf-unwind.h b/sysdeps/sh/jmpbuf-unwind.h
index 99adec3..abae802 100644
--- a/sysdeps/sh/jmpbuf-unwind.h
+++ b/sysdeps/sh/jmpbuf-unwind.h
@@ -23,8 +23,8 @@
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
- ((void *) (address) < (void *) demangle ((jmpbuf)[0].__regs[7]))
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((uintptr_t) (address) < _jmpbuf_sp (jmpbuf)[7])
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
diff --git a/sysdeps/sparc/sparc32/jmpbuf-unwind.h b/sysdeps/sparc/sparc32/jmpbuf-unwind.h
index 3ec444a..da07467 100644
--- a/sysdeps/sparc/sparc32/jmpbuf-unwind.h
+++ b/sysdeps/sparc/sparc32/jmpbuf-unwind.h
@@ -24,8 +24,8 @@
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
- ((int) (address) < demangle ((jmpbuf)[JB_SP]))
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((uintptr_t) (address) < _jmpbuf_sp (jmpbuf))
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
diff --git a/sysdeps/sparc/sparc64/jmpbuf-unwind.h b/sysdeps/sparc/sparc64/jmpbuf-unwind.h
index 6635333..9205be9 100644
--- a/sysdeps/sparc/sparc64/jmpbuf-unwind.h
+++ b/sysdeps/sparc/sparc64/jmpbuf-unwind.h
@@ -22,7 +22,7 @@
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
((unsigned long int) (address) < (jmpbuf)->uc_mcontext.mc_gregs[MC_O6] + 2047)
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
diff --git a/sysdeps/tile/jmpbuf-unwind.h b/sysdeps/tile/jmpbuf-unwind.h
index 3925e90..943f9b0 100644
--- a/sysdeps/tile/jmpbuf-unwind.h
+++ b/sysdeps/tile/jmpbuf-unwind.h
@@ -25,8 +25,8 @@
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
- ((void *) (address) < (void *) demangle ((jmpbuf)[JB_SP]))
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((uintptr_t) (address) < _jmpbuf_sp (jmpbuf))
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
diff --git a/sysdeps/x86_64/jmpbuf-unwind.h b/sysdeps/x86_64/jmpbuf-unwind.h
index 757ab8d..c0a5752 100644
--- a/sysdeps/x86_64/jmpbuf-unwind.h
+++ b/sysdeps/x86_64/jmpbuf-unwind.h
@@ -24,8 +24,8 @@
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
-#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
- ((void *) (address) < (void *) demangle ((jmpbuf)[JB_RSP]))
+#define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((uintptr_t) (address) < _jmpbuf_sp (jmpbuf))
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
_JMPBUF_UNWINDS_ADJ (_jmpbuf, \
--
2.0.0
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."