Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Jan 2017 15:59:39 +0000 (UTC)
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r311156 - in stable/11/libexec/rtld-elf: . aarch64 riscv sparc64
Message-ID:  <201701031559.v03Fxdmr064052@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: emaste
Date: Tue Jan  3 15:59:39 2017
New Revision: 311156
URL: https://svnweb.freebsd.org/changeset/base/311156

Log:
  MFC r309411: Retire long-broken/unused static rtld support
  
  rtld-elf has some vestigial support for building as a static executable.
  r45501 introduced a partial implementation with a prescient note that it
  "might never be enabled." r153515 introduced ELF symbol versioning
  support, and removed part of the unused build infrastructure for static
  rtld.
  
  GNU ld populates rela relocation addends and GOT entries with the same
  values, and rtld's run-time dynamic executable check relied on this.
  Alternate toolchains may not populate the GOT entries, which caused
  RTLD_IS_DYNAMIC to return false. Simplify rtld by just removing the
  unused check.
  
  If we want to restore static rtld support later on we ought to introduce
  a build-time #ifdef flag.
  
  PR:		214972

Modified:
  stable/11/libexec/rtld-elf/aarch64/rtld_machdep.h
  stable/11/libexec/rtld-elf/riscv/rtld_machdep.h
  stable/11/libexec/rtld-elf/rtld.c
  stable/11/libexec/rtld-elf/sparc64/rtld_machdep.h
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/libexec/rtld-elf/aarch64/rtld_machdep.h
==============================================================================
--- stable/11/libexec/rtld-elf/aarch64/rtld_machdep.h	Tue Jan  3 15:57:47 2017	(r311155)
+++ stable/11/libexec/rtld-elf/aarch64/rtld_machdep.h	Tue Jan  3 15:59:39 2017	(r311156)
@@ -45,7 +45,6 @@ struct Struct_Obj_Entry;
 	asm volatile("adr	%0, _DYNAMIC" : "=&r"(_dynamic_addr));	\
 	(const Elf_Dyn *)_dynamic_addr;					\
 })
-#define	RTLD_IS_DYNAMIC() (1)
 
 Elf_Addr reloc_jmpslot(Elf_Addr *where, Elf_Addr target,
 		       const struct Struct_Obj_Entry *defobj,

Modified: stable/11/libexec/rtld-elf/riscv/rtld_machdep.h
==============================================================================
--- stable/11/libexec/rtld-elf/riscv/rtld_machdep.h	Tue Jan  3 15:57:47 2017	(r311155)
+++ stable/11/libexec/rtld-elf/riscv/rtld_machdep.h	Tue Jan  3 15:59:39 2017	(r311156)
@@ -52,7 +52,6 @@ uint64_t set_gp(struct Struct_Obj_Entry 
 	__asm __volatile("lla       %0, _DYNAMIC" : "=r"(_dynamic_addr));   \
 	(const Elf_Dyn *)_dynamic_addr;                                 \
 })
-#define RTLD_IS_DYNAMIC() (1)
 
 Elf_Addr reloc_jmpslot(Elf_Addr *where, Elf_Addr target,
 		       const struct Struct_Obj_Entry *defobj,

Modified: stable/11/libexec/rtld-elf/rtld.c
==============================================================================
--- stable/11/libexec/rtld-elf/rtld.c	Tue Jan  3 15:57:47 2017	(r311155)
+++ stable/11/libexec/rtld-elf/rtld.c	Tue Jan  3 15:59:39 2017	(r311156)
@@ -200,9 +200,6 @@ Elf_Sym sym_zero;		/* For resolving unde
 
 extern Elf_Dyn _DYNAMIC;
 #pragma weak _DYNAMIC
-#ifndef RTLD_IS_DYNAMIC
-#define	RTLD_IS_DYNAMIC()	(&_DYNAMIC != NULL)
-#endif
 
 int dlclose(void *) __exported;
 char *dlerror(void) __exported;
@@ -1916,22 +1913,20 @@ init_rtld(caddr_t mapbase, Elf_Auxinfo *
 #ifdef PIC
     objtmp.relocbase = mapbase;
 #endif
-    if (RTLD_IS_DYNAMIC()) {
-	objtmp.dynamic = rtld_dynamic(&objtmp);
-	digest_dynamic1(&objtmp, 1, &dyn_rpath, &dyn_soname, &dyn_runpath);
-	assert(objtmp.needed == NULL);
+
+    objtmp.dynamic = rtld_dynamic(&objtmp);
+    digest_dynamic1(&objtmp, 1, &dyn_rpath, &dyn_soname, &dyn_runpath);
+    assert(objtmp.needed == NULL);
 #if !defined(__mips__)
-	/* MIPS has a bogus DT_TEXTREL. */
-	assert(!objtmp.textrel);
+    /* MIPS has a bogus DT_TEXTREL. */
+    assert(!objtmp.textrel);
 #endif
+    /*
+     * Temporarily put the dynamic linker entry into the object list, so
+     * that symbols can be found.
+     */
+    relocate_objects(&objtmp, true, &objtmp, 0, NULL);
 
-	/*
-	 * Temporarily put the dynamic linker entry into the object list, so
-	 * that symbols can be found.
-	 */
-
-	relocate_objects(&objtmp, true, &objtmp, 0, NULL);
-    }
     ehdr = (Elf_Ehdr *)mapbase;
     objtmp.phdr = (Elf_Phdr *)((char *)mapbase + ehdr->e_phoff);
     objtmp.phsize = ehdr->e_phnum * sizeof(objtmp.phdr[0]);

Modified: stable/11/libexec/rtld-elf/sparc64/rtld_machdep.h
==============================================================================
--- stable/11/libexec/rtld-elf/sparc64/rtld_machdep.h	Tue Jan  3 15:57:47 2017	(r311155)
+++ stable/11/libexec/rtld-elf/sparc64/rtld_machdep.h	Tue Jan  3 15:59:39 2017	(r311156)
@@ -37,7 +37,6 @@ struct Struct_Obj_Entry;
 /* Return the address of the .dynamic section in the dynamic linker. */
 Elf_Dyn *rtld_dynamic_addr(void);
 #define	rtld_dynamic(obj)	rtld_dynamic_addr()
-#define	RTLD_IS_DYNAMIC()	(rtld_dynamic_addr() != NULL)
 
 Elf_Addr reloc_jmpslot(Elf_Addr *, Elf_Addr,
 		       const struct Struct_Obj_Entry *,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201701031559.v03Fxdmr064052>