PR21957, addr2line incorrectly handles non-increasing sequences in line table

PR 21957
	* dwarf2.c (new_line_sorts_after): Remove end_sequence comparison.
	(add_line_info): Always put end_sequence last.
This commit is contained in:
Alan Modra 2017-10-01 17:39:00 +10:30
parent d2e6c9a368
commit 20230942fe
2 changed files with 9 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2017-10-01 Alan Modra <amodra@gmail.com>
PR 21957
* dwarf2.c (new_line_sorts_after): Remove end_sequence comparison.
(add_line_info): Always put end_sequence last.
2017-10-01 Alan Modra <amodra@gmail.com>
PR 22047

View File

@ -1420,9 +1420,7 @@ new_line_sorts_after (struct line_info *new_line, struct line_info *line)
{
return (new_line->address > line->address
|| (new_line->address == line->address
&& (new_line->op_index > line->op_index
|| (new_line->op_index == line->op_index
&& new_line->end_sequence < line->end_sequence))));
&& new_line->op_index > line->op_index));
}
@ -1508,7 +1506,8 @@ add_line_info (struct line_info_table *table,
table->sequences = seq;
table->num_sequences++;
}
else if (new_line_sorts_after (info, seq->last_line))
else if (info->end_sequence
|| new_line_sorts_after (info, seq->last_line))
{
/* Normal case: add 'info' to the beginning of the current sequence. */
info->prev_line = seq->last_line;