From f13b47289e016d61dbf154ba63de090699e0694d Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Thu, 8 Apr 2021 19:50:40 +0000 Subject: [PATCH] * handle case where the first instruction with line information is looked up o this should be handled better. The common way is looking up address - 1, but that doesn't seem to work here. git-svn-id: trunk@49142 - --- rtl/inc/lnfodwrf.pp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/rtl/inc/lnfodwrf.pp b/rtl/inc/lnfodwrf.pp index d6ed1b4b75..ec2b73dbf2 100644 --- a/rtl/inc/lnfodwrf.pp +++ b/rtl/inc/lnfodwrf.pp @@ -896,7 +896,10 @@ begin end; { when we have found the address we need to return the previous - line because that contains the call instruction } + line because that contains the call instruction + Note that there may not be any call instruction, because this may + be the actual instruction that crashed, and it may be on the first + line of the function } if (state.segment > segment) or ((state.segment = segment) and (state.address >= addr)) then @@ -918,10 +921,17 @@ begin opcode := ReadNext(); end; - if (found) then begin - line := prev_line; - source := GetFullFilename(file_names, include_directories, prev_file); - end; + if (found) then + begin + { can happen if the crash happens on the first instruction with line info } + if prev_line = 0 then + begin + prev_line := state.line; + prev_file := state.file_id; + end; + line := prev_line; + source := GetFullFilename(file_names, include_directories, prev_file); + end; end;