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.
This commit is contained in:
Mao Han 2019-03-11 09:51:14 +08:00
parent 827e30f3a3
commit c4e5f34bf0
4 changed files with 17 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2019-03-11 Mao Han <han_mao@c-sky.com>
* 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.
2019-03-11 Mao Han <han_mao@c-sky.com>
* sysdeps/unix/sysv/linux/csky/sys/procfs.h: Use linux definition

View File

@ -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

View File

@ -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)

View File

@ -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. */