mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 04:59:26 +02:00
* Dwarf: Write zero as line-nr for instructions with no real corresponding
line. This way a debugger will not show invalid line-information in this case. * Dwarf: Set IsStatement false for line-info for instructions that do not correspond to the start of a line/instruction. git-svn-id: trunk@28824 -
This commit is contained in:
parent
87e55caabc
commit
7c9d32b3ce
@ -3327,6 +3327,7 @@ implementation
|
||||
currfileinfo,
|
||||
lastfileinfo : tfileposinfo;
|
||||
currfuncname : pshortstring;
|
||||
currstatement: boolean;
|
||||
currsectype : TAsmSectiontype;
|
||||
hp, hpend : tai;
|
||||
infile : tinputfile;
|
||||
@ -3345,6 +3346,7 @@ implementation
|
||||
currfuncname:=nil;
|
||||
currsectype:=sec_code;
|
||||
hp:=Tai(list.first);
|
||||
currstatement:=true;
|
||||
prevcolumn := 0;
|
||||
prevline := 1;
|
||||
prevfileidx := 1;
|
||||
@ -3376,8 +3378,7 @@ implementation
|
||||
end;
|
||||
|
||||
if (currsectype=sec_code) and
|
||||
(hp.typ=ait_instruction) and
|
||||
(nolineinfolevel=0) then
|
||||
(hp.typ=ait_instruction) then
|
||||
begin
|
||||
currfileinfo:=tailineinfo(hp).fileinfo;
|
||||
{ file changed ? (must be before line info) }
|
||||
@ -3408,8 +3409,12 @@ implementation
|
||||
end;
|
||||
end;
|
||||
|
||||
{ Set the line-nr to 0 if the code does not corresponds to a particular line }
|
||||
if nolineinfolevel>0 then
|
||||
currfileinfo.line := 0;
|
||||
|
||||
{ line changed ? }
|
||||
if (lastfileinfo.line<>currfileinfo.line) and (currfileinfo.line<>0) then
|
||||
if (lastfileinfo.line<>currfileinfo.line) and ((currfileinfo.line<>0) or (nolineinfolevel>0)) then
|
||||
begin
|
||||
{ set address }
|
||||
current_asmdata.getlabel(currlabel, alt_dbgline);
|
||||
@ -3442,6 +3447,19 @@ implementation
|
||||
prevcolumn := currfileinfo.column;
|
||||
end;
|
||||
|
||||
{ set statement }
|
||||
if (currfileinfo.line=0) and currstatement then
|
||||
begin
|
||||
currstatement := false;
|
||||
asmline.concat(tai_const.create_8bit(DW_LNS_negate_stmt));
|
||||
end;
|
||||
|
||||
if not currstatement and (currfileinfo.line>0) then
|
||||
begin
|
||||
currstatement := true;
|
||||
asmline.concat(tai_const.create_8bit(DW_LNS_negate_stmt));
|
||||
end;
|
||||
|
||||
{ set line }
|
||||
diffline := currfileinfo.line - prevline;
|
||||
if (diffline >= LINE_BASE) and (OPCODE_BASE + diffline - LINE_BASE <= 255) then
|
||||
|
Loading…
Reference in New Issue
Block a user