Module Name: src Committed By: martin Date: Fri Jun 10 17:39:10 UTC 2022
Modified Files: src/libexec/ld.elf_so/arch/hppa [netbsd-9]: hppa_reloc.c rtld_start.S Log Message: Pull up following revision(s) (requested by skrll in ticket #1469): libexec/ld.elf_so/arch/hppa/hppa_reloc.c: revision 1.49 libexec/ld.elf_so/arch/hppa/rtld_start.S: revision 1.14 Set DP early so that any binary functions that override others get the right value if they're called before _start. This is true of bash where it provides its own getenv. Part of port-hppa/56118: sporadic app crashes in HPPA -current To generate a diff of this commit: cvs rdiff -u -r1.45 -r1.45.6.1 src/libexec/ld.elf_so/arch/hppa/hppa_reloc.c cvs rdiff -u -r1.12 -r1.12.42.1 src/libexec/ld.elf_so/arch/hppa/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/hppa/hppa_reloc.c diff -u src/libexec/ld.elf_so/arch/hppa/hppa_reloc.c:1.45 src/libexec/ld.elf_so/arch/hppa/hppa_reloc.c:1.45.6.1 --- src/libexec/ld.elf_so/arch/hppa/hppa_reloc.c:1.45 Thu Aug 10 19:03:26 2017 +++ src/libexec/ld.elf_so/arch/hppa/hppa_reloc.c Fri Jun 10 17:39:10 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: hppa_reloc.c,v 1.45 2017/08/10 19:03:26 joerg Exp $ */ +/* $NetBSD: hppa_reloc.c,v 1.45.6.1 2022/06/10 17:39:10 martin Exp $ */ /*- * Copyright (c) 2002, 2004 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: hppa_reloc.c,v 1.45 2017/08/10 19:03:26 joerg Exp $"); +__RCSID("$NetBSD: hppa_reloc.c,v 1.45.6.1 2022/06/10 17:39:10 martin Exp $"); #endif /* not lint */ #include <stdlib.h> @@ -52,6 +52,7 @@ __RCSID("$NetBSD: hppa_reloc.c,v 1.45 20 caddr_t _rtld_bind(const Obj_Entry *, const Elf_Addr); void _rtld_bind_start(void); void __rtld_setup_hppa_pltgot(const Obj_Entry *, Elf_Addr *); +void _rtld_set_dp(Elf_Addr *); /* * It is possible for the compiler to emit relocations for unaligned data. @@ -417,6 +418,16 @@ _rtld_relocate_nonplt_objects(Obj_Entry const Obj_Entry *defobj = NULL; unsigned long last_symnum = ULONG_MAX; + /* + * This will be done by the crt0 code, but make sure it's set + * early so that symbols overridden by the non-pic binary + * get the right DP value. + */ + if (obj->mainprog) { + hdbg(("setting DP to %p", obj->pltgot)); + _rtld_set_dp(obj->pltgot); + } + for (rela = obj->rela; rela < obj->relalim; rela++) { Elf_Addr *where; Elf_Addr tmp; Index: src/libexec/ld.elf_so/arch/hppa/rtld_start.S diff -u src/libexec/ld.elf_so/arch/hppa/rtld_start.S:1.12 src/libexec/ld.elf_so/arch/hppa/rtld_start.S:1.12.42.1 --- src/libexec/ld.elf_so/arch/hppa/rtld_start.S:1.12 Fri Jan 6 10:38:57 2012 +++ src/libexec/ld.elf_so/arch/hppa/rtld_start.S Fri Jun 10 17:39:10 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: rtld_start.S,v 1.12 2012/01/06 10:38:57 skrll Exp $ */ +/* $NetBSD: rtld_start.S,v 1.12.42.1 2022/06/10 17:39:10 martin Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -231,3 +231,9 @@ ENTRY(_rtld_bind_start,HPPA_FRAME_SIZE) bv %r0(%r21) nop EXIT(_rtld_bind_start) + + +LEAF_ENTRY_NOPROFILE(_rtld_set_dp) + bv %r0(%rp) + copy %arg0, %dp +EXIT(_rtld_set_dp)