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>
[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.

View File

@ -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)

View File

@ -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