From 119fb38770e1ff1f070b5917d59e76f77e57c41d Mon Sep 17 00:00:00 2001 From: Marcel Moolenaar Date: Wed, 6 Aug 2003 00:17:15 +0000 Subject: [PATCH] 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). --- lib/libkse/arch/ia64/include/pthread_md.h | 8 ++++++-- 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 f7076d0a65d..7b5c2219428 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 f7076d0a65d..7b5c2219428 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 {