From 623761346df68474a61a072872f0a914ccb41dd0 Mon Sep 17 00:00:00 2001 From: jonas Date: Thu, 8 Apr 2021 19:50:40 +0000 Subject: * 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: https://svn.freepascal.org/svn/fpc/trunk@49142 3ad0048d-3df7-0310-abae-a5850022a9f2 --- rtl/inc/lnfodwrf.pp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'rtl') 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; -- cgit v1.2.1