mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-26 15:31:34 +01:00
+ Initial implementation for openbsd x86_64 cpu specific rtl code
git-svn-id: trunk@20713 -
This commit is contained in:
parent
96f1627c46
commit
a06b2b4c02
6
.gitattributes
vendored
6
.gitattributes
vendored
@ -8080,6 +8080,12 @@ rtl/openbsd/unxconst.inc svneol=native#text/plain
|
|||||||
rtl/openbsd/unxfunc.inc svneol=native#text/plain
|
rtl/openbsd/unxfunc.inc svneol=native#text/plain
|
||||||
rtl/openbsd/unxsockh.inc svneol=native#text/plain
|
rtl/openbsd/unxsockh.inc svneol=native#text/plain
|
||||||
rtl/openbsd/unxsysc.inc svneol=native#text/plain
|
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/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
|
||||||
rtl/os2/Makefile svneol=native#text/plain
|
rtl/os2/Makefile svneol=native#text/plain
|
||||||
rtl/os2/Makefile.fpc svneol=native#text/plain
|
rtl/os2/Makefile.fpc svneol=native#text/plain
|
||||||
rtl/os2/classes.pp svneol=native#text/plain
|
rtl/os2/classes.pp svneol=native#text/plain
|
||||||
|
|||||||
14
rtl/openbsd/x86_64/bsyscall.inc
Normal file
14
rtl/openbsd/x86_64/bsyscall.inc
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
This file is part of the Free Pascal run time library.
|
||||||
|
Copyright (c) 2005 by Michael Van Canneyt,
|
||||||
|
member 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.
|
||||||
|
|
||||||
|
**********************************************************************}
|
||||||
|
|
||||||
236
rtl/openbsd/x86_64/cprt0.as
Normal file
236
rtl/openbsd/x86_64/cprt0.as
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
.file "crt0.c"
|
||||||
|
.globl __progname
|
||||||
|
.section .rodata
|
||||||
|
.LC0:
|
||||||
|
.string ""
|
||||||
|
.data
|
||||||
|
.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 -40(%rbp), %rax
|
||||||
|
movq %rax, environ(%rip)
|
||||||
|
movq %rax,operatingsystem_parameter_envp
|
||||||
|
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, __progname(%rip)
|
||||||
|
movq __progname(%rip), %rax
|
||||||
|
testq %rax, %rax
|
||||||
|
jne .L4
|
||||||
|
movq -8(%rbp), %rax
|
||||||
|
movq %rax, __progname(%rip)
|
||||||
|
jmp .L6
|
||||||
|
.L4:
|
||||||
|
movq __progname(%rip), %rax
|
||||||
|
addq $1, %rax
|
||||||
|
movq %rax, __progname(%rip)
|
||||||
|
.L6:
|
||||||
|
movq $__progname_storage, -16(%rbp)
|
||||||
|
jmp .L7
|
||||||
|
.L8:
|
||||||
|
movq __progname(%rip), %rcx
|
||||||
|
movzbl (%rcx), %edx
|
||||||
|
movq -16(%rbp), %rax
|
||||||
|
movb %dl, (%rax)
|
||||||
|
addq $1, -16(%rbp)
|
||||||
|
leaq 1(%rcx), %rax
|
||||||
|
movq %rax, __progname(%rip)
|
||||||
|
.L7:
|
||||||
|
movq __progname(%rip), %rax
|
||||||
|
movzbl (%rax), %eax
|
||||||
|
testb %al, %al
|
||||||
|
je .L9
|
||||||
|
movl $__progname_storage+255, %eax
|
||||||
|
cmpq %rax, -16(%rbp)
|
||||||
|
jb .L8
|
||||||
|
.L9:
|
||||||
|
movq -16(%rbp), %rax
|
||||||
|
movb $0, (%rax)
|
||||||
|
movq $__progname_storage, __progname(%rip)
|
||||||
|
.L2:
|
||||||
|
movl $_mcleanup, %edi
|
||||||
|
call atexit
|
||||||
|
movl $_etext, %eax
|
||||||
|
movq %rax, %rsi
|
||||||
|
movl $_eprol, %eax
|
||||||
|
movq %rax, %rdi
|
||||||
|
call monstartup
|
||||||
|
movl $0, %eax
|
||||||
|
call __init
|
||||||
|
movq environ(%rip), %rdx
|
||||||
|
movq -32(%rbp), %rsi
|
||||||
|
movl -20(%rbp), %edi
|
||||||
|
movq %rdi,operatingsystem_parameter_argc
|
||||||
|
movq %rsi,operatingsystem_parameter_argv
|
||||||
|
movl $0, %eax
|
||||||
|
call main
|
||||||
|
# movl %eax, %edi
|
||||||
|
# call exit
|
||||||
|
jmp _haltproc
|
||||||
|
.p2align 2,0x90
|
||||||
|
|
||||||
|
.globl _haltproc
|
||||||
|
.type _haltproc,@function
|
||||||
|
|
||||||
|
_haltproc:
|
||||||
|
movq $1,%rax
|
||||||
|
movzwq operatingsystem_result,%rbx
|
||||||
|
pushq %rbx
|
||||||
|
call .Lactualsyscall
|
||||||
|
addq $8,%rsp
|
||||||
|
jmp _haltproc
|
||||||
|
|
||||||
|
.Lactualsyscall:
|
||||||
|
int $0x80
|
||||||
|
jb .LErrorcode
|
||||||
|
xor %rbx,%rbx
|
||||||
|
ret
|
||||||
|
.LErrorcode:
|
||||||
|
movq %rax,%rbx
|
||||||
|
movq $-1,%rax
|
||||||
|
.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
|
||||||
|
#APP
|
||||||
|
.text
|
||||||
|
_eprol:
|
||||||
|
#NO_APP
|
||||||
|
.comm environ,8,8
|
||||||
|
.comm __progname_storage,256,32
|
||||||
|
.comm operatingsystem_parameter_envp,8,8
|
||||||
|
.comm operatingsystem_parameter_argc,8,8
|
||||||
|
.comm operatingsystem_parameter_argv,8,8
|
||||||
|
.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 0x3
|
||||||
|
.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 "
|
||||||
192
rtl/openbsd/x86_64/crt0.s
Normal file
192
rtl/openbsd/x86_64/crt0.s
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
.file "crt0.c"
|
||||||
|
.globl __progname
|
||||||
|
.section .rodata
|
||||||
|
.LC0:
|
||||||
|
.string ""
|
||||||
|
.data
|
||||||
|
.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 -40(%rbp), %rax
|
||||||
|
movq %rax, environ(%rip)
|
||||||
|
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, __progname(%rip)
|
||||||
|
movq __progname(%rip), %rax
|
||||||
|
testq %rax, %rax
|
||||||
|
jne .L4
|
||||||
|
movq -8(%rbp), %rax
|
||||||
|
movq %rax, __progname(%rip)
|
||||||
|
jmp .L6
|
||||||
|
.L4:
|
||||||
|
movq __progname(%rip), %rax
|
||||||
|
addq $1, %rax
|
||||||
|
movq %rax, __progname(%rip)
|
||||||
|
.L6:
|
||||||
|
movq $__progname_storage, -16(%rbp)
|
||||||
|
jmp .L7
|
||||||
|
.L8:
|
||||||
|
movq __progname(%rip), %rcx
|
||||||
|
movzbl (%rcx), %edx
|
||||||
|
movq -16(%rbp), %rax
|
||||||
|
movb %dl, (%rax)
|
||||||
|
addq $1, -16(%rbp)
|
||||||
|
leaq 1(%rcx), %rax
|
||||||
|
movq %rax, __progname(%rip)
|
||||||
|
.L7:
|
||||||
|
movq __progname(%rip), %rax
|
||||||
|
movzbl (%rax), %eax
|
||||||
|
testb %al, %al
|
||||||
|
je .L9
|
||||||
|
movl $__progname_storage+255, %eax
|
||||||
|
cmpq %rax, -16(%rbp)
|
||||||
|
jb .L8
|
||||||
|
.L9:
|
||||||
|
movq -16(%rbp), %rax
|
||||||
|
movb $0, (%rax)
|
||||||
|
movq $__progname_storage, __progname(%rip)
|
||||||
|
.L2:
|
||||||
|
movl $_mcleanup, %edi
|
||||||
|
call atexit
|
||||||
|
movl $_etext, %eax
|
||||||
|
movq %rax, %rsi
|
||||||
|
movl $_eprol, %eax
|
||||||
|
movq %rax, %rdi
|
||||||
|
call monstartup
|
||||||
|
movl $0, %eax
|
||||||
|
call __init
|
||||||
|
movq environ(%rip), %rdx
|
||||||
|
movq -32(%rbp), %rsi
|
||||||
|
movl -20(%rbp), %edi
|
||||||
|
movl $0, %eax
|
||||||
|
call main
|
||||||
|
movl %eax, %edi
|
||||||
|
call exit
|
||||||
|
.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
|
||||||
|
#APP
|
||||||
|
.text
|
||||||
|
_eprol:
|
||||||
|
#NO_APP
|
||||||
|
.comm environ,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 0x3
|
||||||
|
.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 "
|
||||||
236
rtl/openbsd/x86_64/gprt0.as
Normal file
236
rtl/openbsd/x86_64/gprt0.as
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
.file "crt0.c"
|
||||||
|
.globl __progname
|
||||||
|
.section .rodata
|
||||||
|
.LC0:
|
||||||
|
.string ""
|
||||||
|
.data
|
||||||
|
.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 -40(%rbp), %rax
|
||||||
|
movq %rax, environ(%rip)
|
||||||
|
movq %rax,operatingsystem_parameter_envp
|
||||||
|
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, __progname(%rip)
|
||||||
|
movq __progname(%rip), %rax
|
||||||
|
testq %rax, %rax
|
||||||
|
jne .L4
|
||||||
|
movq -8(%rbp), %rax
|
||||||
|
movq %rax, __progname(%rip)
|
||||||
|
jmp .L6
|
||||||
|
.L4:
|
||||||
|
movq __progname(%rip), %rax
|
||||||
|
addq $1, %rax
|
||||||
|
movq %rax, __progname(%rip)
|
||||||
|
.L6:
|
||||||
|
movq $__progname_storage, -16(%rbp)
|
||||||
|
jmp .L7
|
||||||
|
.L8:
|
||||||
|
movq __progname(%rip), %rcx
|
||||||
|
movzbl (%rcx), %edx
|
||||||
|
movq -16(%rbp), %rax
|
||||||
|
movb %dl, (%rax)
|
||||||
|
addq $1, -16(%rbp)
|
||||||
|
leaq 1(%rcx), %rax
|
||||||
|
movq %rax, __progname(%rip)
|
||||||
|
.L7:
|
||||||
|
movq __progname(%rip), %rax
|
||||||
|
movzbl (%rax), %eax
|
||||||
|
testb %al, %al
|
||||||
|
je .L9
|
||||||
|
movl $__progname_storage+255, %eax
|
||||||
|
cmpq %rax, -16(%rbp)
|
||||||
|
jb .L8
|
||||||
|
.L9:
|
||||||
|
movq -16(%rbp), %rax
|
||||||
|
movb $0, (%rax)
|
||||||
|
movq $__progname_storage, __progname(%rip)
|
||||||
|
.L2:
|
||||||
|
movl $_mcleanup, %edi
|
||||||
|
call atexit
|
||||||
|
movl $_etext, %eax
|
||||||
|
movq %rax, %rsi
|
||||||
|
movl $_eprol, %eax
|
||||||
|
movq %rax, %rdi
|
||||||
|
call monstartup
|
||||||
|
movl $0, %eax
|
||||||
|
call __init
|
||||||
|
movq environ(%rip), %rdx
|
||||||
|
movq -32(%rbp), %rsi
|
||||||
|
movl -20(%rbp), %edi
|
||||||
|
movq %rdi,operatingsystem_parameter_argc
|
||||||
|
movq %rsi,operatingsystem_parameter_argv
|
||||||
|
movl $0, %eax
|
||||||
|
call main
|
||||||
|
# movl %eax, %edi
|
||||||
|
# call exit
|
||||||
|
jmp _haltproc
|
||||||
|
.p2align 2,0x90
|
||||||
|
|
||||||
|
.globl _haltproc
|
||||||
|
.type _haltproc,@function
|
||||||
|
|
||||||
|
_haltproc:
|
||||||
|
movq $1,%rax
|
||||||
|
movzwq operatingsystem_result,%rbx
|
||||||
|
pushq %rbx
|
||||||
|
call .Lactualsyscall
|
||||||
|
addq $8,%rsp
|
||||||
|
jmp _haltproc
|
||||||
|
|
||||||
|
.Lactualsyscall:
|
||||||
|
int $0x80
|
||||||
|
jb .LErrorcode
|
||||||
|
xor %rbx,%rbx
|
||||||
|
ret
|
||||||
|
.LErrorcode:
|
||||||
|
movq %rax,%rbx
|
||||||
|
movq $-1,%rax
|
||||||
|
.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
|
||||||
|
#APP
|
||||||
|
.text
|
||||||
|
_eprol:
|
||||||
|
#NO_APP
|
||||||
|
.comm environ,8,8
|
||||||
|
.comm __progname_storage,256,32
|
||||||
|
.comm operatingsystem_parameter_envp,8,8
|
||||||
|
.comm operatingsystem_parameter_argc,8,8
|
||||||
|
.comm operatingsystem_parameter_argv,8,8
|
||||||
|
.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 0x3
|
||||||
|
.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 "
|
||||||
236
rtl/openbsd/x86_64/prt0.as
Normal file
236
rtl/openbsd/x86_64/prt0.as
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
.file "crt0.c"
|
||||||
|
.globl __progname
|
||||||
|
.section .rodata
|
||||||
|
.LC0:
|
||||||
|
.string ""
|
||||||
|
.data
|
||||||
|
.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 -40(%rbp), %rax
|
||||||
|
movq %rax, environ(%rip)
|
||||||
|
movq %rax,operatingsystem_parameter_envp
|
||||||
|
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, __progname(%rip)
|
||||||
|
movq __progname(%rip), %rax
|
||||||
|
testq %rax, %rax
|
||||||
|
jne .L4
|
||||||
|
movq -8(%rbp), %rax
|
||||||
|
movq %rax, __progname(%rip)
|
||||||
|
jmp .L6
|
||||||
|
.L4:
|
||||||
|
movq __progname(%rip), %rax
|
||||||
|
addq $1, %rax
|
||||||
|
movq %rax, __progname(%rip)
|
||||||
|
.L6:
|
||||||
|
movq $__progname_storage, -16(%rbp)
|
||||||
|
jmp .L7
|
||||||
|
.L8:
|
||||||
|
movq __progname(%rip), %rcx
|
||||||
|
movzbl (%rcx), %edx
|
||||||
|
movq -16(%rbp), %rax
|
||||||
|
movb %dl, (%rax)
|
||||||
|
addq $1, -16(%rbp)
|
||||||
|
leaq 1(%rcx), %rax
|
||||||
|
movq %rax, __progname(%rip)
|
||||||
|
.L7:
|
||||||
|
movq __progname(%rip), %rax
|
||||||
|
movzbl (%rax), %eax
|
||||||
|
testb %al, %al
|
||||||
|
je .L9
|
||||||
|
movl $__progname_storage+255, %eax
|
||||||
|
cmpq %rax, -16(%rbp)
|
||||||
|
jb .L8
|
||||||
|
.L9:
|
||||||
|
movq -16(%rbp), %rax
|
||||||
|
movb $0, (%rax)
|
||||||
|
movq $__progname_storage, __progname(%rip)
|
||||||
|
.L2:
|
||||||
|
# movl $_mcleanup, %edi
|
||||||
|
# call atexit
|
||||||
|
# movl $_etext, %eax
|
||||||
|
# movq %rax, %rsi
|
||||||
|
# movl $_eprol, %eax
|
||||||
|
# movq %rax, %rdi
|
||||||
|
# call monstartup
|
||||||
|
# movl $0, %eax
|
||||||
|
# call __init
|
||||||
|
movq environ(%rip), %rdx
|
||||||
|
movq -32(%rbp), %rsi
|
||||||
|
movl -20(%rbp), %edi
|
||||||
|
movq %rdi,operatingsystem_parameter_argc
|
||||||
|
movq %rsi,operatingsystem_parameter_argv
|
||||||
|
movl $0, %eax
|
||||||
|
call main
|
||||||
|
# movl %eax, %edi
|
||||||
|
# call exit
|
||||||
|
jmp _haltproc
|
||||||
|
.p2align 2,0x90
|
||||||
|
|
||||||
|
.globl _haltproc
|
||||||
|
.type _haltproc,@function
|
||||||
|
|
||||||
|
_haltproc:
|
||||||
|
movq $1,%rax
|
||||||
|
movzwq operatingsystem_result,%rbx
|
||||||
|
pushq %rbx
|
||||||
|
call .Lactualsyscall
|
||||||
|
addq $8,%rsp
|
||||||
|
jmp _haltproc
|
||||||
|
|
||||||
|
.Lactualsyscall:
|
||||||
|
int $0x80
|
||||||
|
jb .LErrorcode
|
||||||
|
xor %rbx,%rbx
|
||||||
|
ret
|
||||||
|
.LErrorcode:
|
||||||
|
movq %rax,%rbx
|
||||||
|
movq $-1,%rax
|
||||||
|
.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
|
||||||
|
#APP
|
||||||
|
.text
|
||||||
|
_eprol:
|
||||||
|
#NO_APP
|
||||||
|
.comm environ,8,8
|
||||||
|
.comm __progname_storage,256,32
|
||||||
|
.comm operatingsystem_parameter_envp,8,8
|
||||||
|
.comm operatingsystem_parameter_argc,8,8
|
||||||
|
.comm operatingsystem_parameter_argv,8,8
|
||||||
|
.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 0x3
|
||||||
|
.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 "
|
||||||
100
rtl/openbsd/x86_64/sighnd.inc
Normal file
100
rtl/openbsd/x86_64/sighnd.inc
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
{
|
||||||
|
This file is part of the Free Pascal run time library.
|
||||||
|
(c) 2000-2003 by Marco van de Voort
|
||||||
|
member of the Free Pascal development team.
|
||||||
|
|
||||||
|
See the file COPYING.FPC, included in this distribution,
|
||||||
|
for details about the copyright.
|
||||||
|
|
||||||
|
Signalhandler for FreeBSD/i386
|
||||||
|
|
||||||
|
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.
|
||||||
|
}
|
||||||
|
|
||||||
|
CONST FPU_ALL=$7F;
|
||||||
|
|
||||||
|
{$ifdef cpui386}
|
||||||
|
function getfpustate(sininfo:psiginfo):longint; {inline;}
|
||||||
|
begin
|
||||||
|
if ptruint(sininfo)> high(word) then
|
||||||
|
getfpustate:=sininfo^.si_code
|
||||||
|
else
|
||||||
|
getfpustate:=word(ptruint(sininfo));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function getaltfpustate(sigcontext:psigcontextrec):longint; {inline;}
|
||||||
|
begin
|
||||||
|
if assigned(sigcontext) then
|
||||||
|
getaltfpustate:=sigcontext^.sc_fpustate^.en_sw
|
||||||
|
else
|
||||||
|
getaltfpustate:=0;
|
||||||
|
end;
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
procedure SignalToRunerror(Sig: longint;sininfo:psiginfo; SigContext: PSigContextRec); public name '_FPC_DEFAULTSIGHANDLER'; cdecl;
|
||||||
|
|
||||||
|
var
|
||||||
|
res,fpustate : word;
|
||||||
|
begin
|
||||||
|
res:=0;
|
||||||
|
{$ifdef BSD}
|
||||||
|
{$ifdef cpui386}
|
||||||
|
fpustate:=0;
|
||||||
|
asm
|
||||||
|
fnstsw fpustate
|
||||||
|
end;
|
||||||
|
{$endif cpui386}
|
||||||
|
{$endif BSD}
|
||||||
|
case sig of
|
||||||
|
SIGFPE :
|
||||||
|
begin
|
||||||
|
{ this is not allways necessary but I don't know yet
|
||||||
|
how to tell if it is or not PM }
|
||||||
|
res:=200;
|
||||||
|
{$ifdef cpui386}
|
||||||
|
fpustate:=GetaltFPUState(sigcontext);
|
||||||
|
{$else}
|
||||||
|
fpustate:=0;
|
||||||
|
{$endif}
|
||||||
|
if (FpuState and FPU_All) <> 0 then
|
||||||
|
begin
|
||||||
|
{ first check the more precise options }
|
||||||
|
if (FpuState and FPU_DivisionByZero)<>0 then
|
||||||
|
res:=200
|
||||||
|
else if (FpuState and FPU_Overflow)<>0 then
|
||||||
|
res:=205
|
||||||
|
else if (FpuState and FPU_Underflow)<>0 then
|
||||||
|
res:=206
|
||||||
|
else if (FpuState and FPU_Denormal)<>0 then
|
||||||
|
res:=216
|
||||||
|
else if (FpuState and (FPU_StackOverflow or FPU_StackUnderflow))<>0 then
|
||||||
|
res:=207
|
||||||
|
else if (FpuState and FPU_Invalid)<>0 then
|
||||||
|
res:=216
|
||||||
|
else
|
||||||
|
res:=207; {'Coprocessor Error'}
|
||||||
|
end;
|
||||||
|
SysResetFPU;
|
||||||
|
end;
|
||||||
|
SIGILL,
|
||||||
|
SIGBUS,
|
||||||
|
SIGSEGV :
|
||||||
|
res:=216;
|
||||||
|
SIGINT:
|
||||||
|
res:=217;
|
||||||
|
SIGQUIT:
|
||||||
|
res:=233;
|
||||||
|
end;
|
||||||
|
reenable_signal(sig);
|
||||||
|
{ give runtime error at the position where the signal was raised }
|
||||||
|
if res<>0 then
|
||||||
|
begin
|
||||||
|
{$ifdef cpux86_64}
|
||||||
|
HandleErrorAddrFrame(res,pointer(SigContext^.sc_rip),pointer(SigContext^.sc_rbp));
|
||||||
|
{$endif}
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user