mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-24 04:29:49 +00:00
* symtab.h (Symbol::use_plt_offset): New function.
* i386.cc (Relocate::relocate): Call Symbol::use_plt_offset. * powerpc.cc (Relocate::relocate): Likewise. * sparc.cc (Relocate::relocate): Likewise. * x86_64.cc (Relocate::relocate): Likewise. * testsuite/weak_plt.sh: New test. * testsuite/weak_plt_main.cc: New test. * testsuite/weak_plt_shared.cc: New test. * testsuite/Makefile.am (check_SCRIPTS): Add weak_plt.sh. (check_PROGRAMS): Add weak_plt. (check_DATA): Add weak_plt_shared.so. (weak_plt_main_pic.o, weak_plt): New targets. (weak_plt_shared_pic.o, weak_plt_shared.so): New targets. * testsuite/Makefile.in: Rebuild. * testsuite/Makefile.am (weak_alias_test_1.so): Depend upon gcctestdir/ld. (weak_alias_test_2.so, weak_alias_test_4.so): Likewise. * testsuite/Makefile.in: Rebuild.
This commit is contained in:
parent
e5e6a5ff6e
commit
de4c45bd54
@ -1,3 +1,25 @@
|
||||
2008-08-04 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* symtab.h (Symbol::use_plt_offset): New function.
|
||||
* i386.cc (Relocate::relocate): Call Symbol::use_plt_offset.
|
||||
* powerpc.cc (Relocate::relocate): Likewise.
|
||||
* sparc.cc (Relocate::relocate): Likewise.
|
||||
* x86_64.cc (Relocate::relocate): Likewise.
|
||||
* testsuite/weak_plt.sh: New test.
|
||||
* testsuite/weak_plt_main.cc: New test.
|
||||
* testsuite/weak_plt_shared.cc: New test.
|
||||
* testsuite/Makefile.am (check_SCRIPTS): Add weak_plt.sh.
|
||||
(check_PROGRAMS): Add weak_plt.
|
||||
(check_DATA): Add weak_plt_shared.so.
|
||||
(weak_plt_main_pic.o, weak_plt): New targets.
|
||||
(weak_plt_shared_pic.o, weak_plt_shared.so): New targets.
|
||||
* testsuite/Makefile.in: Rebuild.
|
||||
|
||||
* testsuite/Makefile.am (weak_alias_test_1.so): Depend upon
|
||||
gcctestdir/ld.
|
||||
(weak_alias_test_2.so, weak_alias_test_4.so): Likewise.
|
||||
* testsuite/Makefile.in: Rebuild.
|
||||
|
||||
2008-08-04 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* Makefile.am (POTFILES.in): Set LC_ALL=C.
|
||||
|
11
gold/i386.cc
11
gold/i386.cc
@ -1595,15 +1595,10 @@ Target_i386::Relocate::relocate(const Relocate_info<32, false>* relinfo,
|
||||
|
||||
// Pick the value to use for symbols defined in shared objects.
|
||||
Symbol_value<32> symval;
|
||||
bool is_nonpic = (r_type == elfcpp::R_386_PC8
|
||||
|| r_type == elfcpp::R_386_PC16
|
||||
|| r_type == elfcpp::R_386_PC32);
|
||||
if (gsym != NULL
|
||||
&& (gsym->is_from_dynobj()
|
||||
|| (parameters->options().shared()
|
||||
&& (gsym->is_undefined() || gsym->is_preemptible())))
|
||||
&& gsym->has_plt_offset()
|
||||
&& (!is_nonpic || !parameters->options().shared()))
|
||||
&& gsym->use_plt_offset(r_type == elfcpp::R_386_PC8
|
||||
|| r_type == elfcpp::R_386_PC16
|
||||
|| r_type == elfcpp::R_386_PC32))
|
||||
{
|
||||
symval.set_output_value(target->plt_section()->address()
|
||||
+ gsym->plt_offset());
|
||||
|
@ -1547,10 +1547,12 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
|
||||
// Pick the value to use for symbols defined in shared objects.
|
||||
Symbol_value<size> symval;
|
||||
if (gsym != NULL
|
||||
&& (gsym->is_from_dynobj()
|
||||
|| (parameters->options().shared()
|
||||
&& (gsym->is_undefined() || gsym->is_preemptible())))
|
||||
&& gsym->has_plt_offset())
|
||||
&& gsym->use_plt_offset(r_type == elfcpp::R_POWERPC_REL24
|
||||
|| r_type == elfcpp::R_PPC_LOCAL24PC
|
||||
|| r_type == elfcpp::R_PPC_REL16
|
||||
|| r_type == elfcpp::R_PPC_REL16_LO
|
||||
|| r_type == elfcpp::R_PPC_REL16_HI
|
||||
|| r_type == elfcpp::R_PPC_REL16_HA))
|
||||
{
|
||||
elfcpp::Elf_Xword value;
|
||||
|
||||
|
@ -2332,10 +2332,19 @@ Target_sparc<size, big_endian>::Relocate::relocate(
|
||||
// Pick the value to use for symbols defined in shared objects.
|
||||
Symbol_value<size> symval;
|
||||
if (gsym != NULL
|
||||
&& (gsym->is_from_dynobj()
|
||||
|| (parameters->options().shared()
|
||||
&& (gsym->is_undefined() || gsym->is_preemptible())))
|
||||
&& gsym->has_plt_offset())
|
||||
&& gsym->use_plt_offset(r_type == elfcpp::R_SPARC_DISP8
|
||||
|| r_type == elfcpp::R_SPARC_DISP16
|
||||
|| r_type == elfcpp::R_SPARC_DISP32
|
||||
|| r_type == elfcpp::R_SPARC_DISP64
|
||||
|| r_type == elfcpp::R_SPARC_PC_HH22
|
||||
|| r_type == elfcpp::R_SPARC_PC_HM10
|
||||
|| r_type == elfcpp::R_SPARC_PC_LM22
|
||||
|| r_type == elfcpp::R_SPARC_PC10
|
||||
|| r_type == elfcpp::R_SPARC_PC22
|
||||
|| r_type == elfcpp::R_SPARC_WDISP30
|
||||
|| r_type == elfcpp::R_SPARC_WDISP22
|
||||
|| r_type == elfcpp::R_SPARC_WDISP19
|
||||
|| r_type == elfcpp::R_SPARC_WDISP16))
|
||||
{
|
||||
elfcpp::Elf_Xword value;
|
||||
|
||||
|
@ -577,6 +577,48 @@ class Symbol
|
||||
return false;
|
||||
}
|
||||
|
||||
// Whether we should use the PLT offset associated with a symbol for
|
||||
// a relocation. IS_NON_PIC_REFERENCE is true if this is a non-PIC
|
||||
// reloc--the same set of relocs for which we would pass NON_PIC_REF
|
||||
// to the needs_dynamic_reloc function.
|
||||
|
||||
bool
|
||||
use_plt_offset(bool is_non_pic_reference) const
|
||||
{
|
||||
// If the symbol doesn't have a PLT offset, then naturally we
|
||||
// don't want to use it.
|
||||
if (!this->has_plt_offset())
|
||||
return false;
|
||||
|
||||
// If we are going to generate a dynamic relocation, then we will
|
||||
// wind up using that, so no need to use the PLT entry.
|
||||
if (this->needs_dynamic_reloc(FUNCTION_CALL
|
||||
| (is_non_pic_reference
|
||||
? NON_PIC_REF
|
||||
: 0)))
|
||||
return false;
|
||||
|
||||
// If the symbol is from a dynamic object, we need to use the PLT
|
||||
// entry.
|
||||
if (this->is_from_dynobj())
|
||||
return true;
|
||||
|
||||
// If we are generating a shared object, and this symbol is
|
||||
// undefined or preemptible, we need to use the PLT entry.
|
||||
if (parameters->options().shared()
|
||||
&& (this->is_undefined() || this->is_preemptible()))
|
||||
return true;
|
||||
|
||||
// If this is a weak undefined symbol, we need to use the PLT
|
||||
// entry; the symbol may be defined by a library loaded at
|
||||
// runtime.
|
||||
if (this->is_weak_undefined())
|
||||
return true;
|
||||
|
||||
// Otherwise we can use the regular definition.
|
||||
return false;
|
||||
}
|
||||
|
||||
// Given a direct absolute static relocation against
|
||||
// the global symbol, where a dynamic relocation is needed, this
|
||||
// function returns whether a relative dynamic relocation can be used.
|
||||
|
@ -415,19 +415,31 @@ weak_alias_test_LDADD = \
|
||||
weak_alias_test_4.so
|
||||
weak_alias_test_1_pic.o: weak_alias_test_1.cc
|
||||
$(CXXCOMPILE) -c -fpic -o $@ $<
|
||||
weak_alias_test_1.so: weak_alias_test_1_pic.o
|
||||
weak_alias_test_1.so: weak_alias_test_1_pic.o gcctestdir/ld
|
||||
$(CXXLINK) -Bgcctestdir/ -shared weak_alias_test_1_pic.o
|
||||
weak_alias_test_2_pic.o: weak_alias_test_2.cc
|
||||
$(CXXCOMPILE) -c -fpic -o $@ $<
|
||||
weak_alias_test_2.so: weak_alias_test_2_pic.o
|
||||
weak_alias_test_2.so: weak_alias_test_2_pic.o gcctestdir/ld
|
||||
$(CXXLINK) -Bgcctestdir/ -shared weak_alias_test_2_pic.o
|
||||
weak_alias_test_3.o: weak_alias_test_3.cc
|
||||
$(CXXCOMPILE) -c -o $@ $<
|
||||
weak_alias_test_4_pic.o: weak_alias_test_4.cc
|
||||
$(CXXCOMPILE) -c -fpic -o $@ $<
|
||||
weak_alias_test_4.so: weak_alias_test_4_pic.o
|
||||
weak_alias_test_4.so: weak_alias_test_4_pic.o gcctestdir/ld
|
||||
$(CXXLINK) -Bgcctestdir/ -shared weak_alias_test_4_pic.o
|
||||
|
||||
check_SCRIPTS += weak_plt.sh
|
||||
check_PROGRAMS += weak_plt
|
||||
check_DATA += weak_plt_shared.so
|
||||
weak_plt_main_pic.o: weak_plt_main.cc
|
||||
$(CXXCOMPILE) -c -fpic -o $@ $<
|
||||
weak_plt: weak_plt_main_pic.o gcctestdir/ld
|
||||
$(CXXLINK) -Bgcctestdir/ weak_plt_main_pic.o
|
||||
weak_plt_shared_pic.o: weak_plt_shared.cc
|
||||
$(CXXCOMPILE) -c -fpic -o $@ $<
|
||||
weak_plt_shared.so: weak_plt_shared_pic.o gcctestdir/ld
|
||||
$(CXXLINK) -Bgcctestdir/ -shared weak_plt_shared_pic.o
|
||||
|
||||
check_PROGRAMS += copy_test
|
||||
copy_test_SOURCES = copy_test.cc
|
||||
copy_test_DEPENDENCIES = gcctestdir/ld copy_test_1.so copy_test_2.so
|
||||
|
@ -144,46 +144,13 @@ check_PROGRAMS = object_unittest$(EXEEXT) binary_unittest$(EXEEXT) \
|
||||
@NATIVE_LINKER_FALSE@ $(am__DEPENDENCIES_1) \
|
||||
@NATIVE_LINKER_FALSE@ $(am__DEPENDENCIES_1)
|
||||
@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_4 = weak_undef_nonpic_test
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_5 = weak_alias_test copy_test
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@am__append_6 = tls_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_pic_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_shared_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_shared_ie_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_shared_gd_to_ie_test
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am__append_7 = tls_shared_gnu2_gd_to_ie_test
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_DESCRIPTORS_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am__append_8 = tls_shared_gnu2_test
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@STATIC_TLS_TRUE@@TLS_TRUE@am__append_9 = tls_static_test \
|
||||
@GCC_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_10 = tls_shared_nonpic_test
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_11 = many_sections_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ many_sections_r_test
|
||||
@GCC_FALSE@many_sections_test_DEPENDENCIES = libgoldtest.a \
|
||||
@GCC_FALSE@ ../libgold.a ../../libiberty/libiberty.a \
|
||||
@GCC_FALSE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
|
||||
@NATIVE_LINKER_FALSE@many_sections_test_DEPENDENCIES = libgoldtest.a \
|
||||
@NATIVE_LINKER_FALSE@ ../libgold.a ../../libiberty/libiberty.a \
|
||||
@NATIVE_LINKER_FALSE@ $(am__DEPENDENCIES_1) \
|
||||
@NATIVE_LINKER_FALSE@ $(am__DEPENDENCIES_1)
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_12 = many_sections_define.h \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ many_sections_check.h
|
||||
@CONSTRUCTOR_PRIORITY_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_13 = initpri1
|
||||
@CONSTRUCTOR_PRIORITY_FALSE@initpri1_DEPENDENCIES = libgoldtest.a \
|
||||
@CONSTRUCTOR_PRIORITY_FALSE@ ../libgold.a \
|
||||
@CONSTRUCTOR_PRIORITY_FALSE@ ../../libiberty/libiberty.a \
|
||||
@CONSTRUCTOR_PRIORITY_FALSE@ $(am__DEPENDENCIES_1) \
|
||||
@CONSTRUCTOR_PRIORITY_FALSE@ $(am__DEPENDENCIES_1)
|
||||
@GCC_FALSE@initpri1_DEPENDENCIES = libgoldtest.a ../libgold.a \
|
||||
@GCC_FALSE@ ../../libiberty/libiberty.a $(am__DEPENDENCIES_1) \
|
||||
@GCC_FALSE@ $(am__DEPENDENCIES_1)
|
||||
@NATIVE_LINKER_FALSE@initpri1_DEPENDENCIES = libgoldtest.a \
|
||||
@NATIVE_LINKER_FALSE@ ../libgold.a ../../libiberty/libiberty.a \
|
||||
@NATIVE_LINKER_FALSE@ $(am__DEPENDENCIES_1) \
|
||||
@NATIVE_LINKER_FALSE@ $(am__DEPENDENCIES_1)
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_5 = weak_alias_test weak_plt \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ copy_test
|
||||
|
||||
# Test --detect-odr-violations
|
||||
|
||||
# Similar to --detect-odr-violations: check for undefined symbols in .so's
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_14 = debug_msg.sh \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_6 = weak_plt.sh debug_msg.sh \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ undef_symbol.sh ver_test_2.sh \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ ver_test_4.sh ver_test_5.sh \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ ver_test_7.sh ver_test_10.sh \
|
||||
@ -197,8 +164,8 @@ check_PROGRAMS = object_unittest$(EXEEXT) binary_unittest$(EXEEXT) \
|
||||
|
||||
# We also want to make sure we do something reasonable when there's no
|
||||
# debug info available. For the best test, we use .so's.
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_15 = debug_msg.err \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg_so.err \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_7 = weak_plt_shared.so \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg.err debug_msg_so.err \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg_ndebug.err \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ undef_symbol.err ver_test_2.syms \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ ver_test_4.syms ver_test_5.syms \
|
||||
@ -206,6 +173,40 @@ check_PROGRAMS = object_unittest$(EXEEXT) binary_unittest$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ ver_matching_test.stdout \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_3.stdout \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_4.stdout
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@am__append_8 = tls_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_pic_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_shared_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_shared_ie_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_shared_gd_to_ie_test
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am__append_9 = tls_shared_gnu2_gd_to_ie_test
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_DESCRIPTORS_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@am__append_10 = tls_shared_gnu2_test
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@STATIC_TLS_TRUE@@TLS_TRUE@am__append_11 = tls_static_test \
|
||||
@GCC_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_12 = tls_shared_nonpic_test
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_13 = many_sections_test \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ many_sections_r_test
|
||||
@GCC_FALSE@many_sections_test_DEPENDENCIES = libgoldtest.a \
|
||||
@GCC_FALSE@ ../libgold.a ../../libiberty/libiberty.a \
|
||||
@GCC_FALSE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
|
||||
@NATIVE_LINKER_FALSE@many_sections_test_DEPENDENCIES = libgoldtest.a \
|
||||
@NATIVE_LINKER_FALSE@ ../libgold.a ../../libiberty/libiberty.a \
|
||||
@NATIVE_LINKER_FALSE@ $(am__DEPENDENCIES_1) \
|
||||
@NATIVE_LINKER_FALSE@ $(am__DEPENDENCIES_1)
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_14 = many_sections_define.h \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ many_sections_check.h
|
||||
@CONSTRUCTOR_PRIORITY_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_15 = initpri1
|
||||
@CONSTRUCTOR_PRIORITY_FALSE@initpri1_DEPENDENCIES = libgoldtest.a \
|
||||
@CONSTRUCTOR_PRIORITY_FALSE@ ../libgold.a \
|
||||
@CONSTRUCTOR_PRIORITY_FALSE@ ../../libiberty/libiberty.a \
|
||||
@CONSTRUCTOR_PRIORITY_FALSE@ $(am__DEPENDENCIES_1) \
|
||||
@CONSTRUCTOR_PRIORITY_FALSE@ $(am__DEPENDENCIES_1)
|
||||
@GCC_FALSE@initpri1_DEPENDENCIES = libgoldtest.a ../libgold.a \
|
||||
@GCC_FALSE@ ../../libiberty/libiberty.a $(am__DEPENDENCIES_1) \
|
||||
@GCC_FALSE@ $(am__DEPENDENCIES_1)
|
||||
@NATIVE_LINKER_FALSE@initpri1_DEPENDENCIES = libgoldtest.a \
|
||||
@NATIVE_LINKER_FALSE@ ../libgold.a ../../libiberty/libiberty.a \
|
||||
@NATIVE_LINKER_FALSE@ $(am__DEPENDENCIES_1) \
|
||||
@NATIVE_LINKER_FALSE@ $(am__DEPENDENCIES_1)
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_16 = debug_msg.err \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg_so.err \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ debug_msg_ndebug.err \
|
||||
@ -322,6 +323,7 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest_a_OBJECTS)
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ weak_undef_test$(EXEEXT)
|
||||
@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_4 = weak_undef_nonpic_test$(EXEEXT)
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_5 = weak_alias_test$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ weak_plt$(EXEEXT) \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ copy_test$(EXEEXT)
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@am__EXEEXT_6 = \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_test$(EXEEXT) \
|
||||
@ -735,6 +737,12 @@ am__weak_alias_test_SOURCES_DIST = weak_alias_test_main.cc
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am_weak_alias_test_OBJECTS = \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ weak_alias_test_main.$(OBJEXT)
|
||||
weak_alias_test_OBJECTS = $(am_weak_alias_test_OBJECTS)
|
||||
weak_plt_SOURCES = weak_plt.c
|
||||
weak_plt_OBJECTS = weak_plt.$(OBJEXT)
|
||||
weak_plt_LDADD = $(LDADD)
|
||||
weak_plt_DEPENDENCIES = libgoldtest.a ../libgold.a \
|
||||
../../libiberty/libiberty.a $(am__DEPENDENCIES_1) \
|
||||
$(am__DEPENDENCIES_1)
|
||||
am__weak_test_SOURCES_DIST = weak_test.cc
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@am_weak_test_OBJECTS = \
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ weak_test.$(OBJEXT)
|
||||
@ -803,7 +811,7 @@ SOURCES = $(libgoldtest_a_SOURCES) basic_pic_test.c \
|
||||
$(two_file_test_SOURCES) $(ver_test_SOURCES) \
|
||||
$(ver_test_2_SOURCES) $(ver_test_6_SOURCES) \
|
||||
$(ver_test_8_SOURCES) $(ver_test_9_SOURCES) \
|
||||
$(weak_alias_test_SOURCES) $(weak_test_SOURCES) \
|
||||
$(weak_alias_test_SOURCES) weak_plt.c $(weak_test_SOURCES) \
|
||||
$(weak_undef_nonpic_test_SOURCES) $(weak_undef_test_SOURCES)
|
||||
DIST_SOURCES = $(libgoldtest_a_SOURCES) basic_pic_test.c \
|
||||
basic_static_pic_test.c basic_static_test.c basic_test.c \
|
||||
@ -858,7 +866,7 @@ DIST_SOURCES = $(libgoldtest_a_SOURCES) basic_pic_test.c \
|
||||
$(am__two_file_test_SOURCES_DIST) $(am__ver_test_SOURCES_DIST) \
|
||||
$(am__ver_test_2_SOURCES_DIST) $(am__ver_test_6_SOURCES_DIST) \
|
||||
$(am__ver_test_8_SOURCES_DIST) $(am__ver_test_9_SOURCES_DIST) \
|
||||
$(am__weak_alias_test_SOURCES_DIST) \
|
||||
$(am__weak_alias_test_SOURCES_DIST) weak_plt.c \
|
||||
$(am__weak_test_SOURCES_DIST) \
|
||||
$(am__weak_undef_nonpic_test_SOURCES_DIST) \
|
||||
$(am__weak_undef_test_SOURCES_DIST)
|
||||
@ -1033,9 +1041,9 @@ MOSTLYCLEANFILES = *.so $(am__append_16)
|
||||
# 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_14)
|
||||
check_DATA = $(am__append_15)
|
||||
BUILT_SOURCES = $(am__append_12)
|
||||
check_SCRIPTS = $(am__append_6)
|
||||
check_DATA = $(am__append_7)
|
||||
BUILT_SOURCES = $(am__append_14)
|
||||
TESTS = $(check_SCRIPTS) $(check_PROGRAMS)
|
||||
|
||||
# ---------------------------------------------------------------------
|
||||
@ -1626,6 +1634,12 @@ ver_test_9$(EXEEXT): $(ver_test_9_OBJECTS) $(ver_test_9_DEPENDENCIES)
|
||||
weak_alias_test$(EXEEXT): $(weak_alias_test_OBJECTS) $(weak_alias_test_DEPENDENCIES)
|
||||
@rm -f weak_alias_test$(EXEEXT)
|
||||
$(CXXLINK) $(weak_alias_test_LDFLAGS) $(weak_alias_test_OBJECTS) $(weak_alias_test_LDADD) $(LIBS)
|
||||
@GCC_FALSE@weak_plt$(EXEEXT): $(weak_plt_OBJECTS) $(weak_plt_DEPENDENCIES)
|
||||
@GCC_FALSE@ @rm -f weak_plt$(EXEEXT)
|
||||
@GCC_FALSE@ $(LINK) $(weak_plt_LDFLAGS) $(weak_plt_OBJECTS) $(weak_plt_LDADD) $(LIBS)
|
||||
@NATIVE_LINKER_FALSE@weak_plt$(EXEEXT): $(weak_plt_OBJECTS) $(weak_plt_DEPENDENCIES)
|
||||
@NATIVE_LINKER_FALSE@ @rm -f weak_plt$(EXEEXT)
|
||||
@NATIVE_LINKER_FALSE@ $(LINK) $(weak_plt_LDFLAGS) $(weak_plt_OBJECTS) $(weak_plt_LDADD) $(LIBS)
|
||||
weak_test$(EXEEXT): $(weak_test_OBJECTS) $(weak_test_DEPENDENCIES)
|
||||
@rm -f weak_test$(EXEEXT)
|
||||
$(CXXLINK) $(weak_test_LDFLAGS) $(weak_test_OBJECTS) $(weak_test_LDADD) $(LIBS)
|
||||
@ -1687,6 +1701,7 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ver_test_main.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ver_test_main_2.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/weak_alias_test_main.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/weak_plt.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/weak_test.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/weak_undef_test.Po@am__quote@
|
||||
|
||||
@ -2059,18 +2074,26 @@ uninstall-am: uninstall-info-am
|
||||
@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared weak_undef_file2_nonpic.o
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_alias_test_1_pic.o: weak_alias_test_1.cc
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $<
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_alias_test_1.so: weak_alias_test_1_pic.o
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_alias_test_1.so: weak_alias_test_1_pic.o gcctestdir/ld
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared weak_alias_test_1_pic.o
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_alias_test_2_pic.o: weak_alias_test_2.cc
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $<
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_alias_test_2.so: weak_alias_test_2_pic.o
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_alias_test_2.so: weak_alias_test_2_pic.o gcctestdir/ld
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared weak_alias_test_2_pic.o
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_alias_test_3.o: weak_alias_test_3.cc
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -o $@ $<
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_alias_test_4_pic.o: weak_alias_test_4.cc
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $<
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_alias_test_4.so: weak_alias_test_4_pic.o
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_alias_test_4.so: weak_alias_test_4_pic.o gcctestdir/ld
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared weak_alias_test_4_pic.o
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_plt_main_pic.o: weak_plt_main.cc
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $<
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_plt: weak_plt_main_pic.o gcctestdir/ld
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ weak_plt_main_pic.o
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_plt_shared_pic.o: weak_plt_shared.cc
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $<
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@weak_plt_shared.so: weak_plt_shared_pic.o gcctestdir/ld
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared weak_plt_shared_pic.o
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@copy_test_1_pic.o: copy_test_1.cc
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $<
|
||||
@GCC_TRUE@@NATIVE_LINKER_TRUE@copy_test_1.so: gcctestdir/ld copy_test_1_pic.o
|
||||
|
28
gold/testsuite/weak_plt.sh
Executable file
28
gold/testsuite/weak_plt.sh
Executable file
@ -0,0 +1,28 @@
|
||||
#!/bin/sh
|
||||
|
||||
# weak_plt.sh -- test calling a weak undefined function.
|
||||
|
||||
# Copyright 2008 Free Software Foundation, Inc.
|
||||
# Written by Ian Lance Taylor <iant@google.com>.
|
||||
|
||||
# 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 tests a call to a weak undefined function. We use LD_PRELOAD
|
||||
# to force the function to be defined.
|
||||
|
||||
LD_PRELOAD=./weak_plt_shared.so ./weak_plt
|
33
gold/testsuite/weak_plt_main.cc
Normal file
33
gold/testsuite/weak_plt_main.cc
Normal file
@ -0,0 +1,33 @@
|
||||
// weak_plt_main.cc -- test call to weak undefined function for gold
|
||||
|
||||
// Copyright 2008 Free Software Foundation, Inc.
|
||||
// Written by Ian Lance Taylor <iant@google.com>.
|
||||
|
||||
// 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.
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
extern int weak_function() __attribute__((weak));
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
if (weak_function)
|
||||
return weak_function();
|
||||
return 0;
|
||||
}
|
29
gold/testsuite/weak_plt_shared.cc
Normal file
29
gold/testsuite/weak_plt_shared.cc
Normal file
@ -0,0 +1,29 @@
|
||||
// weak_plt_shared.cc -- test call to weak undefined function for gold
|
||||
|
||||
// Copyright 2008 Free Software Foundation, Inc.
|
||||
// Written by Ian Lance Taylor <iant@google.com>.
|
||||
|
||||
// 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.
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
int
|
||||
weak_function()
|
||||
{
|
||||
return 0;
|
||||
}
|
@ -1665,10 +1665,10 @@ Target_x86_64::Relocate::relocate(const Relocate_info<64, false>* relinfo,
|
||||
// Pick the value to use for symbols defined in shared objects.
|
||||
Symbol_value<64> symval;
|
||||
if (gsym != NULL
|
||||
&& (gsym->is_from_dynobj()
|
||||
|| (parameters->options().shared()
|
||||
&& (gsym->is_undefined() || gsym->is_preemptible())))
|
||||
&& gsym->has_plt_offset())
|
||||
&& gsym->use_plt_offset(r_type == elfcpp::R_X86_64_PC64
|
||||
|| r_type == elfcpp::R_X86_64_PC32
|
||||
|| r_type == elfcpp::R_X86_64_PC16
|
||||
|| r_type == elfcpp::R_X86_64_PC8))
|
||||
{
|
||||
symval.set_output_value(target->plt_section()->address()
|
||||
+ gsym->plt_offset());
|
||||
|
Loading…
Reference in New Issue
Block a user