summaryrefslogtreecommitdiffstats
path: root/libexec
diff options
context:
space:
mode:
authoremaste <emaste@FreeBSD.org>2015-04-28 01:15:17 +0000
committeremaste <emaste@FreeBSD.org>2015-04-28 01:15:17 +0000
commitf114cb2240600206bb5435db4c5784e5f8838acb (patch)
tree4e8c63e32357a386af3c1cec3e901c5dd6fc2d09 /libexec
parent971f2aaa6e10e4371345eb03c47d43ffb378a3be (diff)
downloadFreeBSD-src-f114cb2240600206bb5435db4c5784e5f8838acb.zip
FreeBSD-src-f114cb2240600206bb5435db4c5784e5f8838acb.tar.gz
MFC r281005: Make die available as rtld_die for use by MD relocation code
Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'libexec')
-rw-r--r--libexec/rtld-elf/rtld.c37
-rw-r--r--libexec/rtld-elf/rtld.h1
2 files changed, 19 insertions, 19 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index cef0c42..b39a2d5 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -78,7 +78,6 @@ typedef void * (*path_enum_proc) (const char *path, size_t len, void *arg);
* Function declarations.
*/
static const char *basename(const char *);
-static void die(void) __dead2;
static void digest_dynamic1(Obj_Entry *, int, const Elf_Dyn **,
const Elf_Dyn **, const Elf_Dyn **);
static void digest_dynamic2(Obj_Entry *, const Elf_Dyn *, const Elf_Dyn *,
@@ -422,7 +421,7 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp)
unsetenv(LD_ "DEBUG") || unsetenv(LD_ "ELF_HINTS_PATH") ||
unsetenv(LD_ "LOADFLTR") || unsetenv(LD_ "LIBRARY_PATH_RPATH")) {
_rtld_error("environment corrupt; aborting");
- die();
+ rtld_die();
}
}
ld_debug = getenv(LD_ "DEBUG");
@@ -470,7 +469,7 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp)
obj_main = map_object(fd, argv0, NULL);
close(fd);
if (obj_main == NULL)
- die();
+ rtld_die();
max_stack_flags = obj->stack_flags;
} else { /* Main program already loaded. */
const Elf_Phdr *phdr;
@@ -487,7 +486,7 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp)
assert(aux_info[AT_ENTRY] != NULL);
entry = (caddr_t) aux_info[AT_ENTRY]->a_un.a_ptr;
if ((obj_main = digest_phdr(phdr, phnum, entry, argv0)) == NULL)
- die();
+ rtld_die();
}
if (aux_info[AT_EXECPATH] != 0) {
@@ -554,12 +553,12 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp)
dbg("loading LD_PRELOAD libraries");
if (load_preload_objects() == -1)
- die();
+ rtld_die();
preload_tail = obj_tail;
dbg("loading needed objects");
if (load_needed_objects(obj_main, 0) == -1)
- die();
+ rtld_die();
/* Make a list of all objects loaded at startup. */
last_interposer = obj_main;
@@ -575,7 +574,7 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp)
dbg("checking for required versions");
if (rtld_verify_versions(&list_main) == -1 && !ld_tracing)
- die();
+ rtld_die();
if (ld_tracing) { /* We're done */
trace_loaded_objects(obj_main);
@@ -604,11 +603,11 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp)
if (relocate_objects(obj_main,
ld_bind_now != NULL && *ld_bind_now != '\0',
&obj_rtld, SYMLOOK_EARLY, NULL) == -1)
- die();
+ rtld_die();
dbg("doing copy relocations");
if (do_copy_relocations(obj_main) == -1)
- die();
+ rtld_die();
if (getenv(LD_ "DUMP_REL_POST") != NULL) {
dump_relocations(obj_main);
@@ -640,7 +639,7 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp)
if (resolve_objects_ifunc(obj_main,
ld_bind_now != NULL && *ld_bind_now != '\0', SYMLOOK_EARLY,
NULL) == -1)
- die();
+ rtld_die();
if (!obj_main->crt_no_init) {
/*
@@ -707,7 +706,7 @@ _rtld_bind(Obj_Entry *obj, Elf_Size reloff)
def = find_symdef(ELF_R_SYM(rel->r_info), obj, &defobj, true, NULL,
&lockstate);
if (def == NULL)
- die();
+ rtld_die();
if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC)
target = (Elf_Addr)rtld_resolve_ifunc(defobj, def);
else
@@ -856,8 +855,8 @@ origin_subst(char *real, const char *origin_path)
return (res4);
}
-static void
-die(void)
+void
+rtld_die(void)
{
const char *msg = dlerror();
@@ -1207,7 +1206,7 @@ digest_dynamic2(Obj_Entry *obj, const Elf_Dyn *dyn_rpath,
if (obj->z_origin && obj->origin_path == NULL) {
obj->origin_path = xmalloc(PATH_MAX);
if (rtld_dirname_abs(obj->path, obj->origin_path) == -1)
- die();
+ rtld_die();
}
if (dyn_runpath != NULL) {
@@ -1911,7 +1910,7 @@ init_pagesizes(Elf_Auxinfo **aux_info)
}
if (sysctl(mib, len, psa, &size, NULL, 0) == -1) {
_rtld_error("sysctl for hw.pagesize(s) failed");
- die();
+ rtld_die();
}
psa_filled:
pagesizes = psa;
@@ -4496,7 +4495,7 @@ allocate_module_tls(int index)
}
if (!obj) {
_rtld_error("Can't find module with TLS index %d", index);
- die();
+ rtld_die();
}
p = malloc_aligned(obj->tlssize, obj->tlsalign);
@@ -4637,7 +4636,7 @@ locate_dependency(const Obj_Entry *obj, const char *name)
}
_rtld_error("%s: Unexpected inconsistency: dependency %s not found",
obj->path, name);
- die();
+ rtld_die();
}
static int
@@ -4944,7 +4943,7 @@ __stack_chk_fail(void)
{
_rtld_error("stack overflow detected; terminated");
- die();
+ rtld_die();
}
__weak_reference(__stack_chk_fail, __stack_chk_fail_local);
@@ -4953,7 +4952,7 @@ __chk_fail(void)
{
_rtld_error("buffer overflow detected; terminated");
- die();
+ rtld_die();
}
const char *
diff --git a/libexec/rtld-elf/rtld.h b/libexec/rtld-elf/rtld.h
index 2fef9ef..d75d0ab 100644
--- a/libexec/rtld-elf/rtld.h
+++ b/libexec/rtld-elf/rtld.h
@@ -355,6 +355,7 @@ typedef struct Struct_SymLook {
} SymLook;
void _rtld_error(const char *, ...) __printflike(1, 2) __exported;
+void rtld_die(void) __dead2;
const char *rtld_strerror(int);
Obj_Entry *map_object(int, const char *, const struct stat *);
void *xcalloc(size_t, size_t);
OpenPOWER on IntegriCloud