瀏覽代碼

* changed newasmsymbol to newasmsymboldata for data symbols

olle 22 年之前
父節點
當前提交
a069aadad0
共有 11 個文件被更改,包括 92 次插入43 次删除
  1. 20 1
      compiler/aasmbase.pas
  2. 5 2
      compiler/cgobj.pas
  3. 8 5
      compiler/ncgcal.pas
  4. 7 4
      compiler/ncgcnv.pas
  5. 5 2
      compiler/ncgflw.pas
  6. 5 2
      compiler/ncginl.pas
  7. 15 12
      compiler/ncgld.pas
  8. 5 2
      compiler/ncgmem.pas
  9. 10 7
      compiler/ncgutil.pas
  10. 5 2
      compiler/ptconst.pas
  11. 7 4
      compiler/rautils.pas

+ 20 - 1
compiler/aasmbase.pas

@@ -190,6 +190,7 @@ interface
          procedure DerefAsmsymbol(var s:tasmsymbol);
          { asmsymbol }
          function  newasmsymbol(const s : string) : tasmsymbol;
+         function  newasmsymboldata(const s : string) : tasmsymbol;
          function  newasmsymboltype(const s : string;_bind:TAsmSymBind;_typ:TAsmsymtype) : tasmsymbol;
          function  getasmsymbol(const s : string) : tasmsymbol;
          function  renameasmsymbol(const sold, snew : string):tasmsymbol;
@@ -714,6 +715,21 @@ implementation
       end;
 
 
+    function TAsmLibraryData.newasmsymboldata(const s : string) : tasmsymbol;
+      var
+        hp : tasmsymbol;
+      begin
+        hp:=tasmsymbol(symbolsearch.search(s));
+        if not assigned(hp) then
+         begin
+           { Not found, insert it as an External }
+           hp:=tasmsymbol.create(s,AB_EXTERNAL,AT_DATA);
+           symbolsearch.insert(hp);
+         end;
+        newasmsymboldata:=hp;
+      end;
+
+
     function TAsmLibraryData.newasmsymboltype(const s : string;_bind:TAsmSymBind;_typ:Tasmsymtype) : tasmsymbol;
       var
         hp : tasmsymbol;
@@ -887,7 +903,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.13  2003-01-30 21:46:20  peter
+  Revision 1.14  2003-04-06 21:11:23  olle
+    * changed newasmsymbol to newasmsymboldata for data symbols
+
+  Revision 1.13  2003/01/30 21:46:20  peter
     * tai_const_symbol.createdataname added
 
   Revision 1.12  2002/11/17 16:31:55  carl

+ 5 - 2
compiler/cgobj.pas

@@ -1487,7 +1487,7 @@ unit cgobj;
       begin
         if (cs_check_object in aktlocalswitches) then
          begin
-           reference_reset_symbol(hrefvmt,objectlibrary.newasmsymbol(objdef.vmt_mangledname),0);
+           reference_reset_symbol(hrefvmt,objectlibrary.newasmsymboldata(objdef.vmt_mangledname),0);
            a_paramaddr_ref(list,hrefvmt,paramanager.getintparaloc(2));
            a_param_reg(list,OS_ADDR,reg,paramanager.getintparaloc(1));
            a_call_name(list,'FPC_CHECK_OBJECT_EXT');
@@ -1719,7 +1719,10 @@ finalization
 end.
 {
   $Log$
-  Revision 1.80  2003-03-28 19:16:56  peter
+  Revision 1.81  2003-04-06 21:11:23  olle
+    * changed newasmsymbol to newasmsymboldata for data symbols
+
+  Revision 1.80  2003/03/28 19:16:56  peter
     * generic constructor working for i386
     * remove fixed self register
     * esi added as address register for i386

+ 8 - 5
compiler/ncgcal.pas

@@ -389,7 +389,7 @@ implementation
                         if (oo_has_vmt in tobjectdef(methodpointer.resulttype.def).objectoptions) then
                           begin
                             location_reset(vmtloc,LOC_REFERENCE,OS_NO);
-                            reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymbol(tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
+                            reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymboldata(tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
                             vmtrefaddr:=true;
                           end;
                      end
@@ -429,7 +429,7 @@ implementation
                    { constructor with extended syntax called from new }
                    { vmt }
                    location_reset(vmtloc,LOC_REFERENCE,OS_ADDR);
-                   reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymbol(tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
+                   reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymboldata(tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
                    vmtrefaddr:=true;
                 end;
               hdisposen:
@@ -439,7 +439,7 @@ implementation
                    secondpass(methodpointer);
                    { vmt }
                    location_reset(vmtloc,LOC_REFERENCE,OS_ADDR);
-                   reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymbol(tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
+                   reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymboldata(tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
                    vmtrefaddr:=true;
                    { self, load in register first when it requires a virtual call }
                    location_reset(selfloc,LOC_REFERENCE,OS_ADDR);
@@ -543,7 +543,7 @@ implementation
                           begin
                             { vmt }
                             location_reset(vmtloc,LOC_REFERENCE,OS_ADDR);
-                            reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymbol(
+                            reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymboldata(
                                tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
                             vmtrefaddr:=true;
                           end;
@@ -1448,7 +1448,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.42  2003-04-04 15:38:56  peter
+  Revision 1.43  2003-04-06 21:11:23  olle
+    * changed newasmsymbol to newasmsymboldata for data symbols
+
+  Revision 1.42  2003/04/04 15:38:56  peter
     * moved generic code from n386cal to ncgcal, i386 now also
       uses the generic ncgcal
 

+ 7 - 4
compiler/ncgcnv.pas

@@ -136,7 +136,7 @@ interface
                   (str_length(left)=0) then
                 begin
                   reference_reset(hr);
-                  hr.symbol:=objectlibrary.newasmsymbol('FPC_EMPTYCHAR');
+                  hr.symbol:=objectlibrary.newasmsymboldata('FPC_EMPTYCHAR');
                   location.register:=rg.getaddressregister(exprasmlist);
                   cg.a_loadaddr_ref_reg(exprasmlist,hr,location.register);
                 end
@@ -157,7 +157,7 @@ interface
                   (str_length(left)=0) then
                 begin
                   reference_reset(hr);
-                  hr.symbol:=objectlibrary.newasmsymbol('FPC_EMPTYCHAR');
+                  hr.symbol:=objectlibrary.newasmsymboldata('FPC_EMPTYCHAR');
                   location.register:=rg.getaddressregister(exprasmlist);
                   cg.a_loadaddr_ref_reg(exprasmlist,hr,location.register);
                 end
@@ -385,7 +385,7 @@ interface
          end;
          cg.a_cmp_const_reg_label(exprasmlist,OS_32,OC_NE,0,location.register,l1);
          reference_reset(hr);
-         hr.symbol:=objectlibrary.newasmsymbol('FPC_EMPTYCHAR');
+         hr.symbol:=objectlibrary.newasmsymboldata('FPC_EMPTYCHAR');
          cg.a_loadaddr_ref_reg(exprasmlist,hr,location.register);
          cg.a_label(exprasmlist,l1);
       end;
@@ -511,7 +511,10 @@ end.
 
 {
   $Log$
-  Revision 1.37  2003-03-28 19:16:56  peter
+  Revision 1.38  2003-04-06 21:11:23  olle
+    * changed newasmsymbol to newasmsymboldata for data symbols
+
+  Revision 1.37  2003/03/28 19:16:56  peter
     * generic constructor working for i386
     * remove fixed self register
     * esi added as address register for i386

+ 5 - 2
compiler/ncgflw.pas

@@ -1225,7 +1225,7 @@ implementation
          objectlibrary.getlabel(nextonlabel);
 
          { send the vmt parameter }
-         reference_reset_symbol(href2,objectlibrary.newasmsymbol(excepttype.vmt_mangledname),0);
+         reference_reset_symbol(href2,objectlibrary.newasmsymboldata(excepttype.vmt_mangledname),0);
          cg.a_paramaddr_ref(exprasmlist,href2,paramanager.getintparaloc(1));
          cg.a_call_name(exprasmlist,'FPC_CATCHES');
 
@@ -1483,7 +1483,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.52  2003-03-28 19:16:56  peter
+  Revision 1.53  2003-04-06 21:11:23  olle
+    * changed newasmsymbol to newasmsymboldata for data symbols
+
+  Revision 1.52  2003/03/28 19:16:56  peter
     * generic constructor working for i386
     * remove fixed self register
     * esi added as address register for i386

+ 5 - 2
compiler/ncginl.pas

@@ -228,7 +228,7 @@ implementation
         if left.nodetype=typen then
           begin
             hregister:=rg.getaddressregister(exprasmlist);
-            reference_reset_symbol(href,objectlibrary.newasmsymbol(tobjectdef(left.resulttype.def).vmt_mangledname),0);
+            reference_reset_symbol(href,objectlibrary.newasmsymboldata(tobjectdef(left.resulttype.def).vmt_mangledname),0);
             cg.a_loadaddr_ref_reg(exprasmlist,href,hregister);
           end
         else
@@ -646,7 +646,10 @@ end.
 
 {
   $Log$
-  Revision 1.22  2003-03-28 19:16:56  peter
+  Revision 1.23  2003-04-06 21:11:23  olle
+    * changed newasmsymbol to newasmsymboldata for data symbols
+
+  Revision 1.22  2003/03/28 19:16:56  peter
     * generic constructor working for i386
     * remove fixed self register
     * esi added as address register for i386

+ 15 - 12
compiler/ncgld.pas

@@ -92,14 +92,14 @@ implementation
                      location.reference.offset:=tabsolutesym(symtableentry).address;
                    end
                   else
-                   location.reference.symbol:=objectlibrary.newasmsymbol(tabsolutesym(symtableentry).mangledname);
+                   location.reference.symbol:=objectlibrary.newasmsymboldata(tabsolutesym(symtableentry).mangledname);
                end;
             constsym:
               begin
                  if tconstsym(symtableentry).consttyp=constresourcestring then
                    begin
                       location_reset(location,LOC_CREFERENCE,OS_ADDR);
-                      location.reference.symbol:=objectlibrary.newasmsymbol(tconstsym(symtableentry).owner.name^+'_RESOURCESTRINGLIST');
+                      location.reference.symbol:=objectlibrary.newasmsymboldata(tconstsym(symtableentry).owner.name^+'_RESOURCESTRINGLIST');
                       location.reference.offset:=tconstsym(symtableentry).resstrindex*16+8;
                    end
                  else
@@ -112,20 +112,20 @@ implementation
                   { C variable }
                   if (vo_is_C_var in tvarsym(symtableentry).varoptions) then
                     begin
-                       location.reference.symbol:=objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname);
+                       location.reference.symbol:=objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname);
                     end
                   { DLL variable }
                   else if (vo_is_dll_var in tvarsym(symtableentry).varoptions) then
                     begin
                        hregister:=rg.getaddressregister(exprasmlist);
-                       location.reference.symbol:=objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname);
+                       location.reference.symbol:=objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname);
                        cg.a_load_ref_reg(exprasmlist,OS_ADDR,location.reference,hregister);
                        reference_reset_base(location.reference,hregister,0);
                     end
                   { external variable }
                   else if (vo_is_external in tvarsym(symtableentry).varoptions) then
                     begin
-                       location.reference.symbol:=objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname);
+                       location.reference.symbol:=objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname);
                     end
                   { thread variable }
                   else if (vo_is_thread_var in tvarsym(symtableentry).varoptions) then
@@ -134,14 +134,14 @@ implementation
                        objectlibrary.getlabel(norelocatelab);
                        { we've to allocate the register before we save the used registers }
                        hregister:=rg.getaddressregister(exprasmlist);
-                       reference_reset_symbol(href,objectlibrary.newasmsymbol('FPC_THREADVAR_RELOCATE'),0);
+                       reference_reset_symbol(href,objectlibrary.newasmsymboldata('FPC_THREADVAR_RELOCATE'),0);
                        cg.a_load_ref_reg(exprasmlist,OS_ADDR,href,hregister);
                        cg.a_cmp_const_reg_label(exprasmlist,OS_ADDR,OC_NE,0,hregister,dorelocatelab);
                        { no relocation needed, load the address of the variable only, the
                          layout of a threadvar is (4 bytes pointer):
                            0 - Threadvar index
                            4 - Threadvar value in single threading }
-                       reference_reset_symbol(href,objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname),POINTER_SIZE);
+                       reference_reset_symbol(href,objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname),POINTER_SIZE);
                        cg.a_loadaddr_ref_reg(exprasmlist,href,hregister);
                        cg.a_jmp_always(exprasmlist,norelocatelab);
                        cg.a_label(exprasmlist,dorelocatelab);
@@ -149,7 +149,7 @@ implementation
                          internalerror(200301171);
                        { don't save the allocated register else the result will be destroyed later }
                        rg.saveusedintregisters(exprasmlist,pushed,[RS_ACCUMULATOR]-[hregister.number shr 8]);
-                       reference_reset_symbol(href,objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname),0);
+                       reference_reset_symbol(href,objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname),0);
                        cg.a_param_ref(exprasmlist,OS_ADDR,href,paramanager.getintparaloc(1));
                        { the called procedure isn't allowed to change }
                        { any register except EAX                    }
@@ -238,7 +238,7 @@ implementation
                               globalsymtable,
                               staticsymtable :
                                 begin
-                                  location.reference.symbol:=objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname);
+                                  location.reference.symbol:=objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname);
                                 end;
                               stt_exceptsymtable:
                                 begin
@@ -248,7 +248,7 @@ implementation
                               objectsymtable:
                                 begin
                                    if (sp_static in tvarsym(symtableentry).symoptions) then
-                                     location.reference.symbol:=objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname)
+                                     location.reference.symbol:=objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname)
                                    else
                                      begin
                                         location.reference.base:=cg.g_load_self(exprasmlist);
@@ -377,7 +377,7 @@ implementation
                end;
             typedconstsym :
                begin
-                  location.reference.symbol:=objectlibrary.newasmsymbol(ttypedconstsym(symtableentry).mangledname);
+                  location.reference.symbol:=objectlibrary.newasmsymboldata(ttypedconstsym(symtableentry).mangledname);
                end;
             else internalerror(4);
          end;
@@ -970,7 +970,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.46  2003-03-28 19:16:56  peter
+  Revision 1.47  2003-04-06 21:11:23  olle
+    * changed newasmsymbol to newasmsymboldata for data symbols
+
+  Revision 1.46  2003/03/28 19:16:56  peter
     * generic constructor working for i386
     * remove fixed self register
     * esi added as address register for i386

+ 5 - 2
compiler/ncgmem.pas

@@ -122,7 +122,7 @@ implementation
          location.register:=rg.getaddressregister(exprasmlist);
          { on 80386, LEA is the same as mov imm32 }
          reference_reset_symbol(href,
-           objectlibrary.newasmsymbol(tobjectdef(tclassrefdef(resulttype.def).pointertype.def).vmt_mangledname),0);
+           objectlibrary.newasmsymboldata(tobjectdef(tclassrefdef(resulttype.def).pointertype.def).vmt_mangledname),0);
          cg.a_loadaddr_ref_reg(exprasmlist,href,location.register);
       end;
 
@@ -919,7 +919,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.44  2003-03-28 19:16:56  peter
+  Revision 1.45  2003-04-06 21:11:23  olle
+    * changed newasmsymbol to newasmsymboldata for data symbols
+
+  Revision 1.44  2003/03/28 19:16:56  peter
     * generic constructor working for i386
     * remove fixed self register
     * esi added as address register for i386

+ 10 - 7
compiler/ncgutil.pas

@@ -995,7 +995,7 @@ implementation
            if tsym(p).owner.symtabletype in [localsymtable,inlinelocalsymtable] then
             reference_reset_base(href,procinfo.framepointer,-tvarsym(p).address+tvarsym(p).owner.address_fixup)
            else
-            reference_reset_symbol(href,objectlibrary.newasmsymbol(tvarsym(p).mangledname),0);
+            reference_reset_symbol(href,objectlibrary.newasmsymboldata(tvarsym(p).mangledname),0);
            cg.g_initialize(list,tvarsym(p).vartype.def,href,false);
          end;
       end;
@@ -1019,7 +1019,7 @@ implementation
                  if tsym(p).owner.symtabletype in [localsymtable,inlinelocalsymtable] then
                   reference_reset_base(href,procinfo.framepointer,-tvarsym(p).address+tvarsym(p).owner.address_fixup)
                  else
-                  reference_reset_symbol(href,objectlibrary.newasmsymbol(tvarsym(p).mangledname),0);
+                  reference_reset_symbol(href,objectlibrary.newasmsymboldata(tvarsym(p).mangledname),0);
                  cg.g_finalize(list,tvarsym(p).vartype.def,href,false);
                end;
             end;
@@ -1028,7 +1028,7 @@ implementation
               if ttypedconstsym(p).is_writable and
                  ttypedconstsym(p).typedconsttype.def.needs_inittable then
                begin
-                 reference_reset_symbol(href,objectlibrary.newasmsymbol(ttypedconstsym(p).mangledname),0);
+                 reference_reset_symbol(href,objectlibrary.newasmsymboldata(ttypedconstsym(p).mangledname),0);
                  cg.g_finalize(list,ttypedconstsym(p).typedconsttype.def,href,false);
                end;
             end;
@@ -1466,9 +1466,9 @@ function returns in a register and the caller receives it in an other one}
               if (target_info.system in [system_i386_win32,system_i386_wdosx]) and
                  (cs_profile in aktmoduleswitches) then
                begin
-                 reference_reset_symbol(href,objectlibrary.newasmsymbol('etext'),0);
+                 reference_reset_symbol(href,objectlibrary.newasmsymboldata('etext'),0);
                  cg.a_paramaddr_ref(list,href,paraloc);
-                 reference_reset_symbol(href,objectlibrary.newasmsymbol('__image_base__'),0);
+                 reference_reset_symbol(href,objectlibrary.newasmsymboldata('__image_base__'),0);
                  cg.a_paramaddr_ref(list,href,paraloc);
                  cg.a_call_name(list,'_monstartup');
                end;
@@ -1708,7 +1708,7 @@ function returns in a register and the caller receives it in an other one}
                             else if is_object(procinfo._class) then
                              begin
                                cg.a_param_reg(list,OS_ADDR,r,paramanager.getintparaloc(2));
-                               reference_reset_symbol(href,objectlibrary.newasmsymbol(procinfo._class.vmt_mangledname),0);
+                               reference_reset_symbol(href,objectlibrary.newasmsymboldata(procinfo._class.vmt_mangledname),0);
                                cg.a_paramaddr_ref(list,href,paramanager.getintparaloc(1));
                              end
                             else
@@ -2005,7 +2005,10 @@ function returns in a register and the caller receives it in an other one}
 end.
 {
   $Log$
-  Revision 1.82  2003-03-30 20:59:07  peter
+  Revision 1.83  2003-04-06 21:11:23  olle
+    * changed newasmsymbol to newasmsymboldata for data symbols
+
+  Revision 1.82  2003/03/30 20:59:07  peter
     * fix classmethod from classmethod call
     * move BeforeDestruction/AfterConstruction calls to
       genentrycode/genexitcode instead of generating them on the fly

+ 5 - 2
compiler/ptconst.pas

@@ -236,7 +236,7 @@ implementation
                       if not(tobjectdef(tclassrefdef(p.resulttype.def).pointertype.def).is_related(
                         tobjectdef(tclassrefdef(t.def).pointertype.def))) then
                         Message(cg_e_illegal_expression);
-                      curconstSegment.concat(Tai_const_symbol.Create(objectlibrary.newasmsymbol(tobjectdef(
+                      curconstSegment.concat(Tai_const_symbol.Create(objectlibrary.newasmsymboldata(tobjectdef(
                         tclassrefdef(p.resulttype.def).pointertype.def).vmt_mangledname)));
                    end;
                  niln:
@@ -995,7 +995,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.65  2003-03-17 21:42:32  peter
+  Revision 1.66  2003-04-06 21:11:23  olle
+    * changed newasmsymbol to newasmsymboldata for data symbols
+
+  Revision 1.65  2003/03/17 21:42:32  peter
     * allow nil initialization of dynamic array
 
   Revision 1.64  2003/01/02 20:45:08  peter

+ 7 - 4
compiler/rautils.pas

@@ -820,7 +820,7 @@ Begin
             end;
           globalsymtable,
           staticsymtable :
-            opr.ref.symbol:=objectlibrary.newasmsymbol(tvarsym(sym).mangledname);
+            opr.ref.symbol:=objectlibrary.newasmsymboldata(tvarsym(sym).mangledname);
           parasymtable :
             begin
               { if we only want the offset we don't have to care
@@ -865,7 +865,7 @@ Begin
           localsymtable :
             begin
               if (vo_is_external in tvarsym(sym).varoptions) then
-                opr.ref.symbol:=objectlibrary.newasmsymbol(tvarsym(sym).mangledname)
+                opr.ref.symbol:=objectlibrary.newasmsymboldata(tvarsym(sym).mangledname)
               else
                 begin
                   { if we only want the offset we don't have to care
@@ -926,7 +926,7 @@ Begin
       end;
     typedconstsym :
       begin
-        opr.ref.symbol:=objectlibrary.newasmsymbol(ttypedconstsym(sym).mangledname);
+        opr.ref.symbol:=objectlibrary.newasmsymboldata(ttypedconstsym(sym).mangledname);
         case ttypedconstsym(sym).typedconsttype.def.deftype of
           orddef,
           enumdef,
@@ -1582,7 +1582,10 @@ end;
 end.
 {
   $Log$
-  Revision 1.54  2003-03-28 19:16:57  peter
+  Revision 1.55  2003-04-06 21:11:23  olle
+    * changed newasmsymbol to newasmsymboldata for data symbols
+
+  Revision 1.54  2003/03/28 19:16:57  peter
     * generic constructor working for i386
     * remove fixed self register
     * esi added as address register for i386