summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/binutils/binutils/0003-binutils-nativesdk-Search-for-alternative-ld.so.conf.patch
blob: 4df386fe959de00fddfb1c6d60ef5ad43fb1cc46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
From 96b52f92b2888e1954f619bffd17a3f55be2e27e Mon Sep 17 00:00:00 2001
From: Richard Purdie <richard.purdie@linuxfoundation.org>
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 <richard.purdie@linuxfoundation.org>
2020/1/17
Upstream-Status: Inappropriate [OE specific tweak]

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 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 ccff9289924..cf2c29e89a3 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -42,7 +42,8 @@ ZLIBINC = @zlibinc@
 
 ELF_CFLAGS=-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_CFLAGS) $(JANSSON_CFLAGS) $(ZSTD_CFLAGS)
diff --git a/ld/Makefile.in b/ld/Makefile.in
index 3e24bd4deb2..23d4f1f3132 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -576,7 +576,8 @@ ZLIB = @zlibdir@ -lz
 ZLIBINC = @zlibinc@
 ELF_CFLAGS = -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_CFLAGS) $(JANSSON_CFLAGS) $(ZSTD_CFLAGS)
 
diff --git a/ld/ldelf.c b/ld/ldelf.c
index f4f27fc3873..a870c39bd81 100644
--- a/ld/ldelf.c
+++ b/ld/ldelf.c
@@ -943,7 +943,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, "/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 67c60c3f80d..7878bd3922f 100644
--- a/ld/ldmain.c
+++ b/ld/ldmain.c
@@ -74,6 +74,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 0baa3c305c3..899c4b591c6 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;