svn commit: r330073 - head/libexec/rtld-elf/aarch64

Michal Meloun mmel at FreeBSD.org
Tue Feb 27 15:35:12 UTC 2018


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)
 
 /*


More information about the svn-src-all mailing list