From patchwork Sun Jun 15 14:13:46 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Schwab X-Patchwork-Id: 1507 Received: (qmail 8891 invoked by alias); 15 Jun 2014 14:14:00 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 8876 invoked by uid 89); 15 Jun 2014 14:13:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 X-HELO: mail-out.m-online.net X-Auth-Info: wdfhKOtIB/k78blLPCqtDCi/GUJatYfyaCjijYHBxVY= From: Andreas Schwab To: libc-alpha@sourceware.org Subject: [PATCH] Eliminate third argument from _JMPBUF_UNWINDS CC: Roland McGrath , Thomas Schwinge X-Yow: Where does it go when you flush? Date: Sun, 15 Jun 2014 16:13:46 +0200 Message-ID: <871tuqmfad.fsf@igel.home> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.91 (gnu/linux) MIME-Version: 1.0 _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 " 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, \