mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
nptl: x86_64: Use same code for CURRENT_STACK_FRAME and stackinfo_get_sp
Cherry-picked by scw@google.com from8cd559cf5a
with local modifications (different file path and not use macros introduced in01bd62517c
). This fixes UB and code removal when building with clang. It avoids the possible warning of uninitialized 'frame' variable when building with clang: ../sysdeps/nptl/jmp-unwind.c:27:42: error: variable 'frame' is uninitialized when used here [-Werror,-Wuninitialized] __pthread_cleanup_upto (env->__jmpbuf, CURRENT_STACK_FRAME); The resulting code is similar to CURRENT_STACK_FRAME. Checked on x86_64-linux-gnu.
This commit is contained in:
parent
82dcfc6d7b
commit
04a99db8c7
@ -41,4 +41,6 @@
|
||||
|
||||
/* Location of current stack frame. The frame pointer is not usable. */
|
||||
#define CURRENT_STACK_FRAME \
|
||||
({ register char *frame __asm__("rsp"); frame; })
|
||||
({ register void * p__ __asm__("rsp"); \
|
||||
asm volatile("" : "=r" (p__)); \
|
||||
p__; })
|
||||
|
@ -34,7 +34,9 @@
|
||||
for which they need to act as barriers as well, hence the additional
|
||||
(unnecessary) parameters. */
|
||||
#define stackinfo_get_sp() \
|
||||
({ void *p__; asm volatile ("mov %%" RSP_LP ", %0" : "=r" (p__)); p__; })
|
||||
({ register void * p__ __asm__(RSP_LP); \
|
||||
asm volatile("" : "=r" (p__)); \
|
||||
p__; })
|
||||
#define stackinfo_sub_sp(ptr) \
|
||||
({ ptrdiff_t d__; \
|
||||
asm volatile ("sub %%" RSP_LP " , %0" : "=r" (d__) : "0" (ptr)); \
|
||||
|
Loading…
Reference in New Issue
Block a user