Fix all debug directives.
The backtrace when a fortify check failed was not correct. This change
adds all of the necessary directives to get a correct backtrace.
Fix the strcmp directives and change all labels to local labels.
Testing:
- Verify that the runtime can decode the stack for __memcpy_chk, __memset_chk,
__strcpy_chk, __strcat_chk fortify failures.
- Verify that gdb can decode the stack properly when hitting a fortify check.
- Verify that the runtime can decode the stack for a seg fault for all of the
_chk functions and for memcpy/memset.
- Verify that gdb can decode the stack for a seg fault for all of the _chk
functions and for memcpy/memset.
- Verify that the runtime can decode the stack for a seg fault for strcmp.
- Verify that gdb can decode the stack for a seg fault in strcmp.
Bug: 10342460
Bug: 10345269
Merge from internal master.
(cherry-picked from 05332f2ce7e542d32ff4d5cd9f60248ad71fbf0d)
Change-Id: Ibc919b117cfe72b9ae97e35bd48185477177c5ca
diff --git a/libc/arch-arm/krait/bionic/__strcpy_chk.S b/libc/arch-arm/krait/bionic/__strcpy_chk.S
index d5e1db6..7da4d15 100644
--- a/libc/arch-arm/krait/bionic/__strcpy_chk.S
+++ b/libc/arch-arm/krait/bionic/__strcpy_chk.S
@@ -39,8 +39,8 @@
ENTRY(__strcpy_chk)
.cfi_startproc
pld [r0, #0]
- .save {r0, lr}
push {r0, lr}
+ .save {r0, lr}
.cfi_def_cfa_offset 8
.cfi_rel_offset r0, 0
.cfi_rel_offset lr, 4
@@ -151,14 +151,25 @@
pld [r1, #64]
ldr r0, [sp]
cmp r3, lr
- bge .L_fortify_check_failed
+ bge __strcpy_chk_failed
// Add 1 for copy length to get the string terminator.
add r2, r3, #1
- #include "memcpy_base.S"
+ .cfi_endproc
+END(__strcpy_chk)
-.L_fortify_check_failed:
+#define MEMCPY_BASE __strcpy_chk_memcpy_base
+#define MEMCPY_BASE_ALIGNED __strcpy_chk_memcpy_base_aligned
+#include "memcpy_base.S"
+
+ENTRY(__strcpy_chk_failed)
+ .cfi_startproc
+ .save {r0, lr}
+ .cfi_def_cfa_offset 8
+ .cfi_rel_offset r0, 0
+ .cfi_rel_offset lr, 4
+
ldr r0, error_message
ldr r1, error_code
1:
@@ -169,7 +180,7 @@
error_message:
.word error_string-(1b+4)
.cfi_endproc
-END(__strcpy_chk)
+END(__strcpy_chk_failed)
.data
error_string: