From 67735b3647f98ce0f010ff8b4f9b5c5da576cb17 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Wed, 19 Feb 2020 09:51:16 -0800 Subject: [PATCH] binutils-nativesdk: Search for alternative ld.so.conf in SDK installation We need binutils to look at our ld.so.conf file within the SDK to ensure we search the SDK's libdirs as well as those from the host system. We therefore pass in the directory to the code using a define, then add it to a section we relocate in a similar way to the way we relocate the gcc internal paths. This ensures that ld works correctly in our buildtools tarball. Standard sysroot relocation doesn't work since we're not in a sysroot, we want to use both the host system and SDK libs. Signed-off-by: Richard Purdie 2020/1/17 Upstream-Status: Inappropriate [OE specific tweak] Signed-off-by: Khem Raj --- ld/Makefile.am | 3 ++- ld/Makefile.in | 3 ++- ld/ldelf.c | 2 +- ld/ldmain.c | 1 + ld/ldmain.h | 1 + 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ld/Makefile.am b/ld/Makefile.am index d31021c13e2..29782385ca4 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -42,7 +42,8 @@ ZLIBINC = @zlibinc@ ELF_CLFAGS=-DELF_LIST_OPTIONS=@elf_list_options@ \ -DELF_SHLIB_LIST_OPTIONS=@elf_shlib_list_options@ \ - -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@ + -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@ \ + -DSYSCONFDIR="\"$(sysconfdir)\"" WARN_CFLAGS = @WARN_CFLAGS@ NO_WERROR = @NO_WERROR@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS) $(JANSSON_CFLAGS) diff --git a/ld/Makefile.in b/ld/Makefile.in index ee0c98f65b0..04ee68a2c67 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -562,7 +562,8 @@ ZLIB = @zlibdir@ -lz ZLIBINC = @zlibinc@ ELF_CLFAGS = -DELF_LIST_OPTIONS=@elf_list_options@ \ -DELF_SHLIB_LIST_OPTIONS=@elf_shlib_list_options@ \ - -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@ + -DELF_PLT_UNWIND_LIST_OPTIONS=@elf_plt_unwind_list_options@ \ + -DSYSCONFDIR="\"$(sysconfdir)\"" AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS) $(JANSSON_CFLAGS) diff --git a/ld/ldelf.c b/ld/ldelf.c index bfa0d54753a..0d61a3209ec 100644 --- a/ld/ldelf.c +++ b/ld/ldelf.c @@ -936,7 +936,7 @@ ldelf_check_ld_so_conf (const struct bfd_link_needed_list *l, int force, info.path = NULL; info.len = info.alloc = 0; - tmppath = concat (ld_sysroot, prefix, "/etc/ld.so.conf", + tmppath = concat (ld_sysconfdir, "/etc/ld.so.conf", (const char *) NULL); if (!ldelf_parse_ld_so_conf (&info, tmppath)) { diff --git a/ld/ldmain.c b/ld/ldmain.c index ea72b14a301..1ae90a77749 100644 --- a/ld/ldmain.c +++ b/ld/ldmain.c @@ -70,6 +70,7 @@ char *program_name; /* The prefix for system library directories. */ const char *ld_sysroot; +char ld_sysconfdir[4096] __attribute__ ((section (".gccrelocprefix"))) = SYSCONFDIR; /* The canonical representation of ld_sysroot. */ char *ld_canon_sysroot; diff --git a/ld/ldmain.h b/ld/ldmain.h index f6d05a02f59..e60292cd522 100644 --- a/ld/ldmain.h +++ b/ld/ldmain.h @@ -23,6 +23,7 @@ extern char *program_name; extern const char *ld_sysroot; +extern char ld_sysconfdir[4096]; extern char *ld_canon_sysroot; extern int ld_canon_sysroot_len; extern FILE *saved_script_handle;