aboutsummaryrefslogtreecommitdiff
path: root/gold/object.cc
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@gmail.com>2018-07-14 11:52:27 -0700
committerCary Coutant <ccoutant@gmail.com>2018-07-14 12:44:48 -0700
commit1074bc6d41f480e9e7b8f2e68f778225da2559b7 (patch)
treef5536b908069a2e3658013391afc13271021aafa /gold/object.cc
parent1b115e8e0e051d65d0747f0a8a84eb6453866729 (diff)
downloadgdb-1074bc6d41f480e9e7b8f2e68f778225da2559b7.zip
gdb-1074bc6d41f480e9e7b8f2e68f778225da2559b7.tar.gz
gdb-1074bc6d41f480e9e7b8f2e68f778225da2559b7.tar.bz2
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.
Diffstat (limited to 'gold/object.cc')
-rw-r--r--gold/object.cc10
1 files changed, 7 insertions, 3 deletions
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;