From f4e2d3bd7318e6581266d09d0183d404c5833f3d Mon Sep 17 00:00:00 2001 From: Maxime Ripard Date: Tue, 3 Apr 2012 10:55:30 +0200 Subject: Bump version of ltrace Signed-off-by: Maxime Ripard Signed-off-by: Peter Korsgaard --- ...nning-in-ARM-arch_-dis-en-able_breakpoint.patch | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 package/ltrace/ltrace-0.6.0-fix-type-punning-in-ARM-arch_-dis-en-able_breakpoint.patch (limited to 'package/ltrace/ltrace-0.6.0-fix-type-punning-in-ARM-arch_-dis-en-able_breakpoint.patch') 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 +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 + -- cgit v1.2.3