mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-01 10:06:57 +03:00
Update.
2004-02-13 Steven Munroe <sjmunroe@us.ibm.com> * sysdeps/powerpc/powerpc64/__longjmp-common.S: New file. * sysdeps/powerpc/powerpc64/__longjmp.S [NOT_IN_libc](__longjmp): Non-versioned __longjmp for rtld-__longjmp. [!NOT_IN_libc](__vmx__longjmp): Add VMX reg support and define as default version of __longjmp. [SHARED && SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4)] (__novmx__longjmp): Original version of __longjmp. * sysdeps/powerpc/powerpc64/bsd-_setjmp.S [NOT_IN_libc](_setjmp): Non-versioned _setjmp for rtld-_setjmp. [!NOT_IN_libc](__vmx_setjmp): Branch to __vmx__sigsetjmp and define as default version of _setjmp. [SHARED && SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4)] (__novmx_setjmp): Original version of _setjmp. * sysdeps/powerpc/powerpc64/bsd-setjmp.S (__vmxsetjmp): Branch to __vmx__sigsetjmp and define as default version of setjmp. [SHARED && SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4)] (__novmxsetjmp): Original version of setjmp. * sysdeps/powerpc/powerpc64/setjmp-common.S: New file. * sysdeps/powerpc/powerpc64/setjmp.S [NOT_IN_libc](__setjmp): Non-versioned __sigsetjmp for rtld-setjmp. [!NOT_IN_libc](__vmx__sigsetjmp): Add VMX reg support and define as default version of __sigsetjmp. [SHARED && SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4)] (__novmx__sigsetjmp): Original version of __sigsetjmp. * sysdeps/powerpc/powerpc32/__longjmp-common.S: New File * sysdeps/powerpc/powerpc32/__longjmp.S [NOT_IN_libc](__longjmp): Non-versioned __longjmp for rtld-__longjmp. [!NOT_IN_libc](__vmx__longjmp): Add VMX reg support and define as default version of __longjmp. [SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)] (__novmx__longjmp): Original version of __longjmp. * sysdeps/powerpc/powerpc32/bsd-_setjmp.S [NOT_IN_libc](_setjmp): Non-versioned _setjmp for rtld-_setjmp. [!NOT_IN_libc](__vmx_setjmp): Branch to __vmx__sigsetjmp and define as default version of _setjmp. [SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)] (__novmx_setjmp): Original version of _setjmp. * sysdeps/powerpc/powerpc32/bsd-setjmp.S (__vmxsetjmp): Branch to __vmx__sigsetjmp and define as default version of setjmp. [SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)] (__novmxsetjmp): Original version of setjmp. * sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S: New file. * sysdeps/powerpc/powerpc32/fpu/__longjmp.S [NOT_IN_libc](__longjmp): Non-versioned __longjmp for rtld-__longjmp. [!NOT_IN_libc](__vmx__longjmp): Add VMX reg support and define as default version of __longjmp. [SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)] (__novmx__longjmp): Original version of __longjmp. * sysdeps/powerpc/powerpc32/fpu/setjmp-common.S: New file. * sysdeps/powerpc/powerpc32/fpu/setjmp.S [NOT_IN_libc](__setjmp): Non-versioned __sigsetjmp for rtld-setjmp. [!NOT_IN_libc](__vmx__sigsetjmp): Add VMX reg support and define as default version of __sigsetjmp. [SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)] (__novmx__sigsetjmp): Original version of __sigsetjmp. * sysdeps/powerpc/powerpc32/setjmp-common.S: New file. * sysdeps/powerpc/powerpc32/setjmp.S [NOT_IN_libc](__setjmp): Non-versioned __sigsetjmp for rtld-setjmp. [!NOT_IN_libc](__vmx__sigsetjmp): Add VMX reg support and define as default version of __sigsetjmp. [SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)] (__novmx__sigsetjmp): Original version of __sigsetjmp. * sysdeps/powerpc/Dist: New File. * sysdeps/powerpc/Makefile (sysdep_routines): Add novmx-longjmp.c and novmx-sigjmp.c * sysdeps/powerpc/Versions (libc): To GLIBC_2.3_4 add _longjmp, __sigsetjmp, _setjmp, longjmp, and setjmp. To GLIBC_PRIVATE add __novmx__libc_longjmp, __novmx__libc_siglongjmp, __vmx__libc_longjmp, and __vmx__libc_siglongjmp. * sysdeps/powerpc/bits/setjmp.h: Define JB_VRSAVE, JB_VRS, and adjust JB_SIZE to add VMX regs to __jmp_buf. * sysdeps/powerpc/longjmp.c: New file. * sysdeps/powerpc/novmxsetjmp.h: New file. * sysdeps/powerpc/novmx-longjmp.c: New file. * sysdeps/powerpc/novmx-sigjmp.c: New file. * sysdeps/powerpc/sigjmp.c: New file.
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1997, 1998, 2000, 2003, 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
|
||||
@ -37,22 +37,38 @@
|
||||
# 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. */
|
||||
# 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 (40*8)
|
||||
# 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 (58*4)
|
||||
# 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
|
||||
4 byte alignment so we need to use vperm in the setjmp/longjmp routines.
|
||||
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
|
||||
typedef long int __jmp_buf[40];
|
||||
typedef long int __jmp_buf[64] __attribute__ ((__aligned__ (16)));
|
||||
# else
|
||||
typedef long int __jmp_buf[58];
|
||||
/* 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
|
||||
|
||||
|
Reference in New Issue
Block a user