* fix register parameters for GDB

git-svn-id: trunk@7013 -
This commit is contained in:
pierre 2007-03-27 23:54:30 +00:00
parent 44c567cf46
commit 0056b833e5

View File

@ -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;