svn commit: r275412 - head/libexec/rtld-elf
John Baldwin
jhb at FreeBSD.org
Tue Dec 2 16:22:09 UTC 2014
Author: jhb
Date: Tue Dec 2 16:22:08 2014
New Revision: 275412
URL: https://svnweb.freebsd.org/changeset/base/275412
Log:
The runtime linker needs to include a path to itself in the link map
it exports to the debugger. It currently has two choices: it can use
a compiled-in path (/libexec/ld-elf.so.1) or it can use the path stored
in the interpreter path in the binary being executed. The runtime linker
currently prefers the second. However, this is usually wrong for compat32
binaries since the binary specifies the path of rtld on a 32-bit system
(/libexec/ld-elf.so.1) instead of the actual path (/libexec/ld-elf32.so.1).
For now, always assume the compiled in path (/libexec/ld-elf32.so.1) as
the rtld path and ignore the path in the binary for the 32-bit runtime
linker.
Differential Revision: https://reviews.freebsd.org/D1236
Reviewed by: kib
Modified:
head/libexec/rtld-elf/rtld.c
Modified: head/libexec/rtld-elf/rtld.c
==============================================================================
--- head/libexec/rtld-elf/rtld.c Tue Dec 2 14:48:21 2014 (r275411)
+++ head/libexec/rtld-elf/rtld.c Tue Dec 2 16:22:08 2014 (r275412)
@@ -503,6 +503,7 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_
aux_info[AT_STACKPROT]->a_un.a_val != 0)
stack_prot = aux_info[AT_STACKPROT]->a_un.a_val;
+#ifndef COMPAT_32BIT
/*
* Get the actual dynamic linker pathname from the executable if
* possible. (It should always be possible.) That ensures that
@@ -515,6 +516,7 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_
obj_rtld.path = xstrdup(obj_main->interp);
__progname = obj_rtld.path;
}
+#endif
digest_dynamic(obj_main, 0);
dbg("%s valid_hash_sysv %d valid_hash_gnu %d dynsymcount %d",
More information about the svn-src-head
mailing list