+ 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:
Jonas Maebe 2000-07-21 15:14:01 +00:00
parent a18407c46a
commit 67ac676004
8 changed files with 70 additions and 19 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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