diff options
author | Ulrich Drepper <drepper@redhat.com> | 2005-07-07 06:10:18 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2005-07-07 06:10:18 +0000 |
commit | 253eb3a0acfae12863c40ef6c6b0128d5b0dc02b (patch) | |
tree | 518cbd1b8d05996f4eb31a0cfbbf8789844fcb69 /nptl/sysdeps | |
parent | 587d6ddc60bbdf561be3f217280220af9102c3e8 (diff) | |
download | glibc-253eb3a0acfae12863c40ef6c6b0128d5b0dc02b.tar glibc-253eb3a0acfae12863c40ef6c6b0128d5b0dc02b.tar.gz glibc-253eb3a0acfae12863c40ef6c6b0128d5b0dc02b.tar.bz2 glibc-253eb3a0acfae12863c40ef6c6b0128d5b0dc02b.zip |
* elf/stackguard-macros.h (STACK_CHK_GUARD): Fix s390/s390x definition.
Reported by Ulrich Weigand <uweigand@de.ibm.com>.
* elf/stackguard-macros.h (STACK_CHK_GUARD): Add ia64 definition.
Diffstat (limited to 'nptl/sysdeps')
-rw-r--r-- | nptl/sysdeps/ia64/tcb-offsets.sym | 6 | ||||
-rw-r--r-- | nptl/sysdeps/ia64/tls.h | 26 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/ia64/createthread.c | 4 |
3 files changed, 26 insertions, 10 deletions
diff --git a/nptl/sysdeps/ia64/tcb-offsets.sym b/nptl/sysdeps/ia64/tcb-offsets.sym index f5108e0a9e..3bc367082d 100644 --- a/nptl/sysdeps/ia64/tcb-offsets.sym +++ b/nptl/sysdeps/ia64/tcb-offsets.sym @@ -1,7 +1,7 @@ #include <sysdep.h> #include <tls.h> -PID offsetof (struct pthread, pid) - sizeof (struct pthread) -TID offsetof (struct pthread, tid) - sizeof (struct pthread) -MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) - sizeof (struct pthread) +PID offsetof (struct pthread, pid) - TLS_PRE_TCB_SIZE +TID offsetof (struct pthread, tid) - TLS_PRE_TCB_SIZE +MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) - TLS_PRE_TCB_SIZE SYSINFO_OFFSET offsetof (tcbhead_t, private) diff --git a/nptl/sysdeps/ia64/tls.h b/nptl/sysdeps/ia64/tls.h index a435f966ca..e3ad0681d6 100644 --- a/nptl/sysdeps/ia64/tls.h +++ b/nptl/sysdeps/ia64/tls.h @@ -80,8 +80,15 @@ register struct pthread *__thread_self __asm__("r13"); /* This is the size of the TCB. */ # define TLS_TCB_SIZE sizeof (tcbhead_t) -/* This is the size we need before TCB. */ -# define TLS_PRE_TCB_SIZE sizeof (struct pthread) +/* This is the size we need before TCB. + If there is not any room for uintptr_t stack_guard in struct pthread's + final padding, we need to put struct pthread 16 byte slower. */ +# define TLS_PRE_TCB_SIZE \ + (sizeof (struct pthread) \ + + (PTHREAD_STRUCT_END_PADDING < sizeof (uintptr_t) \ + ? ((sizeof (uintptr_t) + __alignof__ (struct pthread) - 1)\ + & ~(__alignof__ (struct pthread) - 1)) \ + : 0)) /* Alignment requirements for the TCB. */ # define TLS_TCB_ALIGN __alignof__ (struct pthread) @@ -106,7 +113,8 @@ register struct pthread *__thread_self __asm__("r13"); (((tcbhead_t *) (descr))->dtv) #define THREAD_SELF_SYSINFO (((tcbhead_t *) __thread_self)->private) -#define THREAD_SYSINFO(pd) (((tcbhead_t *) ((pd) + 1))->private) +#define THREAD_SYSINFO(pd) \ + (((tcbhead_t *) ((char *) (pd) + TLS_PRE_TCB_SIZE))->private) #if defined NEED_DL_SYSINFO # define INIT_SYSINFO THREAD_SELF_SYSINFO = (void *) GLRO(dl_sysinfo) @@ -125,10 +133,11 @@ register struct pthread *__thread_self __asm__("r13"); (((tcbhead_t *)__thread_self)->dtv) /* Return the thread descriptor for the current thread. */ -# define THREAD_SELF (__thread_self - 1) +# define THREAD_SELF \ + ((struct pthread *) ((char *) __thread_self - TLS_PRE_TCB_SIZE)) /* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF REGISTER (64, 64, 13 * 8, -sizeof (struct pthread)) +# define DB_THREAD_SELF REGISTER (64, 64, 13 * 8, -TLS_PRE_TCB_SIZE) /* Access to data in the thread descriptor is easy. */ #define THREAD_GETMEM(descr, member) \ @@ -140,6 +149,13 @@ register struct pthread *__thread_self __asm__("r13"); #define THREAD_SETMEM_NC(descr, member, idx, value) \ descr->member[idx] = (value) +/* Set the stack guard field in TCB head. */ +#define THREAD_SET_STACK_GUARD(value) \ + (((uintptr_t *) __thread_self)[-1] = (value)) +#define THREAD_COPY_STACK_GUARD(descr) \ + (((uintptr_t *) ((char *) (descr) + TLS_PRE_TCB_SIZE))[-1] \ + = ((uintptr_t *) __thread_self)[-1]) + #endif /* __ASSEMBLER__ */ #endif /* tls.h */ diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/createthread.c b/nptl/sysdeps/unix/sysv/linux/ia64/createthread.c index 8ac06e8101..cd5f8137d5 100644 --- a/nptl/sysdeps/unix/sysv/linux/ia64/createthread.c +++ b/nptl/sysdeps/unix/sysv/linux/ia64/createthread.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>. @@ -18,7 +18,7 @@ 02111-1307 USA. */ /* Value passed to 'clone' for initialization of the thread register. */ -#define TLS_VALUE (pd + 1) +#define TLS_VALUE ((char *) pd + TLS_PRE_TCB_SIZE) #define ARCH_CLONE __clone2 |