Ver código fonte

Update packages with information about RiscV.
Fix g_external_wrapper, since it uses a register.
Fixed calling of gas.
Ported cprt0.

git-svn-id: branches/laksen/riscv_new@39475 -

Jeppe Johansen 7 anos atrás
pai
commit
6352328f3a

+ 2 - 0
.gitattributes

@@ -10315,6 +10315,7 @@ rtl/qnx/qnx.inc svneol=native#text/plain
 rtl/qnx/rtldefs.inc svneol=native#text/plain
 rtl/qnx/signal.inc svneol=native#text/plain
 rtl/qnx/system.pp svneol=native#text/plain
+rtl/riscv32/cpuh.inc svneol=native#text/plain
 rtl/riscv32/int64p.inc svneol=native#text/plain
 rtl/riscv32/makefile.cpu svneol=native#text/plain
 rtl/riscv32/math.inc svneol=native#text/plain
@@ -10324,6 +10325,7 @@ rtl/riscv32/setjump.inc svneol=native#text/plain
 rtl/riscv32/setjumph.inc svneol=native#text/plain
 rtl/riscv32/strings.inc svneol=native#text/plain
 rtl/riscv32/stringss.inc svneol=native#text/plain
+rtl/riscv64/cpuh.inc svneol=native#text/plain
 rtl/riscv64/int64p.inc svneol=native#text/plain
 rtl/riscv64/makefile.cpu svneol=native#text/plain
 rtl/riscv64/math.inc svneol=native#text/plain

+ 6 - 0
Makefile.fpc

@@ -85,6 +85,12 @@ endif
 ifeq ($(CPU_TARGET),aarch64)
 PPSUF=a64
 endif
+ifeq ($(CPU_TARGET),riscv32)
+PPSUF=rv32
+endif
+ifeq ($(CPU_TARGET),riscv64)
+PPSUF=rv64
+endif
 
 # cross compilers uses full cpu_target, not just ppc-suffix
 # (except if the target cannot run a native compiler)

+ 25 - 3
compiler/Makefile.fpc

@@ -32,7 +32,7 @@ fpcdir=..
 unexport FPC_VERSION FPC_COMPILERINFO
 
 # Which platforms are ready for inclusion in the cycle
-CYCLETARGETS=i386 powerpc sparc arm x86_64 powerpc64 m68k armeb mipsel mips avr jvm i8086 aarch64 sparc64
+CYCLETARGETS=i386 powerpc sparc arm x86_64 powerpc64 m68k armeb mipsel mips avr jvm i8086 aarch64 sparc64 riscv32 riscv64
 
 # All supported targets used for clean
 ALLTARGETS=$(CYCLETARGETS)
@@ -83,6 +83,12 @@ endif
 ifdef AARCH64
 PPC_TARGET=aarch64
 endif
+ifdef RISCV32
+PPC_TARGET=riscv32
+endif
+ifdef RISCV64
+PPC_TARGET=riscv64
+endif
 
 # Default is to generate a compiler for the same
 # platform as CPU_TARGET (a native compiler)
@@ -213,6 +219,12 @@ endif
 ifeq ($(CPC_TARGET),aarch64)
 CPUSUF=a64
 endif
+ifeq ($(CPC_TARGET),riscv32)
+CPUSUF=rv32
+endif
+ifeq ($(CPC_TARGET),riscv64)
+CPUSUF=rv64
+endif
 
 # Do not define the default -d$(CPU_TARGET) because that
 # will conflict with our -d$(CPC_TARGET)
@@ -315,6 +327,16 @@ ifeq ($(PPC_TARGET),i8086)
 override LOCALOPT+=-Fux86
 endif
 
+# RiscV32 specific
+ifeq ($(PPC_TARGET),riscv32)
+override LOCALOPT+=-Furiscv
+endif
+
+# RiscV64 specific
+ifeq ($(PPC_TARGET),riscv64)
+override LOCALOPT+=-Furiscv
+endif
+
 OPTWPOCOLLECT=-OWdevirtcalls,optvmts -FW$(BASEDIR)/pp1.wpo
 OPTWPOPERFORM=-Owdevirtcalls,optvmts -Fw$(BASEDIR)/pp1.wpo
 # symbol liveness WPO requires nm, smart linking and no stripping (the latter
@@ -432,7 +454,7 @@ endif
 # CPU targets
 #####################################################################
 
-PPC_TARGETS=i386 m68k powerpc sparc arm armeb x86_64 powerpc64 mips mipsel avr jvm i8086 aarch64 sparc64
+PPC_TARGETS=i386 m68k powerpc sparc arm armeb x86_64 powerpc64 mips mipsel avr jvm i8086 aarch64 sparc64 riscv32 riscv64
 INSTALL_TARGETS=$(addsuffix _exe_install,$(sort $(CYCLETARGETS) $(PPC_TARGETS)))
 SYMLINKINSTALL_TARGETS=$(addsuffix _symlink_install,$(sort $(CYCLETARGETS) $(PPC_TARGETS)))
 
@@ -802,7 +824,7 @@ ifeq ($(OS_SOURCE),win64)
   EXCLUDE_80BIT_TARGETS=1
 endif
 
-ifneq ($(findstring $(CPU_SOURCE),aarch64 arm avr jvm m68k mips mipsel powerpc powerpc64 sparc sparc64),)
+ifneq ($(findstring $(CPU_SOURCE),aarch64 arm avr jvm m68k mips mipsel powerpc powerpc64 sparc sparc64 riscv32 riscv64),)
   EXCLUDE_80BIT_TARGETS=1
 endif
 

+ 2 - 6
compiler/riscv/agrvgas.pas

@@ -212,11 +212,7 @@ unit agrvgas;
     function TRVGNUAssembler.MakeCmdLine: TCmdStr;
       begin
         result := inherited MakeCmdLine;
-{$ifdef cpu64bitaddr}
-        Replace(result,'$ARCH','-m64')
-{$else cpu64bitaddr}
-        Replace(result,'$ARCH','-m32');
-{$endif cpu64bitaddr}
+        Replace(result,'$ARCH',lower(cputypestr[current_settings.cputype]));
       end;
 
 
@@ -227,7 +223,7 @@ unit agrvgas;
 
          idtxt  : 'AS';
          asmbin : 'as';
-         asmcmd : '-o $OBJ $EXTRAOPT $ARCH $ASM';
+         asmcmd : '-o $OBJ $EXTRAOPT -march=$ARCH $ASM';
          supported_targets : [system_riscv32_linux,system_riscv64_linux];
          flags : [af_needar,af_smartlink_sections];
          labelprefix : '.L';

+ 43 - 0
compiler/riscv/hlcgrv.pas

@@ -34,11 +34,15 @@ uses
   cgbase,cgutils,hlcgobj,hlcg2ll, parabase;
 
 type
+
+  { thlcgriscv }
+
   thlcgriscv = class(thlcg2ll)
    protected
     procedure a_load_subsetref_regs_noindex(list: TAsmList; subsetsize: tdef; loadbitsize: byte; const sref: tsubsetreference; valuereg, extra_value_reg: tregister); override;
    public
     procedure g_intf_wrapper(list: TAsmList; procdef: tprocdef; const labelname: string; ioffset: longint);override;
+    procedure g_external_wrapper(list: TAsmList; procdef: tprocdef; const wrappername, externalname: string; global: boolean); override;
   end;
 
 implementation
@@ -213,5 +217,44 @@ implementation
       list.concat(Tai_symbol_end.Createname(labelname));
     end;
 
+  procedure thlcgriscv.g_external_wrapper(list: TAsmList; procdef: tprocdef; const wrappername, externalname: string; global: boolean);
+    var
+      sym: tasmsymbol;   
+      ai: taicpu;
+      href: treference;
+      tmpreg: TRegister;
+      l: TAsmLabel;
+    begin
+      maybe_new_object_file(list);
+      new_section(list,sec_code,wrappername,target_info.alignment.procalign);
+      if global then
+        begin
+          sym:=current_asmdata.DefineAsmSymbol(wrappername,AB_GLOBAL,AT_FUNCTION,procdef);
+          list.concat(Tai_symbol.Create_global(sym,0));
+        end
+      else
+        begin
+          sym:=current_asmdata.DefineAsmSymbol(wrappername,AB_LOCAL,AT_FUNCTION,procdef);
+          list.concat(Tai_symbol.Create(sym,0));
+        end;
+
+      reference_reset_symbol(href,current_asmdata.RefAsmSymbol(externalname,AT_FUNCTION),0,0,[]);
+
+      tmpreg:=NR_X5;
+
+      current_asmdata.getjumplabel(l);
+      a_label(list,l);
+
+      href.refaddr:=addr_pcrel_hi20;
+      list.concat(taicpu.op_reg_ref(A_AUIPC,tmpreg,href));
+      reference_reset_symbol(href,l,0,0,[]);
+      href.refaddr:=addr_pcrel_lo12;
+      ai:=taicpu.op_reg_reg_ref(A_JALR,NR_X0,tmpreg,href);
+      ai.is_jmp:=true;
+      list.concat(ai);
+
+      list.concat(Tai_symbol_end.Create(sym));
+    end;
+
 end.
 

+ 3 - 0
compiler/riscv32/cpunode.pas

@@ -31,6 +31,9 @@ unit cpunode;
        { generic nodes }
        ncgbas,ncgld,ncgflw,ncgcnv,ncgmem,ncgcon,ncgcal,ncgset,ncginl,ncgopt,
        ncgobjc,
+       { symtable }
+       symcpu,
+       aasmdef,
        { to be able to only parts of the generic code,
          the processor specific nodes must be included
          after the generic one (FK)

+ 2 - 1
compiler/riscv64/cpunode.pas

@@ -32,7 +32,8 @@ uses
   ncgbas, ncgld, ncgflw, ncgcnv, ncgmem, ncgcon, ncgcal, ncgset, ncginl, ncgopt,
   ncgobjc,
   { symtable }
-  symcpu,
+  symcpu,           
+  aasmdef,
   { to be able to only parts of the generic code,
     the processor specific nodes must be included
     after the generic one (FK)

+ 43 - 41
packages/fpmkunit/src/fpmkunit.pp

@@ -110,7 +110,7 @@ Type
   // Please keep this order, see OSCPUSupported below
   TCpu=(cpuNone,
     i386,m68k,powerpc,sparc,x86_64,arm,powerpc64,avr,armeb,
-    mips,mipsel,jvm,i8086,aarch64,sparc64
+    mips,mipsel,jvm,i8086,aarch64,sparc64,riscv32,riscv64
   );
   TCPUS = Set of TCPU;
 
@@ -185,46 +185,46 @@ Const
 
   { This table is kept OS,Cpu because it is easier to maintain (PFV) }
   OSCPUSupported : array[TOS,TCpu] of boolean = (
-    { os          none   i386    m68k  ppc    sparc  x86_64 arm    ppc64  avr    armeb  mips   mipsel jvm    i8086 aarch64 sparc64}
-    { none }    ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false),
-    { linux }   ( false, true,  true,  true,  true,  true,  true,  true,  false, true , true , true , false, false, true , true ),
-    { go32v2 }  ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false),
-    { win32 }   ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false),
-    { os2 }     ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false),
-    { freebsd } ( false, true,  true,  false, false, true,  false, false, false, false, false, false, false, false, false, false),
-    { beos }    ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false),
-    { netbsd }  ( false, true,  true,  true,  true,  true,  true,  false, false, false, false, false, false, false, false, false),
-    { amiga }   ( false, false, true,  true,  false, false, false, false, false, false, false, false, false, false, false, false),
-    { atari }   ( false, false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false),
-    { solaris } ( false, true,  false, false, true,  true,  false, false, false, false, false, false, false, false, false, false),
-    { qnx }     ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false),
-    { netware } ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false),
-    { openbsd } ( false, true,  true,  false, false, true,  false, false, false, false, false, false, false, false, false, false),
-    { wdosx }   ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false),
-    { palmos }  ( false, false, true,  false, false, false, true,  false, false, false, false, false, false, false, false, false),
-    { macos }   ( false, false, false, true,  false, false, false, false, false, false, false, false, false, false, false, false),
-    { darwin }  ( false, true,  false, true,  false, true,  true,  true,  false, false, false, false, false, false, true , false),
-    { emx }     ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false),
-    { watcom }  ( false, true,  false, false, false ,false, false, false, false, false, false, false, false, false, false, false),
-    { morphos } ( false, false, false, true,  false ,false, false, false, false, false, false, false, false, false, false, false),
-    { netwlibc }( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false),
-    { win64   } ( false, false, false, false, false, true,  false, false, false, false, false, false, false, false, false, false),
-    { wince    }( false, true,  false, false, false, false, true,  false, false, false, false, false, false, false, false, false),
-    { gba    }  ( false, false, false, false, false, false, true,  false, false, false, false, false, false, false, false, false),
-    { nds    }  ( false, false, false, false, false, false, true,  false, false, false, false, false, false, false, false, false),
-    { embedded }( false, true,  true,  true,  true,  true,  true,  true,  true,  true , false, false, false, true , false, false),
-    { symbian } ( false, true,  false, false, false, false, true,  false, false, false, false, false, false, false, false, false),
-    { haiku }   ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false),
-    { iphonesim}( false, true,  false, false, false, true,  false, false, false, false, false, false, false, false, false, false),
-    { aix    }  ( false, false, false, true,  false, false, false, true,  false, false, false, false, false, false, false, false),
-    { java }    ( false, false, false, false, false, false, false, false, false, false, false, false, true , false, false, false),
-    { android } ( false, true,  false, false, false, false, true,  false, false, false, false, true,  true , false, false, false),
-    { nativent }( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false),
-    { msdos }   ( false, false, false, false, false, false, false, false, false, false, false, false, false, true , false, false),
-    { wii }     ( false, false, false, true , false, false, false, false, false, false, false, false, false, false, false, false),
-    { aros }    ( true,  false, false, false, false, false, true,  false, false, false, false, false, false, false, false, false),
-    { dragonfly}( false, false, false, false, false, true,  false, false, false, false, false, false, false, false, false, false),
-    { win16 }   ( false, false, false, false, false, false, false, false, false, false, false, false, false, true , false, false)
+    { os          none   i386    m68k  ppc    sparc  x86_64 arm    ppc64  avr    armeb  mips   mipsel jvm    i8086 aarch64 sparc64 riscv32 riscv64}
+    { none }    ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { linux }   ( false, true,  true,  true,  true,  true,  true,  true,  false, true , true , true , false, false, true , true ,  true ,  true ),
+    { go32v2 }  ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { win32 }   ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { os2 }     ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { freebsd } ( false, true,  true,  false, false, true,  false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { beos }    ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { netbsd }  ( false, true,  true,  true,  true,  true,  true,  false, false, false, false, false, false, false, false, false,  false,  false),
+    { amiga }   ( false, false, true,  true,  false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { atari }   ( false, false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { solaris } ( false, true,  false, false, true,  true,  false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { qnx }     ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { netware } ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { openbsd } ( false, true,  true,  false, false, true,  false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { wdosx }   ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { palmos }  ( false, false, true,  false, false, false, true,  false, false, false, false, false, false, false, false, false,  false,  false),
+    { macos }   ( false, false, false, true,  false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { darwin }  ( false, true,  false, true,  false, true,  true,  true,  false, false, false, false, false, false, true , false,  false,  false),
+    { emx }     ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { watcom }  ( false, true,  false, false, false ,false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { morphos } ( false, false, false, true,  false ,false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { netwlibc }( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { win64   } ( false, false, false, false, false, true,  false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { wince    }( false, true,  false, false, false, false, true,  false, false, false, false, false, false, false, false, false,  false,  false),
+    { gba    }  ( false, false, false, false, false, false, true,  false, false, false, false, false, false, false, false, false,  false,  false),
+    { nds    }  ( false, false, false, false, false, false, true,  false, false, false, false, false, false, false, false, false,  false,  false),
+    { embedded }( false, true,  true,  true,  true,  true,  true,  true,  true,  true , false, false, false, true , false, false,  true ,  true ),
+    { symbian } ( false, true,  false, false, false, false, true,  false, false, false, false, false, false, false, false, false,  false,  false),
+    { haiku }   ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { iphonesim}( false, true,  false, false, false, true,  false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { aix    }  ( false, false, false, true,  false, false, false, true,  false, false, false, false, false, false, false, false,  false,  false),
+    { java }    ( false, false, false, false, false, false, false, false, false, false, false, false, true , false, false, false,  false,  false),
+    { android } ( false, true,  false, false, false, false, true,  false, false, false, false, true,  true , false, false, false,  false,  false),
+    { nativent }( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { msdos }   ( false, false, false, false, false, false, false, false, false, false, false, false, false, true , false, false,  false,  false),
+    { wii }     ( false, false, false, true , false, false, false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { aros }    ( true,  false, false, false, false, false, true,  false, false, false, false, false, false, false, false, false,  false,  false),
+    { dragonfly}( false, false, false, false, false, true,  false, false, false, false, false, false, false, false, false, false,  false,  false),
+    { win16 }   ( false, false, false, false, false, false, false, false, false, false, false, false, false, true , false, false,  false,  false)
   );
 
   // Useful
@@ -2784,6 +2784,8 @@ begin
       powerpc:  result := GetGccDirArch('cpupowerpc','-m32');
       powerpc64:result := GetGccDirArch('cpupowerpc64','-m64');
       aarch64:  result := GetGccDirArch('cpuaarch64','');
+      riscv32:  result := GetGccDirArch('cpuriscv64','-march=rv32imafdc');
+      riscv64:  result := GetGccDirArch('cpuriscv64','-march=rv64imafdc');
     end {case}
   else if OS = darwin then
     case CPU of

Diferenças do arquivo suprimidas por serem muito extensas
+ 464 - 393
packages/fppkg/src/fpmkunitsrc.inc


+ 11 - 0
rtl/linux/Makefile.fpc

@@ -90,6 +90,10 @@ override LOADERS=
 SYSINIT_UNITS=si_prc si_c si_g si_dll
 endif
 
+ifeq ($(ARCH),riscv64)
+override LOADERS=prt0 cprt0
+endif
+
 # mipsel reuses mips files by including so some file names exist
 # twice, this causes the compiler to find sometimes wrong files and it tries
 # to recompile rtl units. To prevent this, compile always as release PPUs, this
@@ -196,6 +200,13 @@ ifeq ($(ARCH),sparc64)
   ASSHAREDOPT=-KPIC
 endif
 
+ifeq ($(ARCH),riscv32)
+  ASTARGET=-march=rv32imafdc
+endif
+ifeq ($(ARCH),riscv64)
+  ASTARGET=-march=rv64imafdc
+endif
+
 ifeq ($(ARCH),arm)
   ifeq ($(SUBARCH),armv6m)
     ASTARGET+=-mthumb --def __thumb__=1

+ 1 - 1
rtl/linux/ostypes.inc

@@ -296,7 +296,7 @@ CONST
     clone_flags_fork = $01200011;
       { SIGCHLD | CLONE_CHILD_CLEARTID | CLONE_CHILD_SETTID }
 
-{$if defined(cpuarm) or defined(cpualpha) or defined(cpublackfin) or defined(cpum68k) or defined(aarch64)}
+{$if defined(cpuarm) or defined(cpualpha) or defined(cpublackfin) or defined(cpum68k) or defined(aarch64) or defined(riscv32) or defined(riscv64)}
     O_LARGEFILE =   $20000;
 {$endif}
 {$if defined(cpusparc) or defined(cpusparc64)}

+ 42 - 26
rtl/linux/riscv64/cprt0.as

@@ -45,63 +45,79 @@
         .globl _start
         .type _start,function
 _start:
+        .option push
+        .option norelax
+1:auipc gp, %pcrel_hi(__global_pointer$)
+        addi  gp, gp, %pcrel_lo(1b)
+        .option pop
+        
         /* Clear the frame pointer since this is the outermost frame.  */
-        mov fp, #0
-        ldmia   sp!, {a2}
+        addi fp, x0, 0
+        ld   a2, 0(sp)
+        addi sp, sp, 8
 
         /* Pop argc off the stack and save a pointer to argv */
-        ldr ip,=operatingsystem_parameter_argc
-        ldr a3,=operatingsystem_parameter_argv
-        str a2,[ip]
+1:auipc	x8,%pcrel_hi(operatingsystem_parameter_argc)
+	sd	a2,%pcrel_lo(1b)(x8)
+1:auipc	x8,%pcrel_hi(operatingsystem_parameter_argv)
+	sd	sp,%pcrel_lo(1b)(x8)
 
-        /* calc envp */
-        add a4,a2,#1
-        add a4,sp,a4,LSL #2
-        ldr ip,=operatingsystem_parameter_envp
+        addi a4, a2, 1
+        slli a4, a4, 3
+        add  a4, sp, a4
 
-        str sp,[a3]
-        str a4,[ip]
+1:auipc	x8,%pcrel_hi(operatingsystem_parameter_envp)
+	sd	a4,%pcrel_lo(1b)(x8)
 
         /* Save initial stackpointer */
-        ldr ip,=__stkptr
-        str sp,[ip]
+1:auipc	x8,%pcrel_hi(__stkptr)
+	sd	sp,%pcrel_lo(1b)(x8)
 
         /* Fetch address of fini */
-        ldr ip, =_fini
+1:auipc	x8,%pcrel_hi(_fini)
+	addi	a2,x8,%pcrel_lo(1b)
 
         /* argc already loaded to a2*/
 
         /* load argv */
-        mov a3, sp
+        addi a3, sp, 0
 
         /* Push stack limit */
-        str a3, [sp, #-4]!
+        sd   a3, -8(sp)
+        addi sp, sp, -8
 
         /* Push rtld_fini */
-        str a1, [sp, #-4]!
+        sd   a1, -8(sp)
+        addi sp, sp, -8
 
         /* Set up the other arguments in registers */
-        ldr a1, =PASCALMAIN
-        ldr a4, =_init
+1:auipc	x8,%pcrel_hi(PASCALMAIN)
+	addi a1, x8, %pcrel_lo(1b)
+1:auipc	x8,%pcrel_hi(_init)
+	addi a4, x8, %pcrel_lo(1b)
 
         /* Push fini */
-        str ip, [sp, #-4]!
+        sd   a2, -8(sp)
+        addi sp, sp, -8
 
         /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end) */
 
         /* Let the libc call main and exit with its return code.  */
-        bl __libc_start_main
+1:auipc	x8,%pcrel_hi(__libc_start_main)
+        jalr ra, x8, %pcrel_lo(1b)
 
         /* should never get here....*/
-        bl abort
+1:auipc	x8,%pcrel_hi(abort)
+        jalr ra, x8, %pcrel_lo(1b)
 
         .globl  _haltproc
     .type   _haltproc,function
 _haltproc:
-        ldr r0,=operatingsystem_result
-        ldrb r0,[r0]
-        swi 0x900001
-        b _haltproc
+1:auipc	x8,%pcrel_hi(operatingsystem_result)
+	lbu	x1,%pcrel_lo(1b)(x8)
+	addi	x17, x0, 94
+	ecall
+        jal x0, _haltproc
 
         /* Define a symbol for the first piece of initialized data.  */
         .data

+ 3 - 3
rtl/linux/riscv64/prt0.as

@@ -20,14 +20,14 @@ _dynamic_start:
 	.type	_start, function
 _start:
 1:
-  auipc gp, %pcrel_hi(__bss_start+0x800)
-  addi  gp, gp, %pcrel_lo(1b)
+	auipc gp, %pcrel_hi(__bss_start+0x800)
+	addi  gp, gp, %pcrel_lo(1b)
   
 	/* Get argc, argv, envp */
 	ld		x5,(x2)
 	addi	x6,x2,8
 	addi	x7,x5,1
-	slli  x7,x7,3
+	slli    x7,x7,3
 	add 	x7,x6,x7
 
 	/* Save argc, argv, envp, and initial stack pointer */

+ 15 - 0
rtl/riscv32/cpuh.inc

@@ -0,0 +1,15 @@
+{
+
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2016 by the Free Pascal development team.
+
+    CPU specific system unit header file
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}

+ 15 - 0
rtl/riscv64/cpuh.inc

@@ -0,0 +1,15 @@
+{
+
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2016 by the Free Pascal development team.
+
+    CPU specific system unit header file
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}

+ 1 - 1
utils/fpcm/revision.inc

@@ -1 +1 @@
-'2018-04-29 rev 38866'
+'2018-07-20 rev 39474'

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff