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)

Reply via email to