Browse Source

* specify AT_DATA in all references to the tobjectdef.vmt_mangledname symbol.
This fixes a lot of bugs, related to objects and classes in the i8086 medium
memory model

git-svn-id: trunk@25794 -

nickysn 11 years ago
parent
commit
bf07fc077b
6 changed files with 9 additions and 9 deletions
  1. 1 1
      compiler/cgobj.pas
  2. 1 1
      compiler/ncgflw.pas
  3. 1 1
      compiler/ncginl.pas
  4. 1 1
      compiler/ncgmem.pas
  5. 4 4
      compiler/ngtcon.pas
  6. 1 1
      compiler/x86_64/nx64flw.pas

+ 1 - 1
compiler/cgobj.pas

@@ -2135,7 +2135,7 @@ implementation
            pd:=search_system_proc('fpc_check_object_ext');
            paramanager.getintparaloc(pd,1,cgpara1);
            paramanager.getintparaloc(pd,2,cgpara2);
-           reference_reset_symbol(hrefvmt,current_asmdata.RefAsmSymbol(objdef.vmt_mangledname),0,sizeof(pint));
+           reference_reset_symbol(hrefvmt,current_asmdata.RefAsmSymbol(objdef.vmt_mangledname,AT_DATA),0,sizeof(pint));
            if pd.is_pushleftright then
              begin
                a_load_reg_cgpara(list,OS_ADDR,reg,cgpara1);

+ 1 - 1
compiler/ncgflw.pas

@@ -1251,7 +1251,7 @@ implementation
 
          { send the vmt parameter }
          pd:=search_system_proc('fpc_catches');
-         reference_reset_symbol(href2,current_asmdata.RefAsmSymbol(excepttype.vmt_mangledname),0,sizeof(pint));
+         reference_reset_symbol(href2,current_asmdata.RefAsmSymbol(excepttype.vmt_mangledname,AT_DATA),0,sizeof(pint));
          paramanager.getintparaloc(pd,1,paraloc1);
          cg.a_loadaddr_ref_cgpara(current_asmdata.CurrAsmList,href2,paraloc1);
          paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);

+ 1 - 1
compiler/ncginl.pas

@@ -215,7 +215,7 @@ implementation
         if left.nodetype=typen then
           begin
             hregister:=cg.getaddressregister(current_asmdata.CurrAsmList);
-            reference_reset_symbol(href,current_asmdata.RefAsmSymbol(tobjectdef(left.resultdef).vmt_mangledname),0,sizeof(pint));
+            reference_reset_symbol(href,current_asmdata.RefAsmSymbol(tobjectdef(left.resultdef).vmt_mangledname,AT_DATA),0,sizeof(pint));
             cg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,href,hregister);
           end
         else

+ 1 - 1
compiler/ncgmem.pas

@@ -109,7 +109,7 @@ implementation
              if not is_objcclass(left.resultdef) then
                begin
                  reference_reset_symbol(href,
-                   current_asmdata.RefAsmSymbol(tobjectdef(tclassrefdef(resultdef).pointeddef).vmt_mangledname),0,
+                   current_asmdata.RefAsmSymbol(tobjectdef(tclassrefdef(resultdef).pointeddef).vmt_mangledname,AT_DATA),0,
                    sizeof(pint));
                  cg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,href,location.register);
                end

+ 4 - 4
compiler/ngtcon.pas

@@ -752,7 +752,7 @@ function get_next_varsym(def: tabstractrecorddef; const SymList:TFPHashObjectLis
             begin
               if not Tobjectdef(tclassrefdef(node.resultdef).pointeddef).is_related(tobjectdef(def.pointeddef)) then
                 IncompatibleTypes(node.resultdef, def);
-              list.concat(Tai_const.Create_sym(current_asmdata.RefAsmSymbol(Tobjectdef(tclassrefdef(node.resultdef).pointeddef).vmt_mangledname)));
+              list.concat(Tai_const.Create_sym(current_asmdata.RefAsmSymbol(Tobjectdef(tclassrefdef(node.resultdef).pointeddef).vmt_mangledname,AT_DATA)));
             end;
            niln:
              list.concat(Tai_const.Create_sym(nil));
@@ -977,7 +977,7 @@ function get_next_varsym(def: tabstractrecorddef; const SymList:TFPHashObjectLis
               if (tinlinenode(node).left.nodetype=typen) then
                 begin
                   list.concat(Tai_const.createname(
-                    tobjectdef(tinlinenode(node).left.resultdef).vmt_mangledname,0));
+                    tobjectdef(tinlinenode(node).left.resultdef).vmt_mangledname,AT_DATA,0));
                 end
               else
                 Message(parser_e_illegal_expression);
@@ -1627,7 +1627,7 @@ function get_next_varsym(def: tabstractrecorddef; const SymList:TFPHashObjectLis
                     begin
                       for i:=1 to def.vmt_offset-objoffset do
                         list.concat(tai_const.create_8bit(0));
-                      list.concat(tai_const.createname(def.vmt_mangledname,0));
+                      list.concat(tai_const.createname(def.vmt_mangledname,AT_DATA,0));
                       { this is more general }
                       objoffset:=def.vmt_offset + sizeof(pint);
                       vmtwritten:=true;
@@ -1656,7 +1656,7 @@ function get_next_varsym(def: tabstractrecorddef; const SymList:TFPHashObjectLis
           begin
             for i:=1 to def.vmt_offset-objoffset do
               list.concat(tai_const.create_8bit(0));
-            list.concat(tai_const.createname(def.vmt_mangledname,0));
+            list.concat(tai_const.createname(def.vmt_mangledname,AT_DATA,0));
             { this is more general }
             objoffset:=def.vmt_offset + sizeof(pint);
           end;

+ 1 - 1
compiler/x86_64/nx64flw.pas

@@ -495,7 +495,7 @@ procedure tx64tryexceptnode.pass_generate_code;
               InternalError(2011103101);
             { TODO: make it done without using global label }
             current_asmdata.getglobaljumplabel(onlabel);
-            hlist.concat(tai_const.create_rva_sym(current_asmdata.RefAsmSymbol(tonnode(hnode).excepttype.vmt_mangledname)));
+            hlist.concat(tai_const.create_rva_sym(current_asmdata.RefAsmSymbol(tonnode(hnode).excepttype.vmt_mangledname,AT_DATA)));
             hlist.concat(tai_const.create_rva_sym(onlabel));
             cg.a_label(current_asmdata.CurrAsmList,onlabel);
             secondpass(hnode);