mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 10:11:27 +01: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
	 Jonas Maebe
						Jonas Maebe