Merge "Update all debug directives."
diff --git a/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S b/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S
index 08dc78a..4b125c8 100644
--- a/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S
+++ b/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S
@@ -40,14 +40,16 @@
 ENTRY(__strcat_chk)
     .cfi_startproc
     pld     [r0, #0]
+    .save   {r0, lr}
     push    {r0, lr}
     .cfi_def_cfa_offset 8
     .cfi_rel_offset r0, 0
     .cfi_rel_offset lr, 4
+    .save   {r4, r5}
     push    {r4, r5}
     .cfi_adjust_cfa_offset 8
     .cfi_rel_offset r4, 0
-    .cfi_rel_offset r5, 0
+    .cfi_rel_offset r5, 4
 
     mov     lr, r2
 
@@ -185,6 +187,7 @@
     pld     [r1, #64]
     mov     r2, r4
     add     r0, r0, r3
+    .pad    #-8
     pop     {r4, r5}
     .cfi_adjust_cfa_offset -8
     .cfi_restore r4
diff --git a/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S b/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S
index 9fde590..a045816 100644
--- a/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S
+++ b/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S
@@ -39,6 +39,7 @@
 ENTRY(__strcpy_chk)
     .cfi_startproc
     pld     [r0, #0]
+    .save   {r0, lr}
     push    {r0, lr}
     .cfi_def_cfa_offset 8
     .cfi_rel_offset r0, 0
diff --git a/libc/arch-arm/cortex-a15/bionic/memcpy.S b/libc/arch-arm/cortex-a15/bionic/memcpy.S
index 8052d62..16881d4 100644
--- a/libc/arch-arm/cortex-a15/bionic/memcpy.S
+++ b/libc/arch-arm/cortex-a15/bionic/memcpy.S
@@ -74,18 +74,22 @@
 ENTRY(memcpy)
         .cfi_startproc
         pld     [r1, #64]
+        .save   {r0, lr}
         push    {r0, lr}
         .cfi_def_cfa_offset 8
         .cfi_rel_offset r0, 0
         .cfi_rel_offset lr, 4
 
         #include "memcpy_base.S"
+
         .cfi_endproc
 END(memcpy)
 
+        .fnstart
         .cfi_startproc
 __memcpy_chk_fail:
         // Preserve lr for backtrace.
+        .save   {lr}
         push    {lr}
         .cfi_def_cfa_offset 4
         .cfi_rel_offset lr, 0
@@ -100,6 +104,7 @@
 error_message:
         .word   error_string-(1b+8)
         .cfi_endproc
+        .fnend
 
         .data
 error_string:
diff --git a/libc/arch-arm/cortex-a15/bionic/memset.S b/libc/arch-arm/cortex-a15/bionic/memset.S
index 5593be6..b5fc6ba 100644
--- a/libc/arch-arm/cortex-a15/bionic/memset.S
+++ b/libc/arch-arm/cortex-a15/bionic/memset.S
@@ -45,6 +45,7 @@
         bls         .L_done
 
         // Preserve lr for backtrace.
+        .save       {lr}
         push        {lr}
         .cfi_def_cfa_offset 4
         .cfi_rel_offset lr, 0
@@ -73,6 +74,7 @@
 
 ENTRY(memset)
         .cfi_startproc
+        .save       {r0}
         stmfd       sp!, {r0}
         .cfi_def_cfa_offset 4
         .cfi_rel_offset r0, 0
diff --git a/libc/arch-arm/cortex-a15/bionic/strcmp.S b/libc/arch-arm/cortex-a15/bionic/strcmp.S
index 7aff7c4..2719bf7 100644
--- a/libc/arch-arm/cortex-a15/bionic/strcmp.S
+++ b/libc/arch-arm/cortex-a15/bionic/strcmp.S
@@ -122,9 +122,15 @@
 
         .macro  init
         /* Macro to save temporary registers and prepare magic values.  */
+        .save   {r4-r7}
         subs    sp, sp, #16
+        .cfi_def_cfa_offset 16
         strd    r4, r5, [sp, #8]
+        .cfi_rel_offset r4, 0
+        .cfi_rel_offset r5, 4
         strd    r6, r7, [sp]
+        .cfi_rel_offset r6, 8
+        .cfi_rel_offset r7, 12
         mvn     r6, #0  /* all F */
         mov     r7, #0  /* all 0 */
         .endm   /* init */
@@ -165,6 +171,7 @@
 #endif /* not  __ARMEB__ */
         .endm /* setup_return */
 
+        .cfi_startproc
         pld [r0, #0]
         pld [r1, #0]
 
@@ -348,7 +355,13 @@
         /* Restore temporaries early, before computing the return value.  */
         ldrd    r6, r7, [sp]
         ldrd    r4, r5, [sp, #8]
+        .pad    #-16
         adds    sp, sp, #16
+        .cfi_def_cfa_offset 0
+        .cfi_restore r4
+        .cfi_restore r5
+        .cfi_restore r6
+        .cfi_restore r7
 
         /* There is a zero or a different byte between r1 and r2.  */
         /* r0 contains a mask of all-zero bytes in r1.  */
@@ -374,4 +387,5 @@
         it      ls
         sbcls   r0, r0, r0
         bx      lr
+        .cfi_endproc
 END(strcmp)
diff --git a/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S b/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S
index 3f86636..1329c16 100644
--- a/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S
+++ b/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S
@@ -40,10 +40,12 @@
 ENTRY(__strcat_chk)
     .cfi_startproc
     pld     [r0, #0]
+    .save   {r0, lr}
     push    {r0, lr}
     .cfi_def_cfa_offset 8
     .cfi_rel_offset r0, 0
     .cfi_rel_offset lr, 4
+    .save   {r4, r5}
     push    {r4, r5}
     .cfi_adjust_cfa_offset 8
     .cfi_rel_offset r4, 0
@@ -188,6 +190,7 @@
     pld     [r1, #64]
     mov     r2, r4
     add     r0, r0, r3
+    .pad    #-8
     pop     {r4, r5}
     .cfi_adjust_cfa_offset -8
     .cfi_restore r4
diff --git a/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S b/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S
index 787b057..b697c1f 100644
--- a/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S
+++ b/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S
@@ -39,6 +39,7 @@
 ENTRY(__strcpy_chk)
     .cfi_startproc
     pld     [r0, #0]
+    .save   {r0, lr}
     push    {r0, lr}
     .cfi_def_cfa_offset 8
     .cfi_rel_offset r0, 0
diff --git a/libc/arch-arm/cortex-a9/bionic/memcpy.S b/libc/arch-arm/cortex-a9/bionic/memcpy.S
index e7beb25..ab3b0a0 100644
--- a/libc/arch-arm/cortex-a9/bionic/memcpy.S
+++ b/libc/arch-arm/cortex-a9/bionic/memcpy.S
@@ -52,6 +52,7 @@
 ENTRY(memcpy)
         .cfi_startproc
         pld     [r1, #0]
+        .save   {r0, lr}
         stmfd   sp!, {r0, lr}
         .cfi_def_cfa_offset 8
         .cfi_rel_offset r0, 0
diff --git a/libc/arch-arm/cortex-a9/bionic/memcpy_base.S b/libc/arch-arm/cortex-a9/bionic/memcpy_base.S
index 46b5a93..088d29e 100644
--- a/libc/arch-arm/cortex-a9/bionic/memcpy_base.S
+++ b/libc/arch-arm/cortex-a9/bionic/memcpy_base.S
@@ -133,7 +133,14 @@
         bx          lr
 11:
         /* Simple arm-only copy loop to handle aligned copy operations */
-        stmfd       sp!, {r4, r5, r6, r7, r8}
+        .save       {r4-r8}
+        stmfd       sp!, {r4-r8}
+        .cfi_def_cfa_offset 20
+        .cfi_rel_offset r4, 0
+        .cfi_rel_offset r5, 4
+        .cfi_rel_offset r6, 8
+        .cfi_rel_offset r7, 12
+        .cfi_rel_offset r8, 16
         pld         [r1, #(32 * 4)]
 
         /* Check alignment */
diff --git a/libc/arch-arm/cortex-a9/bionic/memset.S b/libc/arch-arm/cortex-a9/bionic/memset.S
index bc25a3e..a7876fb 100644
--- a/libc/arch-arm/cortex-a9/bionic/memset.S
+++ b/libc/arch-arm/cortex-a9/bionic/memset.S
@@ -43,6 +43,7 @@
         bls         .L_done
 
         // Preserve lr for backtrace.
+        .save       {lr}
         push        {lr}
         .cfi_def_cfa_offset 4
         .cfi_rel_offset lr, 0
@@ -77,6 +78,7 @@
         cmp         r2, #132
         bhi         11f
 
+        .save       {r0}
         stmfd       sp!, {r0}
         .cfi_def_cfa_offset 4
         .cfi_rel_offset r0, 0
@@ -117,6 +119,7 @@
          * offset = (4-(src&3))&3 = -src & 3
          */
 
+        .save       {r0, r4-r7, lr}
         stmfd       sp!, {r0, r4-r7, lr}
         .cfi_def_cfa_offset 24
         .cfi_rel_offset r0, 0
diff --git a/libc/arch-arm/cortex-a9/bionic/strcmp.S b/libc/arch-arm/cortex-a9/bionic/strcmp.S
index 9597d0d..a84c047 100644
--- a/libc/arch-arm/cortex-a9/bionic/strcmp.S
+++ b/libc/arch-arm/cortex-a9/bionic/strcmp.S
@@ -122,9 +122,15 @@
 
         .macro  init
         /* Macro to save temporary registers and prepare magic values.  */
+        .save   {r4-r7}
         subs    sp, sp, #16
+        .cfi_def_cfa_offset 16
         strd    r4, r5, [sp, #8]
+        .cfi_rel_offset r4, 0
+        .cfi_rel_offset r5, 4
         strd    r6, r7, [sp]
+        .cfi_rel_offset r6, 8
+        .cfi_rel_offset r7, 12
         mvn     r6, #0  /* all F */
         mov     r7, #0  /* all 0 */
         .endm   /* init */
@@ -165,6 +171,7 @@
 #endif /* not  __ARMEB__ */
         .endm /* setup_return */
 
+        .cfi_startproc
         pld [r0, #0]
         pld [r1, #0]
 
@@ -334,7 +341,13 @@
         /* Restore temporaries early, before computing the return value.  */
         ldrd    r6, r7, [sp]
         ldrd    r4, r5, [sp, #8]
+        .pad    #-16
         adds    sp, sp, #16
+        .cfi_def_cfa_offset 0
+        .cfi_restore r4
+        .cfi_restore r5
+        .cfi_restore r6
+        .cfi_restore r7
 
         /* There is a zero or a different byte between r1 and r2.  */
         /* r0 contains a mask of all-zero bytes in r1.  */
@@ -519,7 +532,13 @@
     /* Restore registers and stack. */
     ldrd    r6, r7, [sp]
     ldrd    r4, r5, [sp, #8]
+    .pad    #-16
     adds    sp, sp, #16
+    .cfi_def_cfa_offset 0
+    .cfi_restore r4
+    .cfi_restore r5
+    .cfi_restore r6
+    .cfi_restore r7
 
 	bx	lr
 
@@ -538,7 +557,14 @@
     /* Restore registers and stack. */
     ldrd    r6, r7, [sp]
     ldrd    r4, r5, [sp, #8]
+    .pad    #-16
     adds    sp, sp, #16
+    .cfi_def_cfa_offset 0
+    .cfi_restore r4
+    .cfi_restore r5
+    .cfi_restore r6
+    .cfi_restore r7
 
 	bx	lr
+    .cfi_endproc
 END(strcmp)
diff --git a/libc/arch-arm/krait/bionic/__strcat_chk.S b/libc/arch-arm/krait/bionic/__strcat_chk.S
index 4516d30..4b125c8 100644
--- a/libc/arch-arm/krait/bionic/__strcat_chk.S
+++ b/libc/arch-arm/krait/bionic/__strcat_chk.S
@@ -40,10 +40,12 @@
 ENTRY(__strcat_chk)
     .cfi_startproc
     pld     [r0, #0]
+    .save   {r0, lr}
     push    {r0, lr}
     .cfi_def_cfa_offset 8
     .cfi_rel_offset r0, 0
     .cfi_rel_offset lr, 4
+    .save   {r4, r5}
     push    {r4, r5}
     .cfi_adjust_cfa_offset 8
     .cfi_rel_offset r4, 0
@@ -185,6 +187,7 @@
     pld     [r1, #64]
     mov     r2, r4
     add     r0, r0, r3
+    .pad    #-8
     pop     {r4, r5}
     .cfi_adjust_cfa_offset -8
     .cfi_restore r4
diff --git a/libc/arch-arm/krait/bionic/__strcpy_chk.S b/libc/arch-arm/krait/bionic/__strcpy_chk.S
index c57268c..d5e1db6 100644
--- a/libc/arch-arm/krait/bionic/__strcpy_chk.S
+++ b/libc/arch-arm/krait/bionic/__strcpy_chk.S
@@ -39,6 +39,7 @@
 ENTRY(__strcpy_chk)
     .cfi_startproc
     pld     [r0, #0]
+    .save   {r0, lr}
     push    {r0, lr}
     .cfi_def_cfa_offset 8
     .cfi_rel_offset r0, 0
diff --git a/libc/arch-arm/krait/bionic/memcpy.S b/libc/arch-arm/krait/bionic/memcpy.S
index 75b2395..3b4fca4 100644
--- a/libc/arch-arm/krait/bionic/memcpy.S
+++ b/libc/arch-arm/krait/bionic/memcpy.S
@@ -55,6 +55,7 @@
 ENTRY(memcpy)
         .cfi_startproc
         pld     [r1, #64]
+        .save   {r0, lr}
         stmfd   sp!, {r0, lr}
         .cfi_def_cfa_offset 8
         .cfi_rel_offset r0, 0
@@ -64,9 +65,11 @@
         .cfi_endproc
 END(memcpy)
 
+        .fnstart
         .cfi_startproc
 __memcpy_chk_fail:
         // Preserve lr for backtrace.
+        .save   {lr}
         push    {lr}
         .cfi_def_cfa_offset 4
         .cfi_rel_offset lr, 0
@@ -81,6 +84,7 @@
 error_message:
         .word   error_string-(1b+4)
         .cfi_endproc
+        .fnend
 
         .data
 error_string:
diff --git a/libc/arch-arm/krait/bionic/memset.S b/libc/arch-arm/krait/bionic/memset.S
index 1566132..005dfd8 100644
--- a/libc/arch-arm/krait/bionic/memset.S
+++ b/libc/arch-arm/krait/bionic/memset.S
@@ -44,6 +44,7 @@
         bls         .L_done
 
         // Preserve lr for backtrace.
+        .save       {lr}
         push        {lr}
         .cfi_def_cfa_offset 4
         .cfi_rel_offset lr, 0
@@ -74,6 +75,7 @@
 /* memset() returns its first argument.  */
 ENTRY(memset)
         .cfi_startproc
+        .save       {r0}
         stmfd       sp!, {r0}
         .cfi_def_cfa_offset 4
         .cfi_rel_offset r0, 0
diff --git a/libc/arch-arm/krait/bionic/strcmp.S b/libc/arch-arm/krait/bionic/strcmp.S
index d614b9d..f26aaf1 100644
--- a/libc/arch-arm/krait/bionic/strcmp.S
+++ b/libc/arch-arm/krait/bionic/strcmp.S
@@ -122,9 +122,15 @@
 
         .macro  init
         /* Macro to save temporary registers and prepare magic values.  */
+        .save   {r4-r7}
         subs    sp, sp, #16
+        .cfi_def_cfa_offset 16
         strd    r4, r5, [sp, #8]
+        .cfi_rel_offset r4, 0
+        .cfi_rel_offset r5, 4
         strd    r6, r7, [sp]
+        .cfi_rel_offset r6, 8
+        .cfi_rel_offset r7, 12
         mvn     r6, #0  /* all F */
         mov     r7, #0  /* all 0 */
         .endm   /* init */
@@ -165,6 +171,7 @@
 #endif /* not  __ARMEB__ */
         .endm /* setup_return */
 
+        .cfi_startproc
         pld [r0, #0]
         pld [r1, #0]
 
@@ -347,7 +354,13 @@
         /* Restore temporaries early, before computing the return value.  */
         ldrd    r6, r7, [sp]
         ldrd    r4, r5, [sp, #8]
+        .pad    #-16
         adds    sp, sp, #16
+        .cfi_def_cfa_offset 0
+        .cfi_restore r4
+        .cfi_restore r5
+        .cfi_restore r6
+        .cfi_restore r7
 
         /* There is a zero or a different byte between r1 and r2.  */
         /* r0 contains a mask of all-zero bytes in r1.  */
@@ -452,7 +465,13 @@
     /* Restore registers and stack. */
     ldrd    r6, r7, [sp]
     ldrd    r4, r5, [sp, #8]
+    .pad    #-16
     adds    sp, sp, #16
+    .cfi_def_cfa_offset 0
+    .cfi_restore r4
+    .cfi_restore r5
+    .cfi_restore r6
+    .cfi_restore r7
 
 	bx	lr
 
@@ -471,7 +490,14 @@
     /* Restore registers and stack. */
     ldrd    r6, r7, [sp]
     ldrd    r4, r5, [sp, #8]
+    .pad    #-16
     adds    sp, sp, #16
+    .cfi_def_cfa_offset 0
+    .cfi_restore r4
+    .cfi_restore r5
+    .cfi_restore r6
+    .cfi_restore r7
 
 	bx	lr
+    .cfi_endproc
 END(strcmp)