From 8f8308c974169d7b9909db361e14cd257d47b2a7 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Wed, 30 Sep 2015 15:32:15 -0700 Subject: [PATCH] Add a no dwarf version of assembler macros. For the __release and __release_rt functions, the previous macros would add a dwarf cfi entry for the function with no values. This works with libunwind since it always tries the arm unwind information first. This change removes those entries by creating a no dwarf version of the assembler macro. Change-Id: Ib93e42fff5a79b8d770eab0071fdee7d2afa988d --- libc/arch-arm/bionic/__restore.S | 12 +++++++----- libc/private/bionic_asm.h | 17 ++++++++++++++--- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/libc/arch-arm/bionic/__restore.S b/libc/arch-arm/bionic/__restore.S index 98981256b..8c1e41d53 100644 --- a/libc/arch-arm/bionic/__restore.S +++ b/libc/arch-arm/bionic/__restore.S @@ -34,7 +34,9 @@ // __restore_rt (but covered by the .fnstart/.fnend) so that although they're // not inside the functions from objdump's point of view, an unwinder that // blindly looks at the previous instruction (but is then smart enough to check -// the DWARF information to find out where it landed) gets the right answer. +// the unwind information to find out where it landed) gets the right answer. +// Make sure not to have both DWARF and ARM unwind information, so only +// use the ARM unwind information. // We need to place .fnstart ourselves (but we may as well keep the free .fnend). #undef __bionic_asm_custom_entry @@ -44,18 +46,18 @@ .save {r0-r15} .pad #32 nop -ENTRY_PRIVATE(__restore) +ENTRY_PRIVATE_NO_DWARF(__restore) // This function must have exactly this instruction sequence. mov r7, #__NR_sigreturn swi #0 -END(__restore) +END_NO_DWARF(__restore) .fnstart .save {r0-r15} .pad #160 nop -ENTRY_PRIVATE(__restore_rt) +ENTRY_PRIVATE_NO_DWARF(__restore_rt) // This function must have exactly this instruction sequence. mov r7, #__NR_rt_sigreturn swi #0 -END(__restore_rt) +END_NO_DWARF(__restore_rt) diff --git a/libc/private/bionic_asm.h b/libc/private/bionic_asm.h index 5fca222c4..e2084d438 100644 --- a/libc/private/bionic_asm.h +++ b/libc/private/bionic_asm.h @@ -38,25 +38,36 @@ #include -#define ENTRY(f) \ +#define ENTRY_NO_DWARF(f) \ .text; \ .globl f; \ .align __bionic_asm_align; \ .type f, __bionic_asm_function_type; \ f: \ __bionic_asm_custom_entry(f); \ + +#define ENTRY(f) \ + ENTRY_NO_DWARF(f) \ .cfi_startproc \ +#define END_NO_DWARF(f) \ + .size f, .-f; \ + __bionic_asm_custom_end(f) \ + #define END(f) \ .cfi_endproc; \ - .size f, .-f; \ - __bionic_asm_custom_end(f) \ + END_NO_DWARF(f) \ /* Like ENTRY, but with hidden visibility. */ #define ENTRY_PRIVATE(f) \ ENTRY(f); \ .hidden f \ +/* Like ENTRY_NO_DWARF, but with hidden visibility. */ +#define ENTRY_PRIVATE_NO_DWARF(f) \ + ENTRY_NO_DWARF(f); \ + .hidden f \ + #define ALIAS_SYMBOL(alias, original) \ .globl alias; \ .equ alias, original