From 03e8f2b225dde93f13d6b7dd164f54ffe5591e64 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 1 Feb 2008 00:39:10 +0000 Subject: [PATCH] From Cary Coutant: Fix a case in which code takes the address of a function and also calls it directly. --- gold/i386.cc | 2 +- gold/testsuite/Makefile.am | 53 ++++++++++------- gold/testsuite/Makefile.in | 88 ++++++++++++++++++---------- gold/testsuite/two_file_test.h | 3 + gold/testsuite/two_file_test_1.cc | 10 ++++ gold/testsuite/two_file_test_1b.cc | 41 +++++++++++++ gold/testsuite/two_file_test_main.cc | 2 + gold/x86_64.cc | 2 +- 8 files changed, 147 insertions(+), 54 deletions(-) create mode 100644 gold/testsuite/two_file_test_1b.cc diff --git a/gold/i386.cc b/gold/i386.cc index 9c96bfd093..ca68a3fe45 100644 --- a/gold/i386.cc +++ b/gold/i386.cc @@ -1089,7 +1089,7 @@ Target_i386::Scan::global(const General_options& options, // taking the address of a function. In that case we need to // set the entry in the dynamic symbol table to the address of // the PLT entry. - if (gsym->is_from_dynobj()) + if (gsym->is_from_dynobj() && !parameters->output_is_shared()) gsym->set_needs_dynsym_value(); } // Make a dynamic relocation if necessary. diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am index 78f5472304..e42b2b3897 100644 --- a/gold/testsuite/Makefile.am +++ b/gold/testsuite/Makefile.am @@ -118,6 +118,7 @@ check_PROGRAMS += two_file_static_test check_PROGRAMS += two_file_pic_test two_file_test_SOURCES = \ two_file_test_1.cc \ + two_file_test_1b.cc \ two_file_test_2.cc \ two_file_test_main.cc \ two_file_test.h @@ -130,9 +131,9 @@ two_file_static_test_LDFLAGS = $(two_file_test_LDFLAGS) -static two_file_pic_test_SOURCES = two_file_test_main.cc two_file_pic_test_DEPENDENCIES = \ - gcctestdir/ld two_file_test_1_pic.o two_file_test_2_pic.o + gcctestdir/ld two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2_pic.o two_file_pic_test_LDFLAGS = -Bgcctestdir/ -two_file_pic_test_LDADD = two_file_test_1_pic.o two_file_test_2_pic.o +two_file_pic_test_LDADD = two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2_pic.o check_PROGRAMS += two_file_shared_1_test @@ -140,37 +141,36 @@ check_PROGRAMS += two_file_shared_2_test check_PROGRAMS += two_file_shared_1_pic_2_test check_PROGRAMS += two_file_shared_2_pic_1_test check_PROGRAMS += two_file_same_shared_test -check_PROGRAMS += two_file_mixed_shared_test check_PROGRAMS += two_file_separate_shared_12_test check_PROGRAMS += two_file_separate_shared_21_test two_file_test_1_pic.o: two_file_test_1.cc $(CXXCOMPILE) -c -fpic -o $@ $< +two_file_test_1b_pic.o: two_file_test_1b.cc + $(CXXCOMPILE) -c -fpic -o $@ $< two_file_test_2_pic.o: two_file_test_2.cc $(CXXCOMPILE) -c -fpic -o $@ $< -two_file_shared_1.so: two_file_test_1_pic.o gcctestdir/ld - $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o +two_file_shared_1.so: two_file_test_1_pic.o two_file_test_1b_pic.o gcctestdir/ld + $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_1b_pic.o two_file_shared_2.so: two_file_test_2_pic.o gcctestdir/ld $(CXXLINK) -Bgcctestdir/ -shared two_file_test_2_pic.o -two_file_shared.so: two_file_test_1_pic.o two_file_test_2_pic.o gcctestdir/ld - $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_2_pic.o -two_file_shared_mixed.so: two_file_test_1_pic.o two_file_test_2.o gcctestdir/ld - $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_2.o +two_file_shared.so: two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2_pic.o gcctestdir/ld + $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2_pic.o two_file_shared_1_test_SOURCES = two_file_test_2.cc two_file_test_main.cc two_file_shared_1_test_DEPENDENCIES = gcctestdir/ld two_file_shared_1.so two_file_shared_1_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. two_file_shared_1_test_LDADD = two_file_shared_1.so -two_file_shared_2_test_SOURCES = two_file_test_1.cc two_file_test_main.cc +two_file_shared_2_test_SOURCES = two_file_test_1.cc two_file_test_1b.cc two_file_test_main.cc two_file_shared_2_test_DEPENDENCIES = gcctestdir/ld two_file_shared_2.so two_file_shared_2_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. two_file_shared_2_test_LDADD = two_file_shared_2.so two_file_shared_1_pic_2_test_SOURCES = two_file_test_main.cc two_file_shared_1_pic_2_test_DEPENDENCIES = \ - gcctestdir/ld two_file_shared_1.so two_file_test_1_pic.o + gcctestdir/ld two_file_shared_1.so two_file_test_1_pic.o two_file_test_1b_pic.o two_file_shared_1_pic_2_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -two_file_shared_1_pic_2_test_LDADD = two_file_test_1_pic.o two_file_shared_2.so +two_file_shared_1_pic_2_test_LDADD = two_file_test_1_pic.o two_file_test_1b_pic.o two_file_shared_2.so two_file_shared_2_pic_1_test_SOURCES = two_file_test_main.cc two_file_shared_2_pic_1_test_DEPENDENCIES = \ @@ -183,11 +183,6 @@ two_file_same_shared_test_DEPENDENCIES = gcctestdir/ld two_file_shared.so two_file_same_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. two_file_same_shared_test_LDADD = two_file_shared.so -two_file_mixed_shared_test_SOURCES = two_file_test_main.cc -two_file_mixed_shared_test_DEPENDENCIES = gcctestdir/ld two_file_shared_mixed.so -two_file_mixed_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -two_file_mixed_shared_test_LDADD = two_file_shared_mixed.so - two_file_separate_shared_12_test_SOURCES = two_file_test_main.cc two_file_separate_shared_12_test_DEPENDENCIES = \ gcctestdir/ld two_file_shared_1.so two_file_shared_2.so @@ -211,12 +206,18 @@ check_PROGRAMS += two_file_shared_2_nonpic_test check_PROGRAMS += two_file_same_shared_nonpic_test check_PROGRAMS += two_file_separate_shared_12_nonpic_test check_PROGRAMS += two_file_separate_shared_21_nonpic_test +check_PROGRAMS += two_file_mixed_shared_test +check_PROGRAMS += two_file_mixed_2_shared_test two_file_shared_1_nonpic.so: two_file_test_1.o gcctestdir/ld - $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1.o + $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1.o two_file_test_1b.o two_file_shared_2_nonpic.so: two_file_test_2.o gcctestdir/ld $(CXXLINK) -Bgcctestdir/ -shared two_file_test_2.o -two_file_shared_nonpic.so: two_file_test_1.o two_file_test_2.o gcctestdir/ld - $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1.o two_file_test_2.o +two_file_shared_nonpic.so: two_file_test_1.o two_file_test_1b.o two_file_test_2.o gcctestdir/ld + $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1.o two_file_test_1b.o two_file_test_2.o +two_file_shared_mixed.so: two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2.o gcctestdir/ld + $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2.o +two_file_shared_mixed_1.so: two_file_test_1.o two_file_test_1b_pic.o two_file_shared_2.so gcctestdir/ld + $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1.o two_file_test_1b_pic.o two_file_shared_2.so two_file_shared_1_nonpic_test_SOURCES = \ two_file_test_2.cc two_file_test_main.cc @@ -226,7 +227,7 @@ two_file_shared_1_nonpic_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. two_file_shared_1_nonpic_test_LDADD = two_file_shared_1_nonpic.so two_file_shared_2_nonpic_test_SOURCES = \ - two_file_test_1.cc two_file_test_main.cc + two_file_test_1.cc two_file_test_1b.cc two_file_test_main.cc two_file_shared_2_nonpic_test_DEPENDENCIES = \ gcctestdir/ld two_file_shared_2_nonpic.so two_file_shared_2_nonpic_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. @@ -252,6 +253,16 @@ two_file_separate_shared_21_nonpic_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. two_file_separate_shared_21_nonpic_test_LDADD = \ two_file_shared_2_nonpic.so two_file_shared_1_nonpic.so +two_file_mixed_shared_test_SOURCES = two_file_test_main.cc +two_file_mixed_shared_test_DEPENDENCIES = gcctestdir/ld two_file_shared_mixed.so +two_file_mixed_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. +two_file_mixed_shared_test_LDADD = two_file_shared_mixed.so + +two_file_mixed_2_shared_test_SOURCES = two_file_test_main.cc +two_file_mixed_2_shared_test_DEPENDENCIES = gcctestdir/ld two_file_shared_mixed_1.so two_file_shared_2.so +two_file_mixed_2_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. +two_file_mixed_2_shared_test_LDADD = two_file_shared_mixed_1.so two_file_shared_2.so + endif FN_PTRS_IN_SO_WITHOUT_PIC diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in index f0ae889b99..b5f2ceab94 100644 --- a/gold/testsuite/Makefile.in +++ b/gold/testsuite/Makefile.in @@ -58,7 +58,6 @@ check_PROGRAMS = object_unittest$(EXEEXT) $(am__EXEEXT_1) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_shared_1_pic_2_test \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_shared_2_pic_1_test \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_same_shared_test \ -@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_mixed_shared_test \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_12_test \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_21_test @GCC_FALSE@constructor_test_DEPENDENCIES = libgoldtest.a ../libgold.a \ @@ -98,7 +97,9 @@ check_PROGRAMS = object_unittest$(EXEEXT) $(am__EXEEXT_1) \ @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_shared_2_nonpic_test \ @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_same_shared_nonpic_test \ @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_12_nonpic_test \ -@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_21_nonpic_test +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_21_nonpic_test \ +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_mixed_shared_test \ +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_mixed_2_shared_test @GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_3 = exception_test \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_static_test \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_shared_1_test \ @@ -218,14 +219,15 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest_a_OBJECTS) @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_shared_1_pic_2_test$(EXEEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_shared_2_pic_1_test$(EXEEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_same_shared_test$(EXEEXT) \ -@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_mixed_shared_test$(EXEEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_12_test$(EXEEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_21_test$(EXEEXT) @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_2 = two_file_shared_1_nonpic_test$(EXEEXT) \ @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_shared_2_nonpic_test$(EXEEXT) \ @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_same_shared_nonpic_test$(EXEEXT) \ @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_12_nonpic_test$(EXEEXT) \ -@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_21_nonpic_test$(EXEEXT) +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_separate_shared_21_nonpic_test$(EXEEXT) \ +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_mixed_shared_test$(EXEEXT) \ +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_mixed_2_shared_test$(EXEEXT) @GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_3 = exception_test$(EXEEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_static_test$(EXEEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_shared_1_test$(EXEEXT) \ @@ -401,9 +403,12 @@ am__tls_test_SOURCES_DIST = tls_test.cc tls_test_file2.cc \ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_test_file2.$(OBJEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_test_main.$(OBJEXT) tls_test_OBJECTS = $(am_tls_test_OBJECTS) +am__two_file_mixed_2_shared_test_SOURCES_DIST = two_file_test_main.cc +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am_two_file_mixed_2_shared_test_OBJECTS = two_file_test_main.$(OBJEXT) +two_file_mixed_2_shared_test_OBJECTS = \ + $(am_two_file_mixed_2_shared_test_OBJECTS) am__two_file_mixed_shared_test_SOURCES_DIST = two_file_test_main.cc -@GCC_TRUE@@NATIVE_LINKER_TRUE@am_two_file_mixed_shared_test_OBJECTS = \ -@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_main.$(OBJEXT) +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am_two_file_mixed_shared_test_OBJECTS = two_file_test_main.$(OBJEXT) two_file_mixed_shared_test_OBJECTS = \ $(am_two_file_mixed_shared_test_OBJECTS) am__two_file_pic_test_SOURCES_DIST = two_file_test_main.cc @@ -460,8 +465,9 @@ am__two_file_shared_1_test_SOURCES_DIST = two_file_test_2.cc \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_main.$(OBJEXT) two_file_shared_1_test_OBJECTS = $(am_two_file_shared_1_test_OBJECTS) am__two_file_shared_2_nonpic_test_SOURCES_DIST = two_file_test_1.cc \ - two_file_test_main.cc + two_file_test_1b.cc two_file_test_main.cc @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am_two_file_shared_2_nonpic_test_OBJECTS = two_file_test_1.$(OBJEXT) \ +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_1b.$(OBJEXT) \ @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_main.$(OBJEXT) two_file_shared_2_nonpic_test_OBJECTS = \ $(am_two_file_shared_2_nonpic_test_OBJECTS) @@ -471,25 +477,30 @@ am__two_file_shared_2_pic_1_test_SOURCES_DIST = two_file_test_main.cc two_file_shared_2_pic_1_test_OBJECTS = \ $(am_two_file_shared_2_pic_1_test_OBJECTS) am__two_file_shared_2_test_SOURCES_DIST = two_file_test_1.cc \ - two_file_test_main.cc + two_file_test_1b.cc two_file_test_main.cc @GCC_TRUE@@NATIVE_LINKER_TRUE@am_two_file_shared_2_test_OBJECTS = \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_1.$(OBJEXT) \ +@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_1b.$(OBJEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_main.$(OBJEXT) two_file_shared_2_test_OBJECTS = $(am_two_file_shared_2_test_OBJECTS) am__two_file_static_test_SOURCES_DIST = two_file_test_1.cc \ - two_file_test_2.cc two_file_test_main.cc two_file_test.h + two_file_test_1b.cc two_file_test_2.cc two_file_test_main.cc \ + two_file_test.h @GCC_TRUE@@NATIVE_LINKER_TRUE@am__objects_5 = \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_1.$(OBJEXT) \ +@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_1b.$(OBJEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_2.$(OBJEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_main.$(OBJEXT) @GCC_TRUE@@NATIVE_LINKER_TRUE@am_two_file_static_test_OBJECTS = \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(am__objects_5) two_file_static_test_OBJECTS = $(am_two_file_static_test_OBJECTS) two_file_static_test_LDADD = $(LDADD) -am__two_file_test_SOURCES_DIST = two_file_test_1.cc two_file_test_2.cc \ - two_file_test_main.cc two_file_test.h +am__two_file_test_SOURCES_DIST = two_file_test_1.cc \ + two_file_test_1b.cc two_file_test_2.cc two_file_test_main.cc \ + two_file_test.h @GCC_TRUE@@NATIVE_LINKER_TRUE@am_two_file_test_OBJECTS = \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_1.$(OBJEXT) \ +@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_1b.$(OBJEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_2.$(OBJEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_main.$(OBJEXT) two_file_test_OBJECTS = $(am_two_file_test_OBJECTS) @@ -530,7 +541,8 @@ SOURCES = $(libgoldtest_a_SOURCES) basic_pic_test.c \ $(tls_pic_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) \ - $(tls_test_SOURCES) $(two_file_mixed_shared_test_SOURCES) \ + $(tls_test_SOURCES) $(two_file_mixed_2_shared_test_SOURCES) \ + $(two_file_mixed_shared_test_SOURCES) \ $(two_file_pic_test_SOURCES) \ $(two_file_same_shared_nonpic_test_SOURCES) \ $(two_file_same_shared_test_SOURCES) \ @@ -567,6 +579,7 @@ DIST_SOURCES = $(libgoldtest_a_SOURCES) basic_pic_test.c \ $(am__tls_static_pic_test_SOURCES_DIST) \ $(am__tls_static_test_SOURCES_DIST) \ $(am__tls_test_SOURCES_DIST) \ + $(am__two_file_mixed_2_shared_test_SOURCES_DIST) \ $(am__two_file_mixed_shared_test_SOURCES_DIST) \ $(am__two_file_pic_test_SOURCES_DIST) \ $(am__two_file_same_shared_nonpic_test_SOURCES_DIST) \ @@ -766,6 +779,7 @@ object_unittest_SOURCES = object_unittest.cc @GCC_TRUE@@NATIVE_LINKER_TRUE@constructor_static_test_LDFLAGS = $(constructor_test_LDFLAGS) -static @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_test_SOURCES = \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_1.cc \ +@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_1b.cc \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_2.cc \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_main.cc \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test.h @@ -777,24 +791,24 @@ object_unittest_SOURCES = object_unittest.cc @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_static_test_LDFLAGS = $(two_file_test_LDFLAGS) -static @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_pic_test_SOURCES = two_file_test_main.cc @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_pic_test_DEPENDENCIES = \ -@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld two_file_test_1_pic.o two_file_test_2_pic.o +@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2_pic.o @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_pic_test_LDFLAGS = -Bgcctestdir/ -@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_pic_test_LDADD = two_file_test_1_pic.o two_file_test_2_pic.o +@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_pic_test_LDADD = two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2_pic.o @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1_test_SOURCES = two_file_test_2.cc two_file_test_main.cc @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1_test_DEPENDENCIES = gcctestdir/ld two_file_shared_1.so @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1_test_LDADD = two_file_shared_1.so -@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_2_test_SOURCES = two_file_test_1.cc two_file_test_main.cc +@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_2_test_SOURCES = two_file_test_1.cc two_file_test_1b.cc two_file_test_main.cc @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_2_test_DEPENDENCIES = gcctestdir/ld two_file_shared_2.so @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_2_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_2_test_LDADD = two_file_shared_2.so @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1_pic_2_test_SOURCES = two_file_test_main.cc @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1_pic_2_test_DEPENDENCIES = \ -@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld two_file_shared_1.so two_file_test_1_pic.o +@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld two_file_shared_1.so two_file_test_1_pic.o two_file_test_1b_pic.o @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1_pic_2_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1_pic_2_test_LDADD = two_file_test_1_pic.o two_file_shared_2.so +@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1_pic_2_test_LDADD = two_file_test_1_pic.o two_file_test_1b_pic.o two_file_shared_2.so @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_2_pic_1_test_SOURCES = two_file_test_main.cc @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_2_pic_1_test_DEPENDENCIES = \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld two_file_shared_2.so two_file_test_2_pic.o @@ -805,10 +819,6 @@ object_unittest_SOURCES = object_unittest.cc @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_same_shared_test_DEPENDENCIES = gcctestdir/ld two_file_shared.so @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_same_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_same_shared_test_LDADD = two_file_shared.so -@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_mixed_shared_test_SOURCES = two_file_test_main.cc -@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_mixed_shared_test_DEPENDENCIES = gcctestdir/ld two_file_shared_mixed.so -@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_mixed_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_mixed_shared_test_LDADD = two_file_shared_mixed.so @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_separate_shared_12_test_SOURCES = two_file_test_main.cc @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_separate_shared_12_test_DEPENDENCIES = \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld two_file_shared_1.so two_file_shared_2.so @@ -834,7 +844,7 @@ object_unittest_SOURCES = object_unittest.cc @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1_nonpic_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1_nonpic_test_LDADD = two_file_shared_1_nonpic.so @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_2_nonpic_test_SOURCES = \ -@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_1.cc two_file_test_main.cc +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_1.cc two_file_test_1b.cc two_file_test_main.cc @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_2_nonpic_test_DEPENDENCIES = \ @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld two_file_shared_2_nonpic.so @@ -863,6 +873,14 @@ object_unittest_SOURCES = object_unittest.cc @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_separate_shared_21_nonpic_test_LDADD = \ @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_shared_2_nonpic.so two_file_shared_1_nonpic.so +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_mixed_shared_test_SOURCES = two_file_test_main.cc +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_mixed_shared_test_DEPENDENCIES = gcctestdir/ld two_file_shared_mixed.so +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_mixed_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_mixed_shared_test_LDADD = two_file_shared_mixed.so +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_mixed_2_shared_test_SOURCES = two_file_test_main.cc +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_mixed_2_shared_test_DEPENDENCIES = gcctestdir/ld two_file_shared_mixed_1.so two_file_shared_2.so +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_mixed_2_shared_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_mixed_2_shared_test_LDADD = two_file_shared_mixed_1.so two_file_shared_2.so @GCC_TRUE@@NATIVE_LINKER_TRUE@exception_test_SOURCES = \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_main.cc \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_test_1.cc \ @@ -1079,6 +1097,9 @@ tls_static_test$(EXEEXT): $(tls_static_test_OBJECTS) $(tls_static_test_DEPENDENC tls_test$(EXEEXT): $(tls_test_OBJECTS) $(tls_test_DEPENDENCIES) @rm -f tls_test$(EXEEXT) $(CXXLINK) $(tls_test_LDFLAGS) $(tls_test_OBJECTS) $(tls_test_LDADD) $(LIBS) +two_file_mixed_2_shared_test$(EXEEXT): $(two_file_mixed_2_shared_test_OBJECTS) $(two_file_mixed_2_shared_test_DEPENDENCIES) + @rm -f two_file_mixed_2_shared_test$(EXEEXT) + $(CXXLINK) $(two_file_mixed_2_shared_test_LDFLAGS) $(two_file_mixed_2_shared_test_OBJECTS) $(two_file_mixed_2_shared_test_LDADD) $(LIBS) two_file_mixed_shared_test$(EXEEXT): $(two_file_mixed_shared_test_OBJECTS) $(two_file_mixed_shared_test_DEPENDENCIES) @rm -f two_file_mixed_shared_test$(EXEEXT) $(CXXLINK) $(two_file_mixed_shared_test_LDFLAGS) $(two_file_mixed_shared_test_OBJECTS) $(two_file_mixed_shared_test_LDADD) $(LIBS) @@ -1160,6 +1181,7 @@ distclean-compile: @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_test_1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/two_file_test_1b.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/two_file_test_2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/two_file_test_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ver_test_main.Po@am__quote@ @@ -1475,22 +1497,26 @@ uninstall-am: uninstall-info-am @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -static basic_pic_test.o @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_test_1_pic.o: two_file_test_1.cc @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $< +@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_test_1b_pic.o: two_file_test_1b.cc +@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $< @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_test_2_pic.o: two_file_test_2.cc @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $< -@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1.so: two_file_test_1_pic.o gcctestdir/ld -@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o +@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1.so: two_file_test_1_pic.o two_file_test_1b_pic.o gcctestdir/ld +@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_1b_pic.o @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_2.so: two_file_test_2_pic.o gcctestdir/ld @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared two_file_test_2_pic.o -@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared.so: two_file_test_1_pic.o two_file_test_2_pic.o gcctestdir/ld -@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_2_pic.o -@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_mixed.so: two_file_test_1_pic.o two_file_test_2.o gcctestdir/ld -@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_2.o +@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared.so: two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2_pic.o gcctestdir/ld +@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2_pic.o @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_1_nonpic.so: two_file_test_1.o gcctestdir/ld -@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1.o +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1.o two_file_test_1b.o @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_2_nonpic.so: two_file_test_2.o gcctestdir/ld @FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared two_file_test_2.o -@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_nonpic.so: two_file_test_1.o two_file_test_2.o gcctestdir/ld -@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1.o two_file_test_2.o +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_nonpic.so: two_file_test_1.o two_file_test_1b.o two_file_test_2.o gcctestdir/ld +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1.o two_file_test_1b.o two_file_test_2.o +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_mixed.so: two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2.o gcctestdir/ld +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1_pic.o two_file_test_1b_pic.o two_file_test_2.o +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_shared_mixed_1.so: two_file_test_1.o two_file_test_1b_pic.o two_file_shared_2.so gcctestdir/ld +@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared two_file_test_1.o two_file_test_1b_pic.o two_file_shared_2.so @GCC_TRUE@@NATIVE_LINKER_TRUE@exception_test_1_pic.o: exception_test_1.cc @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $< @GCC_TRUE@@NATIVE_LINKER_TRUE@exception_test_2_pic.o: exception_test_2.cc diff --git a/gold/testsuite/two_file_test.h b/gold/testsuite/two_file_test.h index 05e5cbecc8..c09910e3a0 100644 --- a/gold/testsuite/two_file_test.h +++ b/gold/testsuite/two_file_test.h @@ -66,3 +66,6 @@ extern const char* f14(); #define TEST_WIDE_STRING_CONSTANT L"test wide string constant" extern const wchar_t* f15(); + +extern bool t16(); +extern bool t16a(); diff --git a/gold/testsuite/two_file_test_1.cc b/gold/testsuite/two_file_test_1.cc index 382e04892e..4c6c0b215b 100644 --- a/gold/testsuite/two_file_test_1.cc +++ b/gold/testsuite/two_file_test_1.cc @@ -45,6 +45,8 @@ // 12 Compare address of function for equality in both files. // 13 Compare address of inline function for equality in both files. // 14 Compare string constants in file 1 and file 2. +// 15 Compare wide string constants in file 1 and file 2. +// 16 Call a function directly after its address has been taken. #include "two_file_test.h" @@ -193,3 +195,11 @@ t15() return false; return *s2 == '\0'; } + +// 16 Call a function directly after its address has been taken. + +bool +t16() +{ + return f10() == 135; +} diff --git a/gold/testsuite/two_file_test_1b.cc b/gold/testsuite/two_file_test_1b.cc new file mode 100644 index 0000000000..8f6d4e6537 --- /dev/null +++ b/gold/testsuite/two_file_test_1b.cc @@ -0,0 +1,41 @@ +// two_file_test_1b.cc -- supplementary file for a three-file test case +// for gold. + +// Copyright 2008 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. + +// This file is used as part of a mixed PIC/non-PIC test. +// Files 1 and 1b are linked together in a shared library. +// File 1 is compiled non-PIC, and file 1a is compiled PIC. +// File 2 is compiled PIC and linked in a second shared library. +// This tests that a non-PIC call does not accidentally get +// bound to a PIC PLT entry. + +// We test the following cases. + +#include "two_file_test.h" + +// 16 Call a function directly after its address has been taken. + +bool +t16a() +{ + return f10() == 135; +} diff --git a/gold/testsuite/two_file_test_main.cc b/gold/testsuite/two_file_test_main.cc index 5dcf94b34f..5d3f448862 100644 --- a/gold/testsuite/two_file_test_main.cc +++ b/gold/testsuite/two_file_test_main.cc @@ -49,5 +49,7 @@ main() assert(t11()); assert(t12()); assert(t13()); + assert(t16()); + assert(t16a()); return 0; } diff --git a/gold/x86_64.cc b/gold/x86_64.cc index 9c9543b61f..14d29570c8 100644 --- a/gold/x86_64.cc +++ b/gold/x86_64.cc @@ -1028,7 +1028,7 @@ Target_x86_64::Scan::global(const General_options& options, // taking the address of a function. In that case we need to // set the entry in the dynamic symbol table to the address of // the PLT entry. - if (gsym->is_from_dynobj()) + if (gsym->is_from_dynobj() && !parameters->output_is_shared()) gsym->set_needs_dynsym_value(); } // Make a dynamic relocation if necessary. -- 2.34.1