diff options
author | Mao Han <han_mao@c-sky.com> | 2019-03-11 09:51:14 +0800 |
---|---|---|
committer | Mao Han <han_mao@c-sky.com> | 2019-03-11 09:51:14 +0800 |
commit | c4e5f34bf0d818be747edf9a30e4152953cc6706 (patch) | |
tree | 5a949262e0659412ca4398ac4be1af56fe59207b /sysdeps | |
parent | 827e30f3a31ee294eb23dc572f8af62158049257 (diff) | |
download | glibc-c4e5f34bf0d818be747edf9a30e4152953cc6706.zip glibc-c4e5f34bf0d818be747edf9a30e4152953cc6706.tar.gz glibc-c4e5f34bf0d818be747edf9a30e4152953cc6706.tar.bz2 |
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.S | 4 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/csky/abiv2/clone.S | 7 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/csky/abiv2/setcontext.S | 2 |
3 files changed, 11 insertions, 2 deletions
diff --git a/sysdeps/csky/abiv2/start.S b/sysdeps/csky/abiv2/start.S index 324ed69..b1e6152 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 3e7328a..c1352ee 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 6d3f04f..34de6e3 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. */ |