From 31f129eccbeba20a993529879fc9f84e3875fdde Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sun, 10 May 2020 13:19:55 -0700 Subject: Apply PR gold/25476 fix --- patches/0001-gold-Workaround-PR-gold-25968.patch | 45 + ...ow-repeated-call-to-set_doing_static_link.patch | 33 + ...-gold-Initial-TLS-relocation-scan-support.patch | 93 ++ patches/0004-gold-Enable-TLS-relocation-scan.patch | 185 ++++ ...-TLS-relocation-scan-in-garbage-collectio.patch | 142 +++ ...old-Enable-TLS-relocation-scan-for-x86-64.patch | 326 ++++++ ...0007-gold-Add-testcases-for-PR-gold-25476.patch | 1047 ++++++++++++++++++++ patches/README | 7 + 8 files changed, 1878 insertions(+) create mode 100644 patches/0001-gold-Workaround-PR-gold-25968.patch create mode 100644 patches/0002-Gold-Allow-repeated-call-to-set_doing_static_link.patch create mode 100644 patches/0003-gold-Initial-TLS-relocation-scan-support.patch create mode 100644 patches/0004-gold-Enable-TLS-relocation-scan.patch create mode 100644 patches/0005-gold-Handle-TLS-relocation-scan-in-garbage-collectio.patch create mode 100644 patches/0006-gold-Enable-TLS-relocation-scan-for-x86-64.patch create mode 100644 patches/0007-gold-Add-testcases-for-PR-gold-25476.patch 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" +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" +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" +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" +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::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::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::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(¶meters->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::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(¶meters->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::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" +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(¶meters->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(¶meters->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(¶meters->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" +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::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::Scan::global): Likewise. + (Target_x86_64::gc_process_relocs): Call gold::scan_relocs + for TLS relocation scan pass. + (Target_x86_64::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 + 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::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(reloc.get_r_info()); + target->make_local_ifunc_plt_entry(symtab, layout, object, r_sym); +@@ -3615,6 +3624,9 @@ Target_x86_64::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::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::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::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::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::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::optimize_tls_reloc(!output_is_shared, + r_type); ++ if (optimized_type == tls::TLSOPT_NONE) ++ { ++ unsigned int r_sym = elfcpp::elf_r_sym(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::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::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::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::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::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::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::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::Scan::global(Symbol_table* symtab, + parameters->options().output_is_executable())); + const tls::Tls_optimization optimized_type + = Target_x86_64::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::gc_process_relocs(Symbol_table* symtab, + return; + } + +- gold::gc_process_relocs, 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, 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, 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::Relocate::relocate_tls( + : gsym->final_value_is_known()); + tls::Tls_optimization optimized_type + = Target_x86_64::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(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::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" +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 ++#include ++#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 -- cgit v1.2.1