Browse Source

* fixed loading external procedure addresses

Jonas Maebe 21 years ago
parent
commit
c8a7c5b96f
1 changed files with 38 additions and 1 deletions
  1. 38 1
      compiler/powerpc/nppcld.pas

+ 38 - 1
compiler/powerpc/nppcld.pas

@@ -31,6 +31,7 @@ unit nppcld;
 
 
     type
     type
       tppcloadnode = class(tcgloadnode)
       tppcloadnode = class(tcgloadnode)
+        procedure pass_2; override;
         procedure generate_picvaraccess;override;
         procedure generate_picvaraccess;override;
       end;
       end;
 
 
@@ -48,6 +49,39 @@ unit nppcld;
       nld;
       nld;
 
 
 
 
+    procedure tppcloadnode.pass_2;
+      var
+        l : tasmsymbol;
+        ref : treference;
+      begin
+        case target_info.system of
+          system_powerpc_darwin:
+            begin
+              if (symtableentry.typ = procsym) and
+                 not assigned(left) and
+                 ((tprocsym(symtableentry).owner.unitid<>0) or
+                  (po_external in tprocsym(symtableentry).procdef[1].procoptions)) then
+                begin
+                  l:=objectlibrary.getasmsymbol('L'+tprocsym(symtableentry).procdef[1].mangledname+'$non_lazy_ptr');
+                  if not(assigned(l)) then
+                    begin
+                      l:=objectlibrary.newasmsymbol('L'+tprocsym(symtableentry).procdef[1].mangledname+'$non_lazy_ptr',AB_COMMON,AT_DATA);
+                      picdata.concat(tai_symbol.create(l,0));
+                      picdata.concat(tai_const.create_indirect_sym(objectlibrary.newasmsymbol(tprocsym(symtableentry).procdef[1].mangledname,AB_EXTERNAL,AT_DATA)));
+                      picdata.concat(tai_const.create_32bit(0));
+                    end;
+                  reference_reset_symbol(ref,l,0);
+                  reference_reset_base(location.reference,cg.getaddressregister(exprasmlist),0);
+                  cg.a_load_ref_reg(exprasmlist,OS_ADDR,OS_ADDR,ref,location.reference.base);
+                end
+              else
+                inherited pass_2;
+            end;
+          else
+            inherited pass_2;
+        end;
+      end;
+
     procedure tppcloadnode.generate_picvaraccess;
     procedure tppcloadnode.generate_picvaraccess;
       var
       var
         l : tasmsymbol;
         l : tasmsymbol;
@@ -87,7 +121,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.3  2004-06-17 16:55:46  peter
+  Revision 1.4  2004-07-19 12:45:43  jonas
+    * fixed loading external procedure addresses
+
+  Revision 1.3  2004/06/17 16:55:46  peter
     * powerpc compiles again
     * powerpc compiles again
 
 
   Revision 1.2  2004/03/05 22:17:11  jonas
   Revision 1.2  2004/03/05 22:17:11  jonas