patches/uClibc/0.9.32.1/100-fix-TLS-DTPREL-TPREL-macros.patch
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Tue Jul 31 22:27:29 2012 +0200 (2012-07-31)
changeset 3018 7776e8369284
parent 2667 3e81e43c0e14
permissions -rw-r--r--
complibs/cloog: create missing m4 dir

Because we now patch configure.in and configure, the Makefile quicks
in a re-build rule as the source files are now more recent than the
bundled generated files, and that fails because the m4 directory
is missing, although on some systems where aclocal is not installed,
the re-build rule does nothing (except a warning).

Always create tht directory.

Reported-by: Per Arnold Blaasmo <per-arnold.blaasmo@atmel.com>
[Also thanks to Thomas De Schampheleire <patrickdepinguin@gmail.com>
for some digging works on this issue]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
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
 {