summaryrefslogtreecommitdiff
path: root/package/ltrace/ltrace-0.6.0-fix-type-punning-in-ARM-arch_-dis-en-able_breakpoint.patch
diff options
context:
space:
mode:
authorMaxime Ripard <maxime.ripard@free-electrons.com>2012-04-03 10:55:30 +0200
committerPeter Korsgaard <jacmet@sunsite.dk>2012-04-03 23:07:16 +0200
commitf4e2d3bd7318e6581266d09d0183d404c5833f3d (patch)
tree51d8d30a96c93a15150f5a1cbd3dc18e6c6b19fd /package/ltrace/ltrace-0.6.0-fix-type-punning-in-ARM-arch_-dis-en-able_breakpoint.patch
parent5fd8f38fbc9742530efeec5f751c28fe7afbf4e0 (diff)
Bump version of ltrace
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Diffstat (limited to 'package/ltrace/ltrace-0.6.0-fix-type-punning-in-ARM-arch_-dis-en-able_breakpoint.patch')
-rw-r--r--package/ltrace/ltrace-0.6.0-fix-type-punning-in-ARM-arch_-dis-en-able_breakpoint.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/package/ltrace/ltrace-0.6.0-fix-type-punning-in-ARM-arch_-dis-en-able_breakpoint.patch b/package/ltrace/ltrace-0.6.0-fix-type-punning-in-ARM-arch_-dis-en-able_breakpoint.patch
new file mode 100644
index 000000000..c00593290
--- /dev/null
+++ b/package/ltrace/ltrace-0.6.0-fix-type-punning-in-ARM-arch_-dis-en-able_breakpoint.patch
@@ -0,0 +1,67 @@
+From c46448f4e5a4c124fbc75ca9b14697212e676893 Mon Sep 17 00:00:00 2001
+From: Michael K. Edwards <m.k.edwards@gmail.com>
+Date: Mon, 7 Mar 2011 16:15:48 +0000
+Subject: [PATCH] fix type punning in ARM arch_(dis|en)able_breakpoint
+
+---
+ sysdeps/linux-gnu/arm/breakpoint.c | 26 ++++++++++++++++++--------
+ 1 files changed, 18 insertions(+), 8 deletions(-)
+
+diff --git a/sysdeps/linux-gnu/arm/breakpoint.c b/sysdeps/linux-gnu/arm/breakpoint.c
+index 4a5ab92..4e17940 100644
+--- a/sysdeps/linux-gnu/arm/breakpoint.c
++++ b/sysdeps/linux-gnu/arm/breakpoint.c
+@@ -35,10 +35,15 @@ arch_enable_breakpoint(pid_t pid, Breakpoint *sbp) {
+ debug(1, "arch_enable_breakpoint(%d,%p)", pid, sbp->addr);
+
+ for (i = 0; i < 1 + ((BREAKPOINT_LENGTH - 1) / sizeof(long)); i++) {
+- long a = ptrace(PTRACE_PEEKTEXT, pid, sbp->addr + i * sizeof(long), 0);
+- unsigned char *bytes = (unsigned char *)&a;
++ union _ { long l; unsigned char b[SIZEOF_LONG]; };
++ union _ orig, current;
++ unsigned char *bytes = current.b;
++ for (j = 0; j < sizeof(long); j++) {
++ orig.b[j] = sbp->orig_value[i * sizeof(long) + j];
++ }
++ current.l = ptrace(PTRACE_PEEKTEXT, pid, sbp->addr + i * sizeof(long), 0);
+
+- debug(2, "current = 0x%lx, orig_value = 0x%lx, thumb_mode = %d", a, *(long *)&sbp->orig_value, sbp->thumb_mode);
++ debug(2, "current = 0x%lx, orig_value = 0x%lx, thumb_mode = %d", current.l, orig.l, sbp->thumb_mode);
+ for (j = 0; j < sizeof(long) && i * sizeof(long) + j < BREAKPOINT_LENGTH; j++) {
+
+ sbp->orig_value[i * sizeof(long) + j] = bytes[j];
+@@ -49,7 +54,7 @@ arch_enable_breakpoint(pid_t pid, Breakpoint *sbp) {
+ bytes[j] = thumb_break_insn[i * sizeof(long) + j];
+ }
+ }
+- ptrace(PTRACE_POKETEXT, pid, sbp->addr + i * sizeof(long), a);
++ ptrace(PTRACE_POKETEXT, pid, sbp->addr + i * sizeof(long), current.l);
+ }
+ }
+
+@@ -60,13 +65,18 @@ arch_disable_breakpoint(pid_t pid, const Breakpoint *sbp) {
+ debug(1, "arch_disable_breakpoint(%d,%p)", pid, sbp->addr);
+
+ for (i = 0; i < 1 + ((BREAKPOINT_LENGTH - 1) / sizeof(long)); i++) {
+- long a = ptrace(PTRACE_PEEKTEXT, pid, sbp->addr + i * sizeof(long), 0);
+- unsigned char *bytes = (unsigned char *)&a;
++ union _ { long l; unsigned char b[SIZEOF_LONG]; };
++ union _ orig, current;
++ unsigned char *bytes = current.b;
++ for (j = 0; j < sizeof(long); j++) {
++ orig.b[j] = sbp->orig_value[i * sizeof(long) + j];
++ }
++ current.l = ptrace(PTRACE_PEEKTEXT, pid, sbp->addr + i * sizeof(long), 0);
+
+- debug(2, "current = 0x%lx, orig_value = 0x%lx, thumb_mode = %d", a, *(long *)&sbp->orig_value, sbp->thumb_mode);
++ debug(2, "current = 0x%lx, orig_value = 0x%lx, thumb_mode = %d", current.l, orig.l, sbp->thumb_mode);
+ for (j = 0; j < sizeof(long) && i * sizeof(long) + j < BREAKPOINT_LENGTH; j++) {
+ bytes[j] = sbp->orig_value[i * sizeof(long) + j];
+ }
+- ptrace(PTRACE_POKETEXT, pid, sbp->addr + i * sizeof(long), a);
++ ptrace(PTRACE_POKETEXT, pid, sbp->addr + i * sizeof(long), current.l);
+ }
+ }
+--
+1.7.4.1
+