second of two consecutive entries with same offset.
+2010-12-20 Ian Lance Taylor <iant@google.com>
+
+ * dwarf_reader.cc (Sized_dwarf_line_info::read_lines): Only keep
+ second of two consecutive entries with same offset.
+
2010-12-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* testsuite/Makefile.am (ifuncmain2static_LDADD)
Offset_to_lineno_entry entry
= { lsm.address, this->current_header_index_,
lsm.file_num, lsm.line_num };
- line_number_map_[lsm.shndx].push_back(entry);
+ std::vector<Offset_to_lineno_entry>&
+ map(this->line_number_map_[lsm.shndx]);
+ // If we see two consecutive entries with the same
+ // offset and a real line number, then always use the
+ // second one.
+ if (!map.empty()
+ && (map.back().offset == static_cast<off_t>(lsm.address))
+ && lsm.line_num != -1
+ && map.back().line_num != -1)
+ map.back() = entry;
+ else
+ map.push_back(entry);
}
lineptr += oplength;
}
int header_num; // which file-list to use (i.e. which .o file are we in)
int file_num; // a pointer into files_
int line_num; // the line number in the source file
- // Offsets are unique within a section, so that's a sufficient sort key.
+
+ // When we add entries to the table, we always use the last entry
+ // with a given offset. Given proper DWARF info, this should ensure
+ // that the offset is a sufficient sort key.
bool operator<(const Offset_to_lineno_entry& that) const
{ return this->offset < that.offset; }
};