forked from Imagelibrary/binutils-gdb
Fix line table regression
Simon pointed out a line table regression, and after a couple of false starts, I was able to reproduce it by hand using his instructions. The bug is that most of the code in do_mixed_source_and_assembly uses unrelocated addresses, but one spot does: pc = low; ... after the text offset has been removed. This patch fixes the problem by introducing a new type to represent unrelocated addresses in the line table. This prevents this sort of bug to some degree (it's still possible to manipulate a CORE_ADDR in a bad way, this is unavoidable). However, this did let the compiler flag a few spots in that function, and now it's not possible to compare an unrelocated address from a line table with an ordinary CORE_ADDR. Regression tested on x86-64 Fedora 36, though note this setup never reproduced the bug in the first place. I also tested it by hand on the disasm-optim test program.
This commit is contained in:
@@ -205,7 +205,7 @@ finish_block (struct symbol *symbol, struct pending_block *old_blocks,
|
||||
}
|
||||
|
||||
void
|
||||
record_line (struct subfile *subfile, int line, CORE_ADDR pc)
|
||||
record_line (struct subfile *subfile, int line, unrelocated_addr pc)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
/* Assume every line entry is a statement start, that is a good place to
|
||||
|
||||
Reference in New Issue
Block a user