diff options
author | marcel <marcel@FreeBSD.org> | 2003-08-06 00:17:15 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2003-08-06 00:17:15 +0000 |
commit | e45924adacc537bd33ecd167bd88c4ab9ace9097 (patch) | |
tree | f98b3f77910c133ef9a52cd00265e961cd4f56a9 /lib | |
parent | aff30d7ad67a5bdb88569158fd91808927657b89 (diff) | |
download | FreeBSD-src-e45924adacc537bd33ecd167bd88c4ab9ace9097.zip FreeBSD-src-e45924adacc537bd33ecd167bd88c4ab9ace9097.tar.gz |
Define the static TLS as an array of long double. This will guarantee
that the TLS is 16-byte aligned, as well as guarantee that the thread
pointer is 16-byte aligned as it points to struct ia64_tp. Likewise,
struct tcb and struct ksd are also guaranteed to be 16-byte aligned
(if they weren't already).
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libkse/arch/ia64/include/pthread_md.h | 8 | ||||
-rw-r--r-- | lib/libpthread/arch/ia64/include/pthread_md.h | 8 |
2 files changed, 12 insertions, 4 deletions
diff --git a/lib/libkse/arch/ia64/include/pthread_md.h b/lib/libkse/arch/ia64/include/pthread_md.h index f7076d0..7b5c221 100644 --- a/lib/libkse/arch/ia64/include/pthread_md.h +++ b/lib/libkse/arch/ia64/include/pthread_md.h @@ -45,12 +45,16 @@ struct tcb; struct tdv; /* We don't know what this is yet? */ /* - * tp points to one of these. + * tp points to one of these. We define the static TLS as an array + * of long double to enforce 16-byte alignment of the TLS memory, + * struct ia64_tp, struct tcb and also struct kcb. Both static and + * dynamic allocation of any of these structures will result in a + * valid, well-aligned thread pointer. */ struct ia64_tp { struct tdv *tp_tdv; /* dynamic TLS */ struct tcb *tp_self; - char tp_tls[0]; /* static TLS */ + long double tp_tls[0]; /* static TLS */ }; struct tcb { diff --git a/lib/libpthread/arch/ia64/include/pthread_md.h b/lib/libpthread/arch/ia64/include/pthread_md.h index f7076d0..7b5c221 100644 --- a/lib/libpthread/arch/ia64/include/pthread_md.h +++ b/lib/libpthread/arch/ia64/include/pthread_md.h @@ -45,12 +45,16 @@ struct tcb; struct tdv; /* We don't know what this is yet? */ /* - * tp points to one of these. + * tp points to one of these. We define the static TLS as an array + * of long double to enforce 16-byte alignment of the TLS memory, + * struct ia64_tp, struct tcb and also struct kcb. Both static and + * dynamic allocation of any of these structures will result in a + * valid, well-aligned thread pointer. */ struct ia64_tp { struct tdv *tp_tdv; /* dynamic TLS */ struct tcb *tp_self; - char tp_tls[0]; /* static TLS */ + long double tp_tls[0]; /* static TLS */ }; struct tcb { |