aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2017-03-18 00:17:25 +0000
committerJoseph Myers <joseph@codesourcery.com>2017-03-18 00:17:25 +0000
commit19641dbd61fe0440fa1f0ebd2f358b5ba98e839f (patch)
treeda363499e8461a82f2c6875c87c0b1007bc58f2f
parent22b72f356d6dd6f394cc632d7fbef80490e9f4c4 (diff)
downloadglibc-19641dbd61fe0440fa1f0ebd2f358b5ba98e839f.tar
glibc-19641dbd61fe0440fa1f0ebd2f358b5ba98e839f.tar.gz
glibc-19641dbd61fe0440fa1f0ebd2f358b5ba98e839f.tar.bz2
glibc-19641dbd61fe0440fa1f0ebd2f358b5ba98e839f.zip
Fix sparc64 bits/setjmp.h namespace (bug 21261).
sysdeps/unix/sysv/linux/sparc/bits/setjmp.h defines 64-bit __jmp_buf with a load of identifiers that are not part of any standard namespace, resulting in conform/ tests failing. This patch fixes this by moving those identifiers to the implementation namespace, so enabling the conform/ tests to pass for sparc64. Tested (compilation only) for sparc64 with build-many-glibcs.py. [BZ #21261] * sysdeps/unix/sysv/linux/sparc/bits/setjmp.h [__WORDSIZE == 64 && !_ASM] (__sparc64_jmp_buf): Use reserved names for all fields. * sysdeps/sparc/sparc64/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Update for jmp_buf field renaming. (_JMPBUF_UNWINDS_ADJ): Likewise.
-rw-r--r--ChangeLog8
-rw-r--r--sysdeps/sparc/sparc64/jmpbuf-unwind.h7
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/setjmp.h36
3 files changed, 30 insertions, 21 deletions
diff --git a/ChangeLog b/ChangeLog
index 0862ad09bd..e2caa3ee61 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2017-03-18 Joseph Myers <joseph@codesourcery.com>
+ [BZ #21261]
+ * sysdeps/unix/sysv/linux/sparc/bits/setjmp.h
+ [__WORDSIZE == 64 && !_ASM] (__sparc64_jmp_buf): Use reserved
+ names for all fields.
+ * sysdeps/sparc/sparc64/jmpbuf-unwind.h (_JMPBUF_UNWINDS): Update
+ for jmp_buf field renaming.
+ (_JMPBUF_UNWINDS_ADJ): Likewise.
+
* conform/conformtest.pl: Handle xfail[cond]- in header mentioned
with allow-header.
diff --git a/sysdeps/sparc/sparc64/jmpbuf-unwind.h b/sysdeps/sparc/sparc64/jmpbuf-unwind.h
index d84a5ea410..eb2e2e2fb4 100644
--- a/sysdeps/sparc/sparc64/jmpbuf-unwind.h
+++ b/sysdeps/sparc/sparc64/jmpbuf-unwind.h
@@ -22,15 +22,16 @@
/* 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_gregs[MC_O6] + 2047)
+#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
+ ((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_gregs[MC_O6] + 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)
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/setjmp.h b/sysdeps/unix/sysv/linux/sparc/bits/setjmp.h
index e43bc72a6b..5e92e829d5 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/setjmp.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/setjmp.h
@@ -29,30 +29,30 @@
#ifndef _ASM
typedef struct __sparc64_jmp_buf
{
- struct __sparc64_jmp_buf *uc_link;
- unsigned long uc_flags;
- unsigned long uc_sigmask;
+ struct __sparc64_jmp_buf *__uc_link;
+ unsigned long __uc_flags;
+ unsigned long __uc_sigmask;
struct __sparc64_jmp_buf_mcontext
{
- unsigned long mc_gregs[19];
- unsigned long mc_fp;
- unsigned long mc_i7;
+ unsigned long __mc_gregs[19];
+ unsigned long __mc_fp;
+ unsigned long __mc_i7;
struct __sparc64_jmp_buf_fpu
{
union
{
- unsigned int sregs[32];
- unsigned long dregs[32];
- long double qregs[16];
- } mcfpu_fpregs;
- unsigned long mcfpu_fprs;
- unsigned long mcfpu_gsr;
- void *mcfpu_fq;
- unsigned char mcfpu_qcnt;
- unsigned char mcfpu_qentsz;
- unsigned char mcfpu_enab;
- } mc_fpregs;
- } uc_mcontext;
+ unsigned int __sregs[32];
+ unsigned long __dregs[32];
+ long double __qregs[16];
+ } __mcfpu_fpregs;
+ unsigned long __mcfpu_fprs;
+ unsigned long __mcfpu_gsr;
+ void *__mcfpu_fq;
+ unsigned char __mcfpu_qcnt;
+ unsigned char __mcfpu_qentsz;
+ unsigned char __mcfpu_enab;
+ } __mc_fpregs;
+ } __uc_mcontext;
} __jmp_buf[1];
#endif