diff options
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 { |