mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 12:49:33 +02:00
* Shared library dllrpt0.as init code for i386 and x86_64 CPUs
git-svn-id: trunk@19276 -
This commit is contained in:
parent
d5b8210359
commit
33604a6a49
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -7079,6 +7079,7 @@ rtl/freebsd/errnostr.inc svneol=native#text/plain
|
||||
rtl/freebsd/freebsd.pas -text svneol=unset#text/plain
|
||||
rtl/freebsd/i386/bsyscall.inc svneol=native#text/plain
|
||||
rtl/freebsd/i386/cprt0.as svneol=native#text/plain
|
||||
rtl/freebsd/i386/dllprt0.as svneol=native#text/plain
|
||||
rtl/freebsd/i386/gprt0.as svneol=native#text/plain
|
||||
rtl/freebsd/i386/identpatch.sh svneol=native#text/plain
|
||||
rtl/freebsd/i386/prt0.as svneol=native#text/plain
|
||||
@ -7106,6 +7107,7 @@ rtl/freebsd/unxsockh.inc svneol=native#text/plain
|
||||
rtl/freebsd/unxsysc.inc svneol=native#text/plain
|
||||
rtl/freebsd/x86_64/bsyscall.inc svneol=native#text/plain
|
||||
rtl/freebsd/x86_64/cprt0.as svneol=native#text/plain
|
||||
rtl/freebsd/x86_64/dllprt0.as svneol=native#text/plain
|
||||
rtl/freebsd/x86_64/gprt0.as svneol=native#text/plain
|
||||
rtl/freebsd/x86_64/prt0.as svneol=native#text/plain
|
||||
rtl/freebsd/x86_64/si_c.inc svneol=native#text/plain
|
||||
|
@ -708,193 +708,193 @@ ifeq ($(FULL_TARGET),mipsel-linux)
|
||||
override TARGET_IMPLICITUNITS+=exeinfo
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-linux)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-go32v2)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-win32)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-os2)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-freebsd)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-beos)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-haiku)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-netbsd)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-solaris)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-qnx)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-netware)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-openbsd)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-wdosx)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-darwin)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-emx)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-watcom)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-netwlibc)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-wince)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-embedded)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-symbian)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-nativent)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-iphonesim)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-linux)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-freebsd)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-netbsd)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-amiga)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-atari)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-openbsd)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-palmos)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-embedded)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-linux)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-netbsd)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-amiga)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-macos)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-darwin)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-morphos)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-embedded)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-wii)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),sparc-linux)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),sparc-netbsd)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),sparc-solaris)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),sparc-embedded)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-linux)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-freebsd)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-solaris)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-darwin)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-win64)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-embedded)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-linux)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-palmos)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-darwin)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-wince)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-gba)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-nds)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-embedded)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-symbian)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc64-linux)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc64-darwin)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),avr-embedded)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),armeb-linux)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),armeb-embedded)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),mipsel-linux)
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0
|
||||
override TARGET_LOADERS+=prt0 cprt0 gprt0 dllprt0
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-linux)
|
||||
override TARGET_RSTS+=math varutils typinfo classes variants dateutils sysconst
|
||||
@ -2185,7 +2185,7 @@ override FPCOPT+=-Aas
|
||||
endif
|
||||
endif
|
||||
ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
|
||||
ifneq ($(findstring $(OS_TARGET),linux solaris),)
|
||||
ifneq ($(findstring $(OS_TARGET),freebsd openbsd netbsd linux solaris),)
|
||||
ifeq ($(CPU_TARGET),x86_64)
|
||||
override FPCOPT+=-Cg
|
||||
endif
|
||||
@ -2627,6 +2627,8 @@ cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as
|
||||
$(AS) -o $(UNITTARGETDIRPREFIX)cprt0$(OEXT) $(CPU_TARGET)/cprt0.as
|
||||
gprt0$(OEXT) : $(CPU_TARGET)/gprt0.as
|
||||
$(AS) -o $(UNITTARGETDIRPREFIX)gprt0$(OEXT) $(CPU_TARGET)/gprt0.as
|
||||
dllprt0$(OEXT) : $(CPU_TARGET)/dllprt0.as
|
||||
$(AS) -o $(UNITTARGETDIRPREFIX)dllprt0$(OEXT) $(CPU_TARGET)/dllprt0.as
|
||||
$(SYSTEMUNIT)$(PPUEXT) : $(BSDINC)/$(SYSTEMUNIT).pp unxconst.inc $(SYSDEPS)
|
||||
$(COMPILER) -Us -Sg $(BSDINC)/$(SYSTEMUNIT).pp
|
||||
objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT)
|
||||
|
@ -9,7 +9,7 @@ main=rtl
|
||||
fpcpackage=y
|
||||
|
||||
[target]
|
||||
loaders=prt0 cprt0 gprt0
|
||||
loaders=prt0 cprt0 gprt0 dllprt0
|
||||
units=$(SYSTEMUNIT) unixtype ctypes objpas macpas iso7185 \
|
||||
strings syscall sysctl baseunix unixutil character \
|
||||
unix rtlconsts initc cmem matrix \
|
||||
@ -120,6 +120,9 @@ cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as
|
||||
gprt0$(OEXT) : $(CPU_TARGET)/gprt0.as
|
||||
$(AS) -o $(UNITTARGETDIRPREFIX)gprt0$(OEXT) $(CPU_TARGET)/gprt0.as
|
||||
|
||||
dllprt0$(OEXT) : $(CPU_TARGET)/dllprt0.as
|
||||
$(AS) -o $(UNITTARGETDIRPREFIX)dllprt0$(OEXT) $(CPU_TARGET)/dllprt0.as
|
||||
|
||||
#
|
||||
# System Units (System, Objpas, Strings)
|
||||
#
|
||||
|
111
rtl/freebsd/i386/dllprt0.as
Normal file
111
rtl/freebsd/i386/dllprt0.as
Normal file
@ -0,0 +1,111 @@
|
||||
#
|
||||
# This file is part of the Free Pascal run time library.
|
||||
# Copyright (c) 1999-2000 by Marco van de Voort, Michael Van Canneyt
|
||||
# and Peter Vreman
|
||||
# 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.
|
||||
#
|
||||
#**********************************************************************}
|
||||
#
|
||||
# FreeBSD standard (shared) ELF startup code for Free Pascal
|
||||
#
|
||||
# FreeBSD RunTime dynamic loader only
|
||||
# calls the functions specified by -init
|
||||
# as functions without parameters
|
||||
# Thus, it is not possible to retrieve argc, argv and envp
|
||||
# for libraries.
|
||||
# On x86_64 CPU, using weak for the operatingsystem_parameter_XXX
|
||||
# allows to bind to main program parameters,
|
||||
# but this does not seem to work for i386 loader.
|
||||
|
||||
.file "dllprt0.as"
|
||||
.version "01.01"
|
||||
gcc2_compiled.:
|
||||
.section .rodata
|
||||
.LC0:
|
||||
.ascii "\0"
|
||||
.data
|
||||
.p2align 2
|
||||
.globl __progname
|
||||
.type __progname,@object
|
||||
.size __progname,4
|
||||
__progname:
|
||||
.long .LC0
|
||||
.align 4
|
||||
.type __fpucw,@object
|
||||
.size __fpucw,4
|
||||
.global __fpucw
|
||||
___fpucw:
|
||||
.long 0x1332
|
||||
|
||||
.globl ___fpc_brk_addr /* heap management */
|
||||
.type ___fpc_brk_addr,@object
|
||||
.size ___fpc_brk_addr,4
|
||||
|
||||
.text
|
||||
.p2align 2,,3
|
||||
.globl FPC_LIB_START
|
||||
.type FPC_LIB_START,@function
|
||||
FPC_LIB_START:
|
||||
.globl FPC_SHARED_LIB_START
|
||||
.type FPC_SHARED_LIB_START,@function
|
||||
FPC_SHARED_LIB_START:
|
||||
movb $1,operatingsystem_islibrary
|
||||
|
||||
finit /* initialize fpu */
|
||||
fwait
|
||||
fldcw ___fpucw
|
||||
|
||||
/* xorl %ebp,%ebp */
|
||||
|
||||
call PASCALMAIN@PLT
|
||||
ret
|
||||
|
||||
pushl %eax
|
||||
jmp _haltproc
|
||||
|
||||
.p2align 2,0x90
|
||||
.globl _haltproc
|
||||
.type _haltproc,@function
|
||||
|
||||
_haltproc:
|
||||
.globl FPC_SHARED_LIB_EXIT
|
||||
.type FPC_SHARED_LIB_EXIT,@function
|
||||
FPC_SHARED_LIB_EXIT:
|
||||
call FPC_LIB_EXIT@PLT
|
||||
mov $1,%eax
|
||||
movzwl operatingsystem_result,%ebx
|
||||
pushl %ebx
|
||||
call _actualsyscall
|
||||
addl $4,%esp
|
||||
jmp _haltproc
|
||||
|
||||
_actualsyscall:
|
||||
int $0x80
|
||||
jb .LErrorcode
|
||||
xor %ebx,%ebx
|
||||
ret
|
||||
.LErrorcode:
|
||||
mov %eax,%ebx
|
||||
mov $-1,%eax
|
||||
ret
|
||||
.comm environ,4,4
|
||||
.weak _DYNAMIC
|
||||
.ident "GCC: (GNU) 2.7.2.1"
|
||||
|
||||
|
||||
__stkptr:
|
||||
.skip 4
|
||||
|
||||
.comm operatingsystem_parameter_envp,4
|
||||
.comm operatingsystem_parameter_argc,4
|
||||
.comm operatingsystem_parameter_argv,4
|
||||
|
||||
//.section .threadvar,"aw",@nobits
|
||||
.comm ___fpc_threadvar_offset,4
|
78
rtl/freebsd/x86_64/dllprt0.as
Normal file
78
rtl/freebsd/x86_64/dllprt0.as
Normal file
@ -0,0 +1,78 @@
|
||||
#
|
||||
# This file is part of the Free Pascal run time library.
|
||||
# Copyright (c) 1999-2000 by Marco van de Voort, Michael Van Canneyt
|
||||
# and Peter Vreman
|
||||
# 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.
|
||||
#
|
||||
#**********************************************************************}
|
||||
#
|
||||
# FreeBSD standard (shared) ELF startup code for Free Pascal
|
||||
#
|
||||
# FreeBSD RunTime dynamic loader only
|
||||
# calls the functions specified by -init
|
||||
# as functions without parameters
|
||||
# Thus, it is not possible to retrieve argc, argv and envp
|
||||
# for libraries.
|
||||
# On x86_64 CPU, using weak for the operatingsystem_parameter_XXX
|
||||
# allows to bind to main program parameters,
|
||||
# but this does not seem to work for i386 loader.
|
||||
|
||||
.file "crt1.c"
|
||||
#APP
|
||||
.ident "$FreeBSD: src/lib/csu/common/crtbrand.c,v 1.4 2003/10/17 15:43:13 peter Exp $"
|
||||
#NO_APP
|
||||
.section .note.ABI-tag,"a",@progbits
|
||||
.p2align 2
|
||||
.type abitag, @object
|
||||
.size abitag, 24
|
||||
abitag:
|
||||
.long 8
|
||||
.long 4
|
||||
.long 1
|
||||
.string "FreeBSD"
|
||||
.long 700055
|
||||
|
||||
.text
|
||||
#APP
|
||||
.ident "$FreeBSD: src/lib/csu/amd64/crt1.c,v 1.13 2003/04/30 19:27:07 peter Exp $"
|
||||
#NO_APP
|
||||
.p2align 2,,3
|
||||
.globl FPC_LIB_START
|
||||
.type FPC_LIB_START,@function
|
||||
FPC_LIB_START:
|
||||
.globl FPC_SHARED_LIB_START
|
||||
.type FPC_SHARED_LIB_START,@function
|
||||
FPC_SHARED_LIB_START:
|
||||
# jmp _startlib@PLT
|
||||
movb $1,operatingsystem_islibrary(%rip)
|
||||
#movq operatingsystem_islibrary@GOTPCREL(%rip),%rax
|
||||
#movb $1,(%rax)
|
||||
call PASCALMAIN@PLT
|
||||
ret
|
||||
.p2align 2,,3
|
||||
.globl _haltproc
|
||||
.type _haltproc,@function
|
||||
/* this routine is only called when the halt() routine of the RTL embedded in
|
||||
the shared library is called */
|
||||
_haltproc:
|
||||
.globl FPC_SHARED_LIB_EXIT
|
||||
.type FPC_SHARED_LIB_EXIT,@function
|
||||
FPC_SHARED_LIB_EXIT:
|
||||
call FPC_LIB_EXIT@PLT
|
||||
movl $1,%eax /* exit syscall */
|
||||
movq operatingsystem_result(%rip),%rbx
|
||||
movzwl (%rbx),%edi
|
||||
syscall
|
||||
jmp _haltproc@PLT
|
||||
/* Do not fail linkage if argc, argv and envp are not found. */
|
||||
.weak operatingsystem_parameter_argc
|
||||
.weak operatingsystem_parameter_argv
|
||||
.weak operatingsystem_parameter_envp
|
||||
|
Loading…
Reference in New Issue
Block a user