svn commit: r203330 - in projects/ppc64: lib/libc/powerpc64/gen
libexec/rtld-elf/powerpc64 sys/sys
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Sun Jan 31 23:39:56 UTC 2010
Author: nwhitehorn
Date: Sun Jan 31 23:39:55 2010
New Revision: 203330
URL: http://svn.freebsd.org/changeset/base/203330
Log:
More hacking at RTLD. TLS is still broken, among other (unknown) things,
but RTLD is making its first halting steps toward functionality. Very
simple programs like /bin/echo now work.
Modified:
projects/ppc64/lib/libc/powerpc64/gen/_set_tp.c
projects/ppc64/lib/libc/powerpc64/gen/_setjmp.S
projects/ppc64/lib/libc/powerpc64/gen/setjmp.S
projects/ppc64/lib/libc/powerpc64/gen/sigsetjmp.S
projects/ppc64/libexec/rtld-elf/powerpc64/reloc.c
projects/ppc64/libexec/rtld-elf/powerpc64/rtld_machdep.h
projects/ppc64/libexec/rtld-elf/powerpc64/rtld_start.S
projects/ppc64/sys/sys/elf_common.h
Modified: projects/ppc64/lib/libc/powerpc64/gen/_set_tp.c
==============================================================================
--- projects/ppc64/lib/libc/powerpc64/gen/_set_tp.c Sun Jan 31 23:16:10 2010 (r203329)
+++ projects/ppc64/lib/libc/powerpc64/gen/_set_tp.c Sun Jan 31 23:39:55 2010 (r203330)
@@ -29,7 +29,7 @@
void
_set_tp(void *tpval)
{
- register void *tp __asm__("r2");
+ register void *tp __asm__("r13");
- __asm __volatile("mr %0,%1" : "=r"(tp) : "r"((char*)tpval + 0x7008));
+ __asm __volatile("mr %0,%1" : "=r"(tp) : "r"((char*)tpval + 0x7016));
}
Modified: projects/ppc64/lib/libc/powerpc64/gen/_setjmp.S
==============================================================================
--- projects/ppc64/lib/libc/powerpc64/gen/_setjmp.S Sun Jan 31 23:16:10 2010 (r203329)
+++ projects/ppc64/lib/libc/powerpc64/gen/_setjmp.S Sun Jan 31 23:39:55 2010 (r203330)
@@ -64,20 +64,20 @@ ENTRY(_setjmp)
std %r15,40 + 6*8(%r3)
std %r16,40 + 7*8(%r3)
std %r17,40 + 8*8(%r3)
- std %r18,40 + 10*8(%r3)
- std %r19,40 + 11*8(%r3)
- std %r20,40 + 12*8(%r3)
- std %r21,40 + 13*8(%r3)
- std %r22,40 + 14*8(%r3)
- std %r23,40 + 15*8(%r3)
- std %r24,40 + 16*8(%r3)
- std %r25,40 + 17*8(%r3)
- std %r26,40 + 18*8(%r3)
- std %r27,40 + 19*8(%r3)
- std %r28,40 + 20*8(%r3)
- std %r29,40 + 21*8(%r3)
- std %r30,40 + 22*8(%r3)
- std %r31,40 + 23*8(%r3)
+ std %r18,40 + 9*8(%r3)
+ std %r19,40 + 10*8(%r3)
+ std %r20,40 + 11*8(%r3)
+ std %r21,40 + 12*8(%r3)
+ std %r22,40 + 13*8(%r3)
+ std %r23,40 + 14*8(%r3)
+ std %r24,40 + 15*8(%r3)
+ std %r25,40 + 16*8(%r3)
+ std %r26,40 + 17*8(%r3)
+ std %r27,40 + 18*8(%r3)
+ std %r28,40 + 19*8(%r3)
+ std %r29,40 + 20*8(%r3)
+ std %r30,40 + 21*8(%r3)
+ std %r31,40 + 22*8(%r3)
li %r3,0
blr
@@ -91,20 +91,20 @@ ENTRY(_longjmp)
ld %r15,40 + 6*8(%r3)
ld %r16,40 + 7*8(%r3)
ld %r17,40 + 8*8(%r3)
- ld %r18,40 + 10*8(%r3)
- ld %r19,40 + 11*8(%r3)
- ld %r20,40 + 12*8(%r3)
- ld %r21,40 + 13*8(%r3)
- ld %r22,40 + 14*8(%r3)
- ld %r23,40 + 15*8(%r3)
- ld %r24,40 + 16*8(%r3)
- ld %r25,40 + 17*8(%r3)
- ld %r26,40 + 18*8(%r3)
- ld %r27,40 + 19*8(%r3)
- ld %r28,40 + 20*8(%r3)
- ld %r29,40 + 21*8(%r3)
- ld %r30,40 + 22*8(%r3)
- ld %r31,40 + 23*8(%r3)
+ ld %r18,40 + 9*8(%r3)
+ ld %r19,40 + 10*8(%r3)
+ ld %r20,40 + 11*8(%r3)
+ ld %r21,40 + 12*8(%r3)
+ ld %r22,40 + 13*8(%r3)
+ ld %r23,40 + 14*8(%r3)
+ ld %r24,40 + 15*8(%r3)
+ ld %r25,40 + 16*8(%r3)
+ ld %r26,40 + 17*8(%r3)
+ ld %r27,40 + 18*8(%r3)
+ ld %r28,40 + 19*8(%r3)
+ ld %r29,40 + 20*8(%r3)
+ ld %r30,40 + 21*8(%r3)
+ ld %r31,40 + 22*8(%r3)
mtlr %r11
mtcr %r12
Modified: projects/ppc64/lib/libc/powerpc64/gen/setjmp.S
==============================================================================
--- projects/ppc64/lib/libc/powerpc64/gen/setjmp.S Sun Jan 31 23:16:10 2010 (r203329)
+++ projects/ppc64/lib/libc/powerpc64/gen/setjmp.S Sun Jan 31 23:39:55 2010 (r203330)
@@ -75,20 +75,20 @@ ENTRY(setjmp)
std %r15,40 + 6*8(%r6)
std %r16,40 + 7*8(%r6)
std %r17,40 + 8*8(%r6)
- std %r18,40 + 10*8(%r6)
- std %r19,40 + 11*8(%r6)
- std %r20,40 + 12*8(%r6)
- std %r21,40 + 13*8(%r6)
- std %r22,40 + 14*8(%r6)
- std %r23,40 + 15*8(%r6)
- std %r24,40 + 16*8(%r6)
- std %r25,40 + 17*8(%r6)
- std %r26,40 + 18*8(%r6)
- std %r27,40 + 19*8(%r6)
- std %r28,40 + 20*8(%r6)
- std %r29,40 + 21*8(%r6)
- std %r30,40 + 22*8(%r6)
- std %r31,40 + 23*8(%r6)
+ std %r18,40 + 9*8(%r6)
+ std %r19,40 + 10*8(%r6)
+ std %r20,40 + 11*8(%r6)
+ std %r21,40 + 12*8(%r6)
+ std %r22,40 + 13*8(%r6)
+ std %r23,40 + 14*8(%r6)
+ std %r24,40 + 15*8(%r6)
+ std %r25,40 + 16*8(%r6)
+ std %r26,40 + 17*8(%r6)
+ std %r27,40 + 18*8(%r6)
+ std %r28,40 + 19*8(%r6)
+ std %r29,40 + 20*8(%r6)
+ std %r30,40 + 21*8(%r6)
+ std %r31,40 + 22*8(%r6)
li %r3,0 /* return (0) */
blr
@@ -107,20 +107,20 @@ ENTRY(__longjmp)
ld %r15,40 + 6*8(%r3)
ld %r16,40 + 7*8(%r3)
ld %r17,40 + 8*8(%r3)
- ld %r18,40 + 10*8(%r3)
- ld %r19,40 + 11*8(%r3)
- ld %r20,40 + 12*8(%r3)
- ld %r21,40 + 13*8(%r3)
- ld %r22,40 + 14*8(%r3)
- ld %r23,40 + 15*8(%r3)
- ld %r24,40 + 16*8(%r3)
- ld %r25,40 + 17*8(%r3)
- ld %r26,40 + 18*8(%r3)
- ld %r27,40 + 19*8(%r3)
- ld %r28,40 + 20*8(%r3)
- ld %r29,40 + 21*8(%r3)
- ld %r30,40 + 22*8(%r3)
- ld %r31,40 + 23*8(%r3)
+ ld %r18,40 + 9*8(%r3)
+ ld %r19,40 + 10*8(%r3)
+ ld %r20,40 + 11*8(%r3)
+ ld %r21,40 + 12*8(%r3)
+ ld %r22,40 + 13*8(%r3)
+ ld %r23,40 + 14*8(%r3)
+ ld %r24,40 + 15*8(%r3)
+ ld %r25,40 + 16*8(%r3)
+ ld %r26,40 + 17*8(%r3)
+ ld %r27,40 + 18*8(%r3)
+ ld %r28,40 + 19*8(%r3)
+ ld %r29,40 + 20*8(%r3)
+ ld %r30,40 + 21*8(%r3)
+ ld %r31,40 + 22*8(%r3)
mr %r6,%r4 /* save val param */
mtlr %r11 /* r11 -> link reg */
mtcr %r12 /* r12 -> condition reg */
Modified: projects/ppc64/lib/libc/powerpc64/gen/sigsetjmp.S
==============================================================================
--- projects/ppc64/lib/libc/powerpc64/gen/sigsetjmp.S Sun Jan 31 23:16:10 2010 (r203329)
+++ projects/ppc64/lib/libc/powerpc64/gen/sigsetjmp.S Sun Jan 31 23:39:55 2010 (r203330)
@@ -80,20 +80,20 @@ ENTRY(sigsetjmp)
std %r15,40 + 6*8(%r6)
std %r16,40 + 7*8(%r6)
std %r17,40 + 8*8(%r6)
- std %r18,40 + 10*8(%r6)
- std %r19,40 + 11*8(%r6)
- std %r20,40 + 12*8(%r6)
- std %r21,40 + 13*8(%r6)
- std %r22,40 + 14*8(%r6)
- std %r23,40 + 15*8(%r6)
- std %r24,40 + 16*8(%r6)
- std %r25,40 + 17*8(%r6)
- std %r26,40 + 18*8(%r6)
- std %r27,40 + 19*8(%r6)
- std %r28,40 + 20*8(%r6)
- std %r29,40 + 21*8(%r6)
- std %r30,40 + 22*8(%r6)
- std %r31,40 + 23*8(%r6)
+ std %r18,40 + 9*8(%r6)
+ std %r19,40 + 10*8(%r6)
+ std %r20,40 + 11*8(%r6)
+ std %r21,40 + 12*8(%r6)
+ std %r22,40 + 13*8(%r6)
+ std %r23,40 + 14*8(%r6)
+ std %r24,40 + 15*8(%r6)
+ std %r25,40 + 16*8(%r6)
+ std %r26,40 + 17*8(%r6)
+ std %r27,40 + 18*8(%r6)
+ std %r28,40 + 19*8(%r6)
+ std %r29,40 + 20*8(%r6)
+ std %r30,40 + 21*8(%r6)
+ std %r31,40 + 22*8(%r6)
li %r3,0
blr
@@ -108,20 +108,20 @@ ENTRY(siglongjmp)
ld %r15,40 + 6*8(%r3)
ld %r16,40 + 7*8(%r3)
ld %r17,40 + 8*8(%r3)
- ld %r18,40 + 10*8(%r3)
- ld %r19,40 + 11*8(%r3)
- ld %r20,40 + 12*8(%r3)
- ld %r21,40 + 13*8(%r3)
- ld %r22,40 + 14*8(%r3)
- ld %r23,40 + 15*8(%r3)
- ld %r24,40 + 16*8(%r3)
- ld %r25,40 + 17*8(%r3)
- ld %r26,40 + 18*8(%r3)
- ld %r27,40 + 19*8(%r3)
- ld %r28,40 + 20*8(%r3)
- ld %r29,40 + 21*8(%r3)
- ld %r30,40 + 22*8(%r3)
- ld %r31,40 + 23*8(%r3)
+ ld %r18,40 + 9*8(%r3)
+ ld %r19,40 + 10*8(%r3)
+ ld %r20,40 + 11*8(%r3)
+ ld %r21,40 + 12*8(%r3)
+ ld %r22,40 + 13*8(%r3)
+ ld %r23,40 + 14*8(%r3)
+ ld %r24,40 + 15*8(%r3)
+ ld %r25,40 + 16*8(%r3)
+ ld %r26,40 + 17*8(%r3)
+ ld %r27,40 + 18*8(%r3)
+ ld %r28,40 + 19*8(%r3)
+ ld %r29,40 + 20*8(%r3)
+ ld %r30,40 + 21*8(%r3)
+ ld %r31,40 + 22*8(%r3)
lwz %r7,0(%r3)
mr %r6,%r4
Modified: projects/ppc64/libexec/rtld-elf/powerpc64/reloc.c
==============================================================================
--- projects/ppc64/libexec/rtld-elf/powerpc64/reloc.c Sun Jan 31 23:16:10 2010 (r203329)
+++ projects/ppc64/libexec/rtld-elf/powerpc64/reloc.c Sun Jan 31 23:39:55 2010 (r203330)
@@ -44,9 +44,9 @@
#include "rtld.h"
struct funcdesc {
- uint64_t addr;
- uint64_t toc;
- uint64_t env;
+ Elf_Addr addr;
+ Elf_Addr toc;
+ Elf_Addr env;
};
/*
@@ -104,7 +104,7 @@ do_copy_relocations(Obj_Entry *dstobj)
srcaddr = (const void *) (srcobj->relocbase+srcsym->st_value);
memcpy(dstaddr, srcaddr, size);
- dbg("copy_reloc: src=%p,dst=%p,size=%d\n",srcaddr,dstaddr,size);
+ dbg("copy_reloc: src=%p,dst=%p,size=%zd\n",srcaddr,dstaddr,size);
}
return (0);
@@ -163,8 +163,8 @@ reloc_nonplt_object(Obj_Entry *obj_rtld,
case R_PPC_NONE:
break;
- case R_PPC_ADDR32: /* word32 S + A */
- case R_PPC_GLOB_DAT: /* word32 S + A */
+ case R_PPC64_ADDR64: /* doubleword64 S + A */
+ case R_PPC_GLOB_DAT:
def = find_symdef(ELF_R_SYM(rela->r_info), obj, &defobj,
false, cache);
if (def == NULL) {
@@ -180,7 +180,7 @@ reloc_nonplt_object(Obj_Entry *obj_rtld,
}
break;
- case R_PPC_RELATIVE: /* word32 B + A */
+ case R_PPC_RELATIVE: /* doubleword64 B + A */
tmp = (Elf_Addr)(obj->relocbase + rela->r_addend);
/* As above, don't issue write unnecessarily */
@@ -211,7 +211,7 @@ reloc_nonplt_object(Obj_Entry *obj_rtld,
*/
break;
- case R_PPC_DTPMOD32:
+ case R_PPC64_DTPMOD64:
def = find_symdef(ELF_R_SYM(rela->r_info), obj, &defobj,
false, cache);
@@ -222,7 +222,7 @@ reloc_nonplt_object(Obj_Entry *obj_rtld,
break;
- case R_PPC_TPREL32:
+ case R_PPC64_TPREL64:
def = find_symdef(ELF_R_SYM(rela->r_info), obj, &defobj,
false, cache);
@@ -251,7 +251,7 @@ reloc_nonplt_object(Obj_Entry *obj_rtld,
break;
- case R_PPC_DTPREL32:
+ case R_PPC64_DTPREL64:
def = find_symdef(ELF_R_SYM(rela->r_info), obj, &defobj,
false, cache);
@@ -322,8 +322,8 @@ done:
static int
reloc_plt_object(Obj_Entry *obj, const Elf_Rela *rela)
{
- Elf_Word *where = (Elf_Word *)(obj->relocbase + rela->r_offset);
- int reloff;
+ Elf_Addr *where = (Elf_Addr *)(obj->relocbase + rela->r_offset);
+ long reloff;
reloff = rela - obj->pltrela;
@@ -331,11 +331,9 @@ reloc_plt_object(Obj_Entry *obj, const E
return (-1);
}
- dbg(" reloc_plt_object: where=%p,pltres=%p,reloff=%x,distance=%x",
- (void *)where, (void *)pltresolve, reloff, distance);
+ dbg(" reloc_plt_object: where=%p,reloff=%lx", (void *)where, reloff);
- ((struct funcdesc *)(where))->addr =
- (uint64_t)_rtld_powerpc64_pltresolve;
+ memcpy(where, _rtld_powerpc64_pltresolve, sizeof(struct funcdesc));
((struct funcdesc *)(where))->toc = reloff;
((struct funcdesc *)(where))->env = (uint64_t)obj;
@@ -413,16 +411,15 @@ reloc_jmpslots(Obj_Entry *obj)
/*
- * Update the value of a PLT jump slot. Branch directly to the target if
- * it is within +/- 32Mb, otherwise go indirectly via the pltcall
- * trampoline call and jump table.
+ * Update the value of a PLT jump slot.
*/
Elf_Addr
reloc_jmpslot(Elf_Addr *wherep, Elf_Addr target, const Obj_Entry *defobj,
const Obj_Entry *obj, const Elf_Rel *rel)
{
- dbg(" reloc_jmpslot: where=%p, target=%p",
- (void *)wherep, (void *)target);
+ dbg(" reloc_jmpslot: where=%p, target=%p (%#lx + %#lx)",
+ (void *)wherep, (void *)target, *(Elf_Addr *)target,
+ (Elf_Addr)defobj->relocbase);
/*
* At the PLT entry pointed at by `wherep', construct
@@ -431,6 +428,18 @@ reloc_jmpslot(Elf_Addr *wherep, Elf_Addr
*/
memcpy(wherep, (void *)target, sizeof(struct funcdesc));
+ if (((struct funcdesc *)(wherep))->addr < (Elf_Addr)defobj->relocbase) {
+ /*
+ * XXX: It is possible (e.g. LD_BIND_NOW) that the function
+ * descriptor we are copying has not yet been relocated.
+ * If this happens, fix it.
+ */
+
+ ((struct funcdesc *)(wherep))->addr +=
+ (Elf_Addr)defobj->relocbase;
+ ((struct funcdesc *)(wherep))->toc +=
+ (Elf_Addr)defobj->relocbase;
+ }
return (target);
}
@@ -438,8 +447,9 @@ reloc_jmpslot(Elf_Addr *wherep, Elf_Addr
void
init_pltgot(Obj_Entry *obj)
{
+#if 0
struct funcdesc *pltcall;
- int N = obj->pltrelasize / sizeof(Elf_Rela);
+ //int N = obj->pltrelasize / sizeof(Elf_Rela);
pltcall = (struct funcdesc *)obj->pltgot;
@@ -448,22 +458,16 @@ init_pltgot(Obj_Entry *obj)
}
/*
- * Copy the function description into the PLT slot
+ * Copy the function description into the PLT0 slot
*/
memcpy(pltcall, _rtld_powerpc64_pltresolve, sizeof(*pltcall));
-
- /*
- * Now fake the two arguments we get in the descriptor to
- * pass information to the resolver.
- */
- pltcall->toc = N;
- pltcall->env = (uint64_t)obj;
+#endif
}
void
allocate_initial_tls(Obj_Entry *list)
{
- register Elf_Addr **tp __asm__("r2");
+ register Elf_Addr **tp __asm__("r13");
Elf_Addr **_tp;
/*
@@ -474,7 +478,7 @@ allocate_initial_tls(Obj_Entry *list)
tls_static_space = tls_last_offset + tls_last_size + RTLD_STATIC_TLS_EXTRA;
- _tp = (Elf_Addr **) ((char *) allocate_tls(list, NULL, TLS_TCB_SIZE, 8)
+ _tp = (Elf_Addr **) ((char *)allocate_tls(list, NULL, TLS_TCB_SIZE, 16)
+ TLS_TP_OFFSET + TLS_TCB_SIZE);
/*
@@ -487,7 +491,7 @@ allocate_initial_tls(Obj_Entry *list)
void*
__tls_get_addr(tls_index* ti)
{
- register Elf_Addr **tp __asm__("r2");
+ register Elf_Addr **tp __asm__("r13");
char *p;
p = tls_get_addr_common((Elf_Addr**)((Elf_Addr)tp - TLS_TP_OFFSET
Modified: projects/ppc64/libexec/rtld-elf/powerpc64/rtld_machdep.h
==============================================================================
--- projects/ppc64/libexec/rtld-elf/powerpc64/rtld_machdep.h Sun Jan 31 23:16:10 2010 (r203329)
+++ projects/ppc64/libexec/rtld-elf/powerpc64/rtld_machdep.h Sun Jan 31 23:39:55 2010 (r203330)
@@ -65,12 +65,12 @@ void _rtld_powerpc64_pltresolve(void);
#define TLS_TP_OFFSET 0x7000
#define TLS_DTV_OFFSET 0x8000
-#define TLS_TCB_SIZE 8
+#define TLS_TCB_SIZE 16
#define round(size, align) \
(((size) + (align) - 1) & ~((align) - 1))
#define calculate_first_tls_offset(size, align) \
- round(8, align)
+ round(16, align)
#define calculate_tls_offset(prev_offset, prev_size, size, align) \
round(prev_offset + prev_size, align)
#define calculate_tls_end(off, size) ((off) + (size))
Modified: projects/ppc64/libexec/rtld-elf/powerpc64/rtld_start.S
==============================================================================
--- projects/ppc64/libexec/rtld-elf/powerpc64/rtld_start.S Sun Jan 31 23:16:10 2010 (r203329)
+++ projects/ppc64/libexec/rtld-elf/powerpc64/rtld_start.S Sun Jan 31 23:39:55 2010 (r203330)
@@ -45,6 +45,26 @@ _ENTRY(_rtld_start)
/* std %r7,80(%r1) *//* cleanup (always 0) */
std %r8,88(%r1) /* ps_strings */
+ /*
+ * Perform initial relocation of ld-elf.so. Not as easy as it
+ * sounds.
+ * - perform small forward branch to put PC into link reg
+ * - use link-time constants to determine offset to the
+ * _DYNAMIC section and the GOT. Add these to the PC to
+ * convert to absolute addresses.
+ * - call reloc_non_plt_self() to fix up ld-elf.so's relocations
+ */
+
+ bl 1f
+ .llong _DYNAMIC-.
+1:
+ mflr %r3 /* PC value at .llong */
+ ld %r4,0(%r3) /* offset to _DYNAMIC */
+ add %r3,%r4,%r3 /* r3 = &_DYNAMIC, absolute value */
+
+ ld %r4,-0x8000(%r2) /* First TOC entry is TOC base */
+ subf %r4,%r4,%r2 /* Subtract from real TOC base to get base */
+
bl .reloc_non_plt_self /* reloc_non_plt_self(&_DYNAMIC,base) */
nop
@@ -55,14 +75,16 @@ _ENTRY(_rtld_start)
* original stack layout has to be found by moving back a word
* from the argv pointer.
*/
- ld %r4,56(%r1) /* restore argv */
+ ld %r4,56(%r1)
addi %r3,%r4,-8 /* locate argc ptr, &argv[-1] */
-
- addi %r4,%r1,16 /* &exit_proc on stack */
- addi %r5,%r1,24 /* &obj_main on stack */
+ addi %r4,%r1,80 /* &exit_proc on stack */
+ addi %r5,%r1,72 /* &obj_main on stack */
bl ._rtld /* &_start = _rtld(sp, &exit_proc, &obj_main)*/
nop
+ ld %r2,8(%r3)
+ ld %r11,16(%r3)
+ ld %r3,0(%r3)
mtlr %r3
/*
Modified: projects/ppc64/sys/sys/elf_common.h
==============================================================================
--- projects/ppc64/sys/sys/elf_common.h Sun Jan 31 23:16:10 2010 (r203329)
+++ projects/ppc64/sys/sys/elf_common.h Sun Jan 31 23:39:55 2010 (r203330)
@@ -781,6 +781,27 @@ typedef struct {
#define R_PPC_SECTOFF_HA 36
/*
+ * 64-bit relocations
+ */
+#define R_PPC64_ADDR64 38
+#define R_PPC64_ADDR16_HIGHER 39
+#define R_PPC64_ADDR16_HIGHERA 40
+#define R_PPC64_ADDR16_HIGHEST 41
+#define R_PPC64_ADDR16_HIGHESTA 42
+#define R_PPC64_UADDR64 43
+#define R_PPC64_REL64 44
+#define R_PPC64_PLT64 45
+#define R_PPC64_PLTREL64 46
+#define R_PPC64_TOC16 47
+#define R_PPC64_TOC16_LO 48
+#define R_PPC64_TOC16_HI 49
+#define R_PPC64_TOC16_HA 50
+#define R_PPC64_TOC 51
+#define R_PPC64_DTPMOD64 68
+#define R_PPC64_TPREL64 73
+#define R_PPC64_DTPREL64 78
+
+/*
* TLS relocations
*/
#define R_PPC_TLS 67
More information about the svn-src-projects
mailing list