1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*
- Library startup code for Android/MIPS
- by Vsevolod Alekseyev
- */
- .set noat
- .section ".text"
- .align 4
- .global FPC_SHARED_LIB_START
- FPC_SHARED_LIB_START:
- .ent FPC_SHARED_LIB_START
- .frame $sp, 32, $ra
- .set noreorder
- .cpload $t9
- /*
- Stack structure:
- sp+16 - gp
- sp+20 - sp
- sp+24 - ra
- */
- /* Save old sp, align the stack, set up the frame, save regs */
- move $t0, $sp
- li $t1, -8
- and $sp, $sp, $t1
- subu $sp, $sp, 32
- .cprestore 16
- sw $t0, 20($sp)
- sw $ra, 24($sp)
- /* Save initial stack pointer, return address */
- la $t0, __stkptr
- sw $sp, ($t0)
- /* Get environment from libc */
- la $t0, environ
- lw $t0, ($t0)
- bne $t0, $zero, GotEnv
- nop
- la $t0, EmptyEnv
- GotEnv:
- la $t1, operatingsystem_parameter_envp
- sw $t0, ($t1)
- /* Call main */
- jal FPC_LIB_MAIN_ANDROID
- nop
- /* Call library init */
- jal FPC_LIB_INIT_ANDROID
- nop
- /* restore registers, exit */
- lw $ra, 24($sp)
- jr $ra
- lw $sp, 20($sp)
- .end FPC_SHARED_LIB_START
- .size FPC_SHARED_LIB_START, .-FPC_SHARED_LIB_START
- /*************************/
- .global _haltproc
- _haltproc:
- .ent _haltproc
- .set noreorder
- .cpload $t9
- la $t9, exit
- jr $t9
- nop
- .end _haltproc
- .size _haltproc, .-_haltproc
- /*************************/
- .comm __stkptr,4
- .comm operatingsystem_parameter_envp,4
- operatingsystem_parameter_argc:
- .global operatingsystem_parameter_argc
- .long 1
- operatingsystem_parameter_argv:
- .global operatingsystem_parameter_argv
- .long EmptyCmdLine
- EmptyCmdLine:
- .long EmptyCmdStr
- EmptyCmdStr:
- .ascii "\0"
- EmptyEnv:
- .long 0
- .long 0
- .long 0
- /* --------------------------------------------------------- */
- .section .init_array, "aw"
- .long FPC_SHARED_LIB_START
|