summaryrefslogtreecommitdiff
path: root/riscv/trunk/rtl/linux/riscv64/dllprt0.as
diff options
context:
space:
mode:
Diffstat (limited to 'riscv/trunk/rtl/linux/riscv64/dllprt0.as')
-rw-r--r--riscv/trunk/rtl/linux/riscv64/dllprt0.as80
1 files changed, 80 insertions, 0 deletions
diff --git a/riscv/trunk/rtl/linux/riscv64/dllprt0.as b/riscv/trunk/rtl/linux/riscv64/dllprt0.as
new file mode 100644
index 0000000000..a7b7ee585d
--- /dev/null
+++ b/riscv/trunk/rtl/linux/riscv64/dllprt0.as
@@ -0,0 +1,80 @@
+/*
+ * This file is part of the Free Pascal run time library.
+ * Copyright (c) 2011 by Thomas Schatzl,
+ * member of the Free Pascal development team.
+ *
+ * Startup code for shared libraries, ARM version.
+ *
+ * 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.
+ */
+
+.file "dllprt0.as"
+.text
+ .globl _startlib
+ .type _startlib,function
+_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
+
+ /* 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)
+
+ /* save initial stackpointer */
+ lui x15, %hi(__stklen)
+ addi x15,x15,%lo(__stklen)
+ sw x2, (x15)
+
+ /* call main and exit normally */
+ jal x1, PASCALMAIN
+ lw x8, -8(x8)
+ lw x1, -4(x8)
+
+ jalr x0, x1
+
+ .globl _haltproc
+ .type _haltproc,function
+_haltproc:
+ /* reload exitcode */
+ lui x10, %hi(operatingsystem_result)
+ addi x10,x10,%lo(operatingsystem_result)
+ addi x17, x0, 248
+ scall
+ jal x0, _haltproc
+
+.data
+
+ .type operatingsystem_parameters,object
+ .size operatingsystem_parameters,12
+operatingsystem_parameters:
+ .skip 3*4
+ .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
+
+.bss
+
+ .comm __stkptr,4
+