summaryrefslogtreecommitdiffstats
path: root/recipes-devtools/binutils/binutils/0015-Fix-dynamic-list-so-that-symbols-not-in-the-list-are.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-devtools/binutils/binutils/0015-Fix-dynamic-list-so-that-symbols-not-in-the-list-are.patch')
-rw-r--r--recipes-devtools/binutils/binutils/0015-Fix-dynamic-list-so-that-symbols-not-in-the-list-are.patch131
1 files changed, 0 insertions, 131 deletions
diff --git a/recipes-devtools/binutils/binutils/0015-Fix-dynamic-list-so-that-symbols-not-in-the-list-are.patch b/recipes-devtools/binutils/binutils/0015-Fix-dynamic-list-so-that-symbols-not-in-the-list-are.patch
deleted file mode 100644
index ee49c38..0000000
--- a/recipes-devtools/binutils/binutils/0015-Fix-dynamic-list-so-that-symbols-not-in-the-list-are.patch
+++ /dev/null
@@ -1,131 +0,0 @@
1From e9c1bdad269c0c3352eebcc9481ed65144001b0b Mon Sep 17 00:00:00 2001
2From: Cary Coutant <ccoutant@google.com>
3Date: Mon, 16 Feb 2015 22:15:12 -0800
4Subject: [PATCH] Fix --dynamic-list so that symbols not in the list are still
5 exported.
6
7In PR 13577, the complaint was that -Bsymbolic was overriding the binding
8behavior for symbols listed in the --dynamic-list by setting the DT_SYMBOLIC
9tag in the dynamic table. In reading the Gnu ld manual, I decided that
10--dynamic-list should be mutually exclusive of -Bsymbolic, and modified
11gold so that --dynamic-list would treat symbols listed as preemptible,
12and all other symbols as internally bound. I was wrong.
13
14PR 16992 shows that with --dynamic-list (and not -Bsymbolic), a symbol
15not listed in the dynamic list is being internally bound within the
16shared library, but because it's still in the dynamic symbol table, we
17expose it to a COPY relocation, and things go really bad from there.
18
19(I can reproduce the same failure, simply by turning on -Bsymbolic-functions
20with the Gnu linker. Even though the symbol is bound internally, it's
21still exported to the dynamic symbol table, and is exposed to a COPY
22relocation.)
23
24I've backed out part of the fix for PR 13577, and -Bsymbolic (or
25-Bsymbolic-functions) can now be used with --dynamic-list, but if the
26two are used together, we do not set DT_SYMBOLIC or DF_SYMBOLIC
27(this matches Gnu ld behavior). We now treat symbols listed in the
28dynamic list as premptible, but we do not automatically treat symbols
29not listed there as non-premptible.
30
31gold/
32 PR gold/13577
33 PR gold/16992
34 * layout.cc (Layout::finish_dynamic_section): Don't set DT_SYMBOLIC or
35 DF_SYMBOLIC if --dynamic-list option is used.
36 * options.cc (General_options::finalize): --dynamic-list is not
37 mutually exclusive with -Bsymbolic.
38 * symtab.h (Symbol::is_preemptible): Don't exclude dynamic symbols not
39 listed in --dynamic-list.
40 * testsuite/Makefile.am (dynamic_list_lib2.so): Add
41 -Bsymbolic-functions.
42 * testsuite/Makefile.in: Regenerate.
43---
44Upstream-Status: Backport
45
46 gold/ChangeLog | 14 ++++++++++++++
47 gold/layout.cc | 3 ++-
48 gold/options.cc | 7 -------
49 gold/symtab.h | 6 ++----
50 gold/testsuite/Makefile.am | 2 +-
51 gold/testsuite/Makefile.in | 2 +-
52 6 files changed, 20 insertions(+), 14 deletions(-)
53
54diff --git a/gold/layout.cc b/gold/layout.cc
55index bcdaac8..7836640 100644
56--- a/gold/layout.cc
57+++ b/gold/layout.cc
58@@ -4873,7 +4873,8 @@ Layout::finish_dynamic_section(const Input_objects* input_objects,
59 flags |= elfcpp::DF_STATIC_TLS;
60 if (parameters->options().origin())
61 flags |= elfcpp::DF_ORIGIN;
62- if (parameters->options().Bsymbolic())
63+ if (parameters->options().Bsymbolic()
64+ && !parameters->options().have_dynamic_list())
65 {
66 flags |= elfcpp::DF_SYMBOLIC;
67 // Add DT_SYMBOLIC for compatibility with older loaders.
68diff --git a/gold/options.cc b/gold/options.cc
69index 7eb8f27..7f1f69e 100644
70--- a/gold/options.cc
71+++ b/gold/options.cc
72@@ -1200,13 +1200,6 @@ General_options::finalize()
73 // in the path, as appropriate.
74 this->add_sysroot();
75
76- // --dynamic-list overrides -Bsymbolic and -Bsymbolic-functions.
77- if (this->have_dynamic_list())
78- {
79- this->set_Bsymbolic(false);
80- this->set_Bsymbolic_functions(false);
81- }
82-
83 // Now that we've normalized the options, check for contradictory ones.
84 if (this->shared() && this->is_static())
85 gold_fatal(_("-shared and -static are incompatible"));
86diff --git a/gold/symtab.h b/gold/symtab.h
87index aa0cb68..9413360 100644
88--- a/gold/symtab.h
89+++ b/gold/symtab.h
90@@ -604,10 +604,8 @@ class Symbol
91 if (parameters->options().in_dynamic_list(this->name()))
92 return true;
93
94- // If the user used -Bsymbolic or provided a --dynamic-list script,
95- // then nothing (else) is preemptible.
96- if (parameters->options().Bsymbolic()
97- || parameters->options().have_dynamic_list())
98+ // If the user used -Bsymbolic, then nothing (else) is preemptible.
99+ if (parameters->options().Bsymbolic())
100 return false;
101
102 // If the user used -Bsymbolic-functions, then functions are not
103diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
104index f767c21..7b73f9d 100644
105--- a/gold/testsuite/Makefile.am
106+++ b/gold/testsuite/Makefile.am
107@@ -1518,7 +1518,7 @@ dynamic_list_lib1.o: dynamic_list_lib1.cc
108 $(CXXCOMPILE) -c -fpic -o $@ $<
109
110 dynamic_list_lib2.so: gcctestdir/ld dynamic_list_lib2.o $(srcdir)/dynamic_list_2.t
111- $(CXXLINK) -Bgcctestdir/ -shared -Wl,--dynamic-list,$(srcdir)/dynamic_list_2.t dynamic_list_lib2.o
112+ $(CXXLINK) -Bgcctestdir/ -shared -Wl,-Bsymbolic-functions -Wl,--dynamic-list,$(srcdir)/dynamic_list_2.t dynamic_list_lib2.o
113 dynamic_list_lib2.o: dynamic_list_lib2.cc
114 $(CXXCOMPILE) -c -fpic -o $@ $<
115
116diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
117index 217e472..b4ae3fd 100644
118--- a/gold/testsuite/Makefile.in
119+++ b/gold/testsuite/Makefile.in
120@@ -5319,7 +5319,7 @@ uninstall-am:
121 @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $<
122
123 @GCC_TRUE@@NATIVE_LINKER_TRUE@dynamic_list_lib2.so: gcctestdir/ld dynamic_list_lib2.o $(srcdir)/dynamic_list_2.t
124-@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared -Wl,--dynamic-list,$(srcdir)/dynamic_list_2.t dynamic_list_lib2.o
125+@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared -Wl,-Bsymbolic-functions -Wl,--dynamic-list,$(srcdir)/dynamic_list_2.t dynamic_list_lib2.o
126 @GCC_TRUE@@NATIVE_LINKER_TRUE@dynamic_list_lib2.o: dynamic_list_lib2.cc
127 @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $<
128
129--
1301.9.1
131