diff options
author | Elliott Hughes <enh@google.com> | 2014-07-09 12:11:42 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2014-07-09 12:19:32 -0700 |
commit | e7f18e14a9e9267150e24f0cb8bd8bd52db7946e (patch) | |
tree | d6022db0b559955f463eefdd50ef14c638ba4310 | |
parent | 6e141aea189769a428a7da6c2206df6d0ed2c69d (diff) | |
download | system_core-e7f18e14a9e9267150e24f0cb8bd8bd52db7946e.zip system_core-e7f18e14a9e9267150e24f0cb8bd8bd52db7946e.tar.gz system_core-e7f18e14a9e9267150e24f0cb8bd8bd52db7946e.tar.bz2 |
Integrate vfp-crasher with crasher.
There's no good reason to separate "fill the integer registers with
recognizable patterns and crash" from "fill the FP registers with recognizable
patterns and crash".
Also remove the incorrect use of ARCH_ARM_HAVE_VFP_D32 rather than try to fix
it.
Change-Id: I3a4a3aca1575de5489314027ae52168997404d79
-rw-r--r-- | debuggerd/Android.mk | 34 | ||||
-rw-r--r-- | debuggerd/arm/crashglue.S | 40 | ||||
-rw-r--r-- | debuggerd/arm/machine.cpp | 25 | ||||
-rw-r--r-- | debuggerd/arm/vfp.S | 43 | ||||
-rw-r--r-- | debuggerd/arm64/crashglue.S | 38 | ||||
-rw-r--r-- | debuggerd/arm64/machine.cpp | 7 | ||||
-rw-r--r-- | debuggerd/arm64/vfp.S | 42 | ||||
-rw-r--r-- | debuggerd/vfp-crasher.c | 7 |
8 files changed, 75 insertions, 161 deletions
diff --git a/debuggerd/Android.mk b/debuggerd/Android.mk index e4d7ecc..191e283 100644 --- a/debuggerd/Android.mk +++ b/debuggerd/Android.mk @@ -22,13 +22,6 @@ LOCAL_CPPFLAGS := \ -Wunused \ -Werror \ -ifeq ($(ARCH_ARM_HAVE_VFP),true) -LOCAL_CFLAGS_arm += -DWITH_VFP -endif # ARCH_ARM_HAVE_VFP -ifeq ($(ARCH_ARM_HAVE_VFP_D32),true) -LOCAL_CFLAGS_arm += -DWITH_VFP_D32 -endif # ARCH_ARM_HAVE_VFP_D32 - LOCAL_SHARED_LIBRARIES := \ libbacktrace \ libcutils \ @@ -65,30 +58,3 @@ LOCAL_MODULE_STEM_64 := crasher64 LOCAL_MULTILIB := both include $(BUILD_EXECUTABLE) - -include $(CLEAR_VARS) - -ifeq ($(ARCH_ARM_HAVE_VFP),true) -LOCAL_MODULE_TARGET_ARCH += arm -LOCAL_SRC_FILES_arm := arm/vfp.S -LOCAL_CFLAGS_arm += -DWITH_VFP -ifeq ($(ARCH_ARM_HAVE_VFP_D32),true) -LOCAL_CFLAGS_arm += -DWITH_VFP_D32 -endif # ARCH_ARM_HAVE_VFP_D32 -endif # ARCH_ARM_HAVE_VFP == true -LOCAL_CFLAGS += -Werror - -LOCAL_SRC_FILES_arm64 := arm64/vfp.S -LOCAL_MODULE_TARGET_ARCH += arm64 - -LOCAL_SRC_FILES := vfp-crasher.c -LOCAL_MODULE := vfp-crasher -LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) -LOCAL_MODULE_TAGS := optional -LOCAL_SHARED_LIBRARIES := libcutils liblog libc - -LOCAL_MODULE_STEM_32 := vfp-crasher -LOCAL_MODULE_STEM_64 := vfp-crasher64 -LOCAL_MULTILIB := both - -include $(BUILD_EXECUTABLE) diff --git a/debuggerd/arm/crashglue.S b/debuggerd/arm/crashglue.S index eb9d0e3..8649056 100644 --- a/debuggerd/arm/crashglue.S +++ b/debuggerd/arm/crashglue.S @@ -1,8 +1,5 @@ .globl crash1 .type crash1, %function -.globl crashnostack -.type crashnostack, %function - crash1: ldr r0, =0xa5a50000 ldr r1, =0xa5a50001 @@ -18,11 +15,46 @@ crash1: ldr r11, =0xa5a50011 ldr r12, =0xa5a50012 + + fconstd d0, #0 + fconstd d1, #1 + fconstd d2, #2 + fconstd d3, #3 + fconstd d4, #4 + fconstd d5, #5 + fconstd d6, #6 + fconstd d7, #7 + fconstd d8, #8 + fconstd d9, #9 + fconstd d10, #10 + fconstd d11, #11 + fconstd d12, #12 + fconstd d13, #13 + fconstd d14, #14 + fconstd d15, #15 + fconstd d16, #16 + fconstd d17, #17 + fconstd d18, #18 + fconstd d19, #19 + fconstd d20, #20 + fconstd d21, #21 + fconstd d22, #22 + fconstd d23, #23 + fconstd d24, #24 + fconstd d25, #25 + fconstd d26, #26 + fconstd d27, #27 + fconstd d28, #28 + fconstd d29, #29 + fconstd d30, #30 + fconstd d31, #31 + mov lr, #0 ldr lr, [lr] b . - +.globl crashnostack +.type crashnostack, %function crashnostack: mov sp, #0 mov r0, #0 diff --git a/debuggerd/arm/machine.cpp b/debuggerd/arm/machine.cpp index 839d47a..8270066 100644 --- a/debuggerd/arm/machine.cpp +++ b/debuggerd/arm/machine.cpp @@ -27,21 +27,8 @@ #include "../utility.h" #include "../machine.h" -// enable to dump memory pointed to by every register -#define DUMP_MEMORY_FOR_ALL_REGISTERS 1 - -#ifdef WITH_VFP -#ifdef WITH_VFP_D32 -#define NUM_VFP_REGS 32 -#else -#define NUM_VFP_REGS 16 -#endif -#endif - -// If configured to do so, dump memory around *all* registers -// for the crashing thread. void dump_memory_and_code(log_t* log, pid_t tid) { - struct pt_regs regs; + pt_regs regs; if (ptrace(PTRACE_GETREGS, tid, 0, ®s)) { return; } @@ -73,7 +60,7 @@ void dump_memory_and_code(log_t* log, pid_t tid) { } void dump_registers(log_t* log, pid_t tid) { - struct pt_regs r; + pt_regs r; if (ptrace(PTRACE_GETREGS, tid, 0, &r)) { _LOG(log, logtype::REGISTERS, "cannot get registers: %s\n", strerror(errno)); return; @@ -93,19 +80,15 @@ void dump_registers(log_t* log, pid_t tid) { static_cast<uint32_t>(r.ARM_lr), static_cast<uint32_t>(r.ARM_pc), static_cast<uint32_t>(r.ARM_cpsr)); -#ifdef WITH_VFP - struct user_vfp vfp_regs; - int i; - + user_vfp vfp_regs; if (ptrace(PTRACE_GETVFPREGS, tid, 0, &vfp_regs)) { _LOG(log, logtype::REGISTERS, "cannot get registers: %s\n", strerror(errno)); return; } - for (i = 0; i < NUM_VFP_REGS; i += 2) { + for (size_t i = 0; i < 32; i += 2) { _LOG(log, logtype::REGISTERS, " d%-2d %016llx d%-2d %016llx\n", i, vfp_regs.fpregs[i], i+1, vfp_regs.fpregs[i+1]); } _LOG(log, logtype::REGISTERS, " scr %08lx\n", vfp_regs.fpscr); -#endif } diff --git a/debuggerd/arm/vfp.S b/debuggerd/arm/vfp.S deleted file mode 100644 index 9744f6f..0000000 --- a/debuggerd/arm/vfp.S +++ /dev/null @@ -1,43 +0,0 @@ - .text - .align 2 - .global crash - .type crash, %function -crash: - fconstd d0, #0 - fconstd d1, #1 - fconstd d2, #2 - fconstd d3, #3 - fconstd d4, #4 - fconstd d5, #5 - fconstd d6, #6 - fconstd d7, #7 - fconstd d8, #8 - fconstd d9, #9 - fconstd d10, #10 - fconstd d11, #11 - fconstd d12, #12 - fconstd d13, #13 - fconstd d14, #14 - fconstd d15, #15 -#ifdef WITH_VFP_D32 - fconstd d16, #16 - fconstd d17, #17 - fconstd d18, #18 - fconstd d19, #19 - fconstd d20, #20 - fconstd d21, #21 - fconstd d22, #22 - fconstd d23, #23 - fconstd d24, #24 - fconstd d25, #25 - fconstd d26, #26 - fconstd d27, #27 - fconstd d28, #28 - fconstd d29, #29 - fconstd d30, #30 - fconstd d31, #31 -#endif - mov r0, #0 - str r0, [r0] - bx lr - diff --git a/debuggerd/arm64/crashglue.S b/debuggerd/arm64/crashglue.S index b06b67c..e58b542 100644 --- a/debuggerd/arm64/crashglue.S +++ b/debuggerd/arm64/crashglue.S @@ -1,8 +1,5 @@ .globl crash1 .type crash1, %function -.globl crashnostack -.type crashnostack, %function - crash1: ldr x0, =0xa5a50000 ldr x1, =0xa5a50001 @@ -35,11 +32,46 @@ crash1: ldr x28, =0xa5a50028 ldr x29, =0xa5a50029 + fmov d0, -1.0 // -1 is more convincing than 0. + fmov d1, 1.0 + fmov d2, 2.0 + fmov d3, 3.0 + fmov d4, 4.0 + fmov d5, 5.0 + fmov d6, 6.0 + fmov d7, 7.0 + fmov d8, 8.0 + fmov d9, 9.0 + fmov d10, 10.0 + fmov d11, 11.0 + fmov d12, 12.0 + fmov d13, 13.0 + fmov d14, 14.0 + fmov d15, 15.0 + fmov d16, 16.0 + fmov d17, 17.0 + fmov d18, 18.0 + fmov d19, 19.0 + fmov d20, 20.0 + fmov d21, 21.0 + fmov d22, 22.0 + fmov d23, 23.0 + fmov d24, 24.0 + fmov d25, 25.0 + fmov d26, 26.0 + fmov d27, 27.0 + fmov d28, 28.0 + fmov d29, 29.0 + fmov d30, 30.0 + fmov d31, 31.0 + mov x30, xzr ldr x30, [x30] b . +.globl crashnostack +.type crashnostack, %function crashnostack: mov x0, xzr add sp, x0, xzr diff --git a/debuggerd/arm64/machine.cpp b/debuggerd/arm64/machine.cpp index 48308c3..ec664bd 100644 --- a/debuggerd/arm64/machine.cpp +++ b/debuggerd/arm64/machine.cpp @@ -30,13 +30,6 @@ #include "../utility.h" #include "../machine.h" -/* enable to dump memory pointed to by every register */ -#define DUMP_MEMORY_FOR_ALL_REGISTERS 1 - -/* - * If configured to do so, dump memory around *all* registers - * for the crashing thread. - */ void dump_memory_and_code(log_t* log, pid_t tid) { struct user_pt_regs regs; struct iovec io; diff --git a/debuggerd/arm64/vfp.S b/debuggerd/arm64/vfp.S deleted file mode 100644 index bf12c22..0000000 --- a/debuggerd/arm64/vfp.S +++ /dev/null @@ -1,42 +0,0 @@ - .text - .align 2 - .global crash - .type crash, %function -crash: - fmov d0, XZR - fmov d1, 1.0 - fmov d2, 2.0 - fmov d3, 3.0 - fmov d4, 4.0 - fmov d5, 5.0 - fmov d6, 6.0 - fmov d7, 7.0 - fmov d8, 8.0 - fmov d9, 9.0 - fmov d10, 10.0 - fmov d11, 11.0 - fmov d12, 12.0 - fmov d13, 13.0 - fmov d14, 14.0 - fmov d15, 15.0 - fmov d16, 16.0 - fmov d17, 17.0 - fmov d18, 18.0 - fmov d19, 19.0 - fmov d20, 20.0 - fmov d21, 21.0 - fmov d22, 22.0 - fmov d23, 23.0 - fmov d24, 24.0 - fmov d25, 25.0 - fmov d26, 26.0 - fmov d27, 27.0 - fmov d28, 28.0 - fmov d29, 29.0 - fmov d30, 30.0 - fmov d31, 31.0 - - mov x0, xzr - str x0, [x0] - br x30 - diff --git a/debuggerd/vfp-crasher.c b/debuggerd/vfp-crasher.c deleted file mode 100644 index 7a19cdd..0000000 --- a/debuggerd/vfp-crasher.c +++ /dev/null @@ -1,7 +0,0 @@ -int main() -{ - extern void crash(void); - - crash(); - return 0; -} |