powerpc: Use global register variable in <thread_pointer.h>

A local register variable is merely a compiler hint, and so not
appropriate in this context.  Move the global register variable into
<thread_pointer.h> and include it from <tls.h>, as there can only
be one global definition for one particular register.

Fixes commit 8dbeb0561e
("nptl: Add <thread_pointer.h> for defining __thread_pointer").

Reported-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Reviewed-by: Raphael M Zinsly <rzinsly@linux.ibm.com>
This commit is contained in:
Florian Weimer 2021-12-15 16:06:25 +01:00
parent a6d2f948b7
commit cb976fba4c
2 changed files with 8 additions and 12 deletions

View File

@ -19,15 +19,16 @@
#ifndef _SYS_THREAD_POINTER_H
#define _SYS_THREAD_POINTER_H
#ifdef __powerpc64__
register void *__thread_register asm ("r13");
#else
register void *__thread_register asm ("r2");
#endif
static inline void *
__thread_pointer (void)
{
#ifdef __powerpc64__
register void *__result asm ("r13");
#else
register void *__result asm ("r2");
#endif
return __result;
return __thread_register;
}
#endif /* _SYS_THREAD_POINTER_H */

View File

@ -26,6 +26,7 @@
# include <stddef.h>
# include <stdint.h>
# include <dl-dtv.h>
# include <thread_pointer.h>
#else /* __ASSEMBLER__ */
# include <tcb-offsets.h>
@ -36,16 +37,10 @@
#ifndef __powerpc64__
/* Register r2 (tp) is reserved by the ABI as "thread pointer". */
# define PT_THREAD_POINTER PT_R2
# ifndef __ASSEMBLER__
register void *__thread_register __asm__ ("r2");
# endif
#else /* __powerpc64__ */
/* Register r13 (tp) is reserved by the ABI as "thread pointer". */
# define PT_THREAD_POINTER PT_R13
# ifndef __ASSEMBLER__
register void *__thread_register __asm__ ("r13");
# endif
#endif /* __powerpc64__ */
#ifndef __ASSEMBLER__