Explorar o código

* very basic stuff for the arm

florian %!s(int64=22) %!d(string=hai) anos
pai
achega
d2035fd6b4
Modificáronse 4 ficheiros con 118 adicións e 17 borrados
  1. 11 3
      compiler/fpcdefs.inc
  2. 24 11
      compiler/systems.pas
  3. 73 2
      compiler/systems/i_linux.pas
  4. 10 1
      compiler/systems/t_linux.pas

+ 11 - 3
compiler/fpcdefs.inc

@@ -50,11 +50,13 @@
   {$define x86}
   {$define cpu64bit}
   {$define cpuextended}
+  {$define callparatemp}
 {$endif x86_64}
 
 {$ifdef alpha}
   {$define cpu64bit}
   {$undef cpuflags}
+  {$define callparatemp}
 {$endif alpha}
 
 {$ifdef sparc}
@@ -65,6 +67,10 @@
   {$define callparatemp}
 {$endif powerpc}
 
+{$ifdef arm}
+  {$define callparatemp}
+{$endif arm}
+
 { FPU Emulator support }
 {$ifdef m68k}
   {$define cpufpemu}
@@ -77,7 +83,10 @@
 
 {
   $Log$
-  Revision 1.20  2003-05-24 21:12:57  florian
+  Revision 1.21  2003-07-21 11:52:57  florian
+    * very basic stuff for the arm
+
+  Revision 1.20  2003/05/24 21:12:57  florian
     * if something doesn't work with callparatemp, the define callparatemp
       should be used because other processors with reigster calling conventions
       depend on this as well
@@ -140,5 +149,4 @@
 
   Revision 1.3  2002/07/04 18:56:50  florian
     + log added
-
-}
+}

+ 24 - 11
compiler/systems.pas

@@ -111,8 +111,9 @@ interface
              system_x86_64_linux,       { 26 }
              system_powerpc_darwin,     { 27 }
              system_i386_EMX,           { 28 }
-	         system_powerpc_netbsd,	    { 29 }
-    	     system_powerpc_openbsd	    { 30 }
+	     system_powerpc_netbsd,     { 29 }
+    	     system_powerpc_openbsd,    { 30 }
+             system_arm_linux           { 31 }
        );
 
        tasm = (as_none
@@ -132,7 +133,6 @@ interface
              ,as_i386_pecoffwdosx
              ,as_m68k_mit
              ,as_powerpc_mpw
-             ,as_x86_64_as
        );
 
        tar = (ar_none
@@ -347,7 +347,6 @@ implementation
       cutils;
 
 
-
 {****************************************************************************
                               Target setting
 ****************************************************************************}
@@ -634,8 +633,8 @@ end;
 
 procedure InitSystems;
 begin
-{ Now default target, this is dependent on the i386 or m68k define,
-  when the define is the same as the current cpu then we use the source
+{ Now default target, this is dependent on the target cpu define,
+  when the define is the same as the source cpu then we use the source
   os, else we pick a default }
 {$ifdef i386}
   {$ifdef cpu86}
@@ -672,9 +671,20 @@ begin
     default_target(system_powerpc_linux);
   {$endif cpupowerpc}
 {$endif powerpc}
-{$IFDEF sparc}
-  default_target(system_sparc_linux);
-{$ENDIF sparc}
+{$ifdef sparc}
+  {$ifdef cpusparc}
+    default_target(source_info.system);
+  {$else cpusparc}
+    default_target(system_sparc_linux);
+  {$endif cpusparc}
+{$endif sparc}
+{$ifdef arm}
+  {$ifdef cpuarm}
+    default_target(source_info.system);
+  {$else cpuarm}
+    default_target(system_arm_linux);
+  {$endif cpuarm}
+{$endif arm}
 end;
 
 
@@ -685,7 +695,10 @@ finalization
 end.
 {
   $Log$
-  Revision 1.65  2003-05-31 16:17:27  marco
+  Revision 1.66  2003-07-21 11:52:57  florian
+    * very basic stuff for the arm
+
+  Revision 1.65  2003/05/31 16:17:27  marco
    * cpuppc -> cpupowerpc. Target compiler was always linux for ppc
 
   Revision 1.64  2003/05/28 23:18:31  florian
@@ -788,4 +801,4 @@ end.
 
   Revision 1.38  2002/04/14 16:56:30  carl
   - remove duplicate comment
-}
+}

+ 73 - 2
compiler/systems/i_linux.pas

@@ -414,6 +414,70 @@ unit i_linux;
             use_function_relative_addresses : true
           );
 
+       system_arm_linux_info : tsysteminfo =
+          (
+            system       : system_arm_Linux;
+            name         : 'Linux for ARM';
+            shortname    : 'linux';
+            flags        : [];
+            cpu          : cpu_SPARC;
+            unit_env     : 'LINUXUNITS';
+            extradefines : 'UNIX;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       : 4;
+                loopalign       : 4;
+                jumpalign       : 0;
+                constalignmin   : 0;
+                constalignmax   : 4;
+                varalignmin     : 0;
+                varalignmax     : 4;
+                localalignmin   : 0;
+                localalignmax   : 4;
+                paraalign       : 4;
+                recordalignmin  : 4;
+                recordalignmax  : 4;
+                maxCrecordalign : 4
+              );
+            first_parm_offset : 8;
+            heapsize     : 256*1024;
+            stacksize    : 262144;
+            DllScanSupported:false;
+            use_function_relative_addresses : true
+          );
+
   implementation
 
 initialization
@@ -450,11 +514,18 @@ initialization
     set_source_info(system_powerpc_linux_info);
   {$endif linux}
 {$endif CPUPOWERPC}
-
+{$ifdef CPUARM}
+  {$ifdef linux}
+    set_source_info(system_arm_linux_info);
+  {$endif linux}
+{$endif CPUARM}
 end.
 {
   $Log$
-  Revision 1.9  2003-07-06 17:58:22  peter
+  Revision 1.10  2003-07-21 11:52:57  florian
+    * very basic stuff for the arm
+
+  Revision 1.9  2003/07/06 17:58:22  peter
     * framepointer fixes for sparc
     * parent framepointer code more generic
 

+ 10 - 1
compiler/systems/t_linux.pas

@@ -545,11 +545,20 @@ initialization
   RegisterExport(system_SPARC_linux,texportliblinux);
   RegisterTarget(system_SPARC_linux_info);
 {$endif SPARC}
+{$ifdef ARM}
+  RegisterExternalLinker(system_arm_linux_info,TLinkerLinux);
+  RegisterImport(system_arm_linux,timportliblinux);
+  RegisterExport(system_arm_linux,texportliblinux);
+  RegisterTarget(system_arm_linux_info);
+{$endif ARM}
 end.
 
 {
   $Log$
-  Revision 1.8  2003-04-27 07:29:52  peter
+  Revision 1.9  2003-07-21 11:52:57  florian
+    * very basic stuff for the arm
+
+  Revision 1.8  2003/04/27 07:29:52  peter
     * aktprocdef cleanup, aktprocdef is now always nil when parsing
       a new procdef declaration
     * aktprocsym removed