nptl: x86_64: Use same code for CURRENT_STACK_FRAME and stackinfo_get_sp

Cherry-picked by scw@google.com from 8cd559cf5a
with local modifications (different file path and not use macros introduced in
01bd62517c). 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:
Adhemerval Zanella 2022-03-08 17:31:08 -03:00 committed by Shu-Chun Weng
parent 82dcfc6d7b
commit 04a99db8c7
2 changed files with 6 additions and 2 deletions

View File

@ -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__; })

View File

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