mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-06 20:58:33 +01: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
2 changed files with 6 additions and 2 deletions
|
@ -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…
Add table
Reference in a new issue