diff options
24 files changed, 38 insertions, 363 deletions
diff --git a/Makefile.in b/Makefile.in index 3101527b3..5d5897212 100644 --- a/Makefile.in +++ b/Makefile.in @@ -103,6 +103,8 @@ HEADERS_SYS_ARCH := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/$(TARGET HEADERS_SYS_COMMON := $(filter-out $(HEADERS_SYS_ARCH),$(HEADERS_SYS_COMMON)) ALL_HEADERS_COMMON := $(top_builddir)include/fpu_control.h \ + $(top_builddir)include/jmpbuf-offsets.h \ + $(top_builddir)include/jmpbuf-unwind.h \ $(top_builddir)include/dl-osinfo.h \ $(top_builddir)include/hp-timing.h ALL_HEADERS_BITS_COMMON := $(addprefix $(top_builddir)include/bits/,$(HEADERS_BITS_COMMON)) @@ -124,7 +126,7 @@ target-headers-sysdep := \ $(ALL_HEADERS_SYS_ARCH) \ $(ALL_HEADERS_BITS_PTHREAD) -$(top_builddir)include/fpu_control.h: +$(top_builddir)include/fpu_control.h $(top_builddir)include/jmpbuf-offsets.h $(top_builddir)include/jmpbuf-unwind.h: @$(disp_ln) $(Q)[ -r $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/$(@F) ] && \ $(LN) -fs $(call rel_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/$(@F) $@ || \ @@ -216,6 +218,8 @@ $(top_builddir)extra/scripts/unifdef: $(top_srcdir)extra/scripts/unifdef.c HEADERS_RM- := \ internal \ dl-osinfo.h \ + jmpbuf-offsets.h \ + jmpbuf-unwind.h \ hp-timing.h \ _lfs_64.h \ bits/uClibc_arch_features.h \ diff --git a/libc/sysdeps/linux/alpha/bits/setjmp.h b/libc/sysdeps/linux/alpha/bits/setjmp.h index 4471ba975..3041dda98 100644 --- a/libc/sysdeps/linux/alpha/bits/setjmp.h +++ b/libc/sysdeps/linux/alpha/bits/setjmp.h @@ -55,33 +55,6 @@ * registers. */ -#if defined __USE_MISC || defined __ASSEMBLY__ -# define JB_S0 0 -# define JB_S1 1 -# define JB_S2 2 -# define JB_S3 3 -# define JB_S4 4 -# define JB_S5 5 -# define JB_PC 6 -# define JB_FP 7 -# define JB_SP 8 -# define JB_F2 9 -# define JB_F3 10 -# define JB_F4 11 -# define JB_F5 12 -# define JB_F6 13 -# define JB_F7 14 -# define JB_F8 15 -# define JB_F9 16 -#endif - -#ifndef __ASSEMBLY__ typedef long int __jmp_buf[17]; -/* Test if longjmp to JMPBUF would unwind the frame containing a local - variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(_jmpbuf, _address) \ - ((void *)(_address) < (void *)((_jmpbuf)[JB_SP])) -#endif - #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/arm/bits/setjmp.h b/libc/sysdeps/linux/arm/bits/setjmp.h index ac52f1281..84e0e6207 100644 --- a/libc/sysdeps/linux/arm/bits/setjmp.h +++ b/libc/sysdeps/linux/arm/bits/setjmp.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1997,1998,2005,2006 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,14 +17,14 @@ 02111-1307 USA. */ /* Define the machine-dependent type `jmp_buf'. ARM version. */ + #ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 +#define _BITS_SETJMP_H 1 #if !defined _SETJMP_H && !defined _PTHREAD_H # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." #endif -#ifndef _ASM /* Jump buffer contains v1-v6, sl, fp, sp and pc. Other registers are not saved. */ #ifdef __ARM_EABI__ @@ -38,15 +38,10 @@ typedef int __jmp_buf[64] __attribute__((aligned (8))); #elif defined __MAVERICK__ || defined __IWMMXT__ typedef int __jmp_buf[34]; #else +# ifdef __UCLIBC_HAS_FPU__ typedef int __jmp_buf[22]; +# else +typedef int __jmp_buf[10]; +# endif #endif #endif - -#define __JMP_BUF_SP 8 - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf[__JMP_BUF_SP])) - -#endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/bfin/bits/setjmp.h b/libc/sysdeps/linux/bfin/bits/setjmp.h index adb9c23af..f2f58faa4 100644 --- a/libc/sysdeps/linux/bfin/bits/setjmp.h +++ b/libc/sysdeps/linux/bfin/bits/setjmp.h @@ -24,7 +24,6 @@ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." #endif -#ifndef _ASM /* Jump buffer contains r7-r4, p5-p3, fp, sp and pc. Other registers are not saved. */ typedef struct { @@ -45,13 +44,4 @@ typedef struct unsigned long pc; }__jmp_buf[1]; -#endif - -#define __JMP_BUF_SP 8 - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)->fp) - #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/bfin/jmpbuf-unwind.h b/libc/sysdeps/linux/bfin/jmpbuf-unwind.h index eeb5dcac2..bb7a374fd 100644 --- a/libc/sysdeps/linux/bfin/jmpbuf-unwind.h +++ b/libc/sysdeps/linux/bfin/jmpbuf-unwind.h @@ -8,4 +8,4 @@ /* Test if longjmp to JMPBUF would unwind the frame containing a local variable at ADDRESS. */ #define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)->__pregs[6]) + ((void *) (address) < (void *) (jmpbuf)->fp) diff --git a/libc/sysdeps/linux/cris/bits/setjmp.h b/libc/sysdeps/linux/cris/bits/setjmp.h index 2a29c8ca9..89d3826b8 100644 --- a/libc/sysdeps/linux/cris/bits/setjmp.h +++ b/libc/sysdeps/linux/cris/bits/setjmp.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,7 +16,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -/* Define the machine-dependent type `jmp_buf'. CRIS version. */ +/* Define the machine-dependent type `jmp_buf', CRIS version. */ #ifndef _BITS_SETJMP_H #define _BITS_SETJMP_H 1 @@ -24,10 +24,8 @@ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." #endif -/* - Note that we save and restore CCR to be able to - correctly handle DI/EI. Note also that the "move x,ccr" does NOT affect - the DMA enable bits (E and D). +/* Note that saving and restoring CCR has no meaning in user mode, so we + don't actually do it; the slot is now reserved. jmp_buf[0] - PC jmp_buf[1] - SP (R14) @@ -46,21 +44,8 @@ jmp_buf[14] - R1 jmp_buf[15] - R0 jmp_buf[16] - SRP - jmp_buf[17] - CCR - */ + jmp_buf[17] - CCR */ -#define _JBLEN 18 -#if defined (__USE_MISC) || defined (_ASM) -#define JB_SP 1 -#endif - -#ifndef _ASM -typedef int __jmp_buf[_JBLEN]; -#endif - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)[JB_SP]) +typedef int __jmp_buf[18]; #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/frv/bits/setjmp.h b/libc/sysdeps/linux/frv/bits/setjmp.h index d49ad7b71..26d995a5a 100644 --- a/libc/sysdeps/linux/frv/bits/setjmp.h +++ b/libc/sysdeps/linux/frv/bits/setjmp.h @@ -35,7 +35,6 @@ #define __SETJMP_FP (__SETJMP_SP+1) -#ifndef _ASM typedef struct /* Demand 64-bit alignment such that we can use std/ldd in setjmp/longjmp. */ @@ -48,11 +47,5 @@ __attribute__((__aligned__(8))) unsigned long __sp; /* stack pointer */ unsigned long __fp; /* frame pointer */ } __jmp_buf[1]; -#endif - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)->__sp) #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/h8300/bits/setjmp.h b/libc/sysdeps/linux/h8300/bits/setjmp.h index 15f8d8445..67e1bc89d 100644 --- a/libc/sysdeps/linux/h8300/bits/setjmp.h +++ b/libc/sysdeps/linux/h8300/bits/setjmp.h @@ -9,24 +9,10 @@ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." #endif -#ifndef _ASM - typedef struct { unsigned long __regs[4]; /* save er4 - er7(sp) */ unsigned long __pc; /* the return address */ } __jmp_buf[1]; -#endif /* _ASM */ - -#define JB_REGS 0 -#define JB_PC 16 -#define JB_SIZE 20 - - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)->__regs[3]) - #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/hppa/bits/setjmp.h b/libc/sysdeps/linux/hppa/bits/setjmp.h index 4395b8f56..e6c2d6d82 100644 --- a/libc/sysdeps/linux/hppa/bits/setjmp.h +++ b/libc/sysdeps/linux/hppa/bits/setjmp.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2005, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -29,17 +29,6 @@ easier, and to ensure proper alignment. Naturally, user code should not depend on either representation. */ -#if defined __USE_MISC || defined _ASM -#define JB_SP (76/4) -#endif - -#ifndef _ASM typedef double __jmp_buf[21]; -#endif - -/* Test if longjmp to JMPBUF would unwind the frame containing a local - variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(_jmpbuf, _address) \ - ((void *)(_address) > (void *)(((unsigned long *) _jmpbuf)[JB_SP])) #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/i386/bits/setjmp.h b/libc/sysdeps/linux/i386/bits/setjmp.h index 107fe58b3..b59f182e5 100644 --- a/libc/sysdeps/linux/i386/bits/setjmp.h +++ b/libc/sysdeps/linux/i386/bits/setjmp.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1997, 1998, 2000, 2001, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1997,1998,2000,2001,2003,2005,2006 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -24,23 +25,6 @@ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." #endif -#if defined __USE_MISC || defined _ASM -# define JB_BX 0 -# define JB_SI 1 -# define JB_DI 2 -# define JB_BP 3 -# define JB_SP 4 -# define JB_PC 5 -# define JB_SIZE 24 -#endif - -#ifndef _ASM typedef int __jmp_buf[6]; -#endif - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)[JB_SP]) #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/ia64/bits/setjmp.h b/libc/sysdeps/linux/ia64/bits/setjmp.h index 76625753d..8bd675e4e 100644 --- a/libc/sysdeps/linux/ia64/bits/setjmp.h +++ b/libc/sysdeps/linux/ia64/bits/setjmp.h @@ -1,5 +1,5 @@ /* Define the machine-dependent type `jmp_buf'. Linux/IA-64 version. - Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc. + Copyright (C) 1999,2000,2003,2005,2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Mosberger-Tang <davidm@hpl.hp.com>. @@ -32,9 +32,4 @@ /* the __jmp_buf element type should be __float80 per ABI... */ typedef long __jmp_buf[_JBLEN] __attribute__ ((aligned (16))); /* guarantees 128-bit alignment! */ -/* Test if longjmp to JMPBUF would unwind the frame containing a local - variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(_jmpbuf, _address) \ - ((void *)(_address) < (void *)(((long *)_jmpbuf)[0])) - #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/m68k/bits/setjmp.h b/libc/sysdeps/linux/m68k/bits/setjmp.h index a6b0ed0f1..fa9ff543b 100644 --- a/libc/sysdeps/linux/m68k/bits/setjmp.h +++ b/libc/sysdeps/linux/m68k/bits/setjmp.h @@ -25,8 +25,6 @@ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." #endif -#ifndef _ASM - typedef struct { /* There are eight 4-byte data registers, but D0 is not saved. */ @@ -45,24 +43,4 @@ typedef struct } __jmp_buf[1]; -#endif - -#define JB_REGS 0 -#define JB_DREGS 0 -#define JB_AREGS 24 -#define JB_PC 48 -#define JB_FPREGS 52 - -#if defined __HAVE_68881__ || defined __HAVE_FPU__ -# define JB_SIZE 76 -#else -# define JB_SIZE 52 -#endif - - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)->__aregs[5]) - #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/microblaze/bits/setjmp.h b/libc/sysdeps/linux/microblaze/bits/setjmp.h index 0c0573cd7..5ae7381a0 100644 --- a/libc/sysdeps/linux/microblaze/bits/setjmp.h +++ b/libc/sysdeps/linux/microblaze/bits/setjmp.h @@ -19,7 +19,6 @@ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." #endif -#ifndef _ASM typedef struct { /* Stack pointer. */ @@ -37,11 +36,4 @@ typedef struct } __jmp_buf[1]; #endif -#define JB_SIZE (4 * 18) - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)[0].__sp) - #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/microblaze/jmpbuf-offsets.h b/libc/sysdeps/linux/microblaze/jmpbuf-offsets.h index b74acc6c8..c6cccc739 100644 --- a/libc/sysdeps/linux/microblaze/jmpbuf-offsets.h +++ b/libc/sysdeps/linux/microblaze/jmpbuf-offsets.h @@ -3,4 +3,4 @@ * * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */ -#define JB_SIZE (4 * 15) +#define JB_SIZE (4 * 18) diff --git a/libc/sysdeps/linux/mips/bits/setjmp.h b/libc/sysdeps/linux/mips/bits/setjmp.h index 08e74fe0a..951949ba8 100644 --- a/libc/sysdeps/linux/mips/bits/setjmp.h +++ b/libc/sysdeps/linux/mips/bits/setjmp.h @@ -58,15 +58,4 @@ typedef struct #endif /* N32 || O32 */ } __jmp_buf[1]; -#ifdef __USE_MISC -/* Offset to the program counter in `jmp_buf'. */ -# define JB_PC 0 -#endif - - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)[0].__sp) - #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/nios/bits/setjmp.h b/libc/sysdeps/linux/nios/bits/setjmp.h index 807ebea02..373f5ab5e 100644 --- a/libc/sysdeps/linux/nios/bits/setjmp.h +++ b/libc/sysdeps/linux/nios/bits/setjmp.h @@ -24,8 +24,6 @@ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." #endif -#ifndef _ASM - #include <signal.h> typedef struct @@ -44,33 +42,4 @@ typedef struct } __jmp_buf[1]; -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)->__sp) - -#else /* _ASM */ - -#define jmpbuf_l0 0x00 -#define jmpbuf_l1 0x01 -#define jmpbuf_l2 0x02 -#define jmpbuf_l3 0x03 -#define jmpbuf_l4 0x04 -#define jmpbuf_l5 0x05 -#define jmpbuf_l6 0x06 -#define jmpbuf_l7 0x07 - -#define jmpbuf_i0 0x08 -#define jmpbuf_i1 0x09 -#define jmpbuf_i2 0x0a -#define jmpbuf_i3 0x0b -#define jmpbuf_i4 0x0c -#define jmpbuf_i5 0x0d - -#define jmpbuf_sp 0x0e -#define jmpbuf_jmpret 0x0f -#define jmpbuf_callersret 0x10 - -#endif /* _ASM */ - #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/nios2/bits/setjmp.h b/libc/sysdeps/linux/nios2/bits/setjmp.h index fcff0316d..4985191d6 100644 --- a/libc/sysdeps/linux/nios2/bits/setjmp.h +++ b/libc/sysdeps/linux/nios2/bits/setjmp.h @@ -24,7 +24,6 @@ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." #endif -#ifndef _ASM typedef struct { /* Callee-saved registers r16 through r23. */ @@ -48,25 +47,4 @@ typedef struct #endif } __jmp_buf[1]; -#endif - -#define JB_REGS 0 -#define JB_PC 32 -#define JB_SP 36 -#define JB_FP 40 -#define JB_GP 44 -#define JB_FPREGS 48 - -#if defined __HAVE_FPU__ -# define JB_SIZE 304 -#else -# define JB_SIZE 48 -#endif - - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void*)(jmpbuf)->__sp) - #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/powerpc/bits/setjmp.h b/libc/sysdeps/linux/powerpc/bits/setjmp.h index dad90c74c..96ea8f3ba 100644 --- a/libc/sysdeps/linux/powerpc/bits/setjmp.h +++ b/libc/sysdeps/linux/powerpc/bits/setjmp.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1997, 1998, 2000, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1997,1998,2000,2003,2004,2005,2006 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -31,30 +32,6 @@ #include <bits/wordsize.h> -#if defined __USE_MISC || defined _ASM -# define JB_GPR1 0 /* Also known as the stack pointer */ -# define JB_GPR2 1 -# define JB_LR 2 /* The address we will return to */ -# if __WORDSIZE == 64 -# define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18*2 words total. */ -# define JB_CR 21 /* Condition code registers with the VRSAVE at */ - /* offset 172 (low half of the double word. */ -# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total. */ -# define JB_SIZE (64 * 8) /* As per PPC64-VMX ABI. */ -# define JB_VRSAVE 21 /* VRSAVE shares a double word with the CR at offset */ - /* 168 (high half of the double word). */ -# define JB_VRS 40 /* VRs 20 through 31 are saved, 12*4 words total. */ -# else -# define JB_GPRS 3 /* GPRs 14 through 31 are saved, 18 in total. */ -# define JB_CR 21 /* Condition code registers. */ -# define JB_FPRS 22 /* FPRs 14 through 31 are saved, 18*2 words total. */ -# define JB_SIZE ((64 + (12 * 4)) * 4) -# define JB_VRSAVE 62 -# define JB_VRS 64 -# endif -#endif - - /* The current powerpc 32-bit Altivec ABI specifies for SVR4 ABI and EABI the vrsave must be at byte 248 & v20 at byte 256. So we must pad this correctly on 32 bit. It also insists that vecregs are only gauranteed @@ -62,19 +39,12 @@ We have to version the code because members like int __mask_was_saved in the jmp_buf will move as jmp_buf is now larger than 248 bytes. We cannot keep the altivec jmp_buf backward compatible with the jmp_buf. */ -#ifndef _ASM -# if __WORDSIZE == 64 +#if __WORDSIZE == 64 typedef long int __jmp_buf[64] __attribute__ ((__aligned__ (16))); -# else +#else /* The alignment is not essential, i.e.the buffer can be copied to a 4 byte aligned buffer as per the ABI it is just added for performance reasons. */ typedef long int __jmp_buf[64 + (12 * 4)] __attribute__ ((__aligned__ (16))); -# endif #endif -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)[JB_GPR1]) - -#endif /* bits/setjmp.h */ +#endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/sh/bits/setjmp.h b/libc/sysdeps/linux/sh/bits/setjmp.h index 6458dfefd..a452b04e4 100644 --- a/libc/sysdeps/linux/sh/bits/setjmp.h +++ b/libc/sysdeps/linux/sh/bits/setjmp.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000, 2003, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1999,2000,2003,2005,2006 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,13 +18,12 @@ /* Define the machine-dependent type `jmp_buf'. SH version. */ #ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 +#define _BITS_SETJMP_H 1 #if !defined _SETJMP_H && !defined _PTHREAD_H # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." #endif -#ifndef _ASM typedef struct { /* Callee-saved registers r8 through r15. */ @@ -42,15 +41,5 @@ typedef struct /* Callee-saved floating point registers fr12 through fr15. */ int __fpregs[4]; } __jmp_buf[1]; -#endif - -#if defined __USE_MISC || defined _ASM -# define JB_SIZE (4 * 15) -#endif - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)[0].__regs[7]) -#endif /* bits/setjmp.h */ +#endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/sh64/bits/setjmp.h b/libc/sysdeps/linux/sh64/bits/setjmp.h index ad1ec9d4b..3aac78ed7 100644 --- a/libc/sysdeps/linux/sh64/bits/setjmp.h +++ b/libc/sysdeps/linux/sh64/bits/setjmp.h @@ -33,8 +33,6 @@ #define __SETJMP_TRG(x) (__SETJMP_NUM_INT+__SETJMP_NUM_DBL+(x)) #define __SETJMP_LR (__SETJMP_NUM_INT+__SETJMP_NUM_DBL+__SETJMP_NUM_TRG) - -#ifndef _ASM typedef struct { /* Callee-saved registers. */ @@ -45,6 +43,5 @@ typedef struct unsigned long long __trgs[__SETJMP_NUM_TRG]; /* traget registers */ unsigned long long __lr; /* linkage register */ } __jmp_buf[1]; -#endif #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/sparc/bits/setjmp.h b/libc/sysdeps/linux/sparc/bits/setjmp.h index ac5a4b2d6..f6c740121 100644 --- a/libc/sysdeps/linux/sparc/bits/setjmp.h +++ b/libc/sysdeps/linux/sparc/bits/setjmp.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1997,1999,2000,2003 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999, 2000, 2003, 2005, 2006 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -27,7 +28,6 @@ #if 0 /*__WORDSIZE == 64*/ -#ifndef _ASM typedef struct __sparc64_jmp_buf { struct __sparc64_jmp_buf *uc_link; @@ -55,30 +55,8 @@ typedef struct __sparc64_jmp_buf } mc_fpregs; } uc_mcontext; } __jmp_buf[1]; -#endif - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((unsigned long int) (address) < (jmpbuf)->uc_mcontext.mc_fp) - #else - -#if defined __USE_MISC || defined _ASM -# define JB_SP 0 -# define JB_FP 1 -# define JB_PC 2 -#endif - -#ifndef _ASM typedef int __jmp_buf[3]; #endif -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((int) (address) < (jmpbuf)[JB_SP]) - -#endif - #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/v850/bits/setjmp.h b/libc/sysdeps/linux/v850/bits/setjmp.h index c94373787..b76df8516 100644 --- a/libc/sysdeps/linux/v850/bits/setjmp.h +++ b/libc/sysdeps/linux/v850/bits/setjmp.h @@ -18,7 +18,6 @@ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." #endif -#ifndef _ASM typedef struct { /* Stack pointer. */ @@ -30,13 +29,5 @@ typedef struct /* Callee-saved registers r2 and r20-r29. */ int __regs[11]; } __jmp_buf[1]; -#endif - -#define JB_SIZE (4 * 13) - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)[0].__sp) #endif /* bits/setjmp.h */ diff --git a/libc/sysdeps/linux/vax/bits/setjmp.h b/libc/sysdeps/linux/vax/bits/setjmp.h index 68a1b32ba..06b00e52d 100644 --- a/libc/sysdeps/linux/vax/bits/setjmp.h +++ b/libc/sysdeps/linux/vax/bits/setjmp.h @@ -6,14 +6,8 @@ /* we want to save enough that we can use this to fool RET, * So we basically save all of the CALLS stack frame. Plus regs. */ -#ifndef _ASM typedef int __jmp_buf[16]; -#endif -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf[4])) /* jmp_buf layout. jmp_buf[0] void *__cond; The condition handler @@ -34,4 +28,3 @@ typedef int __jmp_buf[16]; void *__rA; regs, r0->r11. void *__rB; regs, r0->r11. */ - diff --git a/libc/sysdeps/linux/x86_64/bits/setjmp.h b/libc/sysdeps/linux/x86_64/bits/setjmp.h index 515d769be..49c842842 100644 --- a/libc/sysdeps/linux/x86_64/bits/setjmp.h +++ b/libc/sysdeps/linux/x86_64/bits/setjmp.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2001,2002,2003,2005,2006 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,7 +18,7 @@ /* Define the machine-dependent type `jmp_buf'. x86-64 version. */ #ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 +#define _BITS_SETJMP_H 1 #if !defined _SETJMP_H && !defined _PTHREAD_H # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." @@ -27,52 +27,9 @@ #include <bits/wordsize.h> #if __WORDSIZE == 64 - -/* We only need to save callee-saved registers plus stackpointer and - program counter. */ -# if defined __USE_MISC || defined _ASM -# define JB_RBX 0 -# define JB_RBP 1 -# define JB_R12 2 -# define JB_R13 3 -# define JB_R14 4 -# define JB_R15 5 -# define JB_RSP 6 -# define JB_PC 7 -# define JB_SIZE (8*8) -# endif - -#else - -# if defined __USE_MISC || defined _ASM -# define JB_BX 0 -# define JB_SI 1 -# define JB_DI 2 -# define JB_BP 3 -# define JB_SP 4 -# define JB_PC 5 -# define JB_SIZE 24 -# endif - -#endif - -#ifndef _ASM - -# if __WORDSIZE == 64 typedef long int __jmp_buf[8]; -# else +#else typedef int __jmp_buf[6]; -# endif - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -# if __WORDSIZE == 64 -# define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)[JB_RSP]) -# else -# define _JMPBUF_UNWINDS(jmpbuf, address) \ - ((void *) (address) < (void *) (jmpbuf)[JB_SP]) -# endif #endif -#endif /* bits/setjmp.h */ +#endif /* bits/setjmp.h */ |