summaryrefslogtreecommitdiff
path: root/gold/dwp.cc
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2014-06-24 12:17:09 -0700
committerCary Coutant <ccoutant@google.com>2014-06-24 12:17:09 -0700
commitcb818dbff5d914dccffadfdba68e32a324aa4334 (patch)
treef3b2a45f71da0df0a9ffac5056cfcb539dc4f2d9 /gold/dwp.cc
parentf179cf97a071940bfce6879aa59dbac66ffca391 (diff)
Fix dwp to allow intermediate .dwp files with no .debug_types sections.
gold/ * dwp.cc (Dwo_file::read): Allow files with no .debug_types sections. (Dwo_file::sized_read_unit_index): Likewise.
Diffstat (limited to 'gold/dwp.cc')
-rw-r--r--gold/dwp.cc13
1 files changed, 9 insertions, 4 deletions
diff --git a/gold/dwp.cc b/gold/dwp.cc
index 6fe5c79f10..359d4b745a 100644
--- a/gold/dwp.cc
+++ b/gold/dwp.cc
@@ -970,10 +970,13 @@ Dwo_file::read(Dwp_output_file* output_file)
this->read_unit_index(debug_cu_index, debug_shndx, output_file, false);
if (debug_tu_index > 0)
{
- if (debug_types.size() != 1)
- gold_fatal(_("%s: .dwp file must have exactly one "
+ if (debug_types.size() > 1)
+ gold_fatal(_("%s: .dwp file must have no more than one "
".debug_types.dwo section"), this->name_);
- debug_shndx[elfcpp::DW_SECT_TYPES] = debug_types[0];
+ if (debug_types.size() == 1)
+ debug_shndx[elfcpp::DW_SECT_TYPES] = debug_types[0];
+ else
+ debug_shndx[elfcpp::DW_SECT_TYPES] = 0;
this->read_unit_index(debug_tu_index, debug_shndx, output_file, true);
}
return;
@@ -1154,7 +1157,7 @@ Dwo_file::sized_read_unit_index(unsigned int shndx,
: elfcpp::DW_SECT_INFO);
unsigned int info_shndx = debug_shndx[info_sect];
- gold_assert(shndx > 0 && info_shndx > 0);
+ gold_assert(shndx > 0);
section_size_type index_len;
bool index_is_new;
@@ -1180,6 +1183,8 @@ Dwo_file::sized_read_unit_index(unsigned int shndx,
if (ncols == 0 || nused == 0)
return;
+ gold_assert(info_shndx > 0);
+
unsigned int nslots =
elfcpp::Swap_unaligned<32, big_endian>::readval(contents
+ 3 * sizeof(uint32_t));