From c4e5f34bf0d818be747edf9a30e4152953cc6706 Mon Sep 17 00:00:00 2001 From: Mao Han Date: Mon, 11 Mar 2019 09:51:14 +0800 Subject: 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. --- sysdeps/csky/abiv2/start.S | 4 ++++ sysdeps/unix/sysv/linux/csky/abiv2/clone.S | 7 +++++-- sysdeps/unix/sysv/linux/csky/abiv2/setcontext.S | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) (limited to 'sysdeps') 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. */ -- cgit 1.4.1