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