summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVenkataramanan Kumar <venkataramanan.kumar@linaro.org>2014-04-08 14:11:44 +0100
committerWill Newton <will.newton@linaro.org>2014-04-30 10:51:43 +0100
commitb89aa87f042125b9cc4b59a0e9380231823cfa4d (patch)
treed08dc0a07fddacb634f9d9feb3871bb08a4005e0
parent46ee09a64ba215a8e35e39f3dd978f28267b0920 (diff)
aarch64: Add setjmp and longjmp SystemTap probes
Add setjmp, longjmp and longjmp_target SystemTap probes. ChangeLog: 2014-04-22 Will Newton <will.newton@linaro.org> Venkataramanan Kumar <venkataramanan.kumar@linaro.org> * sysdeps/aarch64/__longjmp.S: Include stap-probe.h. (__longjmp): Add longjmp and longjmp_target SystemTap probes. * sysdeps/aarch64/setjmp.S: Include stap-probe.h. (__sigsetjmp): Add setjmp SystemTap probe.
-rw-r--r--libc/ports/ChangeLog.aarch64.linaro9
-rw-r--r--libc/ports/sysdeps/aarch64/__longjmp.S10
-rw-r--r--libc/ports/sysdeps/aarch64/setjmp.S5
3 files changed, 24 insertions, 0 deletions
diff --git a/libc/ports/ChangeLog.aarch64.linaro b/libc/ports/ChangeLog.aarch64.linaro
index be992403a..6e7504574 100644
--- a/libc/ports/ChangeLog.aarch64.linaro
+++ b/libc/ports/ChangeLog.aarch64.linaro
@@ -1,3 +1,12 @@
+2014-04-22 Will Newton <will.newton@linaro.org>
+ Venkataramanan Kumar <venkataramanan.kumar@linaro.org>
+
+ * sysdeps/aarch64/__longjmp.S: Include stap-probe.h.
+ (__longjmp): Add longjmp and longjmp_target SystemTap
+ probes.
+ * sysdeps/aarch64/setjmp.S: Include stap-probe.h.
+ (__sigsetjmp): Add setjmp SystemTap probe.
+
2014-04-17 Will Newton <will.newton@linaro.org>
[BZ #16629]
diff --git a/libc/ports/sysdeps/aarch64/__longjmp.S b/libc/ports/sysdeps/aarch64/__longjmp.S
index 2d38bbf6a..1bb7be368 100644
--- a/libc/ports/sysdeps/aarch64/__longjmp.S
+++ b/libc/ports/sysdeps/aarch64/__longjmp.S
@@ -18,6 +18,7 @@
#include <sysdep.h>
#include <jmpbuf-offsets.h>
+#include <stap-probe.h>
/* __longjmp(jmpbuf, val) */
@@ -56,6 +57,10 @@ ENTRY (__longjmp)
#else
ldp x29, x30, [x0, #JB_X29<<3]
#endif
+ /* longjmp probe takes 3 arguments, address of jump buffer as
+ first argument (8@x0), return value as second argument (-4@x1),
+ and target address (8@x30), respectively. */
+ LIBC_PROBE (longjmp, 3, 8@x0, -4@x1, 8@x30)
ldp d8, d9, [x0, #JB_D8<<3]
ldp d10, d11, [x0, #JB_D10<<3]
ldp d12, d13, [x0, #JB_D12<<3]
@@ -98,6 +103,11 @@ ENTRY (__longjmp)
ldr x5, [x0, #JB_SP<<3]
#endif
mov sp, x5
+
+ /* longjmp_target probe takes 3 arguments, address of jump buffer
+ as first argument (8@x0), return value as second argument (-4@x1),
+ and target address (8@x30), respectively. */
+ LIBC_PROBE (longjmp_target, 3, 8@x0, -4@x1, 8@x30)
cmp x1, #0
mov x0, #1
csel x0, x1, x0, ne
diff --git a/libc/ports/sysdeps/aarch64/setjmp.S b/libc/ports/sysdeps/aarch64/setjmp.S
index 5822abd87..fd3931992 100644
--- a/libc/ports/sysdeps/aarch64/setjmp.S
+++ b/libc/ports/sysdeps/aarch64/setjmp.S
@@ -18,6 +18,7 @@
#include <sysdep.h>
#include <jmpbuf-offsets.h>
+#include <stap-probe.h>
/* Keep traditional entry points in with sigsetjmp(). */
ENTRY (setjmp)
@@ -46,6 +47,10 @@ ENTRY (__sigsetjmp)
#else
stp x29, x30, [x0, #JB_X29<<3]
#endif
+ /* setjmp probe takes 3 arguments, address of jump buffer
+ first argument (8@x0), return value second argument (-4@x1),
+ and target address (8@x30), respectively. */
+ LIBC_PROBE (setjmp, 3, 8@x0, -4@x1, 8@x30)
stp d8, d9, [x0, #JB_D8<<3]
stp d10, d11, [x0, #JB_D10<<3]
stp d12, d13, [x0, #JB_D12<<3]