CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: joerg Date: Tue Jun 16 21:02:20 UTC 2020 Modified Files: src/libexec/ld.elf_so/arch/arm: mdreloc.c Log Message: R_ARM_TLS_TPOFF32 needs to adjust the existing value, not blindly overwrite it. To generate a diff of this commit: cvs rdiff -u -r1.44 -r1.45 src/libexec/ld.elf_so/arch/arm/mdreloc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/mdreloc.c diff -u src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.44 src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.45 --- src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.44 Tue Apr 3 21:10:27 2018 +++ src/libexec/ld.elf_so/arch/arm/mdreloc.c Tue Jun 16 21:02:20 2020 @@ -1,8 +1,8 @@ -/* $NetBSD: mdreloc.c,v 1.44 2018/04/03 21:10:27 joerg Exp $ */ +/* $NetBSD: mdreloc.c,v 1.45 2020/06/16 21:02:20 joerg Exp $ */ #include #ifndef lint -__RCSID("$NetBSD: mdreloc.c,v 1.44 2018/04/03 21:10:27 joerg Exp $"); +__RCSID("$NetBSD: mdreloc.c,v 1.45 2020/06/16 21:02:20 joerg Exp $"); #endif /* not lint */ #include @@ -232,8 +232,11 @@ _rtld_relocate_nonplt_objects(Obj_Entry _rtld_tls_offset_allocate(obj)) return -1; - tmp = (Elf_Addr)def->st_value + defobj->tlsoffset + - sizeof(struct tls_tcb); + if (__predict_true(RELOC_ALIGNED_P(where))) +tmp = *where; + else +tmp = load_ptr(where); + tmp += (Elf_Addr)def->st_value + defobj->tlsoffset + sizeof(struct tls_tcb); if (__predict_true(RELOC_ALIGNED_P(where))) *where = tmp; else
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: joerg Date: Tue Jun 20 12:41:49 UTC 2017 Modified Files: src/libexec/ld.elf_so/arch/arm: mdreloc.c Log Message: Expand symnum, GCC's uninitialized used tracking is too imprecise. To generate a diff of this commit: cvs rdiff -u -r1.40 -r1.41 src/libexec/ld.elf_so/arch/arm/mdreloc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/mdreloc.c diff -u src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.40 src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.41 --- src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.40 Tue Jun 20 11:01:18 2017 +++ src/libexec/ld.elf_so/arch/arm/mdreloc.c Tue Jun 20 12:41:49 2017 @@ -1,8 +1,8 @@ -/* $NetBSD: mdreloc.c,v 1.40 2017/06/20 11:01:18 joerg Exp $ */ +/* $NetBSD: mdreloc.c,v 1.41 2017/06/20 12:41:49 joerg Exp $ */ #include #ifndef lint -__RCSID("$NetBSD: mdreloc.c,v 1.40 2017/06/20 11:01:18 joerg Exp $"); +__RCSID("$NetBSD: mdreloc.c,v 1.41 2017/06/20 12:41:49 joerg Exp $"); #endif /* not lint */ #include @@ -128,15 +128,17 @@ _rtld_relocate_nonplt_objects(Obj_Entry "%s: R_ARM_PC24 relocation @ %p to %s failed " "(displacement %ld (%#lx) out of range)", obj->path, where, -obj->strtab + obj->symtab[symnum].st_name, +obj->strtab + obj->symtab[ +ELF_R_SYM(rel->r_info)].st_name, (long) tmp, (long) tmp); return -1; } tmp >>= 2; *where = (*where & 0xff00) | (tmp & 0x00ff); rdbg(("PC24 %s in %s --> %p @ %p in %s", - obj->strtab + obj->symtab[symnum].st_name, - obj->path, (void *)*where, where, defobj->path)); + obj->strtab + obj->symtab[ELF_R_SYM(rel->r_info)] + .st_name, obj->path, (void *)*where, where, + defobj->path)); break; } #endif @@ -160,8 +162,9 @@ _rtld_relocate_nonplt_objects(Obj_Entry store_ptr(where, tmp); } rdbg(("ABS32/GLOB_DAT %s in %s --> %p @ %p in %s", - obj->strtab + obj->symtab[symnum].st_name, - obj->path, (void *)tmp, where, defobj->path)); + obj->strtab + obj->symtab[ELF_R_SYM(rel->r_info)] + .st_name, obj->path, (void *)tmp, where, + defobj->path)); break; case R_TYPE(RELATIVE): /* word32 B + A */ @@ -201,8 +204,8 @@ _rtld_relocate_nonplt_objects(Obj_Entry store_ptr(where, tmp); rdbg(("TLS_DTPOFF32 %s in %s --> %p", - obj->strtab + obj->symtab[symnum].st_name, - obj->path, (void *)tmp)); + obj->strtab + obj->symtab[ELF_R_SYM(rel->r_info)] + .st_name, obj->path, (void *)tmp)); break; case R_TYPE(TLS_DTPMOD32): @@ -213,8 +216,8 @@ _rtld_relocate_nonplt_objects(Obj_Entry store_ptr(where, tmp); rdbg(("TLS_DTPMOD32 %s in %s --> %p", - obj->strtab + obj->symtab[symnum].st_name, - obj->path, (void *)tmp)); + obj->strtab + obj->symtab[ELF_R_SYM(rel->r_info)] + .st_name, obj->path, (void *)tmp)); break; @@ -230,8 +233,8 @@ _rtld_relocate_nonplt_objects(Obj_Entry else store_ptr(where, tmp); rdbg(("TLS_TPOFF32 %s in %s --> %p", - obj->strtab + obj->symtab[symnum].st_name, - obj->path, (void *)tmp)); + obj->strtab + obj->symtab[ELF_R_SYM(rel->r_info)] + .st_name, obj->path, (void *)tmp)); break; default:
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: joerg Date: Tue Jun 20 11:01:18 UTC 2017 Modified Files: src/libexec/ld.elf_so/arch/arm: mdreloc.c Log Message: Drop symbol number from default branch diagnostic, it isn't set at this point and most likely not valid either. To generate a diff of this commit: cvs rdiff -u -r1.39 -r1.40 src/libexec/ld.elf_so/arch/arm/mdreloc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/mdreloc.c diff -u src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.39 src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.40 --- src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.39 Mon Jun 19 11:57:01 2017 +++ src/libexec/ld.elf_so/arch/arm/mdreloc.c Tue Jun 20 11:01:18 2017 @@ -1,8 +1,8 @@ -/* $NetBSD: mdreloc.c,v 1.39 2017/06/19 11:57:01 joerg Exp $ */ +/* $NetBSD: mdreloc.c,v 1.40 2017/06/20 11:01:18 joerg Exp $ */ #include #ifndef lint -__RCSID("$NetBSD: mdreloc.c,v 1.39 2017/06/19 11:57:01 joerg Exp $"); +__RCSID("$NetBSD: mdreloc.c,v 1.40 2017/06/20 11:01:18 joerg Exp $"); #endif /* not lint */ #include @@ -236,11 +236,10 @@ _rtld_relocate_nonplt_objects(Obj_Entry default: rdbg(("sym = %lu, type = %lu, offset = %p, " - "contents = %p, symbol = %s", + "contents = %p", (u_long)ELF_R_SYM(rel->r_info), (u_long)ELF_R_TYPE(rel->r_info), - (void *)rel->r_offset, (void *)load_ptr(where), - obj->strtab + obj->symtab[symnum].st_name)); + (void *)rel->r_offset, (void *)load_ptr(where))); _rtld_error("%s: Unsupported relocation type %ld " "in non-PLT relocations", obj->path, (u_long) ELF_R_TYPE(rel->r_info));
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: matt Date: Tue Dec 3 00:19:56 UTC 2013 Modified Files: src/libexec/ld.elf_so/arch/arm: rtld_start.S Log Message: Don't use GOT relocations. Use PC relative for the GOT and GOTOFF for _DYNAMIC. Make thumb friendly. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/libexec/ld.elf_so/arch/arm/rtld_start.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/rtld_start.S diff -u src/libexec/ld.elf_so/arch/arm/rtld_start.S:1.11 src/libexec/ld.elf_so/arch/arm/rtld_start.S:1.12 --- src/libexec/ld.elf_so/arch/arm/rtld_start.S:1.11 Mon Aug 13 02:53:25 2012 +++ src/libexec/ld.elf_so/arch/arm/rtld_start.S Tue Dec 3 00:19:56 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: rtld_start.S,v 1.11 2012/08/13 02:53:25 matt Exp $ */ +/* $NetBSD: rtld_start.S,v 1.12 2013/12/03 00:19:56 matt Exp $ */ /*- * Copyright (c) 1998, 2002 The NetBSD Foundation, Inc. @@ -31,55 +31,51 @@ #include -RCSID("$NetBSD: rtld_start.S,v 1.11 2012/08/13 02:53:25 matt Exp $") +RCSID("$NetBSD: rtld_start.S,v 1.12 2013/12/03 00:19:56 matt Exp $") - .text - .align 0 - .globl _rtld_start - .type _rtld_start,%function -_rtld_start: +ENTRY_NP(_rtld_start) sub sp, sp, #8 /* make room for obj_main & exit proc */ - mov r4, r0 /* save ps_strings */ - - ldr sl, .L2 - ldr r5, .L2+4 - ldr r0, .L2+8 -.L1: - add sl, pc, sl - ldr r5, [sl, r5] - ldr r0, [sl, r0] + movs r4, r0 /* save ps_strings */ - sub r1, sl, r5 /* relocbase */ - add r0, r1, r0 /* &_DYNAMIC */ + ldr r6, .Lgot + ldr r5, .Ldynamic + add r6, r6, pc /* r6 = &GOT[0]; pc = &LPIC1; */ + adds r0, r6, r5 /* arg0 = &_DYNAMIC */ +.LPIC1: + ldr r5, [r6] /* GOT[0] = &_DYNAMIC */ + subs r5, r0, r5 /* relocbase = GOT[0] - &_DYNAMIC */ + movs r1, r5 /* arg1 = relocabase */ bl _rtld_relocate_nonplt_self - sub r1, sl, r5 /* relocbase */ + movs r1, r5 /* relocbase */ mov r0, sp /* sp */ bl _rtld /* call the shared loader */ - mov r3, r0 /* save entry point */ + movs r3, r0 /* save entry point */ +#ifdef __thumb__ + ldr r2, [sp, #0] /* pop r2 = cleanup */ + ldr r1, [sp, #4] /* pop r1 = obj_main */ + add sp, sp, #8 +#else ldr r2, [sp], #4 /* pop r2 = cleanup */ ldr r1, [sp], #4 /* pop r1 = obj_main */ - mov r0, r4 /* restore ps_strings */ -#ifdef _ARM_ARCH_4T - bx r3 /* jump to the entry point */ -#else - mov pc, r3 /* jump to the entry point */ #endif -.L2: - .word _GLOBAL_OFFSET_TABLE_ - (.L1+8) - .word _GLOBAL_OFFSET_TABLE_(GOT) - .word _DYNAMIC(GOT) + movs r0, r4 /* restore ps_strings */ + RETr(r3) .align 0 - .globl _rtld_bind_start - .type _rtld_bind_start,%function +.Lgot: + .word _GLOBAL_OFFSET_TABLE_ - .LPIC1 +.Ldynamic: + .word _DYNAMIC(GOTOFF) +END(_rtld_start) + /* * stack[0] = RA * ip = &GOT[n+3] * lr = &GOT[2] */ -_rtld_bind_start: +ARM_ENTRY_NP(_rtld_bind_start) stmdb sp!,{r0-r4,sl,fp} /* 8 byte aligned (lr already saved) */ sub r1, ip, lr /* r1 = 4 * (n + 1) */ @@ -95,9 +91,5 @@ _rtld_bind_start: mov ip, r0 /* save new address */ ldmia sp!,{r0-r4,sl,fp,lr} /* restore the stack */ -#ifdef _ARM_ARCH_4T - bx ip /* jump to the new address */ -#else - mov pc, ip /* jump to the new address */ -#endif - + RETr(ip) /* jump to the new address */ +END(_rtld_bind_start)
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: skrll Date: Fri May 3 09:37:17 UTC 2013 Modified Files: src/libexec/ld.elf_so/arch/arm: Makefile.inc Log Message: Provide a default LDELFSO_MACHINE_ARCH. hi matt! atf-run works again - the init/fini stuff didn't get run otherwise. To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/libexec/ld.elf_so/arch/arm/Makefile.inc Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/Makefile.inc diff -u src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.17 src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.18 --- src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.17 Sat Apr 27 06:25:03 2013 +++ src/libexec/ld.elf_so/arch/arm/Makefile.inc Fri May 3 09:37:17 2013 @@ -1,4 +1,6 @@ -# $NetBSD: Makefile.inc,v 1.17 2013/04/27 06:25:03 matt Exp $ +# $NetBSD: Makefile.inc,v 1.18 2013/05/03 09:37:17 skrll Exp $ + +LDELFSO_MACHINE_ARCH?= ${MACHINE_ARCH} SRCS+= rtld_start.S mdreloc.c
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: matt Date: Sat Apr 27 06:25:03 UTC 2013 Modified Files: src/libexec/ld.elf_so/arch/arm: Makefile.inc Log Message: Changes for MKCOMPAT for earm. To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/libexec/ld.elf_so/arch/arm/Makefile.inc Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/Makefile.inc diff -u src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.16 src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.17 --- src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.16 Wed Apr 24 22:37:20 2013 +++ src/libexec/ld.elf_so/arch/arm/Makefile.inc Sat Apr 27 06:25:03 2013 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.16 2013/04/24 22:37:20 matt Exp $ +# $NetBSD: Makefile.inc,v 1.17 2013/04/27 06:25:03 matt Exp $ SRCS+= rtld_start.S mdreloc.c @@ -6,7 +6,7 @@ SRCS+= rtld_start.S mdreloc.c CPPFLAGS+= -fpic CPPFLAGS+= -DELFSIZE=32 -.if !empty(MACHINE_ARCH:Mearm*) +.if !empty(LDELFSO_MACHINE_ARCH:Mearm*) CPPFLAGS+= -DHAVE_INITFINI_ARRAY SRCS+= find_exidx.c .endif
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: matt Date: Thu Apr 25 13:15:26 UTC 2013 Modified Files: src/libexec/ld.elf_so/arch/arm: find_exidx.c Log Message: Use relocbase, not mapbase. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/libexec/ld.elf_so/arch/arm/find_exidx.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/find_exidx.c diff -u src/libexec/ld.elf_so/arch/arm/find_exidx.c:1.1 src/libexec/ld.elf_so/arch/arm/find_exidx.c:1.2 --- src/libexec/ld.elf_so/arch/arm/find_exidx.c:1.1 Wed Apr 24 22:32:29 2013 +++ src/libexec/ld.elf_so/arch/arm/find_exidx.c Thu Apr 25 13:15:26 2013 @@ -29,7 +29,7 @@ #include #ifndef lint -__RCSID("$NetBSD: find_exidx.c,v 1.1 2013/04/24 22:32:29 matt Exp $"); +__RCSID("$NetBSD: find_exidx.c,v 1.2 2013/04/25 13:15:26 matt Exp $"); #endif /* not lint */ #include "debug.h" @@ -62,7 +62,7 @@ __gnu_Unwind_Find_exidx(_Unwind_Ptr pc, * need to see if the address matches a PT_LOAD section. */ if (obj != NULL && obj->exidx_start != NULL) { - va -= (vaddr_t)obj->mapbase; + va -= (vaddr_t)obj->relocbase; const Elf_Phdr *ph = obj->phdr; const Elf_Phdr * const phlimit = ph + obj->phsize / sizeof(*ph); for (; ph < phlimit; ph++) {
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: matt Date: Wed Apr 24 22:32:29 UTC 2013 Added Files: src/libexec/ld.elf_so/arch/arm: find_exidx.c Log Message: Add a ld.elf_so internals version of __gnu_Unwind_Find_exidx for that the libgcc EHABI can find the exception tables for a supplied PC. To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/libexec/ld.elf_so/arch/arm/find_exidx.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Added files: Index: src/libexec/ld.elf_so/arch/arm/find_exidx.c diff -u /dev/null src/libexec/ld.elf_so/arch/arm/find_exidx.c:1.1 --- /dev/null Wed Apr 24 22:32:30 2013 +++ src/libexec/ld.elf_so/arch/arm/find_exidx.c Wed Apr 24 22:32:29 2013 @@ -0,0 +1,86 @@ +/*- + * Copyright (c) 2013 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Matt Thomas of 3am Software Foundry. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *notice, this list of conditions and the following disclaimer in the + *documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#ifndef lint +__RCSID("$NetBSD: find_exidx.c,v 1.1 2013/04/24 22:32:29 matt Exp $"); +#endif /* not lint */ + +#include "debug.h" +#include "rtld.h" + +_Unwind_Ptr +__gnu_Unwind_Find_exidx(_Unwind_Ptr pc, int * pcount) +{ + const Obj_Entry *obj; + _Unwind_Ptr start = NULL; + int count = 0; + + dbg(("__gnu_Unwind_Find_exidx")); + + _rtld_shared_enter(); + + vaddr_t va = (vaddr_t)pc; + for (obj = _rtld_objlist; obj != NULL; obj = obj->next) { + /* + * If the address we are looking for is inside this object, + * we've found the object to inspect. + */ + if ((vaddr_t)obj->mapbase <= va + && va < (vaddr_t)obj->mapbase + obj->mapsize) + break; + } + + /* + * If we found an object and it has some exception data, we + * need to see if the address matches a PT_LOAD section. + */ + if (obj != NULL && obj->exidx_start != NULL) { + va -= (vaddr_t)obj->mapbase; + const Elf_Phdr *ph = obj->phdr; + const Elf_Phdr * const phlimit = ph + obj->phsize / sizeof(*ph); + for (; ph < phlimit; ph++) { + if (ph->p_type == PT_LOAD + && ph->p_vaddr <= va + && va < ph->p_vaddr + ph->p_memsz) { +count = obj->exidx_sz / 8; +start = obj->exidx_start; +break; + } + } + } + + _rtld_shared_exit(); + + /* + * deal with the return values. + */ + *pcount = count; + return start; +}
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: matt Date: Wed Jan 23 02:31:54 UTC 2013 Modified Files: src/libexec/ld.elf_so/arch/arm: Makefile.inc Log Message: Handle CPUFLAGS being empty To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/libexec/ld.elf_so/arch/arm/Makefile.inc Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/Makefile.inc diff -u src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.14 src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.15 --- src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.14 Wed Jan 23 02:18:50 2013 +++ src/libexec/ld.elf_so/arch/arm/Makefile.inc Wed Jan 23 02:31:54 2013 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.14 2013/01/23 02:18:50 matt Exp $ +# $NetBSD: Makefile.inc,v 1.15 2013/01/23 02:31:54 matt Exp $ SRCS+= rtld_start.S mdreloc.c @@ -7,7 +7,7 @@ CPPFLAGS+= -fpic CPPFLAGS+= -DELFSIZE=32 .if ${MACHINE_ARCH} == "earm" || ${MACHINE_ARCH} == "earmeb" \ -|| (!empty(CFLAGS) && ${CFLAGS:Mabi=aapcs} != "") +|| (!empty(CPUFLAGS) && ${CPUFLAGS:M-mabi=aapcs*} != "") CPPFLAGS+= -DHAVE_INITFINI_ARRAY .endif
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: matt Date: Wed Jan 23 02:18:50 UTC 2013 Modified Files: src/libexec/ld.elf_so/arch/arm: Makefile.inc Log Message: Make sure CFLAGS is not empty. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/libexec/ld.elf_so/arch/arm/Makefile.inc Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/Makefile.inc diff -u src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.13 src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.14 --- src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.13 Tue Jan 22 22:49:09 2013 +++ src/libexec/ld.elf_so/arch/arm/Makefile.inc Wed Jan 23 02:18:50 2013 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.13 2013/01/22 22:49:09 matt Exp $ +# $NetBSD: Makefile.inc,v 1.14 2013/01/23 02:18:50 matt Exp $ SRCS+= rtld_start.S mdreloc.c @@ -6,8 +6,8 @@ SRCS+= rtld_start.S mdreloc.c CPPFLAGS+= -fpic CPPFLAGS+= -DELFSIZE=32 -.if ${MACHINE_ARCH} == "earm" || ${MACHINE_ARCH} == "earmeb" || \ - ${CFLAGS:Mabi=aapcs} != "" +.if ${MACHINE_ARCH} == "earm" || ${MACHINE_ARCH} == "earmeb" \ +|| (!empty(CFLAGS) && ${CFLAGS:Mabi=aapcs} != "") CPPFLAGS+= -DHAVE_INITFINI_ARRAY .endif
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: matt Date: Tue Jan 22 22:49:09 UTC 2013 Modified Files: src/libexec/ld.elf_so/arch/arm: Makefile.inc Log Message: If you are using aapcs, you must be using INITFINI To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/libexec/ld.elf_so/arch/arm/Makefile.inc Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/Makefile.inc diff -u src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.12 src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.13 --- src/libexec/ld.elf_so/arch/arm/Makefile.inc:1.12 Wed Aug 15 03:46:07 2012 +++ src/libexec/ld.elf_so/arch/arm/Makefile.inc Tue Jan 22 22:49:09 2013 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.12 2012/08/15 03:46:07 matt Exp $ +# $NetBSD: Makefile.inc,v 1.13 2013/01/22 22:49:09 matt Exp $ SRCS+= rtld_start.S mdreloc.c @@ -6,7 +6,8 @@ SRCS+= rtld_start.S mdreloc.c CPPFLAGS+= -fpic CPPFLAGS+= -DELFSIZE=32 -.if ${MACHINE_ARCH} == "earm" || ${MACHINE_ARCH} == "earmeb" +.if ${MACHINE_ARCH} == "earm" || ${MACHINE_ARCH} == "earmeb" || \ + ${CFLAGS:Mabi=aapcs} != "" CPPFLAGS+= -DHAVE_INITFINI_ARRAY .endif
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: matt Date: Mon Aug 13 02:53:25 UTC 2012 Modified Files: src/libexec/ld.elf_so/arch/arm: rtld_start.S Log Message: Add a comment for EABI. Use "pop" instructions to save one instruction. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/libexec/ld.elf_so/arch/arm/rtld_start.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/rtld_start.S diff -u src/libexec/ld.elf_so/arch/arm/rtld_start.S:1.10 src/libexec/ld.elf_so/arch/arm/rtld_start.S:1.11 --- src/libexec/ld.elf_so/arch/arm/rtld_start.S:1.10 Wed Nov 11 14:15:41 2009 +++ src/libexec/ld.elf_so/arch/arm/rtld_start.S Mon Aug 13 02:53:25 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: rtld_start.S,v 1.10 2009/11/11 14:15:41 skrll Exp $ */ +/* $NetBSD: rtld_start.S,v 1.11 2012/08/13 02:53:25 matt Exp $ */ /*- * Copyright (c) 1998, 2002 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -RCSID("$NetBSD: rtld_start.S,v 1.10 2009/11/11 14:15:41 skrll Exp $") +RCSID("$NetBSD: rtld_start.S,v 1.11 2012/08/13 02:53:25 matt Exp $") .text .align 0 @@ -58,9 +58,8 @@ _rtld_start: bl _rtld /* call the shared loader */ mov r3, r0 /* save entry point */ - ldr r2, [sp, #0] /* r2 = cleanup */ - ldr r1, [sp, #4] /* r1 = obj_main */ - add sp, sp, #8 /* restore stack */ + ldr r2, [sp], #4 /* pop r2 = cleanup */ + ldr r1, [sp], #4 /* pop r1 = obj_main */ mov r0, r4 /* restore ps_strings */ #ifdef _ARM_ARCH_4T bx r3 /* jump to the entry point */ @@ -81,7 +80,7 @@ _rtld_start: * lr = &GOT[2] */ _rtld_bind_start: - stmdb sp!,{r0-r4,sl,fp} + stmdb sp!,{r0-r4,sl,fp} /* 8 byte aligned (lr already saved) */ sub r1, ip, lr /* r1 = 4 * (n + 1) */ sub r1, r1, #4 /* r1 = 4 * n */
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: matt Date: Tue Apr 12 16:40:04 UTC 2011 Modified Files: src/libexec/ld.elf_so/arch/arm: mdreloc.c Log Message: Add support for TLS relocations. >From Joerg Sonnenberger To generate a diff of this commit: cvs rdiff -u -r1.35 -r1.36 src/libexec/ld.elf_so/arch/arm/mdreloc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/mdreloc.c diff -u src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.35 src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.36 --- src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.35 Fri Mar 25 18:07:05 2011 +++ src/libexec/ld.elf_so/arch/arm/mdreloc.c Tue Apr 12 16:40:04 2011 @@ -1,8 +1,8 @@ -/* $NetBSD: mdreloc.c,v 1.35 2011/03/25 18:07:05 joerg Exp $ */ +/* $NetBSD: mdreloc.c,v 1.36 2011/04/12 16:40:04 matt Exp $ */ #include #ifndef lint -__RCSID("$NetBSD: mdreloc.c,v 1.35 2011/03/25 18:07:05 joerg Exp $"); +__RCSID("$NetBSD: mdreloc.c,v 1.36 2011/04/12 16:40:04 matt Exp $"); #endif /* not lint */ #include @@ -179,6 +179,61 @@ rdbg(("COPY (avoid in main)")); break; +#ifdef __HAVE_TLS_VARIANT_I + case R_TYPE(TLS_DTPOFF32): + def = _rtld_find_symdef(symnum, obj, &defobj, false); + if (def == NULL) +return -1; + + tmp = (Elf_Addr)(def->st_value); + if (__predict_true(RELOC_ALIGNED_P(where))) +*where = tmp; + else +store_ptr(where, tmp); + + rdbg(("TLS_DTPOFF32 %s in %s --> %p", + obj->strtab + obj->symtab[symnum].st_name, + obj->path, (void *)tmp)); + + break; + case R_TYPE(TLS_DTPMOD32): + def = _rtld_find_symdef(symnum, obj, &defobj, false); + if (def == NULL) +return -1; + + tmp = (Elf_Addr)(defobj->tlsindex); + if (__predict_true(RELOC_ALIGNED_P(where))) +*where = tmp; + else +store_ptr(where, tmp); + + rdbg(("TLS_DTPMOD32 %s in %s --> %p", + obj->strtab + obj->symtab[symnum].st_name, + obj->path, (void *)tmp)); + + break; + + case R_TYPE(TLS_TPOFF32): + def = _rtld_find_symdef(symnum, obj, &defobj, false); + if (def == NULL) +return -1; + + if (!defobj->tls_done && + _rtld_tls_offset_allocate(obj)) +return -1; + + tmp = (Elf_Addr)def->st_value + defobj->tlsoffset + + sizeof(struct tls_tcb); + if (__predict_true(RELOC_ALIGNED_P(where))) +*where = tmp; + else +store_ptr(where, tmp); + rdbg(("TLS_TPOFF32 %s in %s --> %p", + obj->strtab + obj->symtab[symnum].st_name, + obj->path, (void *)tmp)); + break; +#endif /* __HAVE_TLS_VARIANT_I */ + default: rdbg(("sym = %lu, type = %lu, offset = %p, " "contents = %p, symbol = %s",
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: skrll Date: Thu Jan 14 12:12:07 UTC 2010 Modified Files: src/libexec/ld.elf_so/arch/arm: mdreloc.c Log Message: Make DEBUG build compile. To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.33 src/libexec/ld.elf_so/arch/arm/mdreloc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/mdreloc.c diff -u src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.32 src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.33 --- src/libexec/ld.elf_so/arch/arm/mdreloc.c:1.32 Thu Jan 14 11:57:06 2010 +++ src/libexec/ld.elf_so/arch/arm/mdreloc.c Thu Jan 14 12:12:07 2010 @@ -1,8 +1,8 @@ -/* $NetBSD: mdreloc.c,v 1.32 2010/01/14 11:57:06 skrll Exp $ */ +/* $NetBSD: mdreloc.c,v 1.33 2010/01/14 12:12:07 skrll Exp $ */ #include #ifndef lint -__RCSID("$NetBSD: mdreloc.c,v 1.32 2010/01/14 11:57:06 skrll Exp $"); +__RCSID("$NetBSD: mdreloc.c,v 1.33 2010/01/14 12:12:07 skrll Exp $"); #endif /* not lint */ #include @@ -227,7 +227,7 @@ const Obj_Entry *defobj; unsigned long info = rel->r_info; - assert(ELF_R_TYPE(info) == R_TYPE(JMP_SLOT)); + assert(ELF_R_TYPE(info) == R_TYPE(JUMP_SLOT)); def = _rtld_find_plt_symdef(ELF_R_SYM(info), obj, &defobj, tp != NULL); if (__predict_false(def == NULL))
CVS commit: src/libexec/ld.elf_so/arch/arm
Module Name:src Committed By: skrll Date: Wed Nov 11 14:15:41 UTC 2009 Modified Files: src/libexec/ld.elf_so/arch/arm: rtld_start.S Log Message: Add RCSID To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/libexec/ld.elf_so/arch/arm/rtld_start.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/libexec/ld.elf_so/arch/arm/rtld_start.S diff -u src/libexec/ld.elf_so/arch/arm/rtld_start.S:1.9 src/libexec/ld.elf_so/arch/arm/rtld_start.S:1.10 --- src/libexec/ld.elf_so/arch/arm/rtld_start.S:1.9 Mon Apr 28 20:23:03 2008 +++ src/libexec/ld.elf_so/arch/arm/rtld_start.S Wed Nov 11 14:15:41 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: rtld_start.S,v 1.9 2008/04/28 20:23:03 martin Exp $ */ +/* $NetBSD: rtld_start.S,v 1.10 2009/11/11 14:15:41 skrll Exp $ */ /*- * Copyright (c) 1998, 2002 The NetBSD Foundation, Inc. @@ -31,6 +31,8 @@ #include +RCSID("$NetBSD: rtld_start.S,v 1.10 2009/11/11 14:15:41 skrll Exp $") + .text .align 0 .globl _rtld_start