svn commit: r323466 - head/libexec/rtld-elf/mips

John Baldwin jhb at FreeBSD.org
Mon Sep 11 22:18:02 UTC 2017


Author: jhb
Date: Mon Sep 11 22:18:01 2017
New Revision: 323466
URL: https://svnweb.freebsd.org/changeset/base/323466

Log:
  Add CFI directives for _rtld_bind_start.
  
  This allows debuggers to unwind back into the caller when stopped in the
  runtime linker.
  
  Sponsored by:	DARPA / AFRL

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

Modified: head/libexec/rtld-elf/mips/rtld_start.S
==============================================================================
--- head/libexec/rtld-elf/mips/rtld_start.S	Mon Sep 11 21:49:38 2017	(r323465)
+++ head/libexec/rtld-elf/mips/rtld_start.S	Mon Sep 11 22:18:01 2017	(r323466)
@@ -104,26 +104,39 @@ END(rtld_start)
 	.ent	_rtld_bind_start
 _rtld_bind_start:
 	.frame	sp, XCALLFRAME_SIZ, $15
+	.cfi_startproc simple
+	.cfi_register ra, $15
 	move	v1, gp			/* save old GP */
 #if defined(__mips_o32) || defined(__mips_o64)
 	PTR_ADDU t9, 8			/* modify T9 to point at .cpload */
 #endif
 	SETUP_GP
 	PTR_SUBU sp, XCALLFRAME_SIZ	/* save arguments and sp value in stack */
+	.cfi_def_cfa sp, XCALLFRAME_SIZ
 	SETUP_GP64(XCALLFRAME_GP, _rtld_bind_start)
 	SAVE_GP(XCALLFRAME_GP)
 #if defined(__mips_n32) || defined(__mips_n64)
 	REG_S	a4,  XCALLFRAME_A4(sp)
+	.cfi_rel_offset a4, XCALLFRAME_A4
 	REG_S	a5,  XCALLFRAME_A5(sp)
+	.cfi_rel_offset a5, XCALLFRAME_A5
 	REG_S	a6,  XCALLFRAME_A6(sp)
+	.cfi_rel_offset a6, XCALLFRAME_A6
 	REG_S	a7,  XCALLFRAME_A7(sp)
+	.cfi_rel_offset a7, XCALLFRAME_A7
 #endif
 	REG_S	a0,  XCALLFRAME_A0(sp)
+	.cfi_rel_offset a0, XCALLFRAME_A0
 	REG_S	a1,  XCALLFRAME_A1(sp)
+	.cfi_rel_offset a1, XCALLFRAME_A1
 	REG_S	a2,  XCALLFRAME_A2(sp)
+	.cfi_rel_offset a2, XCALLFRAME_A2
 	REG_S	a3,  XCALLFRAME_A3(sp)
+	.cfi_rel_offset a3, XCALLFRAME_A3
 	REG_S	$15,  XCALLFRAME_RA(sp)	/* ra is in t7/t3 */
+	.cfi_rel_offset ra, XCALLFRAME_RA
 	REG_S	s0,  XCALLFRAME_S0(sp)
+	.cfi_rel_offset s0, XCALLFRAME_S0
 	move	s0, sp
 
 	move	a0, v1			/* old GP */
@@ -147,20 +160,31 @@ _rtld_bind_start:
 
 	move	sp, s0
 	REG_L	ra, XCALLFRAME_RA(sp)
+	.cfi_restore ra
 	REG_L	s0, XCALLFRAME_S0(sp)
+	.cfi_restore s0
 	REG_L	a0, XCALLFRAME_A0(sp)
+	.cfi_restore a0
 	REG_L	a1, XCALLFRAME_A1(sp)
+	.cfi_restore a1
 	REG_L	a2, XCALLFRAME_A2(sp)
+	.cfi_restore a2
 	REG_L	a3, XCALLFRAME_A3(sp)
+	.cfi_restore a3
 #if defined(__mips_n32) || defined(__mips_n64)
 	REG_L	a4, XCALLFRAME_A4(sp)
+	.cfi_restore a4
 	REG_L	a5, XCALLFRAME_A5(sp)
+	.cfi_restore a5
 	REG_L	a6, XCALLFRAME_A6(sp)
+	.cfi_restore a6
 	REG_L	a7, XCALLFRAME_A7(sp)
+	.cfi_restore a7
 #endif
 	RESTORE_GP64
 	PTR_ADDU sp, XCALLFRAME_SIZ
 	move	t9, v0
 	jr	t9
 	nop
+	.cfi_endproc
 END(_rtld_bind_start)


More information about the svn-src-all mailing list