author | "Yann E. MORIN" <yann.morin.1998@free.fr> |
Thu Nov 22 19:43:26 2012 +0100 (2012-11-22) | |
changeset 3127 | 2af20cfd210b |
permissions | -rw-r--r-- |
yann@2667 | 1 |
ldso/mips: workaround for missing TLS macros in elfinterpret.c |
yann@2667 | 2 |
|
yann@2667 | 3 |
These macros declarations are missing, so gcc believes the code is calling |
yann@2667 | 4 |
a function, so any later linking will fail. |
yann@2667 | 5 |
|
yann@2667 | 6 |
Work this around by copying the mcaros from: |
yann@2667 | 7 |
libpthread/nptl/sysdeps/mips/dl-tls.h |
yann@2667 | 8 |
|
yann@2667 | 9 |
We can't include the header because of incompatible symbol declarations, |
yann@2667 | 10 |
so we just copy the macros for now. |
yann@2667 | 11 |
|
yann@2667 | 12 |
----> THIS IS A DIRTY HACK! <---- |
yann@2667 | 13 |
|
yann@2667 | 14 |
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> |
yann@2667 | 15 |
|
yann@2667 | 16 |
diff -durN uClibc-0.9.32.orig/ldso/ldso/mips/elfinterp.c uClibc-0.9.32/ldso/ldso/mips/elfinterp.c |
yann@2667 | 17 |
--- uClibc-0.9.32.orig/ldso/ldso/mips/elfinterp.c 2011-06-08 21:35:20.000000000 +0200 |
yann@2667 | 18 |
+++ uClibc-0.9.32/ldso/ldso/mips/elfinterp.c 2011-09-12 14:02:37.553628824 +0200 |
yann@2667 | 19 |
@@ -34,6 +34,21 @@ |
yann@2667 | 20 |
|
yann@2667 | 21 |
#define OFFSET_GP_GOT 0x7ff0 |
yann@2667 | 22 |
|
yann@2667 | 23 |
+/* The thread pointer points 0x7000 past the first static TLS block. */ |
yann@2667 | 24 |
+#define TLS_TP_OFFSET 0x7000 |
yann@2667 | 25 |
+ |
yann@2667 | 26 |
+/* Dynamic thread vector pointers point 0x8000 past the start of each |
yann@2667 | 27 |
+ * TLS block. */ |
yann@2667 | 28 |
+#define TLS_DTV_OFFSET 0x8000 |
yann@2667 | 29 |
+ |
yann@2667 | 30 |
+/* Compute the value for a GOTTPREL reloc. */ |
yann@2667 | 31 |
+#define TLS_TPREL_VALUE(sym_map, sym_val) \ |
yann@2667 | 32 |
+ ((sym_map)->l_tls_offset + sym_val - TLS_TP_OFFSET) |
yann@2667 | 33 |
+ |
yann@2667 | 34 |
+/* Compute the value for a DTPREL reloc. */ |
yann@2667 | 35 |
+#define TLS_DTPREL_VALUE(sym_val) \ |
yann@2667 | 36 |
+ (sym_val - TLS_DTV_OFFSET) |
yann@2667 | 37 |
+ |
yann@2667 | 38 |
unsigned long __dl_runtime_resolve(unsigned long sym_index, |
yann@2667 | 39 |
unsigned long old_gpreg) |
yann@2667 | 40 |
{ |