summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2020-05-10 13:19:55 -0700
committerH.J. Lu <hjl.tools@gmail.com>2020-05-10 13:19:55 -0700
commit31f129eccbeba20a993529879fc9f84e3875fdde (patch)
tree277f001c866ef13f665181d2c32f18501b3707f7
parentd60c4bf851c33a684464e2d64aa2785d11fac245 (diff)
downloadbinutils-gdb-users/hjl/linux/master.tar.gz
Apply PR gold/25476 fixusers/hjl/linux/master
-rw-r--r--patches/0001-gold-Workaround-PR-gold-25968.patch45
-rw-r--r--patches/0002-Gold-Allow-repeated-call-to-set_doing_static_link.patch33
-rw-r--r--patches/0003-gold-Initial-TLS-relocation-scan-support.patch93
-rw-r--r--patches/0004-gold-Enable-TLS-relocation-scan.patch185
-rw-r--r--patches/0005-gold-Handle-TLS-relocation-scan-in-garbage-collectio.patch142
-rw-r--r--patches/0006-gold-Enable-TLS-relocation-scan-for-x86-64.patch326
-rw-r--r--patches/0007-gold-Add-testcases-for-PR-gold-25476.patch1047
-rw-r--r--patches/README7
8 files changed, 1878 insertions, 0 deletions
diff --git a/patches/0001-gold-Workaround-PR-gold-25968.patch b/patches/0001-gold-Workaround-PR-gold-25968.patch
new file mode 100644
index 00000000000..e954cdfe290
--- /dev/null
+++ b/patches/0001-gold-Workaround-PR-gold-25968.patch
@@ -0,0 +1,45 @@
+From 1246ff83c5b794d129b644459074ccfce8f7e758 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Sun, 10 May 2020 12:46:42 -0700
+Subject: [PATCH 1/7] gold: Workaround PR gold/25968
+
+Since plugin_test_1 fails with --gc-sections, pass --no-tls-optimize
+to turn off TLS relocation scan which uses Gc_process_relocs.
+
+ PR gold/25968
+ * testsuite/Makefile.am (plugin_test_1): Pass --no-tls-optimize
+ to gold.
+---
+ gold/testsuite/Makefile.am | 2 +-
+ gold/testsuite/Makefile.in | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
+index aff896a060..497b7e9df9 100644
+--- a/gold/testsuite/Makefile.am
++++ b/gold/testsuite/Makefile.am
+@@ -2291,7 +2291,7 @@ check_SCRIPTS += plugin_test_1.sh
+ check_DATA += plugin_test_1.err
+ MOSTLYCLEANFILES += plugin_test_1.err
+ plugin_test_1: two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms gcctestdir/ld plugin_test.so
+- $(CXXLINK) -Wl,--no-demangle,--emit-relocs,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv" two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms 2>plugin_test_1.err
++ $(CXXLINK) -Wl,--no-tls-optimize,--no-demangle,--emit-relocs,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv" two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms 2>plugin_test_1.err
+ plugin_test_1.err: plugin_test_1
+ @touch plugin_test_1.err
+
+diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
+index 8b55f72561..1c78065709 100644
+--- a/gold/testsuite/Makefile.in
++++ b/gold/testsuite/Makefile.in
+@@ -8787,7 +8787,7 @@ uninstall-am:
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ test -d alt || mkdir -p alt
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -o $@ $<
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_test_1: two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms gcctestdir/ld plugin_test.so
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(CXXLINK) -Wl,--no-demangle,--emit-relocs,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv" two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms 2>plugin_test_1.err
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(CXXLINK) -Wl,--no-tls-optimize,--no-demangle,--emit-relocs,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv" two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms 2>plugin_test_1.err
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_test_1.err: plugin_test_1
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ @touch plugin_test_1.err
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_test_2: two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_shared_2.so gcctestdir/ld plugin_test.so
+--
+2.26.2
+
diff --git a/patches/0002-Gold-Allow-repeated-call-to-set_doing_static_link.patch b/patches/0002-Gold-Allow-repeated-call-to-set_doing_static_link.patch
new file mode 100644
index 00000000000..b106a0485bb
--- /dev/null
+++ b/patches/0002-Gold-Allow-repeated-call-to-set_doing_static_link.patch
@@ -0,0 +1,33 @@
+From d42e7730ad0e07500bfdefd192763fab3b18c477 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Sun, 10 May 2020 09:18:03 -0700
+Subject: [PATCH 2/7] Gold: Allow repeated call to set_doing_static_link
+
+Allow repeated call to set_doing_static_link as long as it is a NOP so
+that do_adjust_output_section can be called early.
+
+ PR gold/25476
+ * parameters.cc (Parameters::set_doing_static_link): Allow
+ repeated call as long as it is a NOP.
+---
+ gold/parameters.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/gold/parameters.cc b/gold/parameters.cc
+index d677044a07..8d41314b79 100644
+--- a/gold/parameters.cc
++++ b/gold/parameters.cc
+@@ -106,6 +106,10 @@ Parameters::set_options(const General_options* options)
+ void
+ Parameters::set_doing_static_link(bool doing_static_link)
+ {
++ // NB: Allow repeated call as long as it is a NOP.
++ if (this->doing_static_link_valid_
++ && doing_static_link == this->doing_static_link_)
++ return;
+ gold_assert(!this->doing_static_link_valid_);
+ this->doing_static_link_ = doing_static_link;
+ this->doing_static_link_valid_ = true;
+--
+2.26.2
+
diff --git a/patches/0003-gold-Initial-TLS-relocation-scan-support.patch b/patches/0003-gold-Initial-TLS-relocation-scan-support.patch
new file mode 100644
index 00000000000..bbfaf1b5b2d
--- /dev/null
+++ b/patches/0003-gold-Initial-TLS-relocation-scan-support.patch
@@ -0,0 +1,93 @@
+From 83e3095bfc40cb7147bf87b8aa8d70122dea0648 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Sun, 10 May 2020 09:26:04 -0700
+Subject: [PATCH 3/7] gold: Initial TLS relocation scan support
+
+Add need_tls_process_relocs_ and input_objects_ to Target to allow TLS
+relocation scan for TLSDESC -> IE relaxation in shared object.
+
+ PR gold/25476
+ * target.h (Target): Add need_tls_process_relocs, input_objects,
+ set_input_objects, set_need_tls_process_relocs,
+ need_tls_process_relocs_ and input_objects_.
+ (Target::Target): Initialize need_tls_process_relocs_ and
+ input_objects_.
+---
+ gold/target.h | 33 ++++++++++++++++++++++++++++++++-
+ 1 file changed, 32 insertions(+), 1 deletion(-)
+
+diff --git a/gold/target.h b/gold/target.h
+index 089d7b377c..30f29c982b 100644
+--- a/gold/target.h
++++ b/gold/target.h
+@@ -98,6 +98,16 @@ class Target
+ are_processor_specific_flags_set() const
+ { return this->are_processor_specific_flags_set_; }
+
++ // Whether TLS relocation scan is needed.
++ bool
++ need_tls_process_relocs() const
++ { return this->need_tls_process_relocs_; }
++
++ // Get all input objects.
++ const Input_objects *
++ input_objects() const
++ { return this->input_objects_; }
++
+ // Whether this target has a specific make_symbol function.
+ bool
+ has_make_symbol() const
+@@ -514,6 +524,13 @@ class Target
+ finalize_gnu_properties(Layout* layout) const
+ { this->do_finalize_gnu_properties(layout); }
+
++ // Make all input objects available to target for TLS relocation scan.
++ void
++ set_input_objects(const Input_objects *input_objects)
++ {
++ this->input_objects_ = input_objects;
++ }
++
+ protected:
+ // This struct holds the constant information for a child class. We
+ // use a struct to avoid the overhead of virtual function calls for
+@@ -579,7 +596,10 @@ class Target
+
+ Target(const Target_info* pti)
+ : pti_(pti), processor_specific_flags_(0),
+- are_processor_specific_flags_set_(false), osabi_(elfcpp::ELFOSABI_NONE)
++ are_processor_specific_flags_set_(false),
++ osabi_(elfcpp::ELFOSABI_NONE),
++ need_tls_process_relocs_(false),
++ input_objects_(NULL)
+ { }
+
+ // Virtual function which may be implemented by the child class.
+@@ -707,6 +727,13 @@ class Target
+ this->are_processor_specific_flags_set_ = true;
+ }
+
++ // Require TLS relocation scan.
++ void
++ set_need_tls_process_relocs()
++ {
++ this->need_tls_process_relocs_ = true;
++ }
++
+ #ifdef HAVE_TARGET_32_LITTLE
+ // Virtual functions which may be overridden by the child class.
+ virtual Object*
+@@ -847,6 +874,10 @@ class Target
+ // the ELF header. This is handled at this level because it is
+ // OS-specific rather than processor-specific.
+ elfcpp::ELFOSABI osabi_;
++ // Whether TLS relocation scan is needed.
++ bool need_tls_process_relocs_;
++ // All input objects.
++ const Input_objects *input_objects_;
+ };
+
+ // The abstract class for a specific size and endianness of target.
+--
+2.26.2
+
diff --git a/patches/0004-gold-Enable-TLS-relocation-scan.patch b/patches/0004-gold-Enable-TLS-relocation-scan.patch
new file mode 100644
index 00000000000..ab57c81b50b
--- /dev/null
+++ b/patches/0004-gold-Enable-TLS-relocation-scan.patch
@@ -0,0 +1,185 @@
+From edd3f277480c9cecafb1a286828c2257017c9e82 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Sun, 10 May 2020 09:44:52 -0700
+Subject: [PATCH 4/7] gold: Enable TLS relocation scan
+
+When creating a shared library, input object files can have GDesc and IE
+relocations against the same symbol. If IE relocation is scanned first,
+GDesc relocation can be optimized to IE relocation. Add an optional
+early TLS relocation scan pass before the regular relocation scan to
+detect IE relocations.
+
+ PR gold/25476
+ * object.cc (Sized_relobj_file<size, big_endian>::do_layout):
+ Use 2 passes for TLS relocation scan.
+ * object.h (Object): Initialize scan_tls_relocs_only_.
+ Add set_scan_tls_relocs_only, clear_scan_tls_relocs_only,
+ scan_tls_relocs_only and scan_tls_relocs_only_.
+ * reloc.cc (Read_relocs::run): Support TLS relocation scan.
+ (Sized_relobj_file<size, big_endian>::do_scan_relocs): Likewise.
+ * reloc.h (Gc_process_relocs::Gc_process_relocs): Add 2 arguments,
+ gc_process_relocs and tls_process_relocs. Initialize
+ gc_process_relocs_ and tls_process_relocs_.
+ (Gc_process_relocs): Add gc_process_relocs_ and
+ tls_process_relocs_.
+---
+ gold/object.cc | 11 +++++++++++
+ gold/object.h | 22 ++++++++++++++++++++--
+ gold/reloc.cc | 18 ++++++++++++++----
+ gold/reloc.h | 11 +++++++++--
+ 4 files changed, 54 insertions(+), 8 deletions(-)
+
+diff --git a/gold/object.cc b/gold/object.cc
+index c486a2011d..2551911f86 100644
+--- a/gold/object.cc
++++ b/gold/object.cc
+@@ -1419,10 +1419,12 @@ Sized_relobj_file<size, big_endian>::do_layout(Symbol_table* symtab,
+ const unsigned int unwind_section_type =
+ parameters->target().unwind_section_type();
+ const unsigned int shnum = this->shnum();
++ Target* target = const_cast<Target*>(&parameters->target());
+
+ /* Should this function be called twice? */
+ bool is_two_pass = (parameters->options().gc_sections()
+ || parameters->options().icf_enabled()
++ || target->need_tls_process_relocs()
+ || layout->is_unique_segment_for_sections_specified());
+
+ /* Only one of is_pass_one and is_pass_two is true. Both are false when
+@@ -1823,6 +1825,15 @@ Sized_relobj_file<size, big_endian>::do_layout(Symbol_table* symtab,
+ }
+ }
+
++ if (is_pass_two && target->need_tls_process_relocs())
++ {
++ if (out_sections[i] == NULL)
++ {
++ gold_assert(out_section_offsets[i] == invalid_address);
++ continue;
++ }
++ }
++
+ // Defer layout here if input files are claimed by plugins. When gc
+ // is turned on this function is called twice; we only want to do this
+ // on the first pass.
+diff --git a/gold/object.h b/gold/object.h
+index b7bd38faaf..42e0449d72 100644
+--- a/gold/object.h
++++ b/gold/object.h
+@@ -402,8 +402,9 @@ class Object
+ : name_(name), input_file_(input_file), offset_(offset), shnum_(-1U),
+ is_dynamic_(is_dynamic), is_needed_(false), uses_split_stack_(false),
+ has_no_split_stack_(false), no_export_(false),
+- is_in_system_directory_(false), as_needed_(false), xindex_(NULL),
+- compressed_sections_(NULL)
++ is_in_system_directory_(false), as_needed_(false),
++ scan_tls_relocs_only_(false),
++ xindex_(NULL), compressed_sections_(NULL)
+ {
+ if (input_file != NULL)
+ {
+@@ -794,6 +795,21 @@ class Object
+ as_needed() const
+ { return this->as_needed_; }
+
++ // Set flag that this object is being scanned for TLS relocation only.
++ void
++ set_scan_tls_relocs_only()
++ { this->scan_tls_relocs_only_ = true; }
++
++ // Clear flag that this object is being scanned for TLS relocation only.
++ void
++ clear_scan_tls_relocs_only()
++ { this->scan_tls_relocs_only_ = false; }
++
++ // Return whether this object is being scanned for TLS relocation only.
++ bool
++ scan_tls_relocs_only() const
++ { return this->scan_tls_relocs_only_; }
++
+ // Return whether we found this object by searching a directory.
+ bool
+ searched_for() const
+@@ -1084,6 +1100,8 @@ class Object
+ bool is_in_system_directory_ : 1;
+ // True if the object was linked with --as-needed.
+ bool as_needed_ : 1;
++ // True if the object is being scanned for TLS relocation only.
++ bool scan_tls_relocs_only_ : 1;
+ // Many sections for objects with more than SHN_LORESERVE sections.
+ Xindex* xindex_;
+ // For compressed debug sections, map section index to uncompressed size
+diff --git a/gold/reloc.cc b/gold/reloc.cc
+index 7cd9f859e0..ad0efba414 100644
+--- a/gold/reloc.cc
++++ b/gold/reloc.cc
+@@ -74,14 +74,23 @@ Read_relocs::run(Workqueue* workqueue)
+ // If garbage collection or identical comdat folding is desired, we
+ // process the relocs first before scanning them. Scanning of relocs is
+ // done only after garbage or identical sections is identified.
+- if (parameters->options().gc_sections()
+- || parameters->options().icf_enabled())
++ bool do_gc_process_relocs = (parameters->options().gc_sections()
++ || parameters->options().icf_enabled());
++
++ // If TLS relocation scan is desired, we scan TLS relocations first
++ // before scanning all relocations.
++ Target* target = const_cast<Target*>(&parameters->target());
++ bool do_tls_process_relocs = target->need_tls_process_relocs();
++
++ if (do_gc_process_relocs || do_tls_process_relocs)
+ {
+ workqueue->queue_next(new Gc_process_relocs(this->symtab_,
+ this->layout_,
+ this->object_, rd,
+ this->this_blocker_,
+- this->next_blocker_));
++ this->next_blocker_,
++ do_gc_process_relocs,
++ do_tls_process_relocs));
+ }
+ else
+ {
+@@ -448,7 +457,8 @@ Sized_relobj_file<size, big_endian>::do_scan_relocs(Symbol_table* symtab,
+ // in the link that would have been included normally. This is known only
+ // after Read_relocs hence this check has to be done again.
+ if (parameters->options().gc_sections()
+- || parameters->options().icf_enabled())
++ || parameters->options().icf_enabled()
++ || target->need_tls_process_relocs())
+ {
+ if (p->output_section == NULL)
+ continue;
+diff --git a/gold/reloc.h b/gold/reloc.h
+index 492c3fadfd..8ca31b2678 100644
+--- a/gold/reloc.h
++++ b/gold/reloc.h
+@@ -104,9 +104,12 @@ class Gc_process_relocs : public Task
+ // running.
+ Gc_process_relocs(Symbol_table* symtab, Layout* layout, Relobj* object,
+ Read_relocs_data* rd, Task_token* this_blocker,
+- Task_token* next_blocker)
++ Task_token* next_blocker, bool gc_process_relocs,
++ bool tls_process_relocs)
+ : symtab_(symtab), layout_(layout), object_(object), rd_(rd),
+- this_blocker_(this_blocker), next_blocker_(next_blocker)
++ this_blocker_(this_blocker), next_blocker_(next_blocker),
++ gc_process_relocs_(gc_process_relocs),
++ tls_process_relocs_(tls_process_relocs)
+ { }
+
+ ~Gc_process_relocs();
+@@ -132,6 +135,10 @@ class Gc_process_relocs : public Task
+ Read_relocs_data* rd_;
+ Task_token* this_blocker_;
+ Task_token* next_blocker_;
++ // True if the object is being garbage collected.
++ bool gc_process_relocs_;
++ // True if the object is being scanned for TLS relocation only.
++ bool tls_process_relocs_;
+ };
+
+ // Scan the relocations for an object to see if they require any
+--
+2.26.2
+
diff --git a/patches/0005-gold-Handle-TLS-relocation-scan-in-garbage-collectio.patch b/patches/0005-gold-Handle-TLS-relocation-scan-in-garbage-collectio.patch
new file mode 100644
index 00000000000..5fee4dda0e2
--- /dev/null
+++ b/patches/0005-gold-Handle-TLS-relocation-scan-in-garbage-collectio.patch
@@ -0,0 +1,142 @@
+From b16aa951f9e7967b4354d6a76943c7316b3a2c84 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Sun, 10 May 2020 10:44:15 -0700
+Subject: [PATCH 5/7] gold: Handle TLS relocation scan in garbage collection
+
+Similar to ICF, handle TLS relocation scan in garbage collection. We
+add a TLS relocation scan before the regular relocation scan.
+
+ PR gold/25476
+ * gold.cc (Gc_runner::run): Call queue_middle_tasks if not
+ doing garbage collection, ICF, nor needing TLS relocation scan.
+ (queue_initial_tasks): Always queue Gc_runner task.
+ (queue_middle_tasks): Handle TLS relocation scan like garbage
+ collection and ICF.
+---
+ gold/gold.cc | 65 ++++++++++++++++++++++++++++++----------------------
+ 1 file changed, 37 insertions(+), 28 deletions(-)
+
+diff --git a/gold/gold.cc b/gold/gold.cc
+index f02d2aadaf..e7f8ff0a76 100644
+--- a/gold/gold.cc
++++ b/gold/gold.cc
+@@ -161,9 +161,23 @@ class Gc_runner : public Task_function_runner
+ void
+ Gc_runner::run(Workqueue* workqueue, const Task* task)
+ {
+- queue_middle_gc_tasks(this->options_, task, this->input_objects_,
+- this->symtab_, this->layout_, workqueue,
+- this->mapfile_);
++ // NB: Call queue_middle_tasks if we aren't doing garbage collection,
++ // ICF nor needing TLS relocation scan.
++ Target* target = const_cast<Target*>(&parameters->target());
++ if (parameters->options().gc_sections()
++ || parameters->options().icf_enabled()
++ || target->need_tls_process_relocs())
++ {
++ if (target->need_tls_process_relocs())
++ target->set_input_objects(this->input_objects_);
++ queue_middle_gc_tasks(this->options_, task, this->input_objects_,
++ this->symtab_, this->layout_, workqueue,
++ this->mapfile_);
++ }
++ else
++ queue_middle_tasks(this->options_, task, this->input_objects_,
++ this->symtab_, this->layout_, workqueue,
++ this->mapfile_);
+ }
+
+ // Queue up the initial set of tasks for this link job.
+@@ -283,26 +297,15 @@ queue_initial_tasks(const General_options& options,
+ && (options.gc_sections() || options.icf_enabled()))
+ gold_error(_("cannot mix -r with --gc-sections or --icf"));
+
+- if (options.gc_sections() || options.icf_enabled())
+- {
+- workqueue->queue(new Task_function(new Gc_runner(options,
+- input_objects,
+- symtab,
+- layout,
+- mapfile),
+- this_blocker,
+- "Task_function Gc_runner"));
+- }
+- else
+- {
+- workqueue->queue(new Task_function(new Middle_runner(options,
+- input_objects,
+- symtab,
+- layout,
+- mapfile),
+- this_blocker,
+- "Task_function Middle_runner"));
+- }
++ // Gc_runner::run handles both queue_middle_gc_tasks and
++ // queue_middle_tasks.
++ workqueue->queue(new Task_function(new Gc_runner(options,
++ input_objects,
++ symtab,
++ layout,
++ mapfile),
++ this_blocker,
++ "Task_function Gc_runner"));
+ }
+
+ // Process an incremental input file: if it is unchanged from the previous
+@@ -533,14 +536,19 @@ queue_middle_tasks(const General_options& options,
+ symtab->icf()->find_identical_sections(input_objects, symtab);
+ }
+
++ // TODO(csilvers): figure out a more principled way to get the target
++ Target* target = const_cast<Target*>(&parameters->target());
++
+ // Call Object::layout for the second time to determine the
+ // output_sections for all referenced input sections. When
+ // --gc-sections or --icf is turned on, or when certain input
+ // sections have to be mapped to unique segments, Object::layout
+ // is called twice. It is called the first time when symbols
+ // are added.
++ // NB: Handle TLS relocation scan in garbage collection.
+ if (parameters->options().gc_sections()
+ || parameters->options().icf_enabled()
++ || target->need_tls_process_relocs()
+ || layout->is_unique_segment_for_sections_specified())
+ {
+ for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
+@@ -577,8 +585,10 @@ queue_middle_tasks(const General_options& options,
+ (*p)->update_section_layout(layout->get_section_order_map());
+ }
+
++ // NB: Handle TLS relocation scan in garbage collection.
+ if (parameters->options().gc_sections()
+- || parameters->options().icf_enabled())
++ || parameters->options().icf_enabled()
++ || target->need_tls_process_relocs())
+ {
+ for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
+ p != input_objects->relobj_end();
+@@ -681,9 +691,6 @@ queue_middle_tasks(const General_options& options,
+ // Define symbols from any linker scripts.
+ layout->define_script_symbols(symtab);
+
+- // TODO(csilvers): figure out a more principled way to get the target
+- Target* target = const_cast<Target*>(&parameters->target());
+-
+ // Attach sections to segments.
+ layout->attach_sections_to_segments(target);
+
+@@ -718,8 +725,10 @@ queue_middle_tasks(const General_options& options,
+
+ // If doing garbage collection, the relocations have already been read.
+ // Otherwise, read and scan the relocations.
++ // NB: Handle TLS relocation scan in garbage collection.
+ if (parameters->options().gc_sections()
+- || parameters->options().icf_enabled())
++ || parameters->options().icf_enabled()
++ || target->need_tls_process_relocs())
+ {
+ for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
+ p != input_objects->relobj_end();
+--
+2.26.2
+
diff --git a/patches/0006-gold-Enable-TLS-relocation-scan-for-x86-64.patch b/patches/0006-gold-Enable-TLS-relocation-scan-for-x86-64.patch
new file mode 100644
index 00000000000..1bfa4379f44
--- /dev/null
+++ b/patches/0006-gold-Enable-TLS-relocation-scan-for-x86-64.patch
@@ -0,0 +1,326 @@
+From 7767f22dab8b262fe26393573a208aea7081fa01 Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Sun, 3 May 2020 08:17:21 -0700
+Subject: [PATCH 6/7] gold: Enable TLS relocation scan for x86-64
+
+Enable TLS relocation scan for x86-64. Use existing GOT_TYPE_TLS_OFFSET
+and TLSOPT_TO_IE if possible.
+
+FIXME: TLS relocation scan is disabled when -emit-relocs or --incremental
+are used.
+
+ PR gold/25476
+ * x86_64.cc (Target_x86_64::Target_x86_64): Enable TLS relocation
+ scan pass without -emit-relocs nor --incremental.
+ (Target_x86_64<size>::Scan::local): Don't check STT_GNU_IFUNC in
+ TLS relocation scan pass. Scan only initial-exec and local-exec
+ relocations in TLS relocation scan pass. Use existing
+ GOT_TYPE_TLS_OFFSET if possible.
+ (Target_x86_64<size>::Scan::global): Likewise.
+ (Target_x86_64<size>::gc_process_relocs): Call gold::scan_relocs
+ for TLS relocation scan pass.
+ (Target_x86_64<size>::Relocate::relocate_tls): Use existing
+ TLSOPT_TO_IE if possible.
+---
+ gold/x86_64.cc | 145 +++++++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 127 insertions(+), 18 deletions(-)
+
+diff --git a/gold/x86_64.cc b/gold/x86_64.cc
+index a0247b5707..fea404e229 100644
+--- a/gold/x86_64.cc
++++ b/gold/x86_64.cc
+@@ -709,7 +709,14 @@ class Target_x86_64 : public Sized_target<size, false>
+ feature_1_(0), feature_2_used_(0), feature_2_needed_(0),
+ object_isa_1_used_(0), object_feature_1_(0),
+ object_feature_2_used_(0), seen_first_object_(false)
+- { }
++ {
++ // Enable TLS relocation scan. FIXME: Support --incremental.
++ if (parameters->options_valid()
++ && parameters->options().tls_optimize()
++ && !parameters->options().relocatable()
++ && !parameters->incremental())
++ this->set_need_tls_process_relocs();
++ }
+
+ // Hook for a new output section.
+ void
+@@ -3601,7 +3608,9 @@ Target_x86_64<size>::Scan::local(Symbol_table* symtab,
+
+ // A local STT_GNU_IFUNC symbol may require a PLT entry.
+ bool is_ifunc = lsym.get_st_type() == elfcpp::STT_GNU_IFUNC;
+- if (is_ifunc && this->reloc_needs_plt_for_ifunc(object, r_type))
++ if (!object->scan_tls_relocs_only()
++ && is_ifunc
++ && this->reloc_needs_plt_for_ifunc(object, r_type))
+ {
+ unsigned int r_sym = elfcpp::elf_r_sym<size>(reloc.get_r_info());
+ target->make_local_ifunc_plt_entry(symtab, layout, object, r_sym);
+@@ -3615,6 +3624,9 @@ Target_x86_64<size>::Scan::local(Symbol_table* symtab,
+ break;
+
+ case elfcpp::R_X86_64_64:
++ if (object->scan_tls_relocs_only())
++ break;
++
+ // If building a shared library (or a position-independent
+ // executable), we need to create a dynamic relocation for this
+ // location. The relocation applied at link time will apply the
+@@ -3639,6 +3651,9 @@ Target_x86_64<size>::Scan::local(Symbol_table* symtab,
+ case elfcpp::R_X86_64_32S:
+ case elfcpp::R_X86_64_16:
+ case elfcpp::R_X86_64_8:
++ if (object->scan_tls_relocs_only())
++ break;
++
+ // If building a shared library (or a position-independent
+ // executable), we need to create a dynamic relocation for this
+ // location. We can't use an R_X86_64_RELATIVE relocation
+@@ -3694,6 +3709,9 @@ Target_x86_64<size>::Scan::local(Symbol_table* symtab,
+
+ case elfcpp::R_X86_64_PLT32:
+ case elfcpp::R_X86_64_PLT32_BND:
++ if (object->scan_tls_relocs_only())
++ break;
++
+ // Since we know this is a local symbol, we can handle this as a
+ // PC32 reloc.
+ break;
+@@ -3702,6 +3720,9 @@ Target_x86_64<size>::Scan::local(Symbol_table* symtab,
+ case elfcpp::R_X86_64_GOTOFF64:
+ case elfcpp::R_X86_64_GOTPC64:
+ case elfcpp::R_X86_64_PLTOFF64:
++ if (object->scan_tls_relocs_only())
++ break;
++
+ // We need a GOT section.
+ target->got_section(symtab, layout);
+ // For PLTOFF64, we'd normally want a PLT section, but since we
+@@ -3716,6 +3737,9 @@ Target_x86_64<size>::Scan::local(Symbol_table* symtab,
+ case elfcpp::R_X86_64_REX_GOTPCRELX:
+ case elfcpp::R_X86_64_GOTPLT64:
+ {
++ if (object->scan_tls_relocs_only())
++ break;
++
+ // The symbol requires a GOT section.
+ Output_data_got<64, false>* got = target->got_section(symtab, layout);
+
+@@ -3799,15 +3823,33 @@ Target_x86_64<size>::Scan::local(Symbol_table* symtab,
+ case elfcpp::R_X86_64_GOTPC32_TLSDESC: // Global-dynamic (from ~oliva url)
+ case elfcpp::R_X86_64_TLSDESC_CALL:
+ case elfcpp::R_X86_64_TLSLD: // Local-dynamic
++ if (object->scan_tls_relocs_only())
++ break;
++ // Fall through.
+ case elfcpp::R_X86_64_DTPOFF32:
+ case elfcpp::R_X86_64_DTPOFF64:
+ case elfcpp::R_X86_64_GOTTPOFF: // Initial-exec
+ case elfcpp::R_X86_64_TPOFF32: // Local-exec
+ {
++ if (target->input_objects())
++ {
++ const bool doing_static_link =
++ (!target->input_objects()->any_dynamic()
++ && !parameters->options().output_is_position_independent());
++ set_parameters_doing_static_link(doing_static_link);
++ }
++
+ bool output_is_shared = parameters->options().shared();
+ const tls::Tls_optimization optimized_type
+ = Target_x86_64<size>::optimize_tls_reloc(!output_is_shared,
+ r_type);
++ if (optimized_type == tls::TLSOPT_NONE)
++ {
++ unsigned int r_sym = elfcpp::elf_r_sym<size>(reloc.get_r_info());
++ if (object->local_has_got_offset(r_sym, GOT_TYPE_TLS_OFFSET))
++ break;
++ }
++
+ switch (r_type)
+ {
+ case elfcpp::R_X86_64_TLSGD: // General-dynamic
+@@ -4060,7 +4102,8 @@ Target_x86_64<size>::Scan::global(Symbol_table* symtab,
+ Symbol* gsym)
+ {
+ // A STT_GNU_IFUNC symbol may require a PLT entry.
+- if (gsym->type() == elfcpp::STT_GNU_IFUNC
++ if (!object->scan_tls_relocs_only()
++ && gsym->type() == elfcpp::STT_GNU_IFUNC
+ && this->reloc_needs_plt_for_ifunc(object, r_type))
+ target->make_plt_entry(symtab, layout, gsym);
+
+@@ -4077,6 +4120,9 @@ Target_x86_64<size>::Scan::global(Symbol_table* symtab,
+ case elfcpp::R_X86_64_16:
+ case elfcpp::R_X86_64_8:
+ {
++ if (object->scan_tls_relocs_only())
++ break;
++
+ // Make a PLT entry if necessary.
+ if (gsym->needs_plt_entry())
+ {
+@@ -4147,6 +4193,9 @@ Target_x86_64<size>::Scan::global(Symbol_table* symtab,
+ case elfcpp::R_X86_64_PC16:
+ case elfcpp::R_X86_64_PC8:
+ {
++ if (object->scan_tls_relocs_only())
++ break;
++
+ // Make a PLT entry if necessary.
+ if (gsym->needs_plt_entry())
+ target->make_plt_entry(symtab, layout, gsym);
+@@ -4179,6 +4228,9 @@ Target_x86_64<size>::Scan::global(Symbol_table* symtab,
+ case elfcpp::R_X86_64_REX_GOTPCRELX:
+ case elfcpp::R_X86_64_GOTPLT64:
+ {
++ if (object->scan_tls_relocs_only())
++ break;
++
+ // The symbol requires a GOT entry.
+ Output_data_got<64, false>* got = target->got_section(symtab, layout);
+
+@@ -4276,6 +4328,9 @@ Target_x86_64<size>::Scan::global(Symbol_table* symtab,
+
+ case elfcpp::R_X86_64_PLT32:
+ case elfcpp::R_X86_64_PLT32_BND:
++ if (object->scan_tls_relocs_only())
++ break;
++
+ // If the symbol is fully resolved, this is just a PC32 reloc.
+ // Otherwise we need a PLT entry.
+ if (gsym->final_value_is_known())
+@@ -4294,6 +4349,9 @@ Target_x86_64<size>::Scan::global(Symbol_table* symtab,
+ case elfcpp::R_X86_64_GOTOFF64:
+ case elfcpp::R_X86_64_GOTPC64:
+ case elfcpp::R_X86_64_PLTOFF64:
++ if (object->scan_tls_relocs_only())
++ break;
++
+ // We need a GOT section.
+ target->got_section(symtab, layout);
+ // For PLTOFF64, we also need a PLT entry (but only if the
+@@ -4321,11 +4379,22 @@ Target_x86_64<size>::Scan::global(Symbol_table* symtab,
+ case elfcpp::R_X86_64_GOTPC32_TLSDESC: // Global-dynamic (from ~oliva url)
+ case elfcpp::R_X86_64_TLSDESC_CALL:
+ case elfcpp::R_X86_64_TLSLD: // Local-dynamic
++ if (object->scan_tls_relocs_only())
++ break;
++ // Fall through.
+ case elfcpp::R_X86_64_DTPOFF32:
+ case elfcpp::R_X86_64_DTPOFF64:
+ case elfcpp::R_X86_64_GOTTPOFF: // Initial-exec
+ case elfcpp::R_X86_64_TPOFF32: // Local-exec
+ {
++ if (target->input_objects())
++ {
++ const bool doing_static_link =
++ (!target->input_objects()->any_dynamic()
++ && !parameters->options().output_is_position_independent());
++ set_parameters_doing_static_link(doing_static_link);
++ }
++
+ // For the Initial-Exec model, we can treat undef symbols as final
+ // when building an executable.
+ const bool is_final = (gsym->final_value_is_known() ||
+@@ -4334,6 +4403,10 @@ Target_x86_64<size>::Scan::global(Symbol_table* symtab,
+ parameters->options().output_is_executable()));
+ const tls::Tls_optimization optimized_type
+ = Target_x86_64<size>::optimize_tls_reloc(is_final, r_type);
++ if (optimized_type == tls::TLSOPT_NONE
++ && gsym->has_got_offset(GOT_TYPE_TLS_OFFSET))
++ break;
++
+ switch (r_type)
+ {
+ case elfcpp::R_X86_64_TLSGD: // General-dynamic
+@@ -4468,20 +4541,40 @@ Target_x86_64<size>::gc_process_relocs(Symbol_table* symtab,
+ return;
+ }
+
+- gold::gc_process_relocs<size, false, Target_x86_64<size>, Scan,
+- Classify_reloc>(
+- symtab,
+- layout,
+- this,
+- object,
+- data_shndx,
+- prelocs,
+- reloc_count,
+- output_section,
+- needs_special_offset_handling,
+- local_symbol_count,
+- plocal_symbols);
+-
++ if (parameters->options().gc_sections()
++ || parameters->options().icf_enabled())
++ gold::gc_process_relocs<size, false, Target_x86_64<size>, Scan,
++ Classify_reloc>(
++ symtab,
++ layout,
++ this,
++ object,
++ data_shndx,
++ prelocs,
++ reloc_count,
++ output_section,
++ needs_special_offset_handling,
++ local_symbol_count,
++ plocal_symbols);
++
++ if (this->need_tls_process_relocs())
++ {
++ object->set_scan_tls_relocs_only();
++ gold::scan_relocs<size, false, Target_x86_64<size>, Scan,
++ Classify_reloc>(
++ symtab,
++ layout,
++ this,
++ object,
++ data_shndx,
++ prelocs,
++ reloc_count,
++ output_section,
++ false,
++ local_symbol_count,
++ plocal_symbols);
++ object->clear_scan_tls_relocs_only();
++ }
+ }
+ // Scan relocations for a section.
+
+@@ -5071,6 +5164,21 @@ Target_x86_64<size>::Relocate::relocate_tls(
+ : gsym->final_value_is_known());
+ tls::Tls_optimization optimized_type
+ = Target_x86_64<size>::optimize_tls_reloc(is_final, r_type);
++ if (optimized_type == tls::TLSOPT_NONE)
++ {
++ if (gsym)
++ {
++ if (gsym->has_got_offset(GOT_TYPE_TLS_OFFSET))
++ optimized_type = tls::TLSOPT_TO_IE;
++ }
++ else
++ {
++ unsigned int r_sym = elfcpp::elf_r_sym<size>(rela.get_r_info());
++ if (object->local_has_got_offset(r_sym, GOT_TYPE_TLS_OFFSET))
++ optimized_type = tls::TLSOPT_TO_IE;
++ }
++ }
++
+ switch (r_type)
+ {
+ case elfcpp::R_X86_64_TLSGD: // Global-dynamic
+@@ -5302,7 +5410,8 @@ Target_x86_64<size>::Relocate::relocate_tls(
+ view_size);
+ break;
+ }
+- else if (optimized_type == tls::TLSOPT_NONE)
++ else if (optimized_type == tls::TLSOPT_NONE
++ || optimized_type == tls::TLSOPT_TO_IE)
+ {
+ // Relocate the field with the offset of the GOT entry for
+ // the tp-relative offset of the symbol.
+--
+2.26.2
+
diff --git a/patches/0007-gold-Add-testcases-for-PR-gold-25476.patch b/patches/0007-gold-Add-testcases-for-PR-gold-25476.patch
new file mode 100644
index 00000000000..9883a7b1992
--- /dev/null
+++ b/patches/0007-gold-Add-testcases-for-PR-gold-25476.patch
@@ -0,0 +1,1047 @@
+From d3df74b607166445668333f328c851eb075f259e Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Sun, 10 May 2020 10:55:41 -0700
+Subject: [PATCH 7/7] gold: Add testcases for PR gold/25476
+
+Add testcases for PR gold/25476 to verify that TLSDESC -> IE relaxation
+is properly performed.
+
+ PR gold/25476
+ * testsuite/Makefile.am (check_PROGRAMS): Add
+ tls_shared_gnu2_gd_to_ie_test_2.
+ (tls_test_2_gnu2.o): New rule.
+ (tls_test_2_gnu.o): Likewise.
+ (tls_test_2_gnu2_shared.so): Likewise.
+ (tls_shared_gnu2_gd_to_ie_test_2_SOURCES): New.
+ (tls_shared_gnu2_gd_to_ie_test_2_LDFLAGS): Likewise.
+ (tls_shared_gnu2_gd_to_ie_test_2_DEPENDENCIES): Likewise.
+ (check_SCRIPTS): Add tls_test_2_gnu2_shared.sh.
+ (check_DATA): Add tls_test_2_gnu2_shared.stdout.
+ (tls_test_2_gnu2_shared.stdout): New rule.
+ (check_SCRIPTS): Add x86_64_gd_to_ie.sh.
+ (check_DATA): Add x86_64_gd_to_ie.stdout.
+ (MOSTLYCLEANFILES): x86_64_gd_to_ie.so.
+ (x86_64_gd_to_ie.o): New rule.
+ (x86_64_gd_to_ie.so): Likewise.
+ (x86_64_gd_to_ie.stdout): Likewise.
+ * testsuite/tls_test_2.h: New file.
+ * testsuite/tls_test_2_gnu.c: Likewise.
+ * testsuite/tls_test_2_gnu2.c: Likewise.
+ * testsuite/tls_test_2_gnu2_shared.sh: Likewise.
+ * testsuite/tls_test_2_main.c: Likewise.
+ * testsuite/x86_64_gd_to_ie.s: Likewise.
+ * testsuite/x86_64_gd_to_ie.sh: Likewise.
+ * testsuite/Makefile.in: Regenerated.
+---
+ gold/testsuite/Makefile.am | 33 +++
+ gold/testsuite/Makefile.in | 283 ++++++++++++++---------
+ gold/testsuite/tls_test_2.h | 7 +
+ gold/testsuite/tls_test_2_gnu.c | 13 ++
+ gold/testsuite/tls_test_2_gnu2.c | 16 ++
+ gold/testsuite/tls_test_2_gnu2_shared.sh | 55 +++++
+ gold/testsuite/tls_test_2_main.c | 26 +++
+ gold/testsuite/x86_64_gd_to_ie.s | 25 ++
+ gold/testsuite/x86_64_gd_to_ie.sh | 40 ++++
+ 9 files changed, 388 insertions(+), 110 deletions(-)
+ create mode 100644 gold/testsuite/tls_test_2.h
+ create mode 100644 gold/testsuite/tls_test_2_gnu.c
+ create mode 100644 gold/testsuite/tls_test_2_gnu2.c
+ create mode 100755 gold/testsuite/tls_test_2_gnu2_shared.sh
+ create mode 100644 gold/testsuite/tls_test_2_main.c
+ create mode 100644 gold/testsuite/x86_64_gd_to_ie.s
+ create mode 100755 gold/testsuite/x86_64_gd_to_ie.sh
+
+diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
+index 497b7e9df9..1780612ac1 100644
+--- a/gold/testsuite/Makefile.am
++++ b/gold/testsuite/Makefile.am
+@@ -1058,6 +1058,27 @@ tls_shared_gnu2_gd_to_ie_test_LDFLAGS = -Wl,-R,. $(THREADFLAGS)
+ tls_shared_gnu2_gd_to_ie_test_LDADD = tls_test_gnu2.o tls_test_c_gnu2.o \
+ tls_test_gnu2_shared2.so $(THREADLIBS)
+
++check_PROGRAMS += tls_shared_gnu2_gd_to_ie_test_2
++
++tls_test_2_gnu2.o: tls_test_2_gnu2.c gcctestdir/as
++ $(COMPILE) -c -fpic -mtls-dialect=gnu2 -o $@ $<
++tls_test_2_gnu.o: tls_test_2_gnu.c gcctestdir/as
++ $(COMPILE) -c -fpic -mtls-dialect=gnu -ftls-model=initial-exec -o $@ $<
++tls_test_2_gnu2_shared.so: tls_test_2_gnu2.o tls_test_2_gnu.o \
++ gcctestdir/ld
++ $(LINK) -shared tls_test_2_gnu2.o tls_test_2_gnu.o
++
++tls_shared_gnu2_gd_to_ie_test_2_SOURCES = tls_test_2_main.c
++tls_shared_gnu2_gd_to_ie_test_2_LDFLAGS = -Wl,-R,.
++tls_shared_gnu2_gd_to_ie_test_2_DEPENDENCIES = gcctestdir/ld \
++ tls_test_2_gnu2_shared.so
++tls_shared_gnu2_gd_to_ie_test_2_LDADD = tls_test_2_gnu2_shared.so
++
++check_SCRIPTS += tls_test_2_gnu2_shared.sh
++check_DATA += tls_test_2_gnu2_shared.stdout
++tls_test_2_gnu2_shared.stdout: tls_test_2_gnu2_shared.so
++ $(TEST_READELF) -rW $< > $@ 2>/dev/null
++
+ if TLS_DESCRIPTORS
+
+ check_PROGRAMS += tls_shared_gnu2_test
+@@ -1212,6 +1233,18 @@ x86_64_indirect_jump_to_direct1: x86_64_indirect_jump_to_direct1.o gcctestdir/ld
+ x86_64_indirect_jump_to_direct1.stdout: x86_64_indirect_jump_to_direct1
+ $(TEST_OBJDUMP) -dw $< > $@
+
++check_SCRIPTS += x86_64_gd_to_ie.sh
++check_DATA += x86_64_gd_to_ie.stdout
++MOSTLYCLEANFILES += x86_64_gd_to_ie.so
++
++x86_64_gd_to_ie.o: x86_64_gd_to_ie.s
++ $(TEST_AS) --64 -o $@ $<
++x86_64_gd_to_ie.so: x86_64_gd_to_ie.o gcctestdir/ld
++ gcctestdir/ld -shared -o $@ $<
++x86_64_gd_to_ie.stdout: x86_64_gd_to_ie.so
++ $(TEST_OBJDUMP) -dw $< > $@
++ $(TEST_READELF) -rw $< >> $@
++
+ check_SCRIPTS += x86_64_gd_to_le.sh
+ check_DATA += x86_64_gd_to_le.stdout
+ MOSTLYCLEANFILES += x86_64_gd_to_le
+diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
+index 1c78065709..37c9d7aa10 100644
+--- a/gold/testsuite/Makefile.in
++++ b/gold/testsuite/Makefile.in
+@@ -284,19 +284,23 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_shared_gd_to_ie_test
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@am__append_23 = tls_pie_test.sh
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@am__append_24 = tls_pie_test.stdout
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am__append_25 = tls_shared_gnu2_gd_to_ie_test
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_DESCRIPTORS_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am__append_26 = tls_shared_gnu2_test
+-@GCC_TRUE@@HAVE_STATIC_TRUE@@NATIVE_LINKER_TRUE@@STATIC_TLS_TRUE@@TLS_TRUE@am__append_27 = tls_static_test \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am__append_25 = tls_shared_gnu2_gd_to_ie_test \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ tls_shared_gnu2_gd_to_ie_test_2
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am__append_26 = tls_test_2_gnu2_shared.sh
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am__append_27 = tls_test_2_gnu2_shared.stdout
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_DESCRIPTORS_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am__append_28 = tls_shared_gnu2_test
++@GCC_TRUE@@HAVE_STATIC_TRUE@@NATIVE_LINKER_TRUE@@STATIC_TLS_TRUE@@TLS_TRUE@am__append_29 = tls_static_test \
+ @GCC_TRUE@@HAVE_STATIC_TRUE@@NATIVE_LINKER_TRUE@@STATIC_TLS_TRUE@@TLS_TRUE@ tls_static_pic_test
+-@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@am__append_28 = tls_shared_nonpic_test
+-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_29 = x86_64_mov_to_lea.sh \
++@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@am__append_30 = tls_shared_nonpic_test
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_31 = x86_64_mov_to_lea.sh \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_indirect_call_to_direct.sh \
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_gd_to_ie.sh \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_gd_to_le.sh \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_overflow_pc32.sh \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x32_overflow_pc32.sh \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr23016_1.sh \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr23016_2.sh
+-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_30 = x86_64_mov_to_lea1.stdout \
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_32 = x86_64_mov_to_lea1.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_mov_to_lea2.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_mov_to_lea3.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_mov_to_lea4.stdout \
+@@ -312,13 +316,14 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_mov_to_lea14.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_indirect_call_to_direct1.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_indirect_jump_to_direct1.stdout \
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_gd_to_ie.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_gd_to_le.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_overflow_pc32.err \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x32_overflow_pc32.err \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr23016_1.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr23016_1r.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr23016_2.stdout
+-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_31 = x86_64_mov_to_lea1 \
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_33 = x86_64_mov_to_lea1 \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_mov_to_lea2 \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_mov_to_lea3 \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_mov_to_lea4 \
+@@ -334,23 +339,24 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_mov_to_lea14 \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_indirect_call_to_direct1 \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_indirect_jump_to_direct1 \
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_gd_to_ie.so \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_gd_to_le \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x86_64_overflow_pc32.err \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ x32_overflow_pc32.err
+-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_32 = pr17704a_test
+-@DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_33 = pr20216a_test \
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_34 = pr17704a_test
++@DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_35 = pr20216a_test \
+ @DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr20216b_test \
+ @DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr20216c_test \
+ @DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr20216d_test \
+ @DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr20216e_test
+-@DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_34 = pr20216a.so pr20216b.so
+-@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_35 = i386_mov_to_lea.sh
+-@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_36 = i386_mov_to_lea1.stdout i386_mov_to_lea2.stdout \
++@DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_36 = pr20216a.so pr20216b.so
++@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_37 = i386_mov_to_lea.sh
++@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_38 = i386_mov_to_lea1.stdout i386_mov_to_lea2.stdout \
+ @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ i386_mov_to_lea3.stdout i386_mov_to_lea4.stdout \
+ @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ i386_mov_to_lea5.stdout i386_mov_to_lea6.stdout \
+ @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ i386_mov_to_lea7.stdout i386_mov_to_lea8.stdout
+
+-@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_37 = i386_mov_to_lea1 \
++@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_39 = i386_mov_to_lea1 \
+ @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ i386_mov_to_lea2 \
+ @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ i386_mov_to_lea3 \
+ @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ i386_mov_to_lea4 \
+@@ -360,7 +366,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ i386_mov_to_lea8 \
+ @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr20308a.so \
+ @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr20308b.so
+-@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_38 = pr20308a_test \
++@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_40 = pr20308a_test \
+ @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr20308b_test \
+ @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr20308c_test \
+ @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr20308d_test \
+@@ -384,7 +390,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ # declared in a script file is assigned a non-zero starting address.
+
+ # Test difference between "*(a b)" and "*(a) *(b)" in input section spec.
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_39 = many_sections_test \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_41 = many_sections_test \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ many_sections_r_test initpri1 \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri2 initpri3a \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_o_specialfile \
+@@ -412,9 +418,9 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ thin_archive_test_2
+ @GCC_FALSE@many_sections_test_DEPENDENCIES =
+ @NATIVE_LINKER_FALSE@many_sections_test_DEPENDENCIES =
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_40 = many_sections_define.h \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_42 = many_sections_define.h \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ many_sections_check.h
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_41 = many_sections_define.h \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_43 = many_sections_define.h \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ many_sections_check.h \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ file_in_many_sections \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg.err \
+@@ -478,7 +484,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+
+ # Test --dynamic-list, --dynamic-list-data, --dynamic-list-cpp-new,
+ # and --dynamic-list-cpp-typeinfo
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_42 = \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_44 = \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ file_in_many_sections_test.sh \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg.sh missing_key_func.sh \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ undef_symbol.sh pr18689.sh \
+@@ -516,7 +522,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ # This version won't be runnable, because there is no way to put the
+ # PT_PHDR segment at file offset 0. We just make sure that we can
+ # build it without error.
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_43 = \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_45 = \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ file_in_many_sections.stdout \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg.err \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ missing_key_func.err \
+@@ -582,7 +588,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @NATIVE_LINKER_FALSE@thin_archive_test_2_DEPENDENCIES =
+
+ # Test plugins with -r.
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_44 = \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_46 = \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_1 \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_2 \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_3 \
+@@ -597,7 +603,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_wrap_symbols \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_start_lib \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_defsym
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_45 = \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_47 = \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_1.sh \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_2.sh \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_3.sh \
+@@ -616,7 +622,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+
+ # As above, but check COMDAT case, where a non-IR file contains a duplicate
+ # of a COMDAT group in an IR file.
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_46 = \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_48 = \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_1.err \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_2.err \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_3.err \
+@@ -633,7 +639,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_start_lib.err \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_defsym.err
+ # Make a copy of two_file_test_1.o, which does not define the symbol _Z4t16av.
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_47 = \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_49 = \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_1.err \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_2.err \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_3.err \
+@@ -651,29 +657,29 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_wrap_symbols.err \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_start_lib.err \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_defsym.err
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@@TLS_TRUE@am__append_48 = plugin_test_tls
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@@TLS_TRUE@am__append_49 = plugin_test_tls.sh
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@@TLS_TRUE@am__append_50 = plugin_test_tls.err
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@@TLS_TRUE@am__append_51 = plugin_test_tls.err
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_52 = unused.c \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@@TLS_TRUE@am__append_50 = plugin_test_tls
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@@TLS_TRUE@am__append_51 = plugin_test_tls.sh
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@@TLS_TRUE@am__append_52 = plugin_test_tls.err
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@@TLS_TRUE@am__append_53 = plugin_test_tls.err
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_54 = unused.c \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_final_layout \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_new_file \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_with_alignment \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_pr22868.stdout
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_53 = plugin_final_layout.sh \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_55 = plugin_final_layout.sh \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_with_alignment.sh \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_pr22868.sh \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ ver_test_pr16504.sh
+
+ # Uses the plugin_final_layout.sh script above to avoid duplication
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_54 = plugin_final_layout.stdout \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_56 = plugin_final_layout.stdout \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_final_layout_readelf.stdout \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_new_file.stdout \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_new_file_readelf.stdout \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_layout_with_alignment.stdout \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_pr22868.stdout \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ ver_test_pr16504.stdout
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_55 = exclude_libs_test \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_57 = exclude_libs_test \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ local_labels_test \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ discard_locals_test
+
+@@ -684,19 +690,19 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+
+ # Test that no .gnu.version sections are created when
+ # symbol versioning is not used.
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_56 = exclude_libs_test.sh \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_58 = exclude_libs_test.sh \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ discard_locals_test.sh \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ hidden_test.sh \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ retain_symbols_file_test.sh \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ no_version_test.sh
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_57 = exclude_libs_test.syms \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_59 = exclude_libs_test.syms \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ discard_locals_test.syms \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ discard_locals_relocatable_test1.syms \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ discard_locals_relocatable_test2.syms \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ hidden_test.err \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ retain_symbols_file_test.stdout \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ no_version_test.stdout
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_58 = exclude_libs_test.syms \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_60 = exclude_libs_test.syms \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ libexclude_libs_test_1.a \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ libexclude_libs_test_2.a \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ alt/libexclude_libs_test_3.a \
+@@ -728,7 +734,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ memory_test_inc_2.t \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ memory_test_inc_3.t \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ memory_test_2
+-@GCC_TRUE@@MCMODEL_MEDIUM_TRUE@@NATIVE_LINKER_TRUE@am__append_59 = large
++@GCC_TRUE@@MCMODEL_MEDIUM_TRUE@@NATIVE_LINKER_TRUE@am__append_61 = large
+ @GCC_FALSE@large_DEPENDENCIES =
+ @MCMODEL_MEDIUM_FALSE@large_DEPENDENCIES =
+ @NATIVE_LINKER_FALSE@large_DEPENDENCIES =
+@@ -737,15 +743,15 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ # it will get execute permission.
+
+ # Check -l:foo.a
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_60 = permission_test \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_62 = permission_test \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ searched_file_test
+ @GCC_FALSE@searched_file_test_DEPENDENCIES =
+ @NATIVE_LINKER_FALSE@searched_file_test_DEPENDENCIES =
+-@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_61 = ifuncmain1static \
++@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_63 = ifuncmain1static \
+ @GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1picstatic
+-@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_62 = ifuncmod1.sh
+-@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_63 = ifuncmod1.so.stderr
+-@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_64 = ifuncmain1 \
++@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_64 = ifuncmod1.sh
++@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_65 = ifuncmod1.so.stderr
++@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_66 = ifuncmain1 \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1pic \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1vis \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1vispic \
+@@ -753,14 +759,14 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1pie \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1vispie \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1staticpie
+-@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_65 = ifuncmain2static \
++@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_67 = ifuncmain2static \
+ @GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain2picstatic
+ @GCC_FALSE@ifuncmain2static_DEPENDENCIES =
+ @HAVE_STATIC_FALSE@ifuncmain2static_DEPENDENCIES =
+ @IFUNC_FALSE@ifuncmain2static_DEPENDENCIES =
+ @IFUNC_STATIC_FALSE@ifuncmain2static_DEPENDENCIES =
+ @NATIVE_LINKER_FALSE@ifuncmain2static_DEPENDENCIES =
+-@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_66 = ifuncmain2 \
++@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_68 = ifuncmain2 \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain2pic \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain3
+ @GCC_FALSE@ifuncmain2_DEPENDENCIES =
+@@ -769,32 +775,32 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @GCC_FALSE@ifuncmain3_DEPENDENCIES =
+ @IFUNC_FALSE@ifuncmain3_DEPENDENCIES =
+ @NATIVE_LINKER_FALSE@ifuncmain3_DEPENDENCIES =
+-@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_67 = ifuncmain4static \
++@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_69 = ifuncmain4static \
+ @GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain4picstatic
+ @GCC_FALSE@ifuncmain4static_DEPENDENCIES =
+ @HAVE_STATIC_FALSE@ifuncmain4static_DEPENDENCIES =
+ @IFUNC_FALSE@ifuncmain4static_DEPENDENCIES =
+ @IFUNC_STATIC_FALSE@ifuncmain4static_DEPENDENCIES =
+ @NATIVE_LINKER_FALSE@ifuncmain4static_DEPENDENCIES =
+-@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_68 = ifuncmain4
++@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_70 = ifuncmain4
+ @GCC_FALSE@ifuncmain4_DEPENDENCIES =
+ @IFUNC_FALSE@ifuncmain4_DEPENDENCIES =
+ @NATIVE_LINKER_FALSE@ifuncmain4_DEPENDENCIES =
+-@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_69 = ifuncmain5static \
++@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_71 = ifuncmain5static \
+ @GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5picstatic
+-@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_70 = ifuncmain5 \
++@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_72 = ifuncmain5 \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5pic \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5staticpic \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5pie \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain6pie
+-@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_71 = ifuncmain7static \
++@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_73 = ifuncmain7static \
+ @GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain7picstatic
+ @GCC_FALSE@ifuncmain7static_DEPENDENCIES =
+ @HAVE_STATIC_FALSE@ifuncmain7static_DEPENDENCIES =
+ @IFUNC_FALSE@ifuncmain7static_DEPENDENCIES =
+ @IFUNC_STATIC_FALSE@ifuncmain7static_DEPENDENCIES =
+ @NATIVE_LINKER_FALSE@ifuncmain7static_DEPENDENCIES =
+-@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_72 = ifuncmain7 \
++@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_74 = ifuncmain7 \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain7pic \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain7pie \
+ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncvar
+@@ -808,12 +814,12 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ # weak reference in a DSO.
+
+ # Test that MEMORY region support works.
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_73 = strong_ref_weak_def.sh \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_75 = strong_ref_weak_def.sh \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ dyn_weak_ref.sh memory_test.sh
+
+ # Test INCLUDE directives in linker scripts.
+ # The binary isn't runnable, so we just check that we can build it without errors.
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_74 = \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_76 = \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ strong_ref_weak_def.stdout \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ dyn_weak_ref.stdout \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ memory_test.stdout memory_test_2
+@@ -829,7 +835,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ # Test that __ehdr_start is not overridden when supplied by the user.
+
+ # Test that the -d option (force common allocation) works correctly.
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_75 = start_lib_test \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_77 = start_lib_test \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ ehdr_start_test_1 \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ ehdr_start_test_2 \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ ehdr_start_test_3 \
+@@ -842,17 +848,17 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ # Another simple C test (DW_AT_high_pc encoding) for --gdb-index.
+
+ # Test that --gdb-index functions correctly with gcc-generated pubnames.
+-@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@am__append_76 = gdb_index_test_1.sh \
++@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@am__append_78 = gdb_index_test_1.sh \
+ @GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2.sh \
+ @GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2_gabi.sh \
+ @GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_3.sh \
+ @GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_4.sh
+-@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@am__append_77 = gdb_index_test_1.stdout \
++@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@am__append_79 = gdb_index_test_1.stdout \
+ @GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2.stdout \
+ @GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2_gabi.stdout \
+ @GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_3.stdout \
+ @GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_4.stdout
+-@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@am__append_78 = gdb_index_test_1.stdout \
++@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@am__append_80 = gdb_index_test_1.stdout \
+ @GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_1 \
+ @GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2.stdout \
+ @GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@ gdb_index_test_2 \
+@@ -874,11 +880,11 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ # appropriately aligned.
+
+ # Test that the --defsym option copies the symbol type and visibility.
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_79 = ehdr_start_test_4.sh \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_81 = ehdr_start_test_4.sh \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ defsym_test.sh
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_80 = ehdr_start_test_4.syms \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_82 = ehdr_start_test_4.syms \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ defsym_test.syms
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_81 = ehdr_start_test_4 \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_83 = ehdr_start_test_4 \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ defsym_test defsym_test.syms
+ @GCC_FALSE@ehdr_start_test_5_DEPENDENCIES =
+ @NATIVE_LINKER_FALSE@ehdr_start_test_5_DEPENDENCIES =
+@@ -890,7 +896,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ #check_PROGRAMS += incremental_test_4
+
+ #check_PROGRAMS += incremental_test_5
+-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_82 = two_file_test_tmp_2.o \
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_84 = two_file_test_tmp_2.o \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_tmp_3.o \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4.base \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_tmp_4.o \
+@@ -900,33 +906,33 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+
+ # Test the --incremental-unchanged flag with an archive library.
+ # The second link should not update the library.
+-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_83 = incremental_test_6 \
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_85 = incremental_test_6 \
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_x86_64_bnd_test
+-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_84 = gnu_property_test.sh
+-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_85 = gnu_property_test.stdout
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_86 = pr22266
+-@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_87 = aarch64_pr23870
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_86 = gnu_property_test.sh
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_87 = gnu_property_test.stdout
++@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_88 = pr22266
++@DEFAULT_TARGET_AARCH64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_89 = aarch64_pr23870
+
+ # These tests work with native and cross linkers.
+
+ # Test script section order.
+-@NATIVE_OR_CROSS_LINKER_TRUE@am__append_88 = script_test_10.sh
+-@NATIVE_OR_CROSS_LINKER_TRUE@am__append_89 = script_test_10.stdout
+-@NATIVE_OR_CROSS_LINKER_TRUE@am__append_90 = script_test_10
++@NATIVE_OR_CROSS_LINKER_TRUE@am__append_90 = script_test_10.sh
++@NATIVE_OR_CROSS_LINKER_TRUE@am__append_91 = script_test_10.stdout
++@NATIVE_OR_CROSS_LINKER_TRUE@am__append_92 = script_test_10
+
+ # These tests work with cross linkers only.
+-@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_91 = split_i386.sh
+-@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_92 = split_i386_1.stdout split_i386_2.stdout \
++@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_93 = split_i386.sh
++@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_94 = split_i386_1.stdout split_i386_2.stdout \
+ @DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_i386_3.stdout split_i386_4.stdout split_i386_r.stdout
+
+-@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_93 = split_i386_1 split_i386_2 split_i386_3 \
++@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_95 = split_i386_1 split_i386_2 split_i386_3 \
+ @DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_i386_4 split_i386_r
+
+-@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_94 = split_x86_64.sh \
++@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_96 = split_x86_64.sh \
+ @DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_plt_1.sh \
+ @DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_1.sh \
+ @DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_2.sh
+-@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_95 = split_x86_64_1.stdout \
++@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_97 = split_x86_64_1.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_2.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_3.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_4.stdout \
+@@ -934,14 +940,14 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_plt_1.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_1.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ bnd_ifunc_2.stdout
+-@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_96 = split_x86_64_1 split_x86_64_2 split_x86_64_3 \
++@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_98 = split_x86_64_1 split_x86_64_2 split_x86_64_3 \
+ @DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_4 split_x86_64_r
+
+-@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_97 = split_x32.sh
+-@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_98 = split_x32_1.stdout split_x32_2.stdout \
++@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_99 = split_x32.sh
++@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_100 = split_x32_1.stdout split_x32_2.stdout \
+ @DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x32_3.stdout split_x32_4.stdout split_x32_r.stdout
+
+-@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_99 = split_x32_1 split_x32_2 split_x32_3 \
++@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_101 = split_x32_1 split_x32_2 split_x32_3 \
+ @DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x32_4 split_x32_r
+
+
+@@ -962,7 +968,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ # Check Thumb to ARM farcall veneers
+
+ # Check handling of --target1-abs, --target1-rel and --target2 options
+-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_100 = arm_abs_global.sh \
++@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_102 = arm_abs_global.sh \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_branch_in_range.sh \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_branch_out_of_range.sh \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_v4bx.sh \
+@@ -985,7 +991,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_got_rel.sh
+
+ # The test demonstrates why the constructor of a target object should not access options.
+-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_101 = arm_abs_global.stdout \
++@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_103 = arm_abs_global.stdout \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_in_range.stdout \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_out_of_range.stdout \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ thumb_bl_in_range.stdout \
+@@ -1038,7 +1044,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_abs.stdout \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_got_rel.stdout \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target_lazy_init
+-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_102 = arm_abs_global \
++@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_104 = arm_abs_global \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_in_range \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_out_of_range \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ thumb_bl_in_range \
+@@ -1089,20 +1095,20 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_abs \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target2_got_rel \
+ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_target_lazy_init
+-@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_103 = aarch64_reloc_none.sh \
++@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_105 = aarch64_reloc_none.sh \
+ @DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_relocs.sh \
+ @DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr21430.sh \
+ @DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_tlsdesc.sh
+-@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_104 = aarch64_reloc_none.stdout \
++@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_106 = aarch64_reloc_none.stdout \
+ @DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_relocs.stdout \
+ @DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr21430.stdout \
+ @DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_tlsdesc.stdout
+-@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_105 = aarch64_reloc_none \
++@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_107 = aarch64_reloc_none \
+ @DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_relocs \
+ @DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr21430 \
+ @DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_tlsdesc
+-@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_106 = split_s390.sh
+-@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_107 = split_s390_z1.stdout split_s390_z2.stdout split_s390_z3.stdout \
++@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_108 = split_s390.sh
++@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_109 = split_s390_z1.stdout split_s390_z2.stdout split_s390_z3.stdout \
+ @DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z4.stdout split_s390_n1.stdout split_s390_n2.stdout \
+ @DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_a1.stdout split_s390_a2.stdout split_s390_z1_ns.stdout \
+ @DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z2_ns.stdout split_s390_z3_ns.stdout split_s390_z4_ns.stdout \
+@@ -1114,7 +1120,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_z4_ns.stdout split_s390x_n1_ns.stdout \
+ @DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_n2_ns.stdout split_s390x_r.stdout
+
+-@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_108 = split_s390_z1 split_s390_z2 split_s390_z3 \
++@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_110 = split_s390_z1 split_s390_z2 split_s390_z3 \
+ @DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z4 split_s390_n1 split_s390_n2 split_s390_a1 \
+ @DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_a2 split_s390_z1_ns split_s390_z2_ns split_s390_z3_ns \
+ @DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390_z4_ns split_s390_n1_ns split_s390_n2_ns split_s390_r \
+@@ -1123,10 +1129,10 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_z1_ns split_s390x_z2_ns split_s390x_z3_ns \
+ @DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_z4_ns split_s390x_n1_ns split_s390x_n2_ns split_s390x_r
+
+-@DEFAULT_TARGET_X86_64_TRUE@am__append_109 = *.dwo *.dwp
+-@DEFAULT_TARGET_X86_64_TRUE@am__append_110 = dwp_test_1.sh \
++@DEFAULT_TARGET_X86_64_TRUE@am__append_111 = *.dwo *.dwp
++@DEFAULT_TARGET_X86_64_TRUE@am__append_112 = dwp_test_1.sh \
+ @DEFAULT_TARGET_X86_64_TRUE@ dwp_test_2.sh
+-@DEFAULT_TARGET_X86_64_TRUE@am__append_111 = dwp_test_1.stdout \
++@DEFAULT_TARGET_X86_64_TRUE@am__append_113 = dwp_test_1.stdout \
+ @DEFAULT_TARGET_X86_64_TRUE@ dwp_test_2.stdout
+ subdir = testsuite
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+@@ -1226,7 +1232,8 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest_a_OBJECTS)
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_shared_test$(EXEEXT) \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_shared_ie_test$(EXEEXT) \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_shared_gd_to_ie_test$(EXEEXT)
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am__EXEEXT_16 = tls_shared_gnu2_gd_to_ie_test$(EXEEXT)
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am__EXEEXT_16 = tls_shared_gnu2_gd_to_ie_test$(EXEEXT) \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ tls_shared_gnu2_gd_to_ie_test_2$(EXEEXT)
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_DESCRIPTORS_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am__EXEEXT_17 = tls_shared_gnu2_test$(EXEEXT)
+ @GCC_TRUE@@HAVE_STATIC_TRUE@@NATIVE_LINKER_TRUE@@STATIC_TLS_TRUE@@TLS_TRUE@am__EXEEXT_18 = tls_static_test$(EXEEXT) \
+ @GCC_TRUE@@HAVE_STATIC_TRUE@@NATIVE_LINKER_TRUE@@STATIC_TLS_TRUE@@TLS_TRUE@ tls_static_pic_test$(EXEEXT)
+@@ -1949,6 +1956,11 @@ tls_shared_gnu2_gd_to_ie_test_OBJECTS = \
+ tls_shared_gnu2_gd_to_ie_test_LINK = $(CXXLD) $(AM_CXXFLAGS) \
+ $(CXXFLAGS) $(tls_shared_gnu2_gd_to_ie_test_LDFLAGS) \
+ $(LDFLAGS) -o $@
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am_tls_shared_gnu2_gd_to_ie_test_2_OBJECTS = tls_test_2_main.$(OBJEXT)
++tls_shared_gnu2_gd_to_ie_test_2_OBJECTS = \
++ $(am_tls_shared_gnu2_gd_to_ie_test_2_OBJECTS)
++tls_shared_gnu2_gd_to_ie_test_2_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
++ $(tls_shared_gnu2_gd_to_ie_test_2_LDFLAGS) $(LDFLAGS) -o $@
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_DESCRIPTORS_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am_tls_shared_gnu2_test_OBJECTS = tls_test_main.$(OBJEXT)
+ tls_shared_gnu2_test_OBJECTS = $(am_tls_shared_gnu2_test_OBJECTS)
+ tls_shared_gnu2_test_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+@@ -2288,6 +2300,7 @@ SOURCES = $(libgoldtest_a_SOURCES) $(aarch64_pr23870_SOURCES) \
+ tls_pie_pic_test.c tls_pie_test.c $(tls_script_test_SOURCES) \
+ $(tls_shared_gd_to_ie_test_SOURCES) \
+ $(tls_shared_gnu2_gd_to_ie_test_SOURCES) \
++ $(tls_shared_gnu2_gd_to_ie_test_2_SOURCES) \
+ $(tls_shared_gnu2_test_SOURCES) $(tls_shared_ie_test_SOURCES) \
+ $(tls_shared_nonpic_test_SOURCES) $(tls_shared_test_SOURCES) \
+ $(tls_static_pic_test_SOURCES) $(tls_static_test_SOURCES) \
+@@ -2776,34 +2789,34 @@ COMMON_TEST_C_CFLAGS = -fcommon
+ # improve on that here. automake-1.9 info docs say "mostlyclean" is
+ # the right choice for files 'make' builds that people rebuild.
+ MOSTLYCLEANFILES = *.so *.syms *.stdout *.stderr $(am__append_4) \
+- $(am__append_17) $(am__append_21) $(am__append_31) \
+- $(am__append_34) $(am__append_37) $(am__append_41) \
+- $(am__append_47) $(am__append_51) $(am__append_52) \
+- $(am__append_58) $(am__append_78) $(am__append_81) \
+- $(am__append_82) $(am__append_90) $(am__append_93) \
+- $(am__append_96) $(am__append_99) $(am__append_102) \
+- $(am__append_105) $(am__append_108) $(am__append_109)
++ $(am__append_17) $(am__append_21) $(am__append_33) \
++ $(am__append_36) $(am__append_39) $(am__append_43) \
++ $(am__append_49) $(am__append_53) $(am__append_54) \
++ $(am__append_60) $(am__append_80) $(am__append_83) \
++ $(am__append_84) $(am__append_92) $(am__append_95) \
++ $(am__append_98) $(am__append_101) $(am__append_104) \
++ $(am__append_107) $(am__append_110) $(am__append_111)
+
+ # We will add to these later, for each individual test. Note
+ # that we add each test under check_SCRIPTS or check_PROGRAMS;
+ # the TESTS variable is automatically populated from these.
+ check_SCRIPTS = $(am__append_2) $(am__append_19) $(am__append_23) \
+- $(am__append_29) $(am__append_35) $(am__append_42) \
+- $(am__append_45) $(am__append_49) $(am__append_53) \
+- $(am__append_56) $(am__append_62) $(am__append_73) \
+- $(am__append_76) $(am__append_79) $(am__append_84) \
+- $(am__append_88) $(am__append_91) $(am__append_94) \
+- $(am__append_97) $(am__append_100) $(am__append_103) \
+- $(am__append_106) $(am__append_110)
++ $(am__append_26) $(am__append_31) $(am__append_37) \
++ $(am__append_44) $(am__append_47) $(am__append_51) \
++ $(am__append_55) $(am__append_58) $(am__append_64) \
++ $(am__append_75) $(am__append_78) $(am__append_81) \
++ $(am__append_86) $(am__append_90) $(am__append_93) \
++ $(am__append_96) $(am__append_99) $(am__append_102) \
++ $(am__append_105) $(am__append_108) $(am__append_112)
+ check_DATA = $(am__append_3) $(am__append_20) $(am__append_24) \
+- $(am__append_30) $(am__append_36) $(am__append_43) \
+- $(am__append_46) $(am__append_50) $(am__append_54) \
+- $(am__append_57) $(am__append_63) $(am__append_74) \
+- $(am__append_77) $(am__append_80) $(am__append_85) \
+- $(am__append_89) $(am__append_92) $(am__append_95) \
+- $(am__append_98) $(am__append_101) $(am__append_104) \
+- $(am__append_107) $(am__append_111)
+-BUILT_SOURCES = $(am__append_40)
++ $(am__append_27) $(am__append_32) $(am__append_38) \
++ $(am__append_45) $(am__append_48) $(am__append_52) \
++ $(am__append_56) $(am__append_59) $(am__append_65) \
++ $(am__append_76) $(am__append_79) $(am__append_82) \
++ $(am__append_87) $(am__append_91) $(am__append_94) \
++ $(am__append_97) $(am__append_100) $(am__append_103) \
++ $(am__append_106) $(am__append_109) $(am__append_113)
++BUILT_SOURCES = $(am__append_42)
+ TESTS = $(check_SCRIPTS) $(check_PROGRAMS)
+
+ # ---------------------------------------------------------------------
+@@ -3085,6 +3098,12 @@ DEPENDENCIES = \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_shared_gnu2_gd_to_ie_test_LDADD = tls_test_gnu2.o tls_test_c_gnu2.o \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ tls_test_gnu2_shared2.so $(THREADLIBS)
+
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_shared_gnu2_gd_to_ie_test_2_SOURCES = tls_test_2_main.c
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_shared_gnu2_gd_to_ie_test_2_LDFLAGS = -Wl,-R,.
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_shared_gnu2_gd_to_ie_test_2_DEPENDENCIES = gcctestdir/ld \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ tls_test_2_gnu2_shared.so
++
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_shared_gnu2_gd_to_ie_test_2_LDADD = tls_test_2_gnu2_shared.so
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_DESCRIPTORS_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_shared_gnu2_test_SOURCES = tls_test_main.cc
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_DESCRIPTORS_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_shared_gnu2_test_DEPENDENCIES = gcctestdir/ld tls_test_gnu2_shared.so
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_DESCRIPTORS_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_shared_gnu2_test_LDFLAGS = -Wl,-R,. $(THREADFLAGS)
+@@ -4404,6 +4423,10 @@ tls_shared_gnu2_gd_to_ie_test$(EXEEXT): $(tls_shared_gnu2_gd_to_ie_test_OBJECTS)
+ @rm -f tls_shared_gnu2_gd_to_ie_test$(EXEEXT)
+ $(AM_V_CXXLD)$(tls_shared_gnu2_gd_to_ie_test_LINK) $(tls_shared_gnu2_gd_to_ie_test_OBJECTS) $(tls_shared_gnu2_gd_to_ie_test_LDADD) $(LIBS)
+
++tls_shared_gnu2_gd_to_ie_test_2$(EXEEXT): $(tls_shared_gnu2_gd_to_ie_test_2_OBJECTS) $(tls_shared_gnu2_gd_to_ie_test_2_DEPENDENCIES) $(EXTRA_tls_shared_gnu2_gd_to_ie_test_2_DEPENDENCIES)
++ @rm -f tls_shared_gnu2_gd_to_ie_test_2$(EXEEXT)
++ $(AM_V_CCLD)$(tls_shared_gnu2_gd_to_ie_test_2_LINK) $(tls_shared_gnu2_gd_to_ie_test_2_OBJECTS) $(tls_shared_gnu2_gd_to_ie_test_2_LDADD) $(LIBS)
++
+ tls_shared_gnu2_test$(EXEEXT): $(tls_shared_gnu2_test_OBJECTS) $(tls_shared_gnu2_test_DEPENDENCIES) $(EXTRA_tls_shared_gnu2_test_DEPENDENCIES)
+ @rm -f tls_shared_gnu2_test$(EXEEXT)
+ $(AM_V_CXXLD)$(tls_shared_gnu2_test_LINK) $(tls_shared_gnu2_test_OBJECTS) $(tls_shared_gnu2_test_LDADD) $(LIBS)
+@@ -4737,6 +4760,7 @@ distclean-compile:
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_pie_pic_test.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_pie_test.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_test.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_test_2_main.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_test_file2.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_test_main.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/two_file_mixed_pie_test.Po@am__quote@
+@@ -5537,6 +5561,13 @@ tls_pie_test.sh.log: tls_pie_test.sh
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
++tls_test_2_gnu2_shared.sh.log: tls_test_2_gnu2_shared.sh
++ @p='tls_test_2_gnu2_shared.sh'; \
++ b='tls_test_2_gnu2_shared.sh'; \
++ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
++ --log-file $$b.log --trs-file $$b.trs \
++ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
++ "$$tst" $(AM_TESTS_FD_REDIRECT)
+ x86_64_mov_to_lea.sh.log: x86_64_mov_to_lea.sh
+ @p='x86_64_mov_to_lea.sh'; \
+ b='x86_64_mov_to_lea.sh'; \
+@@ -5551,6 +5582,13 @@ x86_64_indirect_call_to_direct.sh.log: x86_64_indirect_call_to_direct.sh
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
++x86_64_gd_to_ie.sh.log: x86_64_gd_to_ie.sh
++ @p='x86_64_gd_to_ie.sh'; \
++ b='x86_64_gd_to_ie.sh'; \
++ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
++ --log-file $$b.log --trs-file $$b.trs \
++ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
++ "$$tst" $(AM_TESTS_FD_REDIRECT)
+ x86_64_gd_to_le.sh.log: x86_64_gd_to_le.sh
+ @p='x86_64_gd_to_le.sh'; \
+ b='x86_64_gd_to_le.sh'; \
+@@ -6734,6 +6772,13 @@ tls_shared_gnu2_gd_to_ie_test.log: tls_shared_gnu2_gd_to_ie_test$(EXEEXT)
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
++tls_shared_gnu2_gd_to_ie_test_2.log: tls_shared_gnu2_gd_to_ie_test_2$(EXEEXT)
++ @p='tls_shared_gnu2_gd_to_ie_test_2$(EXEEXT)'; \
++ b='tls_shared_gnu2_gd_to_ie_test_2'; \
++ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
++ --log-file $$b.log --trs-file $$b.trs \
++ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
++ "$$tst" $(AM_TESTS_FD_REDIRECT)
+ tls_shared_gnu2_test.log: tls_shared_gnu2_test$(EXEEXT)
+ @p='tls_shared_gnu2_test$(EXEEXT)'; \
+ b='tls_shared_gnu2_test'; \
+@@ -8122,6 +8167,16 @@ uninstall-am:
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_test_gnu2_shared2.so: tls_test_file2_gnu2.o gcctestdir/ld
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ $(CXXLINK) -shared tls_test_file2_gnu2.o
+
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_test_2_gnu2.o: tls_test_2_gnu2.c gcctestdir/as
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ $(COMPILE) -c -fpic -mtls-dialect=gnu2 -o $@ $<
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_test_2_gnu.o: tls_test_2_gnu.c gcctestdir/as
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ $(COMPILE) -c -fpic -mtls-dialect=gnu -ftls-model=initial-exec -o $@ $<
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_test_2_gnu2_shared.so: tls_test_2_gnu2.o tls_test_2_gnu.o \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ gcctestdir/ld
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ $(LINK) -shared tls_test_2_gnu2.o tls_test_2_gnu.o
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_test_2_gnu2_shared.stdout: tls_test_2_gnu2_shared.so
++@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ $(TEST_READELF) -rW $< > $@ 2>/dev/null
++
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_DESCRIPTORS_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_test_gnu2_shared.so: tls_test_gnu2.o tls_test_file2_gnu2.o tls_test_c_gnu2.o gcctestdir/ld
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_DESCRIPTORS_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ $(CXXLINK) -shared tls_test_gnu2.o tls_test_file2_gnu2.o tls_test_c_gnu2.o
+ @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@tls_test_shared_nonpic.so: tls_test.o tls_test_file2.o tls_test_c.o gcctestdir/ld
+@@ -8213,6 +8268,14 @@ uninstall-am:
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@x86_64_indirect_jump_to_direct1.stdout: x86_64_indirect_jump_to_direct1
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_OBJDUMP) -dw $< > $@
+
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@x86_64_gd_to_ie.o: x86_64_gd_to_ie.s
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_AS) --64 -o $@ $<
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@x86_64_gd_to_ie.so: x86_64_gd_to_ie.o gcctestdir/ld
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld -shared -o $@ $<
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@x86_64_gd_to_ie.stdout: x86_64_gd_to_ie.so
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_OBJDUMP) -dw $< > $@
++@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -rw $< >> $@
++
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@x86_64_gd_to_le.o: x86_64_gd_to_le.s
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_AS) --64 -o $@ $<
+ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@x86_64_gd_to_le: x86_64_gd_to_le.o gcctestdir/ld
+diff --git a/gold/testsuite/tls_test_2.h b/gold/testsuite/tls_test_2.h
+new file mode 100644
+index 0000000000..314afc58a9
+--- /dev/null
++++ b/gold/testsuite/tls_test_2.h
+@@ -0,0 +1,7 @@
++extern int test1a (void);
++extern int test1b (void);
++extern int *test2a (void);
++extern int *test2b (void);
++
++extern __thread int foo __attribute__ ((visibility ("hidden")));
++extern __thread int bar __attribute__ ((visibility ("hidden")));
+diff --git a/gold/testsuite/tls_test_2_gnu.c b/gold/testsuite/tls_test_2_gnu.c
+new file mode 100644
+index 0000000000..8f93ad5a5d
+--- /dev/null
++++ b/gold/testsuite/tls_test_2_gnu.c
+@@ -0,0 +1,13 @@
++#include "tls_test_2.h"
++
++int *
++test2a (void)
++{
++ return &foo;
++}
++
++int *
++test2b (void)
++{
++ return &bar;
++}
+diff --git a/gold/testsuite/tls_test_2_gnu2.c b/gold/testsuite/tls_test_2_gnu2.c
+new file mode 100644
+index 0000000000..439fb8dc80
+--- /dev/null
++++ b/gold/testsuite/tls_test_2_gnu2.c
+@@ -0,0 +1,16 @@
++#include "tls_test_2.h"
++
++__thread int foo __attribute__ ((visibility ("hidden"))) = 30;
++__thread int bar __attribute__ ((visibility ("hidden"))) = 40;
++
++int
++test1a (void)
++{
++ return foo;
++}
++
++int
++test1b (void)
++{
++ return bar;
++}
+diff --git a/gold/testsuite/tls_test_2_gnu2_shared.sh b/gold/testsuite/tls_test_2_gnu2_shared.sh
+new file mode 100755
+index 0000000000..2d92e1a9f8
+--- /dev/null
++++ b/gold/testsuite/tls_test_2_gnu2_shared.sh
+@@ -0,0 +1,55 @@
++#!/bin/sh
++
++# tls_test_2_gnu2_shared.sh-- a test case for TLSDESC -> IE relaxation
++# in shared library.
++
++# Copyright (C) 2020 Free Software Foundation, Inc.
++
++# This file is part of gold.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
++# MA 02110-1301, USA.
++
++# This file goes with tls_test_2_gnu2_shared.so, a shared compiled
++# with TLSDESC and IE. Since IE is known at link time, TLSDESC should
++# optimized to IE.
++
++check()
++{
++ if ! grep -q "$2" "$1"
++ then
++ echo "Did not find expected output in $1:"
++ echo " $2"
++ echo ""
++ echo "Actual output below:"
++ cat "$1"
++ exit 1
++ fi
++}
++
++check_missing()
++{
++ if grep -q "$2" "$1"
++ then
++ echo "Found unexpected output in $1:"
++ echo " $2"
++ echo ""
++ echo "Actual output below:"
++ cat "$1"
++ exit 1
++ fi
++}
++
++check_missing tls_test_2_gnu2_shared.stdout "R_X86_64_TLSDESC"
+diff --git a/gold/testsuite/tls_test_2_main.c b/gold/testsuite/tls_test_2_main.c
+new file mode 100644
+index 0000000000..3afce4b761
+--- /dev/null
++++ b/gold/testsuite/tls_test_2_main.c
+@@ -0,0 +1,26 @@
++#include <stdlib.h>
++#include <stdio.h>
++#include "tls_test_2.h"
++
++int
++main (void)
++{
++ int *p;
++ if (test1a () != 30)
++ abort ();
++ if (test1b () != 40)
++ abort ();
++ p = test2a ();
++ if (*p != 30)
++ abort ();
++ p = test2b ();
++ if (*p != 40)
++ abort ();
++ *p = 301;
++ if (test1a () != 30)
++ abort ();
++ if (test1b () != 301)
++ abort ();
++ puts ("PASS");
++ return 0;
++}
+diff --git a/gold/testsuite/x86_64_gd_to_ie.s b/gold/testsuite/x86_64_gd_to_ie.s
+new file mode 100644
+index 0000000000..bbc73a04b3
+--- /dev/null
++++ b/gold/testsuite/x86_64_gd_to_ie.s
+@@ -0,0 +1,25 @@
++ .text
++ .p2align 4
++ .globl _start
++ .type _start, @function
++_start:
++ .cfi_startproc
++ subq $8, %rsp
++ .cfi_def_cfa_offset 16
++ leaq foo@TLSDESC(%rip), %r9
++ movq %r9, %rax
++ call *foo@TLSCALL(%rax)
++ addq %fs:0, %rax
++ addq foo@gottpoff(%rip), %rax
++ addq $8, %rsp
++ .cfi_def_cfa_offset 8
++ ret
++ .cfi_endproc
++ .size _start, .-_start
++ .section .tdata,"awT",@progbits
++ .align 4
++ .type foo, @object
++ .size foo, 4
++foo:
++ .long 30
++ .section .note.GNU-stack,"",@progbits
+diff --git a/gold/testsuite/x86_64_gd_to_ie.sh b/gold/testsuite/x86_64_gd_to_ie.sh
+new file mode 100755
+index 0000000000..79cbb707e7
+--- /dev/null
++++ b/gold/testsuite/x86_64_gd_to_ie.sh
+@@ -0,0 +1,40 @@
++#!/bin/sh
++
++# x86_64_gd_to_ie.sh -- a test for GDesc -> IE conversion.
++
++# Copyright (C) 2020 Free Software Foundation, Inc.
++
++# This file is part of gold.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
++# MA 02110-1301, USA.
++
++set -e
++
++check_missing()
++{
++ if grep -q "$2" "$1"
++ then
++ echo "Found unexpected output in $1:"
++ echo " $2"
++ echo ""
++ echo "Actual output below:"
++ cat "$1"
++ exit 1
++ fi
++}
++
++grep -q "mov[ \t]\+0x[a-f0-9]\+(%rip),%r9" x86_64_gd_to_ie.stdout
++check_missing x86_64_gd_to_ie.stdout "R_X86_64_TLSDESC"
+--
+2.26.2
+
diff --git a/patches/README b/patches/README
index 010727b087d..283316c8d02 100644
--- a/patches/README
+++ b/patches/README
@@ -25,6 +25,13 @@ patches="
0001-gold-Ignore-gnu.build.attributes-section.patch
0001-gold-Fix-script_test_7.sh-script_test_9.sh.patch
0001-gold-Skip-some-incremental-tests-for-fcf-protection.patch
+0001-gold-Workaround-PR-gold-25968.patch
+0002-Gold-Allow-repeated-call-to-set_doing_static_link.patch
+0003-gold-Initial-TLS-relocation-scan-support.patch
+0004-gold-Enable-TLS-relocation-scan.patch
+0005-gold-Handle-TLS-relocation-scan-in-garbage-collectio.patch
+0006-gold-Enable-TLS-relocation-scan-for-x86-64.patch
+0007-gold-Add-testcases-for-PR-gold-25476.patch
0001-Don-t-claim-a-fat-IR-object-if-no-IR-object-should-b.patch
0001-Add-lto-and-none-lto-input-support-for-ld-r.patch
0002-Add-test-for-nm-on-mixed-LTO-non-LTO-object.patch