mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-28 15:20:27 +02:00
dbgllvm: create dummy line info for instructions that shouldn't have any
Use line 0 for that, like clang does
This commit is contained in:
parent
20674089bd
commit
aec7aefdd5
@ -93,7 +93,7 @@ interface
|
|||||||
function def_meta_node(def: tdef): tai_llvmspecialisedmetadatanode;
|
function def_meta_node(def: tdef): tai_llvmspecialisedmetadatanode;
|
||||||
function def_meta_ref(def: tdef): tai_simpletypedconst;
|
function def_meta_ref(def: tdef): tai_simpletypedconst;
|
||||||
function file_getmetanode(moduleindex: tfileposmoduleindex; fileindex: tfileposfileindex): tai_llvmspecialisedmetadatanode;
|
function file_getmetanode(moduleindex: tfileposmoduleindex; fileindex: tfileposfileindex): tai_llvmspecialisedmetadatanode;
|
||||||
function filepos_getmetanode(const filepos: tfileposinfo; const functionfileindex: tfileposfileindex; const functionscope: tai_llvmspecialisedmetadatanode; nolineinfo: boolean): tai_llvmspecialisedmetadatanode;
|
function filepos_getmetanode(const filepos: tfileposinfo; const functionfileinfo: tfileposinfo; const functionscope: tai_llvmspecialisedmetadatanode; nolineinfo: boolean): tai_llvmspecialisedmetadatanode;
|
||||||
function get_def_metatai(def:tdef): PLLVMMetaDefHashSetItem;
|
function get_def_metatai(def:tdef): PLLVMMetaDefHashSetItem;
|
||||||
|
|
||||||
procedure appenddef_array_internal(list: TAsmList; fordef: tdef; eledef: tdef; lowrange, highrange: asizeint);
|
procedure appenddef_array_internal(list: TAsmList; fordef: tdef; eledef: tdef; lowrange, highrange: asizeint);
|
||||||
@ -548,7 +548,7 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TDebugInfoLLVM.filepos_getmetanode(const filepos: tfileposinfo; const functionfileindex: tfileposfileindex; const functionscope: tai_llvmspecialisedmetadatanode; nolineinfo: boolean): tai_llvmspecialisedmetadatanode;
|
function TDebugInfoLLVM.filepos_getmetanode(const filepos: tfileposinfo; const functionfileinfo: tfileposinfo; const functionscope: tai_llvmspecialisedmetadatanode; nolineinfo: boolean): tai_llvmspecialisedmetadatanode;
|
||||||
var
|
var
|
||||||
item: PHashSetItem;
|
item: PHashSetItem;
|
||||||
filemeta,
|
filemeta,
|
||||||
@ -564,10 +564,15 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
filemeta:=file_getmetanode(filepos.moduleindex,filepos.fileindex);
|
result:=nil;
|
||||||
|
if (filepos.fileindex<>0) then
|
||||||
|
filemeta:=file_getmetanode(filepos.moduleindex,filepos.fileindex)
|
||||||
|
else
|
||||||
|
filemeta:=file_getmetanode(functionfileinfo.moduleindex,functionfileinfo.fileindex);
|
||||||
if not assigned(filemeta) then
|
if not assigned(filemeta) then
|
||||||
exit;
|
exit;
|
||||||
if filepos.fileindex<>functionfileindex then
|
if (filepos.fileindex<>0) and
|
||||||
|
(filepos.fileindex<>functionfileinfo.fileindex) then
|
||||||
begin
|
begin
|
||||||
lexicalblockkey.scopemeta:=functionscope;
|
lexicalblockkey.scopemeta:=functionscope;
|
||||||
lexicalblockkey.filemeta:=filemeta;
|
lexicalblockkey.filemeta:=filemeta;
|
||||||
@ -588,10 +593,15 @@ implementation
|
|||||||
locationscopemeta:=functionscope;
|
locationscopemeta:=functionscope;
|
||||||
locationkey.scope:=locationscopemeta;
|
locationkey.scope:=locationscopemeta;
|
||||||
if not nolineinfo then
|
if not nolineinfo then
|
||||||
locationkey.line:=filepos.line
|
begin
|
||||||
else
|
locationkey.line:=filepos.line;
|
||||||
locationkey.line:=0;
|
|
||||||
locationkey.column:=filepos.column;
|
locationkey.column:=filepos.column;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
locationkey.line:=0;
|
||||||
|
locationkey.column:=0;
|
||||||
|
end;
|
||||||
item:=flocationmeta.FindOrAdd(@locationkey,sizeof(locationkey));
|
item:=flocationmeta.FindOrAdd(@locationkey,sizeof(locationkey));
|
||||||
if not assigned(item^.Data) then
|
if not assigned(item^.Data) then
|
||||||
begin
|
begin
|
||||||
@ -2470,14 +2480,19 @@ implementation
|
|||||||
((nolineinfolevel=0) or
|
((nolineinfolevel=0) or
|
||||||
(taillvm(hp).llvmopcode=la_call)) then
|
(taillvm(hp).llvmopcode=la_call)) then
|
||||||
begin
|
begin
|
||||||
|
positionmeta:=nil;
|
||||||
{ valid file -> add info }
|
{ valid file -> add info }
|
||||||
if (tailineinfo(hp).fileinfo.fileindex<>0) then
|
if (tailineinfo(hp).fileinfo.fileindex<>0) then
|
||||||
begin
|
begin
|
||||||
positionmeta:=filepos_getmetanode(tailineinfo(hp).fileinfo,procdeffileindex,functionscope,nolineinfolevel<>0);
|
positionmeta:=filepos_getmetanode(tailineinfo(hp).fileinfo,procdeffileinfo,functionscope,nolineinfolevel<>0);
|
||||||
|
end
|
||||||
|
else if taillvm(hp).llvmopcode=la_call then
|
||||||
|
begin
|
||||||
|
positionmeta:=filepos_getmetanode(tailineinfo(hp).fileinfo,procdeffileinfo,functionscope,true);
|
||||||
|
end;
|
||||||
if assigned(positionmeta) then
|
if assigned(positionmeta) then
|
||||||
taillvm(hp).addinsmetadata(tai_llvmmetadatareferenceoperand.createreferenceto('dbg',positionmeta));
|
taillvm(hp).addinsmetadata(tai_llvmmetadatareferenceoperand.createreferenceto('dbg',positionmeta));
|
||||||
end;
|
end;
|
||||||
end;
|
|
||||||
hp:=tai(hp.next);
|
hp:=tai(hp.next);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user