mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-17 01:00:00 +02:00
Added library search paths.
Removed GP and TP from allocatable registers for now. GP should not be overwritten. Ported dllprt0.as Fixed register usage in cprt0.as git-svn-id: branches/laksen/riscv_new@39522 -
This commit is contained in:
parent
76dda5813e
commit
90d5f5e760
@ -71,7 +71,6 @@ implementation
|
||||
[RS_X10,RS_X11,RS_X12,RS_X13,RS_X14,RS_X15,RS_X16,RS_X17,
|
||||
RS_X31,RS_X30,RS_X29,RS_X28,
|
||||
RS_X5,RS_X6,RS_X7,
|
||||
RS_X3,RS_X4,
|
||||
RS_X9,RS_X27,RS_X26,RS_X25,RS_X24,RS_X23,RS_X22,
|
||||
RS_X21,RS_X20,RS_X19,RS_X18],first_int_imreg,[]);
|
||||
rg[R_FPUREGISTER]:=trgcpu.create(R_FPUREGISTER,R_SUBNONE,
|
||||
|
@ -181,6 +181,12 @@ begin
|
||||
{$ifdef sparc64}
|
||||
LibrarySearchPath.AddPath(sysrootpath,'/usr/lib/sparc64-linux-gnu',true);
|
||||
{$endif sparc64}
|
||||
{$ifdef riscv32}
|
||||
LibrarySearchPath.AddPath(sysrootpath,'/usr/lib/riscv32-linux-gnu',true);
|
||||
{$endif riscv32}
|
||||
{$ifdef riscv64}
|
||||
LibrarySearchPath.AddPath(sysrootpath,'/usr/lib/riscv64-linux-gnu',true);
|
||||
{$endif riscv64}
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2018/07/20]
|
||||
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2018-07-20 rev 39474]
|
||||
#
|
||||
default: all
|
||||
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-netbsd m68k-amiga m68k-atari m68k-palmos m68k-macos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-aros x86_64-dragonfly arm-linux arm-netbsd arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android arm-aros powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-darwin wasm-wasm sparc64-linux riscv32-linux riscv32-embedded riscv64-linux riscv64-embedded
|
||||
@ -361,7 +361,7 @@ override LOADERS=
|
||||
SYSINIT_UNITS=si_prc si_c si_g si_dll
|
||||
endif
|
||||
ifeq ($(ARCH),riscv64)
|
||||
override LOADERS=prt0 cprt0
|
||||
override LOADERS=prt0 cprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(ARCH),mipsel)
|
||||
override FPCOPT+=-Ur
|
||||
|
@ -91,7 +91,7 @@ SYSINIT_UNITS=si_prc si_c si_g si_dll
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),riscv64)
|
||||
override LOADERS=prt0 cprt0
|
||||
override LOADERS=prt0 cprt0 dllprt0
|
||||
endif
|
||||
|
||||
# mipsel reuses mips files by including so some file names exist
|
||||
|
@ -26,17 +26,17 @@
|
||||
|
||||
At this entry point, most registers' values are unspecified, except:
|
||||
|
||||
a1 Contains a function pointer to be registered with `atexit'.
|
||||
a0 Contains a function pointer to be registered with `atexit'.
|
||||
This is how the dynamic linker arranges to have DT_FINI
|
||||
functions called for shared libraries that have been loaded
|
||||
before this code runs.
|
||||
|
||||
sp The stack contains the arguments and environment:
|
||||
0(sp) argc
|
||||
4(sp) argv[0]
|
||||
8(sp) argv[0]
|
||||
...
|
||||
(4*argc)(sp) NULL
|
||||
(4*(argc+1))(sp) envp[0]
|
||||
(8*argc)(sp) NULL
|
||||
(8*(argc+1))(sp) envp[0]
|
||||
...
|
||||
NULL
|
||||
*/
|
||||
@ -51,21 +51,23 @@ _start:
|
||||
addi gp, gp, %pcrel_lo(1b)
|
||||
.option pop
|
||||
|
||||
/* Store rtld_fini in a5 */
|
||||
addi a5, a0, 0
|
||||
|
||||
/* Clear the frame pointer since this is the outermost frame. */
|
||||
addi x8, x0, 0
|
||||
ld a2, 0(sp)
|
||||
addi sp, sp, 8
|
||||
|
||||
/* Pop argc off the stack and save a pointer to argv */
|
||||
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)
|
||||
|
||||
addi a4, a2, 1
|
||||
/* Pop argc off the stack, and save argc, argv and envp */
|
||||
ld a1, 0(sp)
|
||||
addi a2, sp, 8
|
||||
addi a4, a1, 1
|
||||
slli a4, a4, 3
|
||||
add a4, sp, a4
|
||||
add a4, a2, a4
|
||||
|
||||
1:auipc x8,%pcrel_hi(operatingsystem_parameter_argc)
|
||||
sd a1,%pcrel_lo(1b)(x8)
|
||||
1:auipc x8,%pcrel_hi(operatingsystem_parameter_argv)
|
||||
sd a2,%pcrel_lo(1b)(x8)
|
||||
1:auipc x8,%pcrel_hi(operatingsystem_parameter_envp)
|
||||
sd a4,%pcrel_lo(1b)(x8)
|
||||
|
||||
@ -75,30 +77,15 @@ _start:
|
||||
|
||||
/* Fetch address of fini */
|
||||
1:auipc x8,%pcrel_hi(__libc_csu_fini)
|
||||
addi a2,x8,%pcrel_lo(1b)
|
||||
addi a4,x8,%pcrel_lo(1b)
|
||||
|
||||
/* argc already loaded to a2*/
|
||||
|
||||
/* load argv */
|
||||
addi a3, sp, 0
|
||||
|
||||
/* Push stack limit */
|
||||
sd a3, -8(sp)
|
||||
addi sp, sp, -8
|
||||
|
||||
/* Push rtld_fini */
|
||||
sd a1, -8(sp)
|
||||
addi sp, sp, -8
|
||||
addi a6, sp, 0
|
||||
|
||||
/* Set up the other arguments in registers */
|
||||
1:auipc x8,%pcrel_hi(PASCALMAIN)
|
||||
addi a1, x8, %pcrel_lo(1b)
|
||||
addi a0, x8, %pcrel_lo(1b)
|
||||
1:auipc x8,%pcrel_hi(__libc_csu_init)
|
||||
addi a4, x8, %pcrel_lo(1b)
|
||||
|
||||
/* Push fini */
|
||||
sd a2, -8(sp)
|
||||
addi sp, sp, -8
|
||||
addi a3, x8, %pcrel_lo(1b)
|
||||
|
||||
/* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end) */
|
||||
|
||||
@ -111,7 +98,7 @@ _start:
|
||||
jalr ra, x8, %pcrel_lo(1b)
|
||||
|
||||
.globl _haltproc
|
||||
.type _haltproc,function
|
||||
.type _haltproc,function
|
||||
_haltproc:
|
||||
1:auipc x8,%pcrel_hi(operatingsystem_result)
|
||||
lbu x1,%pcrel_lo(1b)(x8)
|
||||
@ -128,11 +115,11 @@ __data_start:
|
||||
data_start = __data_start
|
||||
|
||||
.bss
|
||||
.comm __stkptr,4
|
||||
.comm __stkptr,8
|
||||
|
||||
.comm operatingsystem_parameter_envp,4
|
||||
.comm operatingsystem_parameter_argc,4
|
||||
.comm operatingsystem_parameter_argv,4
|
||||
.comm operatingsystem_parameter_envp,8
|
||||
.comm operatingsystem_parameter_argc,8
|
||||
.comm operatingsystem_parameter_argv,8
|
||||
|
||||
.section ".comment"
|
||||
.byte 0
|
||||
|
@ -21,60 +21,56 @@ _startlib:
|
||||
.globl FPC_SHARED_LIB_START
|
||||
.type FPC_SHARED_LIB_START,function
|
||||
FPC_SHARED_LIB_START:
|
||||
sw x1, -4(x2)
|
||||
sw x8, -8(x2)
|
||||
addi x8, x2, 0
|
||||
addi x2, x2, -8
|
||||
addi sp, sp, -16
|
||||
sd ra, 8(sp)
|
||||
sd x8, 0(sp)
|
||||
addi x8, sp, 16
|
||||
|
||||
/* a1 contains argc, a2 contains argv and a3 contains envp */
|
||||
lui x15, %hi(operatingsystem_parameter_argc)
|
||||
addi x15,x15,%lo(operatingsystem_parameter_argc)
|
||||
sw a1, (x15)
|
||||
|
||||
lui x15, %hi(operatingsystem_parameter_argv)
|
||||
addi x15,x15,%lo(operatingsystem_parameter_argv)
|
||||
sw a2, (x15)
|
||||
|
||||
lui x15, %hi(operatingsystem_parameter_envp)
|
||||
addi x15,x15,%lo(operatingsystem_parameter_envp)
|
||||
sw a3, (x15)
|
||||
/* a0 contains argc, a1 contains argv and a2 contains envp */
|
||||
1:auipc x8,%pcrel_hi(operatingsystem_parameter_argc)
|
||||
sd a0,%pcrel_lo(1b)(x8)
|
||||
1:auipc x8,%pcrel_hi(operatingsystem_parameter_argv)
|
||||
sd a1,%pcrel_lo(1b)(x8)
|
||||
1:auipc x8,%pcrel_hi(operatingsystem_parameter_envp)
|
||||
sd a2,%pcrel_lo(1b)(x8)
|
||||
|
||||
/* save initial stackpointer */
|
||||
lui x15, %hi(__stklen)
|
||||
addi x15,x15,%lo(__stklen)
|
||||
sw x2, (x15)
|
||||
1:auipc x8,%pcrel_hi(__stklen)
|
||||
sd sp,%pcrel_lo(1b)(x8)
|
||||
|
||||
/* call main and exit normally */
|
||||
jal x1, PASCALMAIN
|
||||
lw x8, -8(x8)
|
||||
lw x1, -4(x8)
|
||||
1:auipc x8,%pcrel_hi(PASCALMAIN)
|
||||
jalr ra, x8, %pcrel_lo(1b)
|
||||
|
||||
jalr x0, x1
|
||||
ld x8, 0(x8)
|
||||
ld ra, 8(x8)
|
||||
addi sp, sp, 16
|
||||
|
||||
jalr x0, ra
|
||||
|
||||
.globl _haltproc
|
||||
.type _haltproc,function
|
||||
_haltproc:
|
||||
/* reload exitcode */
|
||||
lui x10, %hi(operatingsystem_result)
|
||||
addi x10,x10,%lo(operatingsystem_result)
|
||||
addi x17, x0, 248
|
||||
scall
|
||||
1:auipc x8,%pcrel_hi(operatingsystem_result)
|
||||
lbu x1,%pcrel_lo(1b)(x8)
|
||||
addi x17, x0, 94
|
||||
ecall
|
||||
jal x0, _haltproc
|
||||
|
||||
.data
|
||||
|
||||
.type operatingsystem_parameters,object
|
||||
.size operatingsystem_parameters,12
|
||||
.size operatingsystem_parameters,24
|
||||
operatingsystem_parameters:
|
||||
.skip 3*4
|
||||
.skip 3*8
|
||||
.global operatingsystem_parameter_envp
|
||||
.global operatingsystem_parameter_argc
|
||||
.global operatingsystem_parameter_argv
|
||||
.set operatingsystem_parameter_envp,operatingsystem_parameters+0
|
||||
.set operatingsystem_parameter_argc,operatingsystem_parameters+4
|
||||
.set operatingsystem_parameter_argv,operatingsystem_parameters+8
|
||||
.set operatingsystem_parameter_argc,operatingsystem_parameters+8
|
||||
.set operatingsystem_parameter_argv,operatingsystem_parameters+16
|
||||
|
||||
.bss
|
||||
|
||||
.comm __stkptr,4
|
||||
.comm __stkptr,8
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user