mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-07 09:30:21 +02:00
* fix register parameters for GDB
git-svn-id: trunk@7013 -
This commit is contained in:
parent
44c567cf46
commit
0056b833e5
@ -737,7 +737,7 @@ implementation
|
|||||||
recorddef :
|
recorddef :
|
||||||
result:=recorddef_stabstr(trecorddef(def));
|
result:=recorddef_stabstr(trecorddef(def));
|
||||||
variantdef :
|
variantdef :
|
||||||
result:=def_stabstr_evaluate(def,'formal${numberstring};',[]);
|
result:=def_stabstr_evaluate(def,'${numberstring};',[]);
|
||||||
pointerdef :
|
pointerdef :
|
||||||
result:=strpnew('*'+def_stab_number(tpointerdef(def).pointeddef));
|
result:=strpnew('*'+def_stab_number(tpointerdef(def).pointeddef));
|
||||||
classrefdef :
|
classrefdef :
|
||||||
@ -745,7 +745,7 @@ implementation
|
|||||||
setdef :
|
setdef :
|
||||||
result:=def_stabstr_evaluate(def,'@s$1;S$2',[tostr(def.size*8),def_stab_number(tsetdef(def).elementdef)]);
|
result:=def_stabstr_evaluate(def,'@s$1;S$2',[tostr(def.size*8),def_stab_number(tsetdef(def).elementdef)]);
|
||||||
formaldef :
|
formaldef :
|
||||||
result:=def_stabstr_evaluate(def,'formal${numberstring};',[]);
|
result:=def_stabstr_evaluate(def,'${numberstring};',[]);
|
||||||
arraydef :
|
arraydef :
|
||||||
if not is_packed_array(def) then
|
if not is_packed_array(def) then
|
||||||
result:=def_stabstr_evaluate(def,'ar$1;$2;$3;$4',[def_stab_number(tarraydef(def).rangedef),
|
result:=def_stabstr_evaluate(def,'ar$1;$2;$3;$4',[def_stab_number(tarraydef(def).rangedef),
|
||||||
@ -765,7 +765,7 @@ implementation
|
|||||||
objectdef :
|
objectdef :
|
||||||
result:=objectdef_stabstr(tobjectdef(def));
|
result:=objectdef_stabstr(tobjectdef(def));
|
||||||
undefineddef :
|
undefineddef :
|
||||||
result:=def_stabstr_evaluate(def,'formal${numberstring};',[]);
|
result:=def_stabstr_evaluate(def,'${numberstring};',[]);
|
||||||
end;
|
end;
|
||||||
if result=nil then
|
if result=nil then
|
||||||
internalerror(200512203);
|
internalerror(200512203);
|
||||||
@ -1259,9 +1259,9 @@ implementation
|
|||||||
if paramanager.push_addr_param(sym.varspez,sym.vardef,tprocdef(sym.owner.defowner).proccalloption) and
|
if paramanager.push_addr_param(sym.varspez,sym.vardef,tprocdef(sym.owner.defowner).proccalloption) and
|
||||||
not(vo_has_local_copy in sym.varoptions) and
|
not(vo_has_local_copy in sym.varoptions) and
|
||||||
not is_open_string(sym.vardef) then
|
not is_open_string(sym.vardef) then
|
||||||
st := 'v'+st { should be 'i' but 'i' doesn't work }
|
c:='v' { should be 'i' but 'i' doesn't work }
|
||||||
else
|
else
|
||||||
st := 'p'+st;
|
c:='p';
|
||||||
case sym.localloc.loc of
|
case sym.localloc.loc of
|
||||||
LOC_REGISTER,
|
LOC_REGISTER,
|
||||||
LOC_CREGISTER,
|
LOC_CREGISTER,
|
||||||
@ -1270,16 +1270,24 @@ implementation
|
|||||||
LOC_FPUREGISTER,
|
LOC_FPUREGISTER,
|
||||||
LOC_CFPUREGISTER :
|
LOC_CFPUREGISTER :
|
||||||
begin
|
begin
|
||||||
|
if c='p' then
|
||||||
|
c:='R'
|
||||||
|
else
|
||||||
|
c:='a';
|
||||||
|
st:=c+st;
|
||||||
regidx:=findreg_by_number(sym.localloc.register);
|
regidx:=findreg_by_number(sym.localloc.register);
|
||||||
{ "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", "eip", "ps", "cs", "ss", "ds", "es", "fs", "gs", }
|
{ "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", "eip", "ps", "cs", "ss", "ds", "es", "fs", "gs", }
|
||||||
{ this is the register order for GDB}
|
{ this is the register order for GDB}
|
||||||
if regidx<>0 then
|
if regidx<>0 then
|
||||||
result:=sym_stabstr_evaluate(sym,'"${name}:r$1",${N_RSYM},0,${line},$2',[st,tostr(longint(regstabs_table[regidx]))]);
|
result:=sym_stabstr_evaluate(sym,'"${name}:$1",${N_RSYM},0,${line},$2',[st,tostr(longint(regstabs_table[regidx]))]);
|
||||||
end;
|
end;
|
||||||
LOC_REFERENCE :
|
LOC_REFERENCE :
|
||||||
{ offset to ebp => will not work if the framepointer is esp
|
begin
|
||||||
so some optimizing will make things harder to debug }
|
st:=c+st;
|
||||||
result:=sym_stabstr_evaluate(sym,'"${name}:$1",${N_TSYM},0,${line},$2',[st,tostr(sym.localloc.reference.offset)])
|
{ offset to ebp => will not work if the framepointer is esp
|
||||||
|
so some optimizing will make things harder to debug }
|
||||||
|
result:=sym_stabstr_evaluate(sym,'"${name}:$1",${N_TSYM},0,${line},$2',[st,tostr(sym.localloc.reference.offset)])
|
||||||
|
end;
|
||||||
else
|
else
|
||||||
internalerror(2003091814);
|
internalerror(2003091814);
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user