109 lines
3.9 KiB
Diff
109 lines
3.9 KiB
Diff
Upstream-Status: Inappropriate [SDK specific]
|
|
|
|
This patch puts the dynamic loader path in the binaries, SYSTEM_DIRS strings
|
|
and lengths as well as ld.so.cache path in the dynamic loader to specific
|
|
sections in memory. The sections that contain paths have been allocated a 4096
|
|
byte section, which is the maximum path length in linux. This will allow the
|
|
relocating script to parse the ELF binary, detect the section and easily replace
|
|
the strings in a certain path.
|
|
|
|
Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
|
|
|
|
Index: libc/elf/interp.c
|
|
===================================================================
|
|
--- libc.orig/elf/interp.c
|
|
+++ libc/elf/interp.c
|
|
@@ -16,5 +16,5 @@
|
|
License along with the GNU C Library; if not, see
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
-const char __invoke_dynamic_linker__[] __attribute__ ((section (".interp")))
|
|
+const char __invoke_dynamic_linker__[4096] __attribute__ ((section (".interp")))
|
|
= RUNTIME_LINKER;
|
|
Index: libc/elf/dl-load.c
|
|
===================================================================
|
|
--- libc.orig/elf/dl-load.c
|
|
+++ libc/elf/dl-load.c
|
|
@@ -144,8 +144,8 @@ static size_t max_capstrlen attribute_re
|
|
/* Get the generated information about the trusted directories. */
|
|
#include "trusted-dirs.h"
|
|
|
|
-static const char system_dirs[] = SYSTEM_DIRS;
|
|
-static const size_t system_dirs_len[] =
|
|
+static const char system_dirs[4096] __attribute__ ((section (".sysdirs"))) = SYSTEM_DIRS;
|
|
+volatile static const size_t system_dirs_len[] __attribute__ ((section (".sysdirslen"))) =
|
|
{
|
|
SYSTEM_DIRS_LEN
|
|
};
|
|
Index: libc/elf/dl-cache.c
|
|
===================================================================
|
|
--- libc.orig/elf/dl-cache.c
|
|
+++ libc/elf/dl-cache.c
|
|
@@ -133,6 +133,10 @@ do \
|
|
while (0)
|
|
|
|
|
|
+const char LD_SO_CACHE[4096] __attribute__ ((section (".ldsocache"))) =
|
|
+ SYSCONFDIR "/ld.so.cache";
|
|
+
|
|
+
|
|
int
|
|
internal_function
|
|
_dl_cache_libcmp (const char *p1, const char *p2)
|
|
Index: libc/elf/ldconfig.c
|
|
===================================================================
|
|
--- libc.orig/elf/ldconfig.c
|
|
+++ libc/elf/ldconfig.c
|
|
@@ -166,6 +166,9 @@ static struct argp argp =
|
|
options, parse_opt, NULL, doc, NULL, more_help, NULL
|
|
};
|
|
|
|
+
|
|
+extern const char LD_SO_CACHE[4096] __attribute__ ((section (".ldsocache")));
|
|
+
|
|
/* Check if string corresponds to an important hardware capability or
|
|
a platform. */
|
|
static int
|
|
Index: libc/sysdeps/generic/dl-cache.h
|
|
===================================================================
|
|
--- libc.orig/sysdeps/generic/dl-cache.h
|
|
+++ libc/sysdeps/generic/dl-cache.h
|
|
@@ -27,10 +27,6 @@
|
|
((flags) == 1 || (flags) == _DL_CACHE_DEFAULT_ID)
|
|
#endif
|
|
|
|
-#ifndef LD_SO_CACHE
|
|
-# define LD_SO_CACHE SYSCONFDIR "/ld.so.cache"
|
|
-#endif
|
|
-
|
|
#ifndef add_system_dir
|
|
# define add_system_dir(dir) add_dir (dir)
|
|
#endif
|
|
Index: libc/elf/rtld.c
|
|
===================================================================
|
|
--- libc.orig/elf/rtld.c
|
|
+++ libc/elf/rtld.c
|
|
@@ -99,6 +99,7 @@ uintptr_t __pointer_chk_guard_local
|
|
strong_alias (__pointer_chk_guard_local, __pointer_chk_guard)
|
|
#endif
|
|
|
|
+extern const char LD_SO_CACHE[4096] __attribute__ ((section (".ldsocache")));
|
|
|
|
/* List of auditing DSOs. */
|
|
static struct audit_list
|
|
@@ -1031,12 +1032,12 @@ of this helper program; chances are you
|
|
--list list all dependencies and how they are resolved\n\
|
|
--verify verify that given object really is a dynamically linked\n\
|
|
object we can handle\n\
|
|
- --inhibit-cache Do not use " LD_SO_CACHE "\n\
|
|
+ --inhibit-cache Do not use %s\n\
|
|
--library-path PATH use given PATH instead of content of the environment\n\
|
|
variable LD_LIBRARY_PATH\n\
|
|
--inhibit-rpath LIST ignore RUNPATH and RPATH information in object names\n\
|
|
in LIST\n\
|
|
- --audit LIST use objects named in LIST as auditors\n");
|
|
+ --audit LIST use objects named in LIST as auditors\n", LD_SO_CACHE);
|
|
|
|
++_dl_skip_args;
|
|
--_dl_argc;
|