This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[gold commit] PR 23397: Fix internal error when using --emit-relocs with plugins
- From: ccoutant at gmail dot com
- To: binutils at sourceware dot org
- Date: Sat, 14 Jul 2018 12:46:04 -0700
- Subject: [gold commit] PR 23397: 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.
-cary
2018-07-14 Cary Coutant <ccoutant@gmail.com>
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.
commit a3f044e5302363c0118052b75965cd8ddeac562d
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 --git a/gold/object.cc b/gold/object.cc
index 374340fa16..084212c790 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 e15788e562..c1c5539cdb 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