1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-09-02 16:01:20 +03:00

Remove second argument from TLS_INIT_TP macro

This commit is contained in:
Andreas Schwab
2014-05-13 16:40:41 +02:00
parent 36ffe7398a
commit 774f928582
21 changed files with 74 additions and 77 deletions

View File

@@ -90,7 +90,7 @@ typedef struct
/* Code to initially initialize the thread pointer. This might need
special attention since 'errno' is not yet available and if the
operation can cause a failure 'errno' must not be touched. */
# define TLS_INIT_TP(tcbp, secondcall) \
# define TLS_INIT_TP(tcbp) \
({ __asm __volatile ("msr tpidr_el0, %0" : : "r" (tcbp)); NULL; })
/* Return the address of the dtv for the current thread. */

View File

@@ -84,7 +84,7 @@ typedef struct
/* Code to initially initialize the thread pointer. This might need
special attention since 'errno' is not yet available and if the
operation can cause a failure 'errno' must not be touched. */
# define TLS_INIT_TP(tcbp, secondcall) \
# define TLS_INIT_TP(tcbp) \
(__builtin_set_thread_pointer ((void *)(tcbp)), NULL)
/* Return the address of the dtv for the current thread. */

View File

@@ -91,7 +91,7 @@ typedef struct
/* Code to initially initialize the thread pointer. This might need
special attention since 'errno' is not yet available and if the
operation can cause a failure 'errno' must not be touched. */
# define TLS_INIT_TP(tcbp, secondcall) \
# define TLS_INIT_TP(tcbp) \
({ INTERNAL_SYSCALL_DECL (err); \
long result_var; \
result_var = INTERNAL_SYSCALL_ARM (set_tls, err, 1, (tcbp)); \

View File

@@ -59,12 +59,11 @@
use the value.
TLS_INIT_TP(tcb, firstcall)
TLS_INIT_TP(tcb)
This macro must initialize the thread pointer to enable normal TLS
operation. The first parameter is a pointer to the thread control
block. The second parameter specifies whether this is the first
call for the TCB. ld.so calls this macro more than once.
operation. The parameter is a pointer to the thread control block.
ld.so calls this macro once.
THREAD_DTV()

View File

@@ -95,7 +95,7 @@ typedef struct
/* Code to initially initialize the thread pointer. This might need
special attention since 'errno' is not yet available and if the
operation can cause a failure 'errno' must not be touched. */
# define TLS_INIT_TP(tcbp, secondcall) \
# define TLS_INIT_TP(tcbp) \
({ __set_cr27(tcbp); NULL; })
/* Return the address of the dtv for the current thread. */

View File

@@ -118,7 +118,7 @@ register struct pthread *__thread_self __asm__("r13");
/* Code to initially initialize the thread pointer. This might need
special attention since 'errno' is not yet available and if the
operation can cause a failure 'errno' must not be touched. */
# define TLS_INIT_TP(thrdescr, secondcall) \
# define TLS_INIT_TP(thrdescr) \
(__thread_self = (thrdescr), INIT_SYSINFO, NULL)
/* Return the address of the dtv for the current thread. */

View File

@@ -103,7 +103,7 @@ typedef struct
/* Code to initially initialize the thread pointer. This might need
special attention since 'errno' is not yet available and if the
operation can cause a failure 'errno' must not be touched. */
# define TLS_INIT_TP(tcbp, secondcall) \
# define TLS_INIT_TP(tcbp) \
({ \
INTERNAL_SYSCALL_DECL (err); \
int _sys_result; \

View File

@@ -90,69 +90,46 @@ typedef struct
static inline const char * __attribute__ ((unused))
_hurd_tls_init (tcbhead_t *tcb, int secondcall)
_hurd_tls_init (tcbhead_t *tcb)
{
HURD_TLS_DESC_DECL (desc, tcb);
if (!secondcall)
/* This field is used by TLS accesses to get our "thread pointer"
from the TLS point of view. */
tcb->tcb = tcb;
/* Cache our thread port. */
tcb->self = __mach_thread_self ();
/* Get the first available selector. */
int sel = -1;
error_t err = __i386_set_gdt (tcb->self, &sel, desc);
if (err == MIG_BAD_ID)
{
/* This field is used by TLS accesses to get our "thread pointer"
from the TLS point of view. */
tcb->tcb = tcb;
/* Cache our thread port. */
tcb->self = __mach_thread_self ();
/* Get the first available selector. */
int sel = -1;
error_t err = __i386_set_gdt (tcb->self, &sel, desc);
if (err == MIG_BAD_ID)
{
/* Old kernel, use a per-thread LDT. */
sel = 0x27;
err = __i386_set_ldt (tcb->self, sel, &desc, 1);
assert_perror (err);
if (err)
return "i386_set_ldt failed";
}
else if (err)
{
assert_perror (err); /* Separate from above with different line #. */
return "i386_set_gdt failed";
}
/* Now install the new selector. */
asm volatile ("mov %w0, %%gs" :: "q" (sel));
/* Old kernel, use a per-thread LDT. */
sel = 0x27;
err = __i386_set_ldt (tcb->self, sel, &desc, 1);
assert_perror (err);
if (err)
return "i386_set_ldt failed";
}
else
else if (err)
{
/* Fetch the selector set by the first call. */
int sel;
asm ("mov %%gs, %w0" : "=q" (sel) : "0" (0));
if (__builtin_expect (sel, 0x50) & 4) /* LDT selector */
{
error_t err = __i386_set_ldt (tcb->self, sel, &desc, 1);
assert_perror (err);
if (err)
return "i386_set_ldt failed";
}
else
{
error_t err = __i386_set_gdt (tcb->self, &sel, desc);
assert_perror (err);
if (err)
return "i386_set_gdt failed";
}
assert_perror (err); /* Separate from above with different line #. */
return "i386_set_gdt failed";
}
/* Now install the new selector. */
asm volatile ("mov %w0, %%gs" :: "q" (sel));
return 0;
}
/* Code to initially initialize the thread pointer. This might need
special attention since 'errno' is not yet available and if the
operation can cause a failure 'errno' must not be touched. */
# define TLS_INIT_TP(descr, secondcall) \
_hurd_tls_init ((tcbhead_t *) (descr), (secondcall))
# define TLS_INIT_TP(descr) \
_hurd_tls_init ((tcbhead_t *) (descr))
/* Return the TCB address of the current thread. */
# define THREAD_SELF \

View File

@@ -98,7 +98,7 @@ static inline void *__microblaze_get_thread_area (void)
/* Code to initially initialize the thread pointer.
r21 is reserved for thread pointer. */
# define TLS_INIT_TP(tcbp, secondcall) \
# define TLS_INIT_TP(tcbp) \
({ __asm __volatile ("or r21,r0,%0" : : "r" ((void *)tcbp)); 0; })
/* Return the address of the dtv for the current thread. */

View File

@@ -118,7 +118,7 @@ typedef struct
/* Code to initially initialize the thread pointer. This might need
special attention since 'errno' is not yet available and if the
operation can cause a failure 'errno' must not be touched. */
# define TLS_INIT_TP(tcbp, secondcall) \
# define TLS_INIT_TP(tcbp) \
({ INTERNAL_SYSCALL_DECL (err); \
long result_var; \
result_var = INTERNAL_SYSCALL (set_thread_area, err, 1, \

View File

@@ -106,7 +106,7 @@ register void *__thread_pointer asm ("tp");
# define GET_DTV(tcbp) (((tcbhead_t *) (tcbp))[-1].dtv)
/* Code to initially initialize the thread pointer (tp). */
# define TLS_INIT_TP(tcbp, secondcall) \
# define TLS_INIT_TP(tcbp) \
(__thread_pointer = (char *)(tcbp) + TLS_TCB_OFFSET, NULL)
/* Return the address of the dtv for the current thread. */