about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
authorMao Han <han_mao@c-sky.com>2019-03-11 09:51:14 +0800
committerMao Han <han_mao@c-sky.com>2019-03-11 09:51:14 +0800
commitc4e5f34bf0d818be747edf9a30e4152953cc6706 (patch)
tree5a949262e0659412ca4398ac4be1af56fe59207b /sysdeps
parent827e30f3a31ee294eb23dc572f8af62158049257 (diff)
downloadglibc-c4e5f34bf0d818be747edf9a30e4152953cc6706.tar.gz
glibc-c4e5f34bf0d818be747edf9a30e4152953cc6706.tar.xz
glibc-c4e5f34bf0d818be747edf9a30e4152953cc6706.zip
C-SKY: mark lr as undefined to stop unwinding
Mark the lr register as undefined at the start of execution, so unwind
will stop at this frame. run-backtrace-*.sh from elfutils testsuite will
fail without this patch.

	* sysdeps/csky/abiv2/start.S: Mark lr as undefined.
	* sysdeps/unix/sysv/linux/csky/abiv2/clone.S: Likewise.
	* sysdeps/unix/sysv/linux/csky/abiv2/setcontext.S: Likewise.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/csky/abiv2/start.S4
-rw-r--r--sysdeps/unix/sysv/linux/csky/abiv2/clone.S7
-rw-r--r--sysdeps/unix/sysv/linux/csky/abiv2/setcontext.S2
3 files changed, 11 insertions, 2 deletions
diff --git a/sysdeps/csky/abiv2/start.S b/sysdeps/csky/abiv2/start.S
index 324ed69d32..b1e61520a8 100644
--- a/sysdeps/csky/abiv2/start.S
+++ b/sysdeps/csky/abiv2/start.S
@@ -46,6 +46,9 @@
 	.type _start,@function;
 	.align 4;
 _start:
+	cfi_startproc
+	.cfi_label .Ldummy
+	cfi_undefined (lr)
 	subi	sp, 8
 	/* Clear the link register since this is the outermost frame.  */
 	movi	lr, 0
@@ -96,6 +99,7 @@ _start:
 	/* Should never get here.  */
 	jsri	abort
 #endif	/* !SHARED */
+	cfi_endproc
 	.size _start,.-_start
 
 
diff --git a/sysdeps/unix/sysv/linux/csky/abiv2/clone.S b/sysdeps/unix/sysv/linux/csky/abiv2/clone.S
index 3e7328a65a..c1352ee4d7 100644
--- a/sysdeps/unix/sysv/linux/csky/abiv2/clone.S
+++ b/sysdeps/unix/sysv/linux/csky/abiv2/clone.S
@@ -54,7 +54,7 @@ ENTRY (__clone)
 	btsti	a0, 31		/* Check if return is less than zero.  */
 	bt	__do_syscall_error
 	cmpnei	a0, 0
-	bf	__child
+	bf	__thread_start
 	rts
 
 __error_arg:
@@ -81,7 +81,9 @@ __do_syscall_error:
 	rts
 PSEUDO_END (__clone)
 
-__child:
+ENTRY (__thread_start)
+	.cfi_label .Ldummy
+	cfi_undefined (lr)
 	ldw	a0, (sp, 4)	/* Restore args from new sp.  */
 	ldw	a1, (sp, 0)	/* Restore function from new sp.  */
 	addi	sp, 8
@@ -90,6 +92,7 @@ __child:
 	/* exit */
 	lrw	r7, __NR_exit
 	trap	0
+END (__thread_start)
 
 libc_hidden_def (__clone)
 weak_alias (__clone, clone)
diff --git a/sysdeps/unix/sysv/linux/csky/abiv2/setcontext.S b/sysdeps/unix/sysv/linux/csky/abiv2/setcontext.S
index 6d3f04f9f0..34de6e3ab4 100644
--- a/sysdeps/unix/sysv/linux/csky/abiv2/setcontext.S
+++ b/sysdeps/unix/sysv/linux/csky/abiv2/setcontext.S
@@ -62,6 +62,8 @@ END (setcontext)
 weak_alias (__setcontext, setcontext)
 
 ENTRY (__startcontext)
+	.cfi_label .Ldummy
+	cfi_undefined (lr)
 	mov	a0, r9
 	cmpnei	r9, 0	/* r9 was set in makecontext.  */
 	bf	1f	/* null, then exit.  */