diff options
Diffstat (limited to 'sysdeps/powerpc/powerpc32/fpu')
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S | 13 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/__longjmp.S | 7 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/setjmp-common.S | 10 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/fpu/setjmp.S | 14 |
4 files changed, 28 insertions, 16 deletions
diff --git a/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S b/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S index d02aa57549..13611541c2 100644 --- a/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S +++ b/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S @@ -17,6 +17,7 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> +#include <stap-probe.h> #define _ASM #ifdef __NO_VMX__ # include <novmxsetjmp.h> @@ -25,7 +26,7 @@ #endif .machine "altivec" -ENTRY (__longjmp) +ENTRY (__longjmp_symbol) #ifndef __NO_VMX__ # ifdef PIC mflr r6 @@ -143,19 +144,22 @@ L(no_vmx): # endif PTR_DEMANGLE2 (r0, r25) #endif + /* longjmp/longjmp_target probe expects longjmp first argument (4@3), + second argument (-4@4), and target address (4@0), respectively. */ + LIBC_PROBE (longjmp, 3, 4@3, -4@4, 4@0) mtlr r0 lwz r21,((JB_GPRS+7)*4)(r3) lfd fp21,((JB_FPRS+7*2)*4)(r3) lwz r22,((JB_GPRS+8)*4)(r3) lfd fp22,((JB_FPRS+8*2)*4)(r3) - lwz r0,(JB_CR*4)(r3) + lwz r5,(JB_CR*4)(r3) lwz r23,((JB_GPRS+9)*4)(r3) lfd fp23,((JB_FPRS+9*2)*4)(r3) lwz r24,((JB_GPRS+10)*4)(r3) lfd fp24,((JB_FPRS+10*2)*4)(r3) lwz r25,((JB_GPRS+11)*4)(r3) lfd fp25,((JB_FPRS+11*2)*4)(r3) - mtcrf 0xFF,r0 + mtcrf 0xFF,r5 lwz r26,((JB_GPRS+12)*4)(r3) lfd fp26,((JB_FPRS+12*2)*4)(r3) lwz r27,((JB_GPRS+13)*4)(r3) @@ -168,6 +172,7 @@ L(no_vmx): lfd fp30,((JB_FPRS+16*2)*4)(r3) lwz r31,((JB_GPRS+17)*4)(r3) lfd fp31,((JB_FPRS+17*2)*4)(r3) + LIBC_PROBE (longjmp_target, 3, 4@3, -4@4, 4@0) mr r3,r4 blr -END (__longjmp) +END (__longjmp_symbol) diff --git a/sysdeps/powerpc/powerpc32/fpu/__longjmp.S b/sysdeps/powerpc/powerpc32/fpu/__longjmp.S index 27166c454f..cbd42be5cb 100644 --- a/sysdeps/powerpc/powerpc32/fpu/__longjmp.S +++ b/sysdeps/powerpc/powerpc32/fpu/__longjmp.S @@ -22,20 +22,21 @@ #if defined NOT_IN_libc /* Build a non-versioned object for rtld-*. */ +# define __longjmp_symbol __longjmp # include "__longjmp-common.S" #else /* !NOT_IN_libc */ /* Build a versioned object for libc. */ versioned_symbol (libc, __vmx__longjmp, __longjmp, GLIBC_2_3_4); -# define __longjmp __vmx__longjmp +# define __longjmp_symbol __vmx__longjmp # include "__longjmp-common.S" # if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) # define __NO_VMX__ # undef JB_SIZE compat_symbol (libc, __novmx__longjmp, __longjmp, GLIBC_2_0); -# undef __longjmp -# define __longjmp __novmx__longjmp +# undef __longjmp_symbol +# define __longjmp_symbol __novmx__longjmp # include "__longjmp-common.S" # endif #endif /* !NOT_IN_libc */ diff --git a/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S b/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S index f3244060e0..08efd64920 100644 --- a/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S +++ b/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S @@ -17,6 +17,7 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> +#include <stap-probe.h> #define _ASM #ifdef __NO_VMX__ # include <novmxsetjmp.h> @@ -25,7 +26,7 @@ #endif .machine "altivec" -ENTRY (__sigsetjmp) +ENTRY (__sigsetjmp_symbol) #ifdef PTR_MANGLE mr r5,r1 @@ -35,6 +36,9 @@ ENTRY (__sigsetjmp) stw r1,(JB_GPR1*4)(3) #endif mflr r0 + /* setjmp probe expects longjmp first argument (4@3), second argument + (-4@4), and target address (4@0), respectively. */ + LIBC_PROBE (setjmp, 3, 4@3, -4@4, 4@0) stw r14,((JB_GPRS+0)*4)(3) stfd fp14,((JB_FPRS+0*2)*4)(3) #ifdef PTR_MANGLE @@ -175,5 +179,5 @@ L(aligned_save_vmx): stvx 31,0,r6 L(no_vmx): #endif - b __sigjmp_save@local -END (__sigsetjmp) + b __sigjmp_save_symbol@local +END (__sigsetjmp_symbol) diff --git a/sysdeps/powerpc/powerpc32/fpu/setjmp.S b/sysdeps/powerpc/powerpc32/fpu/setjmp.S index 92acff1e63..566aa34d0f 100644 --- a/sysdeps/powerpc/powerpc32/fpu/setjmp.S +++ b/sysdeps/powerpc/powerpc32/fpu/setjmp.S @@ -22,23 +22,25 @@ #if defined NOT_IN_libc /* Build a non-versioned object for rtld-*. */ +# define __sigsetjmp_symbol __sigsetjmp +# define __sigjmp_save_symbol __sigjmp_save # include "setjmp-common.S" #else /* !NOT_IN_libc */ /* Build a versioned object for libc. */ versioned_symbol (libc, __vmx__sigsetjmp, __sigsetjmp, GLIBC_2_3_4) -# define __sigsetjmp __vmx__sigsetjmp -# define __sigjmp_save __vmx__sigjmp_save +# define __sigsetjmp_symbol __vmx__sigsetjmp +# define __sigjmp_save_symbol __vmx__sigjmp_save # include "setjmp-common.S" # if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) # define __NO_VMX__ -# undef __sigsetjmp -# undef __sigjmp_save +# undef __sigsetjmp_symbol +# undef __sigjmp_save_symbol # undef JB_SIZE compat_symbol (libc, __novmx__sigsetjmp, __sigsetjmp, GLIBC_2_0) -# define __sigsetjmp __novmx__sigsetjmp -# define __sigjmp_save __novmx__sigjmp_save +# define __sigsetjmp_symbol __novmx__sigsetjmp +# define __sigjmp_save_symbol __novmx__sigjmp_save # include "setjmp-common.S" # endif #endif /* !NOT_IN_libc */ |