From owner-svn-src-projects@FreeBSD.ORG Sun Jan 31 23:39:56 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 465CF1065679; Sun, 31 Jan 2010 23:39:56 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 343538FC15; Sun, 31 Jan 2010 23:39:56 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o0VNduhW073330; Sun, 31 Jan 2010 23:39:56 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o0VNdun7073321; Sun, 31 Jan 2010 23:39:56 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201001312339.o0VNdun7073321@svn.freebsd.org> From: Nathan Whitehorn Date: Sun, 31 Jan 2010 23:39:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r203330 - in projects/ppc64: lib/libc/powerpc64/gen libexec/rtld-elf/powerpc64 sys/sys X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 31 Jan 2010 23:39:56 -0000 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