Squashed 'yocto-poky/' content from commit ea562de

git-subtree-dir: yocto-poky
git-subtree-split: ea562de57590c966cd5a75fda8defecd397e6436
diff --git a/meta/recipes-devtools/binutils/binutils/0015-Fix-dynamic-list-so-that-symbols-not-in-the-list-are.patch b/meta/recipes-devtools/binutils/binutils/0015-Fix-dynamic-list-so-that-symbols-not-in-the-list-are.patch
new file mode 100644
index 0000000..ee49c38
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0015-Fix-dynamic-list-so-that-symbols-not-in-the-list-are.patch
@@ -0,0 +1,131 @@
+From e9c1bdad269c0c3352eebcc9481ed65144001b0b Mon Sep 17 00:00:00 2001
+From: Cary Coutant <ccoutant@google.com>
+Date: Mon, 16 Feb 2015 22:15:12 -0800
+Subject: [PATCH] Fix --dynamic-list so that symbols not in the list are still
+ exported.
+
+In PR 13577, the complaint was that -Bsymbolic was overriding the binding
+behavior for symbols listed in the --dynamic-list by setting the DT_SYMBOLIC
+tag in the dynamic table. In reading the Gnu ld manual, I decided that
+--dynamic-list should be mutually exclusive of -Bsymbolic, and modified
+gold so that --dynamic-list would treat symbols listed as preemptible,
+and all other symbols as internally bound. I was wrong.
+
+PR 16992 shows that with --dynamic-list (and not -Bsymbolic), a symbol
+not listed in the dynamic list is being internally bound within the
+shared library, but because it's still in the dynamic symbol table, we
+expose it to a COPY relocation, and things go really bad from there.
+
+(I can reproduce the same failure, simply by turning on -Bsymbolic-functions
+with the Gnu linker. Even though the symbol is bound internally, it's
+still exported to the dynamic symbol table, and is exposed to a COPY
+relocation.)
+
+I've backed out part of the fix for PR 13577, and -Bsymbolic (or
+-Bsymbolic-functions) can now be used with --dynamic-list, but if the
+two are used together, we do not set DT_SYMBOLIC or DF_SYMBOLIC
+(this matches Gnu ld behavior). We now treat symbols listed in the
+dynamic list as premptible, but we do not automatically treat symbols
+not listed there as non-premptible.
+
+gold/
+	PR gold/13577
+	PR gold/16992
+	* layout.cc (Layout::finish_dynamic_section): Don't set DT_SYMBOLIC or
+	DF_SYMBOLIC if --dynamic-list option is used.
+	* options.cc (General_options::finalize): --dynamic-list is not
+	mutually exclusive with -Bsymbolic.
+	* symtab.h (Symbol::is_preemptible): Don't exclude dynamic symbols not
+	listed in --dynamic-list.
+	* testsuite/Makefile.am (dynamic_list_lib2.so): Add
+	-Bsymbolic-functions.
+	* testsuite/Makefile.in: Regenerate.
+---
+Upstream-Status: Backport
+
+ gold/ChangeLog             | 14 ++++++++++++++
+ gold/layout.cc             |  3 ++-
+ gold/options.cc            |  7 -------
+ gold/symtab.h              |  6 ++----
+ gold/testsuite/Makefile.am |  2 +-
+ gold/testsuite/Makefile.in |  2 +-
+ 6 files changed, 20 insertions(+), 14 deletions(-)
+
+diff --git a/gold/layout.cc b/gold/layout.cc
+index bcdaac8..7836640 100644
+--- a/gold/layout.cc
++++ b/gold/layout.cc
+@@ -4873,7 +4873,8 @@ Layout::finish_dynamic_section(const Input_objects* input_objects,
+     flags |= elfcpp::DF_STATIC_TLS;
+   if (parameters->options().origin())
+     flags |= elfcpp::DF_ORIGIN;
+-  if (parameters->options().Bsymbolic())
++  if (parameters->options().Bsymbolic()
++      && !parameters->options().have_dynamic_list())
+     {
+       flags |= elfcpp::DF_SYMBOLIC;
+       // Add DT_SYMBOLIC for compatibility with older loaders.
+diff --git a/gold/options.cc b/gold/options.cc
+index 7eb8f27..7f1f69e 100644
+--- a/gold/options.cc
++++ b/gold/options.cc
+@@ -1200,13 +1200,6 @@ General_options::finalize()
+   // in the path, as appropriate.
+   this->add_sysroot();
+ 
+-  // --dynamic-list overrides -Bsymbolic and -Bsymbolic-functions.
+-  if (this->have_dynamic_list())
+-    {
+-      this->set_Bsymbolic(false);
+-      this->set_Bsymbolic_functions(false);
+-    }
+-
+   // Now that we've normalized the options, check for contradictory ones.
+   if (this->shared() && this->is_static())
+     gold_fatal(_("-shared and -static are incompatible"));
+diff --git a/gold/symtab.h b/gold/symtab.h
+index aa0cb68..9413360 100644
+--- a/gold/symtab.h
++++ b/gold/symtab.h
+@@ -604,10 +604,8 @@ class Symbol
+     if (parameters->options().in_dynamic_list(this->name()))
+       return true;
+ 
+-    // If the user used -Bsymbolic or provided a --dynamic-list script,
+-    // then nothing (else) is preemptible.
+-    if (parameters->options().Bsymbolic()
+-        || parameters->options().have_dynamic_list())
++    // If the user used -Bsymbolic, then nothing (else) is preemptible.
++    if (parameters->options().Bsymbolic())
+       return false;
+ 
+     // If the user used -Bsymbolic-functions, then functions are not
+diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
+index f767c21..7b73f9d 100644
+--- a/gold/testsuite/Makefile.am
++++ b/gold/testsuite/Makefile.am
+@@ -1518,7 +1518,7 @@ dynamic_list_lib1.o: dynamic_list_lib1.cc
+ 	$(CXXCOMPILE) -c -fpic -o $@ $<
+ 
+ dynamic_list_lib2.so: gcctestdir/ld dynamic_list_lib2.o $(srcdir)/dynamic_list_2.t
+-	$(CXXLINK) -Bgcctestdir/ -shared -Wl,--dynamic-list,$(srcdir)/dynamic_list_2.t dynamic_list_lib2.o
++	$(CXXLINK) -Bgcctestdir/ -shared -Wl,-Bsymbolic-functions -Wl,--dynamic-list,$(srcdir)/dynamic_list_2.t dynamic_list_lib2.o
+ dynamic_list_lib2.o: dynamic_list_lib2.cc
+ 	$(CXXCOMPILE) -c -fpic -o $@ $<
+ 
+diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
+index 217e472..b4ae3fd 100644
+--- a/gold/testsuite/Makefile.in
++++ b/gold/testsuite/Makefile.in
+@@ -5319,7 +5319,7 @@ uninstall-am:
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@	$(CXXCOMPILE) -c -fpic -o $@ $<
+ 
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@dynamic_list_lib2.so: gcctestdir/ld dynamic_list_lib2.o $(srcdir)/dynamic_list_2.t
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@	$(CXXLINK) -Bgcctestdir/ -shared -Wl,--dynamic-list,$(srcdir)/dynamic_list_2.t dynamic_list_lib2.o
++@GCC_TRUE@@NATIVE_LINKER_TRUE@	$(CXXLINK) -Bgcctestdir/ -shared -Wl,-Bsymbolic-functions -Wl,--dynamic-list,$(srcdir)/dynamic_list_2.t dynamic_list_lib2.o
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@dynamic_list_lib2.o: dynamic_list_lib2.cc
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@	$(CXXCOMPILE) -c -fpic -o $@ $<
+ 
+-- 
+1.9.1
+