summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/libkse/arch/ia64/include/pthread_md.h8
-rw-r--r--lib/libpthread/arch/ia64/include/pthread_md.h8
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 {
OpenPOWER on IntegriCloud