diff options
Diffstat (limited to 'sysdeps/x86_64/bits')
-rw-r--r-- | sysdeps/x86_64/bits/byteswap.h | 7 | ||||
-rw-r--r-- | sysdeps/x86_64/bits/link.h | 125 | ||||
-rw-r--r-- | sysdeps/x86_64/bits/linkmap.h | 14 | ||||
-rw-r--r-- | sysdeps/x86_64/bits/mathdef.h | 48 | ||||
-rw-r--r-- | sysdeps/x86_64/bits/setjmp.h | 41 |
5 files changed, 53 insertions, 182 deletions
diff --git a/sysdeps/x86_64/bits/byteswap.h b/sysdeps/x86_64/bits/byteswap.h index ec2b17889d..e1c861c75f 100644 --- a/sysdeps/x86_64/bits/byteswap.h +++ b/sysdeps/x86_64/bits/byteswap.h @@ -1,6 +1,5 @@ /* Macros to swap the order of bytes in integer values. - Copyright (C) 1997, 1998, 2000, 2002, 2003, 2007 - Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 2000, 2002, 2003 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 @@ -60,9 +59,7 @@ # if __WORDSIZE == 64 || (defined __i486__ || defined __pentium__ \ || defined __pentiumpro__ || defined __pentium4__ \ || defined __k8__ || defined __athlon__ \ - || defined __k6__ || defined __nocona__ \ - || defined __core2__ || defined __geode__ \ - || defined __amdfam10__) + || defined __k6__) /* To swap the bytes in a word the i486 processors and up provide the `bswap' opcode. On i386 we have to use three instructions. */ # define __bswap_32(x) \ diff --git a/sysdeps/x86_64/bits/link.h b/sysdeps/x86_64/bits/link.h index 2890c2d88d..8ea7157156 100644 --- a/sysdeps/x86_64/bits/link.h +++ b/sysdeps/x86_64/bits/link.h @@ -1,117 +1,14 @@ -/* Copyright (C) 2004, 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _LINK_H -# error "Never include <bits/link.h> directly; use <link.h> instead." -#endif - - -#if __ELF_NATIVE_CLASS == 32 -/* Registers for entry into PLT on IA-32. */ -typedef struct La_i86_regs -{ - uint32_t lr_edx; - uint32_t lr_ecx; - uint32_t lr_eax; - uint32_t lr_ebp; - uint32_t lr_esp; -} La_i86_regs; - -/* Return values for calls from PLT on IA-32. */ -typedef struct La_i86_retval -{ - uint32_t lrv_eax; - uint32_t lrv_edx; - long double lrv_st0; - long double lrv_st1; -} La_i86_retval; - - -__BEGIN_DECLS - -extern Elf32_Addr la_i86_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_i86_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_i86_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_i86_regs *__inregs, - La_i86_retval *__outregs, - const char *symname); - -__END_DECLS +#if __WORDSIZE == 64 +struct link_map_machine + { + Elf64_Addr plt; /* Address of .plt + 0x16 */ + Elf64_Addr gotplt; /* Address of .got + 0x18 */ + }; #else - -/* Registers for entry into PLT on x86-64. */ -# if __GNUC_PREREQ (4,0) -typedef float La_x86_64_xmm __attribute__ ((__vector_size__ (16))); -# else -typedef float La_x86_64_xmm __attribute__ ((__mode__ (__V4SF__))); -# endif - -typedef struct La_x86_64_regs -{ - uint64_t lr_rdx; - uint64_t lr_r8; - uint64_t lr_r9; - uint64_t lr_rcx; - uint64_t lr_rsi; - uint64_t lr_rdi; - uint64_t lr_rbp; - uint64_t lr_rsp; - La_x86_64_xmm lr_xmm[8]; -} La_x86_64_regs; - -/* Return values for calls from PLT on x86-64. */ -typedef struct La_x86_64_retval -{ - uint64_t lrv_rax; - uint64_t lrv_rdx; - La_x86_64_xmm lrv_xmm0; - La_x86_64_xmm lrv_xmm1; - long double lrv_st0; - long double lrv_st1; -} La_x86_64_retval; - - -__BEGIN_DECLS - -extern Elf64_Addr la_x86_64_gnu_pltenter (Elf64_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_x86_64_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_x86_64_gnu_pltexit (Elf64_Sym *__sym, - unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_x86_64_regs *__inregs, - La_x86_64_retval *__outregs, - const char *symname); - -__END_DECLS - +struct link_map_machine + { + Elf32_Addr plt; /* Address of .plt + 0x16 */ + Elf32_Addr gotplt; /* Address of .got + 0x0c */ + }; #endif diff --git a/sysdeps/x86_64/bits/linkmap.h b/sysdeps/x86_64/bits/linkmap.h deleted file mode 100644 index 8ea7157156..0000000000 --- a/sysdeps/x86_64/bits/linkmap.h +++ /dev/null @@ -1,14 +0,0 @@ -#if __WORDSIZE == 64 -struct link_map_machine - { - Elf64_Addr plt; /* Address of .plt + 0x16 */ - Elf64_Addr gotplt; /* Address of .got + 0x18 */ - }; - -#else -struct link_map_machine - { - Elf32_Addr plt; /* Address of .plt + 0x16 */ - Elf32_Addr gotplt; /* Address of .got + 0x0c */ - }; -#endif diff --git a/sysdeps/x86_64/bits/mathdef.h b/sysdeps/x86_64/bits/mathdef.h deleted file mode 100644 index 7b16189590..0000000000 --- a/sysdeps/x86_64/bits/mathdef.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2001, 2004 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" -#endif - -#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF -# define _MATH_H_MATHDEF 1 - -# include <bits/wordsize.h> - -# if __WORDSIZE == 64 || (defined __FLT_EVAL_METHOD__ && __FLT_EVAL_METHOD__ == 0) -/* The x86-64 architecture computes values with the precission of the - used type. Similarly for -m32 -mfpmath=sse. */ -typedef float float_t; /* `float' expressions are evaluated as `float'. */ -typedef double double_t; /* `double' expressions are evaluated - as `double'. */ -# else -/* The ix87 FPUs evaluate all values in the 80 bit floating-point format - which is also available for the user as `long double'. Therefore we - define: */ -typedef long double float_t; /* `float' expressions are evaluated as - `long double'. */ -typedef long double double_t; /* `double' expressions are evaluated as - `long double'. */ -# endif - -/* The values returned by `ilogb' for 0 and NaN respectively. */ -# define FP_ILOGB0 (-2147483647 - 1) -# define FP_ILOGBNAN (-2147483647 - 1) - -#endif /* ISO C99 */ diff --git a/sysdeps/x86_64/bits/setjmp.h b/sysdeps/x86_64/bits/setjmp.h index c9b98b2e3b..96646efdda 100644 --- a/sysdeps/x86_64/bits/setjmp.h +++ b/sysdeps/x86_64/bits/setjmp.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2001,2002,2003,2005,2006 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2002, 2003 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 @@ -26,6 +26,36 @@ #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 @@ -34,6 +64,15 @@ typedef long int __jmp_buf[8]; 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 */ |