fpc/rtl/android/arm/dllprt0.as
yury 2ae3ce79bb * ARM: Never use the "BLX label" instruction. Use "BL label" instead.
The linker will always change BL to BLX if necessary, but not vice versa (linker version dependent).
  "BLX label" ALWAYS changes the instruction set. It changes a processor in ARM state to Thumb state,
  or a processor in Thumb state to ARM state.

git-svn-id: trunk@36086 -
2017-05-04 15:55:55 +00:00

99 lines
2.6 KiB
ActionScript

#
# This file is part of the Free Pascal run time library.
# Copyright (c) 2013 by Yury Sidorov and other
# members of the Free Pascal development team.
#
# 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.
#
#**********************************************************************}
#
# Shared library startup code for Free Pascal. Android-ARM target.
#
.file "dllprt0.as"
.text
.globl FPC_SHARED_LIB_START
.type FPC_SHARED_LIB_START,#function
FPC_SHARED_LIB_START:
mov ip, sp
stmfd sp!,{fp, ip, lr, pc}
sub fp, ip, #4
/* Get GOT */
ldr r3,.L_GOT1
.LPIC1:
add r3,pc,r3
/* Save initial stackpointer */
ldr ip,.L__stkptr
ldr ip,[r3, ip]
str sp,[ip]
/* Get environment info from libc */
ldr ip,.Lenviron
ldr ip,[r3, ip]
ldr r0,[ip]
/* Check if environment is NULL */
cmp r0,#0
ldreq r0,.LEmptyEnv
ldreq r0,[r3, r0]
ldr ip,.Loperatingsystem_parameter_envp
ldr ip,[r3, ip]
str r0,[ip]
/* Call main */
bl FPC_LIB_MAIN_ANDROID
/* Call library init */
bl FPC_LIB_INIT_ANDROID
ldmea fp, {fp, sp, pc}
.L_GOT1:
.long _GLOBAL_OFFSET_TABLE_-.LPIC1-8
.L__stkptr:
.word __stkptr(GOT)
.Lenviron:
.word environ(GOT)
.LEmptyEnv:
.word EmptyEnv(GOT)
.Loperatingsystem_parameter_envp:
.word operatingsystem_parameter_envp(GOT)
/* --------------------------------------------------------- */
.globl _haltproc
.type _haltproc,#function
_haltproc:
.globl _haltproc_eabi
.type _haltproc_eabi,#function
_haltproc_eabi:
/* Simply call libc exit(). _haltproc has the same declaration as exit. */
bl exit
/* --------------------------------------------------------- */
.data
.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