mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-15 23:42:34 +02:00
+ added is_addr field for labels, if they are only used for getting the address
(e.g. for io checks) and corresponding getaddrlabel() procedure
This commit is contained in:
parent
a18407c46a
commit
67ac676004
@ -122,9 +122,13 @@ unit aasm;
|
||||
tasmlabel = object(tasmsymbol)
|
||||
labelnr : longint;
|
||||
{ this is set by the pai_label.init }
|
||||
is_set : boolean;
|
||||
is_set,
|
||||
{ is the label only there for getting an address (e.g. for i/o }
|
||||
{ checks -> true) or is it a jump target (false) }
|
||||
is_addr : boolean;
|
||||
constructor init;
|
||||
constructor initdata;
|
||||
constructor initaddr;
|
||||
function name:string;virtual;
|
||||
end;
|
||||
|
||||
@ -361,6 +365,8 @@ type
|
||||
|
||||
{ make l as a new label }
|
||||
procedure getlabel(var l : pasmlabel);
|
||||
{ make l as a new label and flag is_addr }
|
||||
procedure getaddrlabel(var l : pasmlabel);
|
||||
{ make l as a new label and flag is_data }
|
||||
procedure getdatalabel(var l : pasmlabel);
|
||||
{just get a label number }
|
||||
@ -928,6 +934,7 @@ uses
|
||||
inherited init(target_asm.labelprefix+tostr(labelnr),AB_LOCAL,AT_FUNCTION);
|
||||
proclocal:=true;
|
||||
is_set:=false;
|
||||
is_addr := false;
|
||||
end;
|
||||
|
||||
|
||||
@ -940,10 +947,16 @@ uses
|
||||
else
|
||||
inherited init(target_asm.labelprefix+tostr(labelnr),AB_LOCAL,AT_DATA);
|
||||
is_set:=false;
|
||||
is_addr := false;
|
||||
{ write it always }
|
||||
refs:=1;
|
||||
end;
|
||||
|
||||
constructor tasmlabel.initaddr;
|
||||
begin;
|
||||
init;
|
||||
is_addr := true;
|
||||
end;
|
||||
|
||||
function tasmlabel.name:string;
|
||||
begin
|
||||
@ -1058,6 +1071,11 @@ uses
|
||||
asmsymbollist^.insert(l);
|
||||
end;
|
||||
|
||||
procedure getaddrlabel(var l : pasmlabel);
|
||||
begin
|
||||
l:=new(pasmlabel,initaddr);
|
||||
asmsymbollist^.insert(l);
|
||||
end;
|
||||
|
||||
procedure RegenerateLabel(var l : pasmlabel);
|
||||
begin
|
||||
@ -1090,7 +1108,11 @@ uses
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.3 2000-07-13 12:08:24 michael
|
||||
Revision 1.4 2000-07-21 15:14:01 jonas
|
||||
+ added is_addr field for labels, if they are only used for getting the address
|
||||
(e.g. for io checks) and corresponding getaddrlabel() procedure
|
||||
|
||||
Revision 1.3 2000/07/13 12:08:24 michael
|
||||
+ patched to 1.1.0 with former 1.09patch from peter
|
||||
|
||||
Revision 1.2 2000/07/13 11:32:28 michael
|
||||
|
@ -369,7 +369,7 @@ implementation
|
||||
(po_iocheck in p^.procdefinition^.procoptions) and
|
||||
not(po_iocheck in aktprocsym^.definition^.procoptions) then
|
||||
begin
|
||||
getlabel(iolabel);
|
||||
getaddrlabel(iolabel);
|
||||
emitlab(iolabel);
|
||||
end
|
||||
else
|
||||
@ -1432,8 +1432,8 @@ implementation
|
||||
{$ifdef GDB}
|
||||
if (cs_debuginfo in aktmoduleswitches) then
|
||||
begin
|
||||
getlabel(startlabel);
|
||||
getlabel(endlabel);
|
||||
getaddrlabel(startlabel);
|
||||
getaddrlabel(endlabel);
|
||||
emitlab(startlabel);
|
||||
p^.inlineprocsym^.definition^.localst^.symtabletype:=inlinelocalsymtable;
|
||||
p^.inlineprocsym^.definition^.parast^.symtabletype:=inlineparasymtable;
|
||||
@ -1511,7 +1511,11 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.3 2000-07-13 12:08:24 michael
|
||||
Revision 1.4 2000-07-21 15:14:01 jonas
|
||||
+ added is_addr field for labels, if they are only used for getting the address
|
||||
(e.g. for io checks) and corresponding getaddrlabel() procedure
|
||||
|
||||
Revision 1.3 2000/07/13 12:08:24 michael
|
||||
+ patched to 1.1.0 with former 1.09patch from peter
|
||||
|
||||
Revision 1.2 2000/07/13 11:32:32 michael
|
||||
|
@ -600,7 +600,7 @@ do_jmp:
|
||||
end
|
||||
else
|
||||
begin
|
||||
getlabel(a);
|
||||
getaddrlabel(a);
|
||||
emitlab(a);
|
||||
emit_const(A_PUSH,S_L,0);
|
||||
emit_sym(A_PUSH,S_L,a);
|
||||
@ -1234,7 +1234,11 @@ do_jmp:
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2000-07-13 11:32:33 michael
|
||||
Revision 1.3 2000-07-21 15:14:02 jonas
|
||||
+ added is_addr field for labels, if they are only used for getting the address
|
||||
(e.g. for io checks) and corresponding getaddrlabel() procedure
|
||||
|
||||
Revision 1.2 2000/07/13 11:32:33 michael
|
||||
+ removed logs
|
||||
|
||||
}
|
||||
|
@ -231,7 +231,7 @@ implementation
|
||||
if (cs_check_io in aktlocalswitches) and
|
||||
not(po_iocheck in aktprocsym^.definition^.procoptions) then
|
||||
begin
|
||||
getlabel(iolabel);
|
||||
getaddrlabel(iolabel);
|
||||
emitlab(iolabel);
|
||||
end
|
||||
else
|
||||
@ -1528,7 +1528,11 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2000-07-13 11:32:34 michael
|
||||
Revision 1.3 2000-07-21 15:14:02 jonas
|
||||
+ added is_addr field for labels, if they are only used for getting the address
|
||||
(e.g. for io checks) and corresponding getaddrlabel() procedure
|
||||
|
||||
Revision 1.2 2000/07/13 11:32:34 michael
|
||||
+ removed logs
|
||||
|
||||
}
|
||||
|
@ -894,8 +894,8 @@ implementation
|
||||
if (cs_debuginfo in aktmoduleswitches) then
|
||||
begin
|
||||
inc(withlevel);
|
||||
getlabel(withstartlabel);
|
||||
getlabel(withendlabel);
|
||||
getaddrlabel(withstartlabel);
|
||||
getaddrlabel(withendlabel);
|
||||
emitlab(withstartlabel);
|
||||
withdebuglist^.concat(new(pai_stabs,init(strpnew(
|
||||
'"with'+tostr(withlevel)+':'+tostr(symtablestack^.getnewtypecount)+
|
||||
@ -951,7 +951,11 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2000-07-13 11:32:35 michael
|
||||
Revision 1.3 2000-07-21 15:14:02 jonas
|
||||
+ added is_addr field for labels, if they are only used for getting the address
|
||||
(e.g. for io checks) and corresponding getaddrlabel() procedure
|
||||
|
||||
Revision 1.2 2000/07/13 11:32:35 michael
|
||||
+ removed logs
|
||||
|
||||
}
|
||||
|
@ -2647,7 +2647,7 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
|
||||
case target_info.target of
|
||||
target_i386_linux:
|
||||
begin
|
||||
getlabel(pl);
|
||||
getaddrlabel(pl);
|
||||
emitcall('mcount');
|
||||
exprasmlist^.insert(new(paicpu,op_sym_ofs_reg(A_MOV,S_L,pl,0,R_EDX)));
|
||||
exprasmlist^.insert(new(pai_section,init(sec_code)));
|
||||
@ -3969,7 +3969,11 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.3 2000-07-13 12:08:25 michael
|
||||
Revision 1.4 2000-07-21 15:14:02 jonas
|
||||
+ added is_addr field for labels, if they are only used for getting the address
|
||||
(e.g. for io checks) and corresponding getaddrlabel() procedure
|
||||
|
||||
Revision 1.3 2000/07/13 12:08:25 michael
|
||||
+ patched to 1.1.0 with former 1.09patch from peter
|
||||
|
||||
Revision 1.2 2000/07/13 11:32:37 michael
|
||||
|
@ -593,6 +593,7 @@ implementation
|
||||
with linux and windows
|
||||
}
|
||||
(*
|
||||
|
||||
if assigned(aktprocsym) then
|
||||
begin
|
||||
if not(assigned(procinfo^._class)) and
|
||||
@ -844,7 +845,11 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2000-07-13 11:32:44 michael
|
||||
Revision 1.3 2000-07-21 15:14:02 jonas
|
||||
+ added is_addr field for labels, if they are only used for getting the address
|
||||
(e.g. for io checks) and corresponding getaddrlabel() procedure
|
||||
|
||||
Revision 1.2 2000/07/13 11:32:44 michael
|
||||
+ removed logs
|
||||
|
||||
}
|
||||
|
@ -182,8 +182,8 @@ unit t_win32;
|
||||
{ Get labels for the sections }
|
||||
getdatalabel(lhead);
|
||||
getdatalabel(lname);
|
||||
getlabel(lidata4);
|
||||
getlabel(lidata5);
|
||||
getaddrlabel(lidata4);
|
||||
getaddrlabel(lidata5);
|
||||
{ create header for this importmodule }
|
||||
importssection^.concat(new(pai_cut,init_begin));
|
||||
importssection^.concat(new(pai_section,init(sec_idata2)));
|
||||
@ -1303,7 +1303,11 @@ end;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2000-07-13 11:32:50 michael
|
||||
Revision 1.3 2000-07-21 15:14:02 jonas
|
||||
+ added is_addr field for labels, if they are only used for getting the address
|
||||
(e.g. for io checks) and corresponding getaddrlabel() procedure
|
||||
|
||||
Revision 1.2 2000/07/13 11:32:50 michael
|
||||
+ removed logs
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user