* Main program entry point for dynamic executables.
*
* r7 contains the function pointer that needs to be registered for calling at exit.
+ * r3/r4/r5 contain argc/argv/envp
*/
FUNCTION_PROLOG _dynamic_start
LOAD_64BIT_VAL 11, __dl_fini
std 7,0(11)
- LOAD_64BIT_VAL 11, _start
- /* do not bother loading the actual function address of _start. We can directly jump to it */
- /* set up GOT pointer from original start function */
+ LOAD_64BIT_VAL 11, PASCALMAIN
+ /* set up GOT pointer from PASCALMAIN */
ld 2,8(11)
/* and environment pointer */
ld 11,16(11)
- b _start
+ /* store argument count */
+ LOAD_64BIT_VAL 10,operatingsystem_parameter_argc
+ stw 3,0(10)
+ /* store argument address */
+ LOAD_64BIT_VAL 10,operatingsystem_parameter_argv
+ std 4,0(10)
+ /* store environment pointer */
+ LOAD_64BIT_VAL 10,operatingsystem_parameter_envp
+ std 5,0(10)
+
+ LOAD_64BIT_VAL 8,__stkptr
+ std 1,0(8)
+
+ bl PASCALMAIN
+ nop
+
+ /* we should not reach here. Crash horribly */
+ trap
.long 0
.byte 0, 12, 64, 0, 0, 0, 0, 0