From 436a0d3f9ee306b55bb8d0b232587668c8ecf48a Mon Sep 17 00:00:00 2001 From: florian Date: Mon, 15 Feb 2021 22:26:49 +0000 Subject: [PATCH] * generate advance_loc records only if there was code/data since the last advance_loc entry git-svn-id: trunk@48686 - --- compiler/cfidwarf.pas | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/compiler/cfidwarf.pas b/compiler/cfidwarf.pas index ca2115f627..8097590694 100644 --- a/compiler/cfidwarf.pas +++ b/compiler/cfidwarf.pas @@ -542,9 +542,26 @@ implementation procedure TDwarfAsmCFILowLevel.cfa_advance_loc(list:TAsmList); var currloclabel : tasmlabel; + hp : tai; begin if FLastloclabel=nil then internalerror(200404082); + { search the list backwards and check if we really need an advance loc, + i.e. if real code/data has been generated since the last cfa_advance_loc + call + } + hp:=tai(list.Last); + while assigned(hp) do + begin + { if we encounter FLastloclabel without encountering code/data, see check below, + we do not need insert an advance_loc entry } + if (hp.typ=ait_label) and (tai_label(hp).labsym=FLastloclabel) then + exit; + { stop if we find any tai which results in code or data } + if not(hp.typ in ([ait_label]+SkipInstr)) then + break; + hp:=tai(hp.Previous); + end; current_asmdata.getlabel(currloclabel,alt_dbgframe); list.concat(tai_label.create(currloclabel)); DwarfList.concat(tdwarfitem.create_reloffset(DW_CFA_advance_loc4,doe_32bit,FLastloclabel,currloclabel));