Selaa lähdekoodia

* very basic stuff for the arm

florian 22 vuotta sitten
vanhempi
commit
d2035fd6b4
4 muutettua tiedostoa jossa 118 lisäystä ja 17 poistoa
  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 x86}
   {$define cpu64bit}
   {$define cpu64bit}
   {$define cpuextended}
   {$define cpuextended}
+  {$define callparatemp}
 {$endif x86_64}
 {$endif x86_64}
 
 
 {$ifdef alpha}
 {$ifdef alpha}
   {$define cpu64bit}
   {$define cpu64bit}
   {$undef cpuflags}
   {$undef cpuflags}
+  {$define callparatemp}
 {$endif alpha}
 {$endif alpha}
 
 
 {$ifdef sparc}
 {$ifdef sparc}
@@ -65,6 +67,10 @@
   {$define callparatemp}
   {$define callparatemp}
 {$endif powerpc}
 {$endif powerpc}
 
 
+{$ifdef arm}
+  {$define callparatemp}
+{$endif arm}
+
 { FPU Emulator support }
 { FPU Emulator support }
 {$ifdef m68k}
 {$ifdef m68k}
   {$define cpufpemu}
   {$define cpufpemu}
@@ -77,7 +83,10 @@
 
 
 {
 {
   $Log$
   $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
     * if something doesn't work with callparatemp, the define callparatemp
       should be used because other processors with reigster calling conventions
       should be used because other processors with reigster calling conventions
       depend on this as well
       depend on this as well
@@ -140,5 +149,4 @@
 
 
   Revision 1.3  2002/07/04 18:56:50  florian
   Revision 1.3  2002/07/04 18:56:50  florian
     + log added
     + log added
-
-}
+}

+ 24 - 11
compiler/systems.pas

@@ -111,8 +111,9 @@ interface
              system_x86_64_linux,       { 26 }
              system_x86_64_linux,       { 26 }
              system_powerpc_darwin,     { 27 }
              system_powerpc_darwin,     { 27 }
              system_i386_EMX,           { 28 }
              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
        tasm = (as_none
@@ -132,7 +133,6 @@ interface
              ,as_i386_pecoffwdosx
              ,as_i386_pecoffwdosx
              ,as_m68k_mit
              ,as_m68k_mit
              ,as_powerpc_mpw
              ,as_powerpc_mpw
-             ,as_x86_64_as
        );
        );
 
 
        tar = (ar_none
        tar = (ar_none
@@ -347,7 +347,6 @@ implementation
       cutils;
       cutils;
 
 
 
 
-
 {****************************************************************************
 {****************************************************************************
                               Target setting
                               Target setting
 ****************************************************************************}
 ****************************************************************************}
@@ -634,8 +633,8 @@ end;
 
 
 procedure InitSystems;
 procedure InitSystems;
 begin
 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 }
   os, else we pick a default }
 {$ifdef i386}
 {$ifdef i386}
   {$ifdef cpu86}
   {$ifdef cpu86}
@@ -672,9 +671,20 @@ begin
     default_target(system_powerpc_linux);
     default_target(system_powerpc_linux);
   {$endif cpupowerpc}
   {$endif cpupowerpc}
 {$endif powerpc}
 {$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;
 end;
 
 
 
 
@@ -685,7 +695,10 @@ finalization
 end.
 end.
 {
 {
   $Log$
   $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
    * cpuppc -> cpupowerpc. Target compiler was always linux for ppc
 
 
   Revision 1.64  2003/05/28 23:18:31  florian
   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
   Revision 1.38  2002/04/14 16:56:30  carl
   - remove duplicate comment
   - remove duplicate comment
-}
+}

+ 73 - 2
compiler/systems/i_linux.pas

@@ -414,6 +414,70 @@ unit i_linux;
             use_function_relative_addresses : true
             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
   implementation
 
 
 initialization
 initialization
@@ -450,11 +514,18 @@ initialization
     set_source_info(system_powerpc_linux_info);
     set_source_info(system_powerpc_linux_info);
   {$endif linux}
   {$endif linux}
 {$endif CPUPOWERPC}
 {$endif CPUPOWERPC}
-
+{$ifdef CPUARM}
+  {$ifdef linux}
+    set_source_info(system_arm_linux_info);
+  {$endif linux}
+{$endif CPUARM}
 end.
 end.
 {
 {
   $Log$
   $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
     * framepointer fixes for sparc
     * parent framepointer code more generic
     * parent framepointer code more generic
 
 

+ 10 - 1
compiler/systems/t_linux.pas

@@ -545,11 +545,20 @@ initialization
   RegisterExport(system_SPARC_linux,texportliblinux);
   RegisterExport(system_SPARC_linux,texportliblinux);
   RegisterTarget(system_SPARC_linux_info);
   RegisterTarget(system_SPARC_linux_info);
 {$endif SPARC}
 {$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.
 end.
 
 
 {
 {
   $Log$
   $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
     * aktprocdef cleanup, aktprocdef is now always nil when parsing
       a new procdef declaration
       a new procdef declaration
     * aktprocsym removed
     * aktprocsym removed