patches/uClibc/0.9.32/160-fix-TLS-DTPREL-TPREL-macros.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jul 17 17:54:21 2011 +0200 (2011-07-17)
changeset 2888 dd71df95903a
permissions -rw-r--r--
cc/gcc: pass the companion libs prefix to cc_core

In case of canadian-cross, the companion libraries are not the same for
the core cc (they run on 'build') as they are for the final cc (they run
on 'host').

Prepare for this differentiation (coming later), while retaining the
current behavior (to use the same compblibs).

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