about summary refs log tree commit diff
path: root/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S
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/fpu/__longjmp-common.S
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/fpu/__longjmp-common.S')
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S13
1 files changed, 9 insertions, 4 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)