* dwarf_reader.cc (Sized_dwarf_line_info::read_lines): Only keep
second of two consecutive entries with same offset.
This commit is contained in:
parent
66a3cb9c76
commit
7500420b3e
@ -1,3 +1,8 @@
|
||||
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)
|
||||
|
@ -493,7 +493,18 @@ Sized_dwarf_line_info<size, big_endian>::read_lines(unsigned const char* lineptr
|
||||
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;
|
||||
}
|
||||
|
@ -46,7 +46,10 @@ struct Offset_to_lineno_entry
|
||||
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; }
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user