瀏覽代碼

+ basic darwin support added

florian 22 年之前
父節點
當前提交
9de6468186
共有 6 個文件被更改,包括 166 次插入47 次删除
  1. 6 3
      compiler/i386/cputarg.pas
  2. 31 9
      compiler/powerpc/cgcpu.pas
  3. 7 1
      compiler/powerpc/cputarg.pas
  4. 8 3
      compiler/systems.pas
  5. 75 2
      compiler/systems/i_bsd.pas
  6. 39 29
      compiler/systems/t_bsd.pas

+ 6 - 3
compiler/i386/cputarg.pas

@@ -39,8 +39,8 @@ implementation
     {$ifndef NOTARGETLINUX}
       ,t_linux
     {$endif}
-    {$ifndef NOTARGETFREEBSD}
-      ,t_fbsd
+    {$ifndef NOTARGETBSD}
+      ,t_bsd
     {$endif}
     {$ifndef NOTARGETSUNOS}
       ,t_sunos
@@ -88,7 +88,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.11  2003-04-25 12:04:31  florian
+  Revision 1.12  2003-05-20 23:54:00  florian
+    + basic darwin support added
+
+  Revision 1.11  2003/04/25 12:04:31  florian
     * merged agx64att and ag386att to x86/agx86att
 
   Revision 1.10  2003/03/23 23:33:10  hajny

+ 31 - 9
compiler/powerpc/cgcpu.pas

@@ -101,6 +101,8 @@ unit cgcpu;
 
         procedure g_stackframe_entry_sysv(list : taasmoutput;localsize : longint);
         procedure g_return_from_proc_sysv(list : taasmoutput;parasize : aword);
+        procedure g_stackframe_entry_aix(list : taasmoutput;localsize : longint);
+        procedure g_return_from_proc_aix(list : taasmoutput;parasize : aword);
         procedure g_stackframe_entry_mac(list : taasmoutput;localsize : longint);
         procedure g_return_from_proc_mac(list : taasmoutput;parasize : aword);
 
@@ -921,11 +923,13 @@ const
     procedure tcgppc.g_stackframe_entry(list : taasmoutput;localsize : longint);
 
       begin
-        case target_info.system of
-          system_powerpc_macos:
+        case target_info.abi of
+          abi_powerpc_macos:
             g_stackframe_entry_mac(list,localsize);
-          system_powerpc_linux:
-            g_stackframe_entry_sysv(list,localsize)
+          abi_powerpc_sysv:
+            g_stackframe_entry_sysv(list,localsize);
+          abi_powerpc_aix:
+            g_stackframe_entry_aix(list,localsize);
           else
             internalerror(2204001);
         end;
@@ -934,17 +938,25 @@ const
     procedure tcgppc.g_return_from_proc(list : taasmoutput;parasize : aword);
 
       begin
-        case target_info.system of
-          system_powerpc_macos:
+        case target_info.abi of
+          abi_powerpc_macos:
             g_return_from_proc_mac(list,parasize);
-          system_powerpc_linux:
-            g_return_from_proc_sysv(list,parasize)
+          abi_powerpc_sysv:
+            g_return_from_proc_sysv(list,parasize);
+          abi_powerpc_aix:
+            g_return_from_proc_aix(list,parasize);
           else
             internalerror(2204001);
         end;
       end;
 
 
+    procedure tcgppc.g_stackframe_entry_aix(list : taasmoutput;localsize : longint);
+      begin
+         g_stackframe_entry_sysv(list,localsize);
+      end;
+
+
     procedure tcgppc.g_stackframe_entry_sysv(list : taasmoutput;localsize : longint);
      { generated the entry code of a procedure/function. Note: localsize is the }
      { sum of the size necessary for local variables and the maximum possible   }
@@ -1150,6 +1162,13 @@ const
           end;
       end;
 
+
+    procedure tcgppc.g_return_from_proc_aix(list : taasmoutput;parasize : aword);
+      begin
+         g_return_from_proc_sysv(list,parasize);
+      end;
+
+
     procedure tcgppc.g_return_from_proc_sysv(list : taasmoutput;parasize : aword);
 
       var
@@ -2392,7 +2411,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.93  2003-05-15 22:14:42  florian
+  Revision 1.94  2003-05-20 23:54:00  florian
+    + basic darwin support added
+
+  Revision 1.93  2003/05/15 22:14:42  florian
     * fixed last commit, changing lastsaveintreg to r31 caused some strange problems
 
   Revision 1.92  2003/05/15 21:37:00  florian

+ 7 - 1
compiler/powerpc/cputarg.pas

@@ -42,6 +42,9 @@ implementation
     {$ifndef NOTARGETMACOS}
       ,t_macos
     {$endif}
+    {$ifndef NOTARGETDARWIN}
+      ,t_bsd
+    {$endif}
 
 {**************************************
              Assemblers
@@ -58,7 +61,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.5  2002-08-20 21:40:44  florian
+  Revision 1.6  2003-05-20 23:54:00  florian
+    + basic darwin support added
+
+  Revision 1.5  2002/08/20 21:40:44  florian
     + target macos for ppc added
     + frame work for mpw assembler output
 

+ 8 - 3
compiler/systems.pas

@@ -109,7 +109,7 @@ interface
              target_i386_openbsd,       { 24 }
              target_m68k_openbsd,       { 25 }
              system_x86_64_linux,       { 26 }
-             system_powerpc_macosx,     { 27 }
+             system_powerpc_darwin,     { 27 }
              system_i386_EMX            { 28 }
        );
 
@@ -147,7 +147,9 @@ interface
             ,script_dos,script_unix,script_amiga
        );
 
-       tabi = (abi_default,abi_powerpc_sysv,abi_powerpc_aix);
+       tabi = (abi_default
+            ,abi_powerpc_sysv,abi_powerpc_aix,abi_powerpc_macos
+       );
 
 {*****************************************************************************
                                Structures
@@ -681,7 +683,10 @@ finalization
 end.
 {
   $Log$
-  Revision 1.61  2003-05-18 15:15:59  florian
+  Revision 1.62  2003-05-20 23:54:00  florian
+    + basic darwin support added
+
+  Revision 1.61  2003/05/18 15:15:59  florian
     + added abi field to tsysteminfo
 
   Revision 1.60  2003/03/23 23:21:42  hajny

+ 75 - 2
compiler/systems/i_fbsd.pas → compiler/systems/i_bsd.pas

@@ -22,7 +22,7 @@
 { This unit implements support information structures for FreeBSD/NetBSD.
   OpenBSD and Darwin must be added still.}
 
-unit i_fbsd;
+unit i_bsd;
 
   interface
 
@@ -222,6 +222,71 @@ unit i_fbsd;
             use_function_relative_addresses : true
           );
 
+       system_powerpc_darwin_info  : tsysteminfo =
+          (
+            system       : system_powerpc_darwin;
+            name         : 'Darwin for PowerPC';
+            shortname    : 'Darwin';
+            flags        : [tf_under_development];
+            cpu          : cpu_powerpc;
+            unit_env     : 'BSDUNITS';
+            extradefines : 'UNIX;BSD;HASUNIX';
+            sourceext    : '.pp';
+            pasext       : '.pas';
+            exeext       : '';
+            defext       : '.def';
+            scriptext    : '.sh';
+            smartext     : '.sl';
+            unitext      : '.ppu';
+            unitlibext   : '.ppl';
+            asmext       : '.s';
+            objext       : '.o';
+            resext       : '.res';
+            resobjext    : '.or';
+            sharedlibext : '.so';
+            staticlibext : '.a';
+            staticlibprefix : 'libp';
+            sharedlibprefix : 'lib';
+            sharedClibext : '.so';
+            staticClibext : '.a';
+            staticClibprefix : 'lib';
+            sharedClibprefix : 'lib';
+            Cprefix      : '';
+            newline      : #10;
+            dirsep       : '/';
+            files_case_relevent : true;
+            assem        : as_gas;
+            assemextern  : as_gas;
+            link         : nil;
+            linkextern   : nil;
+            ar           : ar_gnu_ar;
+            res          : res_none;
+            script       : script_unix;
+            endian       : endian_big;
+            alignment    :
+              (
+                procalign       : 16;
+                loopalign       : 4;
+                jumpalign       : 0;
+                constalignmin   : 0;
+                constalignmax   : 1;
+                varalignmin     : 0;
+                varalignmax     : 1;
+                localalignmin   : 0;
+                localalignmax   : 1;
+                paraalign       : 4;
+                recordalignmin  : 0;
+                recordalignmax  : 2;
+                maxCrecordalign : 4
+              );
+            first_parm_offset : 8;
+            heapsize    : 256*1024;
+            stacksize   : 262144;
+            DllScanSupported:false;
+            use_function_relative_addresses : true;
+            abi : abi_powerpc_aix;
+          );
+
   implementation
 
 initialization
@@ -238,10 +303,18 @@ initialization
      set_source_info(system_m68k_NetBSD_info);
   {$endif NetBSD}
 {$endif cpu68}
+{$ifdef cpupowerpc}
+  {$ifdef Darwin}
+     set_source_info(system_powerpc_darwin_info);
+  {$endif Darwin}
+{$endif cpu68}
 end.
 {
   $Log$
-  Revision 1.2  2003-01-11 16:35:15  marco
+  Revision 1.1  2003-05-20 23:54:00  florian
+    + basic darwin support added
+
+  Revision 1.2  2003/01/11 16:35:15  marco
    * HASUNIX defined for now.
 
   Revision 1.1  2002/09/06 15:03:51  carl

+ 39 - 29
compiler/systems/t_fbsd.pas → compiler/systems/t_bsd.pas

@@ -22,7 +22,7 @@
 
  ****************************************************************************
 }
-unit t_fbsd;
+unit t_bsd;
 
 {$i fpcdefs.inc}
 
@@ -36,24 +36,24 @@ implementation
     verbose,systems,globtype,globals,
     symconst,script,
     fmodule,aasmbase,aasmtai,aasmcpu,cpubase,symsym,symdef,
-    import,export,link,i_fbsd;
+    import,export,link,i_bsd;
 
   type
-    timportlibfreebsd=class(timportlib)
+    timportlibbsd=class(timportlib)
       procedure preparelib(const s:string);override;
       procedure importprocedure(aprocdef:tprocdef;const module:string;index:longint;const name:string);override;
       procedure importvariable(vs:tvarsym;const name,module:string);override;
       procedure generatelib;override;
     end;
 
-    texportlibfreebsd=class(texportlib)
+    texportlibbsd=class(texportlib)
       procedure preparelib(const s : string);override;
       procedure exportprocedure(hp : texported_item);override;
       procedure exportvar(hp : texported_item);override;
       procedure generatelib;override;
     end;
 
-    tlinkerfreebsd=class(texternallinker)
+    tlinkerbsd=class(texternallinker)
     private
       Glibc2,
       Glibc21,
@@ -71,12 +71,12 @@ implementation
                                TIMPORTLIBLINUX
 *****************************************************************************}
 
-procedure timportlibfreebsd.preparelib(const s : string);
+procedure timportlibbsd.preparelib(const s : string);
 begin
 end;
 
 
-procedure timportlibfreebsd.importprocedure(aprocdef:tprocdef;const module:string;index:longint;const name:string);
+procedure timportlibbsd.importprocedure(aprocdef:tprocdef;const module:string;index:longint;const name:string);
 begin
   { insert sharedlibrary }
   current_module.linkothersharedlibs.add(SplitName(module),link_allways);
@@ -90,7 +90,7 @@ begin
 end;
 
 
-procedure timportlibfreebsd.importvariable(vs:tvarsym;const name,module:string);
+procedure timportlibbsd.importvariable(vs:tvarsym;const name,module:string);
 begin
   { insert sharedlibrary }
   current_module.linkothersharedlibs.add(SplitName(module),link_allways);
@@ -100,7 +100,7 @@ begin
 end;
 
 
-procedure timportlibfreebsd.generatelib;
+procedure timportlibbsd.generatelib;
 begin
 end;
 
@@ -109,12 +109,12 @@ end;
                                TEXPORTLIBLINUX
 *****************************************************************************}
 
-procedure texportlibfreebsd.preparelib(const s:string);
+procedure texportlibbsd.preparelib(const s:string);
 begin
 end;
 
 
-procedure texportlibfreebsd.exportprocedure(hp : texported_item);
+procedure texportlibbsd.exportprocedure(hp : texported_item);
 var
   hp2 : texported_item;
 begin
@@ -151,14 +151,14 @@ begin
 end;
 
 
-procedure texportlibfreebsd.exportvar(hp : texported_item);
+procedure texportlibbsd.exportvar(hp : texported_item);
 begin
   hp.is_var:=true;
   exportprocedure(hp);
 end;
 
 
-procedure texportlibfreebsd.generatelib;
+procedure texportlibbsd.generatelib;
 var
   hp2 : texported_item;
 begin
@@ -192,14 +192,14 @@ end;
                                   TLINKERLINUX
 *****************************************************************************}
 
-Constructor TLinkerFreeBSD.Create;
+Constructor TLinkerBSD.Create;
 begin
   Inherited Create;
   LibrarySearchPath.AddPath('/lib;/usr/lib;/usr/X11R6/lib',true);
 end;
 
 
-procedure TLinkerFreeBSD.SetDefaultInfo;
+procedure TLinkerBSD.SetDefaultInfo;
 {
   This will also detect which libc version will be used
 }
@@ -249,7 +249,7 @@ begin
 end;
 
 
-Function TLinkerFreeBSD.WriteResponseFile(isdll:boolean) : Boolean;
+Function TLinkerBSD.WriteResponseFile(isdll:boolean) : Boolean;
 Var
   linkres      : TLinkRes;
   i            : longint;
@@ -405,7 +405,7 @@ begin
 end;
 
 
-function TLinkerFreeBSD.MakeExecutable:boolean;
+function TLinkerBSD.MakeExecutable:boolean;
 var
   binstr,
   cmdstr  : string;
@@ -457,7 +457,7 @@ begin
 end;
 
 
-Function TLinkerFreeBSD.MakeSharedLibrary:boolean;
+Function TLinkerBSD.MakeSharedLibrary:boolean;
 var
   binstr,
   cmdstr  : string;
@@ -499,26 +499,36 @@ end;
 
 initialization
 {$ifdef i386}
-  RegisterExternalLinker(system_i386_FreeBSD_info,TLinkerFreeBSD);
-  RegisterExternalLinker(system_i386_NetBSD_info,TLinkerFreeBSD);
-  RegisterImport(system_i386_freebsd,timportlibfreebsd);
-  RegisterExport(system_i386_freebsd,texportlibfreebsd);
+  RegisterExternalLinker(system_i386_FreeBSD_info,TLinkerBSD);
+  RegisterExternalLinker(system_i386_NetBSD_info,TLinkerBSD);
+  RegisterImport(system_i386_freebsd,timportlibbsd);
+  RegisterExport(system_i386_freebsd,texportlibbsd);
   RegisterTarget(system_i386_freebsd_info);
-  RegisterImport(system_i386_netbsd,timportlibfreebsd);
-  RegisterExport(system_i386_netbsd,texportlibfreebsd);
+  RegisterImport(system_i386_netbsd,timportlibbsd);
+  RegisterExport(system_i386_netbsd,texportlibbsd);
   RegisterTarget(system_i386_netbsd_info);
 {$endif i386}
 {$ifdef m68k}
-//  RegisterExternalLinker(system_m68k_FreeBSD_info,TLinkerFreeBSD);
-  RegisterExternalLinker(system_m68k_NetBSD_info,TLinkerFreeBSD);
-  RegisterImport(system_m68k_netbsd,timportlibfreebsd);
-  RegisterExport(system_m68k_netbsd,texportlibfreebsd);
+//  RegisterExternalLinker(system_m68k_FreeBSD_info,TLinkerBSD);
+  RegisterExternalLinker(system_m68k_NetBSD_info,TLinkerBSD);
+  RegisterImport(system_m68k_netbsd,timportlibbsd);
+  RegisterExport(system_m68k_netbsd,texportlibbsd);
   RegisterTarget(system_m68k_netbsd_info);
 {$endif m68k}
+{$ifdef powerpc}
+//  RegisterExternalLinker(system_m68k_FreeBSD_info,TLinkerBSD);
+  RegisterExternalLinker(system_powerpc_darwin_info,TLinkerBSD);
+  RegisterImport(system_powerpc_darwin,timportlibbsd);
+  RegisterExport(system_powerpc_darwin,texportlibbsd);
+  RegisterTarget(system_powerpc_darwin_info);
+{$endif powerpc}
 end.
 {
   $Log$
-  Revision 1.5  2003-04-27 07:29:52  peter
+  Revision 1.1  2003-05-20 23:54:00  florian
+    + basic darwin support added
+
+  Revision 1.5  2003/04/27 07:29:52  peter
     * aktprocdef cleanup, aktprocdef is now always nil when parsing
       a new procdef declaration
     * aktprocsym removed