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.
This commit is contained in:
Joseph Myers 2017-03-18 00:17:25 +00:00
parent 22b72f356d
commit 19641dbd61
3 changed files with 30 additions and 21 deletions

View File

@ -1,5 +1,13 @@
2017-03-18 Joseph Myers <joseph@codesourcery.com> 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 * conform/conformtest.pl: Handle xfail[cond]- in header mentioned
with allow-header. with allow-header.

View File

@ -22,15 +22,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, demangle) \ #define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
((unsigned long int) (address) < (jmpbuf)->uc_mcontext.mc_gregs[MC_O6] + 2047) ((unsigned long int) (address) \
< (jmpbuf)->__uc_mcontext.__mc_gregs[MC_O6] + 2047)
#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) \ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
((uintptr_t) (_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. */ /* 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)

View File

@ -29,30 +29,30 @@
#ifndef _ASM #ifndef _ASM
typedef struct __sparc64_jmp_buf typedef struct __sparc64_jmp_buf
{ {
struct __sparc64_jmp_buf *uc_link; struct __sparc64_jmp_buf *__uc_link;
unsigned long uc_flags; unsigned long __uc_flags;
unsigned long uc_sigmask; unsigned long __uc_sigmask;
struct __sparc64_jmp_buf_mcontext struct __sparc64_jmp_buf_mcontext
{ {
unsigned long mc_gregs[19]; unsigned long __mc_gregs[19];
unsigned long mc_fp; unsigned long __mc_fp;
unsigned long mc_i7; unsigned long __mc_i7;
struct __sparc64_jmp_buf_fpu struct __sparc64_jmp_buf_fpu
{ {
union union
{ {
unsigned int sregs[32]; unsigned int __sregs[32];
unsigned long dregs[32]; unsigned long __dregs[32];
long double qregs[16]; long double __qregs[16];
} mcfpu_fpregs; } __mcfpu_fpregs;
unsigned long mcfpu_fprs; unsigned long __mcfpu_fprs;
unsigned long mcfpu_gsr; unsigned long __mcfpu_gsr;
void *mcfpu_fq; void *__mcfpu_fq;
unsigned char mcfpu_qcnt; unsigned char __mcfpu_qcnt;
unsigned char mcfpu_qentsz; unsigned char __mcfpu_qentsz;
unsigned char mcfpu_enab; unsigned char __mcfpu_enab;
} mc_fpregs; } __mc_fpregs;
} uc_mcontext; } __uc_mcontext;
} __jmp_buf[1]; } __jmp_buf[1];
#endif #endif