Author: mmel
Date: Tue Feb 27 15:35:11 2018
New Revision: 330073
URL: https://svnweb.freebsd.org/changeset/base/330073

Log:
  Make rtld_bind_start() debugger friendly.
  Save link register and annotate call frame structure so debugger can unwind
  call frame created by rtld_bind_start().
  
  MFC after:    2 weeks

Modified:
  head/libexec/rtld-elf/aarch64/rtld_start.S

Modified: head/libexec/rtld-elf/aarch64/rtld_start.S
==============================================================================
--- head/libexec/rtld-elf/aarch64/rtld_start.S  Tue Feb 27 15:01:17 2018        
(r330072)
+++ head/libexec/rtld-elf/aarch64/rtld_start.S  Tue Feb 27 15:35:11 2018        
(r330073)
@@ -55,7 +55,15 @@ END(.rtld_start)
  * x17 = &_rtld_bind_start
  */
 ENTRY(_rtld_bind_start)
+       .cfi_startproc
        mov     x17, sp
+       
+       /* Save frame pointer and SP */
+       stp     x29, x30, [sp, #-16]!
+       mov     x29, sp
+       .cfi_def_cfa x29, 16
+       .cfi_offset x30, -8
+       .cfi_offset x29, -16
 
        /* Save the arguments */
        stp     x0, x1, [sp, #-16]!
@@ -84,9 +92,6 @@ ENTRY(_rtld_bind_start)
        /* Call into rtld */
        bl      _rtld_bind
 
-       /* Restore the registers saved by the plt code */
-       ldp     xzr, x30, [sp, #(5 * 16 + 4 * 32)]
-
        /* Backup the address to branch to */
        mov     x16, x0
 
@@ -100,11 +105,16 @@ ENTRY(_rtld_bind_start)
        ldp     x4, x5, [sp], #16
        ldp     x2, x3, [sp], #16
        ldp     x0, x1, [sp], #16
-       /* And the part of the stack the plt entry handled */
-       add     sp, sp, #16
 
+       /* Restore frame pointer */
+       ldp     x29, xzr, [sp], #16
+
+        /* Restore link register saved by the plt code */
+       ldp     xzr, x30, [sp], #16
+
        /* Call into the correct function */
        br      x16
+       .cfi_endproc
 END(_rtld_bind_start)
 
 /*
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to