about summary refs log tree commit diff
path: root/sysdeps/powerpc/powerpc32
diff options
context:
space:
mode:
authorAdhemerval Zanella <azanella@linux.vnet.ibm.com>2013-11-22 06:36:54 -0600
committerAdhemerval Zanella <azanella@linux.vnet.ibm.com>2013-12-05 07:44:07 -0600
commiteb5ad6b9bcf579f1cb5c67ca4650ee4a0cf1b4b1 (patch)
treeb82b8fbfb23fb60cc69d4bd06bf8ef13c471c9eb /sysdeps/powerpc/powerpc32
parent76a4a26979e58132d500e700ac1637a09c6d9cef (diff)
downloadglibc-eb5ad6b9bcf579f1cb5c67ca4650ee4a0cf1b4b1.tar.gz
glibc-eb5ad6b9bcf579f1cb5c67ca4650ee4a0cf1b4b1.tar.xz
glibc-eb5ad6b9bcf579f1cb5c67ca4650ee4a0cf1b4b1.zip
PowerPC: Add systemtap static probe points in setjmp/longjmp
This patch add static probes for setjmp/longjmp in the way gdb expects,fixing
the gdb.base/longjmp.exp gdb testcases.

It changes the symbol_name and use macros to to avoid change the probe names
and ending up adding more logic on GDB (since with the expected name
GDB work seamlessly).
Diffstat (limited to 'sysdeps/powerpc/powerpc32')
-rw-r--r--sysdeps/powerpc/powerpc32/__longjmp-common.S13
-rw-r--r--sysdeps/powerpc/powerpc32/__longjmp.S7
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S13
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/__longjmp.S7
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/setjmp-common.S10
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/setjmp.S14
-rw-r--r--sysdeps/powerpc/powerpc32/setjmp-common.S10
-rw-r--r--sysdeps/powerpc/powerpc32/setjmp.S14
8 files changed, 56 insertions, 32 deletions
diff --git a/sysdeps/powerpc/powerpc32/__longjmp-common.S b/sysdeps/powerpc/powerpc32/__longjmp-common.S
index df1d5195f1..97c966db4a 100644
--- a/sysdeps/powerpc/powerpc32/__longjmp-common.S
+++ b/sysdeps/powerpc/powerpc32/__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>
@@ -30,7 +31,7 @@
 # define LOAD_GP(N)	lwz r##N,((JB_GPRS+(N)-14)*4)(r3)
 #endif
 
-ENTRY (__longjmp)
+ENTRY (__longjmp_symbol)
 
 #if defined PTR_DEMANGLE || defined CHECK_SP
 	lwz r24,(JB_GPR1*4)(r3)
@@ -58,20 +59,24 @@ ENTRY (__longjmp)
 # 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
 	LOAD_GP (21)
 	LOAD_GP (22)
-	lwz r0,(JB_CR*4)(r3)
+	lwz r5,(JB_CR*4)(r3)
 	LOAD_GP (23)
 	LOAD_GP (24)
 	LOAD_GP (25)
-	mtcrf 0xFF,r0
+	mtcrf 0xFF,r5
 	LOAD_GP (26)
 	LOAD_GP (27)
 	LOAD_GP (28)
 	LOAD_GP (29)
 	LOAD_GP (30)
 	LOAD_GP (31)
+	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/__longjmp.S b/sysdeps/powerpc/powerpc32/__longjmp.S
index 3ceeea753e..8456cb5930 100644
--- a/sysdeps/powerpc/powerpc32/__longjmp.S
+++ b/sysdeps/powerpc/powerpc32/__longjmp.S
@@ -21,18 +21,19 @@
 
 #if defined NOT_IN_libc
 /* Build a non-versioned object for rtld-*.  */
+# define __longjmp_symbol __longjmp
 # include "__longjmp-common.S"
 
 #else /* !NOT_IN_libc */
 strong_alias (__vmx__longjmp, __longjmp);
-# 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
-#  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/__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 */
diff --git a/sysdeps/powerpc/powerpc32/setjmp-common.S b/sysdeps/powerpc/powerpc32/setjmp-common.S
index 3fb65b5f70..0c77029abe 100644
--- a/sysdeps/powerpc/powerpc32/setjmp-common.S
+++ b/sysdeps/powerpc/powerpc32/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>
@@ -30,7 +31,7 @@
 # define SAVE_GP(N)	stw r##N,((JB_GPRS+(N)-14)*4)(3)
 #endif
 
-ENTRY (__sigsetjmp)
+ENTRY (__sigsetjmp_symbol)
 
 #ifdef PTR_MANGLE
 	mr   r5,r1
@@ -40,6 +41,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)
 	SAVE_GP (14)
 #ifdef PTR_MANGLE
 	PTR_MANGLE2 (r0, r10)
@@ -69,6 +73,6 @@ ENTRY (__sigsetjmp)
 	li   r3,0
 	blr
 #else
-	b __sigjmp_save@local
+	b __sigjmp_save_symbol@local
 #endif
-END (__sigsetjmp)
+END (__sigsetjmp_symbol)
diff --git a/sysdeps/powerpc/powerpc32/setjmp.S b/sysdeps/powerpc/powerpc32/setjmp.S
index 49b64ecf01..467d9c9ecf 100644
--- a/sysdeps/powerpc/powerpc32/setjmp.S
+++ b/sysdeps/powerpc/powerpc32/setjmp.S
@@ -21,23 +21,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 */