mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
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.
This commit is contained in:
parent
1b115e8e0e
commit
1074bc6d41
@ -1,3 +1,11 @@
|
||||
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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user