Add dllprt0 for x86_64 (i386 version simply includes cprt0.as)

git-svn-id: trunk@23828 -
This commit is contained in:
pierre 2013-03-14 13:50:21 +00:00
parent 7d0e45b142
commit 8d8509590f
5 changed files with 338 additions and 73 deletions

2
.gitattributes vendored
View File

@ -8481,6 +8481,7 @@ rtl/openbsd/errno.inc svneol=native#text/plain
rtl/openbsd/errnostr.inc svneol=native#text/plain
rtl/openbsd/i386/bsyscall.inc svneol=native#text/plain
rtl/openbsd/i386/cprt0.as svneol=native#text/plain
rtl/openbsd/i386/dllprt0.as svneol=native#text/plain
rtl/openbsd/i386/prt0.as svneol=native#text/plain
rtl/openbsd/i386/sighnd.inc svneol=native#text/plain
rtl/openbsd/osdefs.inc svneol=native#text/plain
@ -8506,6 +8507,7 @@ rtl/openbsd/unxsysc.inc svneol=native#text/plain
rtl/openbsd/x86_64/bsyscall.inc svneol=native#text/plain
rtl/openbsd/x86_64/cprt0.as svneol=native#text/plain
rtl/openbsd/x86_64/crt0.s svneol=native#text/plain
rtl/openbsd/x86_64/dllprt0.as svneol=native#text/plain
rtl/openbsd/x86_64/gprt0.as svneol=native#text/plain
rtl/openbsd/x86_64/prt0.as svneol=native#text/plain
rtl/openbsd/x86_64/sighnd.inc svneol=native#text/plain

View File

@ -783,220 +783,220 @@ ifeq ($(FULL_TARGET),jvm-android)
override TARGET_IMPLICITUNITS+=exeinfo cp1251 cp1252 cp1253 cp437 cp646 cp850 cp866 cp8859_1 cp8859_5
endif
ifeq ($(FULL_TARGET),i386-linux)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-go32v2)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-win32)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-os2)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-freebsd)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-beos)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-haiku)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-netbsd)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-solaris)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-qnx)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-netware)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-openbsd)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-wdosx)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-darwin)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-emx)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-watcom)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-wince)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-embedded)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-symbian)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-nativent)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-iphonesim)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-android)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),m68k-linux)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),m68k-amiga)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),m68k-atari)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),m68k-palmos)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),m68k-embedded)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),powerpc-linux)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),powerpc-macos)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),powerpc-wii)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),powerpc-aix)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),sparc-linux)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),sparc-solaris)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),sparc-embedded)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),x86_64-linux)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),x86_64-netbsd)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),x86_64-solaris)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),x86_64-openbsd)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),x86_64-win64)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),arm-linux)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),arm-palmos)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),arm-darwin)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),arm-wince)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),arm-gba)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),arm-nds)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),arm-embedded)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),arm-symbian)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),arm-android)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),powerpc64-aix)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),avr-embedded)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),armeb-linux)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),armeb-embedded)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),mips-linux)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),mipsel-linux)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),jvm-java)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),jvm-android)
override TARGET_LOADERS+=prt0 cprt0
override TARGET_LOADERS+=prt0 cprt0 dllprt0
endif
ifeq ($(FULL_TARGET),i386-linux)
override TARGET_RSTS+=math varutils typinfo variants classes sysconst dateutils
@ -2820,6 +2820,8 @@ prt0$(OEXT) : $(CPU_TARGET)/$(PRT0).as
$(AS) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) $(CPU_TARGET)/$(PRT0).as
cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as
$(AS) -o $(UNITTARGETDIRPREFIX)cprt0$(OEXT) $(CPU_TARGET)/cprt0.as
dllprt0$(OEXT) : $(CPU_TARGET)/dllprt0.as
$(AS) -o $(UNITTARGETDIRPREFIX)dllprt0$(OEXT) $(CPU_TARGET)/dllprt0.as
$(SYSTEMUNIT)$(PPUEXT) : $(BSDINC)/$(SYSTEMUNIT).pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS)
$(COMPILER) -Us -Sg $(BSDINC)/$(SYSTEMUNIT).pp
uuchar$(PPUEXT): $(SYSTEMUNIT)$(PPUEXT) $(INC)/uuchar.pp

View File

@ -9,7 +9,7 @@ main=rtl
fpcpackage=y
[target]
loaders=prt0 cprt0
loaders=prt0 cprt0 dllprt0
units=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings syscall baseunix \
$(LINUXUNIT) unixtype unixutil unix ctypes bsd initc \
$(CPU_UNITS) dos crt objects printer matrix rtlconsts \
@ -126,6 +126,9 @@ prt0$(OEXT) : $(CPU_TARGET)/$(PRT0).as
cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as
$(AS) -o $(UNITTARGETDIRPREFIX)cprt0$(OEXT) $(CPU_TARGET)/cprt0.as
dllprt0$(OEXT) : $(CPU_TARGET)/dllprt0.as
$(AS) -o $(UNITTARGETDIRPREFIX)dllprt0$(OEXT) $(CPU_TARGET)/dllprt0.as
#
# System Units (System, Objpas, Strings)
#

View File

@ -0,0 +1 @@
.include i386/cprt0.as

View File

@ -0,0 +1,257 @@
.section ".note.openbsd.ident", "a"
.p2align 2
.long 8
.long 4
.long 1
.ascii "OpenBSD\0"
.long 0
.previous
.file "crt0.c"
.globl __progname
.section .rodata
.LC0:
.string ""
.section .data.rel.local,"aw",@progbits
.align 8
.type __progname, @object
.size __progname, 8
__progname:
.quad .LC0
#APP
.text
.align 8
.globl __start
.globl _start
_start:
__start:
movq %rbx,%r9
movq %rcx,%r8
movq %rdx,%rcx
movq (%rsp),%rdi
leaq 16(%rsp,%rdi,8),%rdx
leaq 8(%rsp),%rsi
subq $8,%rsp
andq $~15,%rsp
addq $8,%rsp
jmp ___start
#NO_APP
.text
.globl ___start
.type ___start, @function
___start:
.LFB9:
pushq %rbp
.LCFI0:
movq %rsp, %rbp
.LCFI1:
subq $64, %rsp
.LCFI2:
movl %edi, -20(%rbp)
movq %rsi, -32(%rbp)
movq %rdx, -40(%rbp)
movq %rcx, -48(%rbp)
movq %r8, -56(%rbp)
movq %r9, -64(%rbp)
movq environ@GOTPCREL(%rip), %rdx
movq -40(%rbp), %rax
movq %rax, (%rdx)
movq operatingsystem_parameter_envp@GOTPCREL(%rip), %rdx
movq -40(%rbp), %rax
movq %rax, (%rdx)
movl -20(%rbp), %eax
movslq %eax,%rdx
movq operatingsystem_parameter_argc@GOTPCREL(%rip), %rax
movq %rdx, (%rax)
movq operatingsystem_parameter_argv@GOTPCREL(%rip), %rdx
movq -32(%rbp), %rax
movq %rax, (%rdx)
movq -32(%rbp), %rax
movq (%rax), %rax
movq %rax, -8(%rbp)
cmpq $0, -8(%rbp)
je .L2
movq -8(%rbp), %rdi
movl $47, %esi
call _strrchr
movq %rax, %rdx
movq __progname@GOTPCREL(%rip), %rax
movq %rdx, (%rax)
movq __progname@GOTPCREL(%rip), %rax
movq (%rax), %rax
testq %rax, %rax
jne .L4
movq __progname@GOTPCREL(%rip), %rdx
movq -8(%rbp), %rax
movq %rax, (%rdx)
jmp .L6
.L4:
movq __progname@GOTPCREL(%rip), %rax
movq (%rax), %rax
leaq 1(%rax), %rdx
movq __progname@GOTPCREL(%rip), %rax
movq %rdx, (%rax)
.L6:
movq __progname_storage@GOTPCREL(%rip), %rax
movq %rax, -16(%rbp)
jmp .L7
.L8:
movq __progname@GOTPCREL(%rip), %rax
movq (%rax), %rcx
movzbl (%rcx), %edx
movq -16(%rbp), %rax
movb %dl, (%rax)
addq $1, -16(%rbp)
leaq 1(%rcx), %rdx
movq __progname@GOTPCREL(%rip), %rax
movq %rdx, (%rax)
.L7:
movq __progname@GOTPCREL(%rip), %rax
movq (%rax), %rax
movzbl (%rax), %eax
testb %al, %al
je .L9
movq __progname_storage@GOTPCREL(%rip), %rax
leaq 255(%rax), %rax
cmpq %rax, -16(%rbp)
jb .L8
.L9:
movq -16(%rbp), %rax
movb $0, (%rax)
movq __progname@GOTPCREL(%rip), %rdx
movq __progname_storage@GOTPCREL(%rip), %rax
movq %rax, (%rdx)
.L2:
movl $0, %eax
call __init@PLT
movq environ@GOTPCREL(%rip), %rax
movq (%rax), %rdx
movq -32(%rbp), %rsi
movl -20(%rbp), %edi
movl $0, %eax
call main@PLT
# movl %eax, %edi
# call exit
jmp _haltproc@PLT
.p2align 2,0x90
.globl _haltproc
.type _haltproc,@function
_haltproc:
movq $1,%rax
movzwq operatingsystem_result(%rip),%rbx
pushq %rbx
call .Lactualsyscall
addq $8,%rsp
jmp _haltproc
.Lactualsyscall:
int $0x80
jb .LErrorcode
xor %rbx,%rbx
ret
.LErrorcode:
movl %eax, %edi
call exit@PLT
.LFE9:
.size ___start, .-___start
.type _strrchr, @function
_strrchr:
.LFB10:
pushq %rbp
.LCFI3:
movq %rsp, %rbp
.LCFI4:
movq %rdi, -24(%rbp)
movb %sil, -25(%rbp)
movq $0, -8(%rbp)
.L13:
movq -24(%rbp), %rdx
movzbl (%rdx), %eax
cmpb -25(%rbp), %al
jne .L14
movq -24(%rbp), %rax
movq %rax, -8(%rbp)
.L14:
movq -24(%rbp), %rdx
movzbl (%rdx), %eax
testb %al, %al
jne .L16
movq -8(%rbp), %rax
movq %rax, -16(%rbp)
jmp .L12
.L16:
addq $1, -24(%rbp)
jmp .L13
.L12:
movq -16(%rbp), %rax
leave
ret
.LFE10:
.size _strrchr, .-_strrchr
.comm environ,8,8
.comm operatingsystem_parameter_envp,8,8
.comm operatingsystem_parameter_argc,8,8
.comm operatingsystem_parameter_argv,8,8
.comm __progname_storage,256,32
.section .eh_frame,"a",@progbits
.Lframe1:
.long .LECIE1-.LSCIE1
.LSCIE1:
.long 0x0
.byte 0x1
.string "zR"
.uleb128 0x1
.sleb128 -8
.byte 0x10
.uleb128 0x1
.byte 0x1b
.byte 0xc
.uleb128 0x7
.uleb128 0x8
.byte 0x90
.uleb128 0x1
.align 8
.LECIE1:
.LSFDE1:
.long .LEFDE1-.LASFDE1
.LASFDE1:
.long .LASFDE1-.Lframe1
.long .LFB9-.
.long .LFE9-.LFB9
.uleb128 0x0
.byte 0x4
.long .LCFI0-.LFB9
.byte 0xe
.uleb128 0x10
.byte 0x86
.uleb128 0x2
.byte 0x4
.long .LCFI1-.LCFI0
.byte 0xd
.uleb128 0x6
.align 8
.LEFDE1:
.LSFDE3:
.long .LEFDE3-.LASFDE3
.LASFDE3:
.long .LASFDE3-.Lframe1
.long .LFB10-.
.long .LFE10-.LFB10
.uleb128 0x0
.byte 0x4
.long .LCFI3-.LFB10
.byte 0xe
.uleb128 0x10
.byte 0x86
.uleb128 0x2
.byte 0x4
.long .LCFI4-.LCFI3
.byte 0xd
.uleb128 0x6
.align 8
.LEFDE3:
.ident "GCC: (GNU) 4.2.1 20070719 "