This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fix internal error when using --emit-relocs with plugins.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=1074bc6d41f480e9e7b8f2e68f778225da2559b7

commit 1074bc6d41f480e9e7b8f2e68f778225da2559b7
Author: Cary Coutant <ccoutant@gmail.com>
Date:   Sat Jul 14 11:52:27 2018 -0700

    Fix internal error when using --emit-relocs with plugins.
    
    When an .eh_frame section has deferred layout because of plugins, gold
    was neglecting to mark the section as deferred. When we later processed
    the corresponding relocation section, we were then ignoring it, causing
    the internal error later on in the link.
    
    gold/
    	PR gold/23397
    	* object.cc (Sized_relobj_file::do_layout): Mark section as deferred.
    	* testsuite/Makefile.am (plugin_test_1): Add --emit-relocs option to
    	existing test case.
    	* testsuite/Makefile.in: Regenerate.

Diff:
---
 gold/ChangeLog             |  8 ++++++++
 gold/object.cc             | 10 +++++++---
 gold/testsuite/Makefile.am |  2 +-
 gold/testsuite/Makefile.in |  2 +-
 4 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/gold/ChangeLog b/gold/ChangeLog
index 0e50f05..ae0b8c9 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,13 @@
 2018-07-14  Cary Coutant  <ccoutant@gmail.com>
 
+	PR gold/23397
+	* object.cc (Sized_relobj_file::do_layout): Mark section as deferred.
+	* testsuite/Makefile.am (plugin_test_1): Add --emit-relocs option to
+	existing test case.
+	* testsuite/Makefile.in: Regenerate.
+
+2018-07-14  Cary Coutant  <ccoutant@gmail.com>
+
 	PR gold/23409
 	* symtab.cc (Symbol_table::define_special_symbol): Add check for
 	version name on existing symbol.
diff --git a/gold/object.cc b/gold/object.cc
index 374340f..084212c 100644
--- a/gold/object.cc
+++ b/gold/object.cc
@@ -1742,9 +1742,13 @@ Sized_relobj_file<size, big_endian>::do_layout(Symbol_table* symtab,
 		  out_section_offsets[i] = invalid_address;
 		}
 	      else if (this->is_deferred_layout())
-		this->deferred_layout_.push_back(
-		    Deferred_layout(i, name, sh_type, pshdrs,
-				    reloc_shndx[i], reloc_type[i]));
+		{
+		  out_sections[i] = reinterpret_cast<Output_section*>(2);
+		  out_section_offsets[i] = invalid_address;
+		  this->deferred_layout_.push_back(
+		      Deferred_layout(i, name, sh_type, pshdrs,
+				      reloc_shndx[i], reloc_type[i]));
+		}
 	      else
 		eh_frame_sections.push_back(i);
 	      continue;
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index e15788e..c1c5539 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -2256,7 +2256,7 @@ check_SCRIPTS += plugin_test_1.sh
 check_DATA += plugin_test_1.err
 MOSTLYCLEANFILES += plugin_test_1.err
 plugin_test_1: two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms gcctestdir/ld plugin_test.so
-	$(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv" two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms 2>plugin_test_1.err
+	$(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle,--emit-relocs,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv" two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms 2>plugin_test_1.err
 plugin_test_1.err: plugin_test_1
 	@touch plugin_test_1.err
 
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
index 7305d32..08b5c07 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -8922,7 +8922,7 @@ uninstall-am:
 @GCC_TRUE@@NATIVE_LINKER_TRUE@	test -d alt || mkdir -p alt
 @GCC_TRUE@@NATIVE_LINKER_TRUE@	$(CXXCOMPILE) -c -o $@ $<
 @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_test_1: two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms gcctestdir/ld plugin_test.so
-@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@	$(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv" two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms 2>plugin_test_1.err
+@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@	$(CXXLINK) -Bgcctestdir/ -Wl,--no-demangle,--emit-relocs,--plugin,"./plugin_test.so",--plugin-opt,"_Z4f13iv" two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_test_2.o.syms empty.o.syms 2>plugin_test_1.err
 @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_test_1.err: plugin_test_1
 @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@	@touch plugin_test_1.err
 @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_test_2: two_file_test_main.o two_file_test_1.o.syms two_file_test_1b.o.syms two_file_shared_2.so gcctestdir/ld plugin_test.so


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]