Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Apr 2018 02:30:01 +0000 (UTC)
From:      Michal Meloun <mmel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r331973 - stable/11/libexec/rtld-elf/aarch64
Message-ID:  <201804040230.w342U1RD063473@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mmel
Date: Wed Apr  4 02:30:00 2018
New Revision: 331973
URL: https://svnweb.freebsd.org/changeset/base/331973

Log:
  MFC r330073:
  
    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().

Modified:
  stable/11/libexec/rtld-elf/aarch64/rtld_start.S
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/libexec/rtld-elf/aarch64/rtld_start.S
==============================================================================
--- stable/11/libexec/rtld-elf/aarch64/rtld_start.S	Wed Apr  4 02:22:56 2018	(r331972)
+++ stable/11/libexec/rtld-elf/aarch64/rtld_start.S	Wed Apr  4 02:30:00 2018	(r331973)
@@ -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)
 
 /*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201804040230.w342U1RD063473>