From: Cary Coutant Date: Thu, 22 Dec 2016 22:06:24 +0000 (-0800) Subject: Fix placement of forced local symbols in the dynamic symbol table. X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=c4d5a76223f74930add9014f2a77339eb80b737c;p=deliverable%2Fbinutils-gdb.git Fix placement of forced local symbols in the dynamic symbol table. Gold was not placing forced-local symbols (e.g., hidden visibility) at the front of the dynamic symbol table, or including them in the count of local symbols recorded in the .dynsym section's sh_info field. gold/ * layout.cc (Layout::finalize): Track count of forced-local symbols in .dynsym. (Layout::create_symtab_sections): Add local_dynamic_count parameter; use that instead of sh_info value. (Layout::create_dynamic_symtab): Add pforced_local_dynamic_count parameter; pass it to Symtab::set_dynsym_indexes(). Include forced locals in sh_info value. Pass index of first real global to Dynobj::create_gnu_hash_table() and Dynobj::create_elf_hash_table(). * layout.h (Layout::create_symtab_sections): Add local_dynamic_count parameter. (Layout::create_dynamic_symtab): Add pforced_local_dynamic_count parameter. * symtab.cc (Symbol_table::set_dynsym_indexes): Add pforced_local_count parameter. Process forced-local symbols first and return the count. (Symbol_table::finalize): Update comments. * symtab.h (Symbol_table::set_dynsym_indexes): Add pforced_local_count parameter. (Symbol_table::first_dynamic_global_index_): Update comment. (Symbol_table::dynamic_count_): Update comment. * testsuite/Makefile.am (ifuncmod1.sh): New test case. * testsuite/Makefile.in: Regenerate. * testsuite/ifuncmod1.sh: New shell script. --- diff --git a/gold/ChangeLog b/gold/ChangeLog index 9ea609eeef..5971af969e 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,28 @@ +2016-12-22 Cary Coutant + + * layout.cc (Layout::finalize): Track count of forced-local symbols + in .dynsym. + (Layout::create_symtab_sections): Add local_dynamic_count parameter; + use that instead of sh_info value. + (Layout::create_dynamic_symtab): Add pforced_local_dynamic_count + parameter; pass it to Symtab::set_dynsym_indexes(). Include forced + locals in sh_info value. Pass index of first real global to + Dynobj::create_gnu_hash_table() and Dynobj::create_elf_hash_table(). + * layout.h (Layout::create_symtab_sections): Add local_dynamic_count + parameter. + (Layout::create_dynamic_symtab): Add pforced_local_dynamic_count + parameter. + * symtab.cc (Symbol_table::set_dynsym_indexes): Add pforced_local_count + parameter. Process forced-local symbols first and return the count. + (Symbol_table::finalize): Update comments. + * symtab.h (Symbol_table::set_dynsym_indexes): Add pforced_local_count + parameter. + (Symbol_table::first_dynamic_global_index_): Update comment. + (Symbol_table::dynamic_count_): Update comment. + * testsuite/Makefile.am (ifuncmod1.sh): New test case. + * testsuite/Makefile.in: Regenerate. + * testsuite/ifuncmod1.sh: New shell script. + 2016-12-21 Cary Coutant * symtab.cc (Symbol_table::define_special_symbol): Add is_forced_local diff --git a/gold/layout.cc b/gold/layout.cc index de0384b8f4..bb80531f0a 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -2696,6 +2696,9 @@ off_t Layout::finalize(const Input_objects* input_objects, Symbol_table* symtab, Target* target, const Task* task) { + unsigned int local_dynamic_count = 0; + unsigned int forced_local_dynamic_count = 0; + target->finalize_sections(this, input_objects, symtab); this->count_local_symbols(task, input_objects); @@ -2716,11 +2719,12 @@ Layout::finalize(const Input_objects* input_objects, Symbol_table* symtab, // Create the dynamic symbol table, including the hash table. Output_section* dynstr; std::vector dynamic_symbols; - unsigned int local_dynamic_count; Versions versions(*this->script_options()->version_script_info(), &this->dynpool_); this->create_dynamic_symtab(input_objects, symtab, &dynstr, - &local_dynamic_count, &dynamic_symbols, + &local_dynamic_count, + &forced_local_dynamic_count, + &dynamic_symbols, &versions); // Create the .interp section to hold the name of the @@ -2741,7 +2745,9 @@ Layout::finalize(const Input_objects* input_objects, Symbol_table* symtab, // Create the version sections. We can't do this until the // dynamic string table is complete. - this->create_version_sections(&versions, symtab, local_dynamic_count, + this->create_version_sections(&versions, symtab, + (local_dynamic_count + + forced_local_dynamic_count), dynamic_symbols, dynstr); // Set the size of the _DYNAMIC symbol. We can't do this until @@ -2811,7 +2817,8 @@ Layout::finalize(const Input_objects* input_objects, Symbol_table* symtab, shndx = this->set_section_indexes(shndx); // Create the symbol table sections. - this->create_symtab_sections(input_objects, symtab, shndx, &off); + this->create_symtab_sections(input_objects, symtab, shndx, &off, + local_dynamic_count); if (!parameters->doing_static_link()) this->assign_local_dynsym_offsets(input_objects); @@ -3999,7 +4006,8 @@ void Layout::create_symtab_sections(const Input_objects* input_objects, Symbol_table* symtab, unsigned int shnum, - off_t* poff) + off_t* poff, + unsigned int local_dynamic_count) { int symsize; unsigned int align; @@ -4053,18 +4061,15 @@ Layout::create_symtab_sections(const Input_objects* input_objects, gold_assert(static_cast(local_symcount * symsize) == off); off_t dynoff; - size_t dyn_global_index; size_t dyncount; if (this->dynsym_section_ == NULL) { dynoff = 0; - dyn_global_index = 0; dyncount = 0; } else { - dyn_global_index = this->dynsym_section_->info(); - off_t locsize = dyn_global_index * this->dynsym_section_->entsize(); + off_t locsize = local_dynamic_count * this->dynsym_section_->entsize(); dynoff = this->dynsym_section_->offset() + locsize; dyncount = (this->dynsym_section_->data_size() - locsize) / symsize; gold_assert(static_cast(dyncount * symsize) @@ -4072,7 +4077,7 @@ Layout::create_symtab_sections(const Input_objects* input_objects, } off_t global_off = off; - off = symtab->finalize(off, dynoff, dyn_global_index, dyncount, + off = symtab->finalize(off, dynoff, local_dynamic_count, dyncount, &this->sympool_, &local_symcount); if (!parameters->options().strip_all()) @@ -4238,12 +4243,18 @@ Layout::allocated_output_section_count() const } // Create the dynamic symbol table. +// *PLOCAL_DYNAMIC_COUNT will be set to the number of local symbols +// from input objects, and *PFORCED_LOCAL_DYNAMIC_COUNT will be set +// to the number of global symbols that have been forced local. +// We need to remember the former because the forced-local symbols are +// written along with the global symbols in Symtab::write_globals(). void Layout::create_dynamic_symtab(const Input_objects* input_objects, Symbol_table* symtab, Output_section** pdynstr, unsigned int* plocal_dynamic_count, + unsigned int* pforced_local_dynamic_count, std::vector* pdynamic_symbols, Versions* pversions) { @@ -4278,10 +4289,14 @@ Layout::create_dynamic_symtab(const Input_objects* input_objects, } unsigned int local_symcount = index; - *plocal_dynamic_count = local_symcount; + unsigned int forced_local_count = 0; - index = symtab->set_dynsym_indexes(index, pdynamic_symbols, - &this->dynpool_, pversions); + index = symtab->set_dynsym_indexes(index, &forced_local_count, + pdynamic_symbols, &this->dynpool_, + pversions); + + *plocal_dynamic_count = local_symcount; + *pforced_local_dynamic_count = forced_local_count; int symsize; unsigned int align; @@ -4316,7 +4331,7 @@ Layout::create_dynamic_symtab(const Input_objects* input_objects, "** dynsym"); dynsym->add_output_section_data(odata); - dynsym->set_info(local_symcount); + dynsym->set_info(local_symcount + forced_local_count); dynsym->set_entsize(symsize); dynsym->set_addralign(align); @@ -4400,7 +4415,8 @@ Layout::create_dynamic_symtab(const Input_objects* input_objects, { unsigned char* phash; unsigned int hashlen; - Dynobj::create_gnu_hash_table(*pdynamic_symbols, local_symcount, + Dynobj::create_gnu_hash_table(*pdynamic_symbols, + local_symcount + forced_local_count, &phash, &hashlen); Output_section* hashsec = @@ -4437,7 +4453,8 @@ Layout::create_dynamic_symtab(const Input_objects* input_objects, { unsigned char* phash; unsigned int hashlen; - Dynobj::create_elf_hash_table(*pdynamic_symbols, local_symcount, + Dynobj::create_elf_hash_table(*pdynamic_symbols, + local_symcount + forced_local_count, &phash, &hashlen); Output_section* hashsec = diff --git a/gold/layout.h b/gold/layout.h index 10be3d4745..1afb9a8ea0 100644 --- a/gold/layout.h +++ b/gold/layout.h @@ -1067,7 +1067,7 @@ class Layout // Create the output sections for the symbol table. void create_symtab_sections(const Input_objects*, Symbol_table*, - unsigned int, off_t*); + unsigned int, off_t*, unsigned int); // Create the .shstrtab section. Output_section* @@ -1082,6 +1082,7 @@ class Layout create_dynamic_symtab(const Input_objects*, Symbol_table*, Output_section** pdynstr, unsigned int* plocal_dynamic_count, + unsigned int* pforced_local_dynamic_count, std::vector* pdynamic_symbols, Versions* versions); diff --git a/gold/symtab.cc b/gold/symtab.cc index d97fbdd358..32c97fbc34 100644 --- a/gold/symtab.cc +++ b/gold/symtab.cc @@ -2473,18 +2473,42 @@ Symbol_table::add_undefined_symbol_from_command_line(const char* name) } // Set the dynamic symbol indexes. INDEX is the index of the first -// global dynamic symbol. Pointers to the symbols are stored into the -// vector SYMS. The names are added to DYNPOOL. This returns an -// updated dynamic symbol index. +// global dynamic symbol. Pointers to the global symbols are stored +// into the vector SYMS. The names are added to DYNPOOL. +// This returns an updated dynamic symbol index. unsigned int Symbol_table::set_dynsym_indexes(unsigned int index, + unsigned int* pforced_local_count, std::vector* syms, Stringpool* dynpool, Versions* versions) { std::vector as_needed_sym; + // First process all the symbols which have been forced to be local, + // as they must appear before all global symbols. + unsigned int forced_local_count = 0; + for (Forced_locals::iterator p = this->forced_locals_.begin(); + p != this->forced_locals_.end(); + ++p) + { + Symbol* sym = *p; + gold_assert(sym->is_forced_local()); + if (sym->has_dynsym_index()) + continue; + if (!sym->should_add_dynsym_entry(this)) + sym->set_dynsym_index(-1U); + else + { + sym->set_dynsym_index(index); + ++index; + ++forced_local_count; + dynpool->add(sym->name(), false, NULL); + } + } + *pforced_local_count = forced_local_count; + // Allow a target to set dynsym indexes. if (parameters->target().has_custom_set_dynsym_indexes()) { @@ -2494,6 +2518,8 @@ Symbol_table::set_dynsym_indexes(unsigned int index, ++p) { Symbol* sym = p->second; + if (sym->is_forced_local()) + continue; if (!sym->should_add_dynsym_entry(this)) sym->set_dynsym_index(-1U); else @@ -2510,6 +2536,9 @@ Symbol_table::set_dynsym_indexes(unsigned int index, { Symbol* sym = p->second; + if (sym->is_forced_local()) + continue; + // Note that SYM may already have a dynamic symbol index, since // some symbols appear more than once in the symbol table, with // and without a version. @@ -2581,7 +2610,12 @@ Symbol_table::set_dynsym_indexes(unsigned int index, // Set the final values for all the symbols. The index of the first // global symbol in the output file is *PLOCAL_SYMCOUNT. Record the // file offset OFF. Add their names to POOL. Return the new file -// offset. Update *PLOCAL_SYMCOUNT if necessary. +// offset. Update *PLOCAL_SYMCOUNT if necessary. DYNOFF and +// DYN_GLOBAL_INDEX refer to the start of the symbols that will be +// written from the global symbol table in Symtab::write_globals(), +// which will include forced-local symbols. DYN_GLOBAL_INDEX is +// not necessarily the same as the sh_info field for the .dynsym +// section, which will point to the first real global symbol. off_t Symbol_table::finalize(off_t off, off_t dynoff, size_t dyn_global_index, diff --git a/gold/symtab.h b/gold/symtab.h index d0be59f7a3..b1ab971a3f 100644 --- a/gold/symtab.h +++ b/gold/symtab.h @@ -1574,12 +1574,13 @@ class Symbol_table get_copy_source(const Symbol* sym) const; // Set the dynamic symbol indexes. INDEX is the index of the first - // global dynamic symbol. Pointers to the symbols are stored into + // global dynamic symbol. Return the count of forced-local symbols in + // *PFORCED_LOCAL_COUNT. Pointers to the symbols are stored into // the vector. The names are stored into the Stringpool. This // returns an updated dynamic symbol index. unsigned int - set_dynsym_indexes(unsigned int index, std::vector*, - Stringpool*, Versions*); + set_dynsym_indexes(unsigned int index, unsigned int* pforced_local_count, + std::vector*, Stringpool*, Versions*); // Finalize the symbol table after we have set the final addresses // of all the input sections. This sets the final symbol indexes, @@ -1928,9 +1929,11 @@ class Symbol_table unsigned int output_count_; // The file offset of the global dynamic symbols, or 0 if none. off_t dynamic_offset_; - // The index of the first global dynamic symbol. + // The index of the first global dynamic symbol (including + // forced-local symbols). unsigned int first_dynamic_global_index_; - // The number of global dynamic symbols, or 0 if none. + // The number of global dynamic symbols (including forced-local symbols), + // or 0 if none. unsigned int dynamic_count_; // The symbol hash table. Symbol_table_type table_; diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am index fbdc147446..46135a3b69 100644 --- a/gold/testsuite/Makefile.am +++ b/gold/testsuite/Makefile.am @@ -2531,6 +2531,11 @@ ifuncmain1static_LDADD = ifuncdep1.o check_PROGRAMS += ifuncmain1picstatic ifuncmain1picstatic: ifuncmain1pic.o ifuncmod1.o gcctestdir/ld $(LINK) -Bgcctestdir/ -static ifuncmain1pic.o ifuncmod1.o + +check_SCRIPTS += ifuncmod1.sh +check_DATA += ifuncmod1.so.stderr +ifuncmod1.so.stderr: ifuncmod1.so + $(TEST_READELF) -s $< > /dev/null 2> $@ endif endif diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in index d1ce1fb757..e5e3320391 100644 --- a/gold/testsuite/Makefile.in +++ b/gold/testsuite/Makefile.in @@ -581,33 +581,18 @@ 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. - -# Test that strong reference to a weak symbol in a DSO remains strong. - -# Test that a strong weak reference remains strong if there is another -# weak reference in a DSO. - -# Test that MEMORY region support works. @GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_56 = 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@ 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@ no_version_test.sh @GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_57 = 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@ 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 +@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@ libexclude_libs_test_1.a \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ libexclude_libs_test_2.a \ @@ -655,7 +640,9 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ @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@ ifuncmain1picstatic -@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_62 = ifuncmain1 \ +@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@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1pic \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1vis \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1vispic \ @@ -663,14 +650,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_63 = ifuncmain2static \ +@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@ 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_64 = ifuncmain2 \ +@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_66 = ifuncmain2 \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain2pic \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain3 @GCC_FALSE@ifuncmain2_DEPENDENCIES = @@ -679,32 +666,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_65 = ifuncmain4static \ +@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@ 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_66 = ifuncmain4 +@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_68 = 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_67 = ifuncmain5static \ +@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@ ifuncmain5picstatic -@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_68 = ifuncmain5 \ +@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_70 = 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_69 = ifuncmain7static \ +@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@ 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_70 = ifuncmain7 \ +@GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_72 = 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 @@ -712,6 +699,22 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ @IFUNC_FALSE@ifuncmain7_DEPENDENCIES = @NATIVE_LINKER_FALSE@ifuncmain7_DEPENDENCIES = +# Test that strong reference to a weak symbol in a DSO remains strong. + +# Test that a strong weak reference remains strong if there is another +# 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@ 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@ 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 + # Test that --start-lib and --end-lib function correctly. # Test that __ehdr_start is defined correctly. @@ -723,7 +726,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_71 = start_lib_test \ +@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_75 = 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 \ @@ -736,17 +739,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_72 = gdb_index_test_1.sh \ +@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@am__append_76 = 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_73 = gdb_index_test_1.stdout \ +@GCC_TRUE@@HAVE_PUBNAMES_TRUE@@NATIVE_LINKER_TRUE@am__append_77 = 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_74 = gdb_index_test_1.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@ 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 \ @@ -768,18 +771,18 @@ 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_75 = ehdr_start_test_4.sh \ +@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_79 = ehdr_start_test_4.sh \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ defsym_test.sh -@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_76 = ehdr_start_test_4.syms \ +@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_80 = ehdr_start_test_4.syms \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ defsym_test.syms -@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_77 = ehdr_start_test_4 \ +@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_81 = 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 = # 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_78 = incremental_test_2 \ +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_82 = incremental_test_2 \ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_3 \ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4 \ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_5 \ @@ -788,7 +791,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_common_test_1 \ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_comdat_test_1 \ @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_79 = two_file_test_tmp_2.o \ +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_83 = 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 \ @@ -798,30 +801,30 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ # These tests work with native and cross linkers. # Test script section order. -@NATIVE_OR_CROSS_LINKER_TRUE@am__append_80 = script_test_10.sh -@NATIVE_OR_CROSS_LINKER_TRUE@am__append_81 = script_test_10.stdout -@NATIVE_OR_CROSS_LINKER_TRUE@am__append_82 = script_test_10 +@NATIVE_OR_CROSS_LINKER_TRUE@am__append_84 = script_test_10.sh +@NATIVE_OR_CROSS_LINKER_TRUE@am__append_85 = script_test_10.stdout +@NATIVE_OR_CROSS_LINKER_TRUE@am__append_86 = script_test_10 # These tests work with cross linkers only. -@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_83 = split_i386.sh -@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_84 = split_i386_1.stdout split_i386_2.stdout \ +@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_87 = split_i386.sh +@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_88 = 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_85 = split_i386_1 split_i386_2 split_i386_3 \ +@DEFAULT_TARGET_I386_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_89 = 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_86 = split_x86_64.sh -@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_87 = split_x86_64_1.stdout split_x86_64_2.stdout \ +@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_90 = split_x86_64.sh +@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_91 = split_x86_64_1.stdout split_x86_64_2.stdout \ @DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_3.stdout split_x86_64_4.stdout split_x86_64_r.stdout -@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_88 = split_x86_64_1 split_x86_64_2 split_x86_64_3 \ +@DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_92 = 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_89 = split_x32.sh -@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_90 = split_x32_1.stdout split_x32_2.stdout \ +@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_93 = split_x32.sh +@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_94 = 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_91 = split_x32_1 split_x32_2 split_x32_3 \ +@DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_95 = split_x32_1 split_x32_2 split_x32_3 \ @DEFAULT_TARGET_X32_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x32_4 split_x32_r @@ -838,7 +841,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_92 = arm_abs_global.sh \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_96 = 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 \ @@ -859,7 +862,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_93 = arm_abs_global.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_97 = 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 \ @@ -910,7 +913,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_94 = arm_abs_global \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_98 = 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 \ @@ -959,14 +962,14 @@ 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_95 = aarch64_reloc_none.sh \ +@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_99 = 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@am__append_96 = aarch64_reloc_none.stdout \ +@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_100 = 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@am__append_97 = aarch64_reloc_none \ +@DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_101 = aarch64_reloc_none \ @DEFAULT_TARGET_AARCH64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ aarch64_relocs -@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_98 = split_s390.sh -@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_99 = split_s390_z1.stdout split_s390_z2.stdout split_s390_z3.stdout \ +@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_102 = split_s390.sh +@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_103 = 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 \ @@ -978,7 +981,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_100 = split_s390_z1 split_s390_z2 split_s390_z3 \ +@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_104 = 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 \ @@ -987,10 +990,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_101 = *.dwo *.dwp -@DEFAULT_TARGET_X86_64_TRUE@am__append_102 = dwp_test_1.sh \ +@DEFAULT_TARGET_X86_64_TRUE@am__append_105 = *.dwo *.dwp +@DEFAULT_TARGET_X86_64_TRUE@am__append_106 = dwp_test_1.sh \ @DEFAULT_TARGET_X86_64_TRUE@ dwp_test_2.sh -@DEFAULT_TARGET_X86_64_TRUE@am__append_103 = dwp_test_1.stdout \ +@DEFAULT_TARGET_X86_64_TRUE@am__append_107 = dwp_test_1.stdout \ @DEFAULT_TARGET_X86_64_TRUE@ dwp_test_2.stdout subdir = testsuite DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am @@ -2776,10 +2779,10 @@ MOSTLYCLEANFILES = *.so *.syms *.stdout $(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_74) $(am__append_77) \ - $(am__append_79) $(am__append_82) $(am__append_85) \ - $(am__append_88) $(am__append_91) $(am__append_94) \ - $(am__append_97) $(am__append_100) $(am__append_101) + $(am__append_58) $(am__append_78) $(am__append_81) \ + $(am__append_83) $(am__append_86) $(am__append_89) \ + $(am__append_92) $(am__append_95) $(am__append_98) \ + $(am__append_101) $(am__append_104) $(am__append_105) # We will add to these later, for each individual test. Note # that we add each test under check_SCRIPTS or check_PROGRAMS; @@ -2787,17 +2790,19 @@ MOSTLYCLEANFILES = *.so *.syms *.stdout $(am__append_4) \ 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_72) $(am__append_75) \ - $(am__append_80) $(am__append_83) $(am__append_86) \ - $(am__append_89) $(am__append_92) $(am__append_95) \ - $(am__append_98) $(am__append_102) + $(am__append_56) $(am__append_62) $(am__append_73) \ + $(am__append_76) $(am__append_79) $(am__append_84) \ + $(am__append_87) $(am__append_90) $(am__append_93) \ + $(am__append_96) $(am__append_99) $(am__append_102) \ + $(am__append_106) 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_73) $(am__append_76) \ - $(am__append_81) $(am__append_84) $(am__append_87) \ - $(am__append_90) $(am__append_93) $(am__append_96) \ - $(am__append_99) $(am__append_103) + $(am__append_57) $(am__append_63) $(am__append_74) \ + $(am__append_77) $(am__append_80) $(am__append_85) \ + $(am__append_88) $(am__append_91) $(am__append_94) \ + $(am__append_97) $(am__append_100) $(am__append_103) \ + $(am__append_107) BUILT_SOURCES = $(am__append_40) TESTS = $(check_SCRIPTS) $(check_PROGRAMS) @@ -5191,6 +5196,8 @@ retain_symbols_file_test.sh.log: retain_symbols_file_test.sh @p='retain_symbols_file_test.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) no_version_test.sh.log: no_version_test.sh @p='no_version_test.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +ifuncmod1.sh.log: ifuncmod1.sh + @p='ifuncmod1.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) strong_ref_weak_def.sh.log: strong_ref_weak_def.sh @p='strong_ref_weak_def.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) dyn_weak_ref.sh.log: dyn_weak_ref.sh @@ -6996,6 +7003,8 @@ uninstall-am: @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -fPIE -o $@ $< @GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1picstatic: ifuncmain1pic.o ifuncmod1.o gcctestdir/ld @GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -static ifuncmain1pic.o ifuncmod1.o +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmod1.so.stderr: ifuncmod1.so +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -s $< > /dev/null 2> $@ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1pic: ifuncmain1pic.o ifuncmod1.so gcctestdir/ld @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ ifuncmain1pic.o ifuncmod1.so -Wl,-R,. @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1vispic.o: ifuncmain1vis.c diff --git a/gold/testsuite/ifuncmod1.sh b/gold/testsuite/ifuncmod1.sh new file mode 100755 index 0000000000..20da47e9f4 --- /dev/null +++ b/gold/testsuite/ifuncmod1.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +# ifuncmod1.sh -- check that local IFUNC symbol is grouped with locals. + +# Copyright (C) 2016 Free Software Foundation, Inc. +# Written by Cary Coutant . + +# 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. + +if grep "Warning:" ifuncmod1.so.stderr +then exit 1 +fi + +exit 0