patches/uClibc/0.9.32/160-fix-TLS-DTPREL-TPREL-macros.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed Sep 21 22:42:35 2011 +0200 (2011-09-21)
changeset 2677 7df89370f805
permissions -rw-r--r--
kernel/linux: add alternate download locations

Since kernel.org is dead, and there is no announced or known estimated
time or return to normality, it is impossible to download any kernel at
this time.

Add a known-working mirror.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.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
 {