# revisions: 41702,41703,41704,41705,41706,41708

git-svn-id: branches/fixes_3_2@41987 -
This commit is contained in:
marco 2019-05-04 21:41:36 +00:00
parent 498d95c761
commit be1b562472
11 changed files with 352 additions and 2 deletions

2
.gitattributes vendored
View File

@ -10111,6 +10111,7 @@ 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/openbsd_ident.as svneol=native#text/plain
rtl/openbsd/i386/prt0.as svneol=native#text/plain
rtl/openbsd/i386/si_c.inc svneol=native#text/plain
rtl/openbsd/i386/si_dll.inc svneol=native#text/plain
@ -10146,6 +10147,7 @@ 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/openbsd_ident.as svneol=native#text/plain
rtl/openbsd/x86_64/prt0.as svneol=native#text/plain
rtl/openbsd/x86_64/si_c.inc svneol=native#text/plain
rtl/openbsd/x86_64/si_dll.inc svneol=native#text/plain

View File

@ -355,7 +355,7 @@ override FPCOPT+=-Ur
endif
CPU_UNITS=
SYSINIT_UNITS=
LOADERS=prt0 cprt0 dllprt0
LOADERS=prt0 cprt0 dllprt0 openbsd_ident
ifeq ($(ARCH),x86_64)
CPU_UNITS=x86 ports cpu
SYSINIT_UNITS=si_prc si_c si_dll
@ -3176,6 +3176,8 @@ 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
openbsd_ident$(OEXT) : $(CPU_TARGET)/openbsd_ident.as
$(AS) -o $(UNITTARGETDIRPREFIX)openbsd_ident$(OEXT) $(CPU_TARGET)/openbsd_ident.as
si_prc$(PPUEXT) : si_prc.pp si_intf.inc $(ARCH)/si_prc.inc $(SYSTEMUNIT)$(PPUEXT)
$(COMPILER) $<
si_c$(PPUEXT) : si_c.pp si_intf.inc $(ARCH)/si_c.inc $(SYSTEMUNIT)$(PPUEXT)

View File

@ -85,7 +85,7 @@ endif
CPU_UNITS=
SYSINIT_UNITS=
LOADERS=prt0 cprt0 dllprt0
LOADERS=prt0 cprt0 dllprt0 openbsd_ident
ifeq ($(ARCH),x86_64)
CPU_UNITS=x86 ports cpu
@ -141,6 +141,9 @@ cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as
dllprt0$(OEXT) : $(CPU_TARGET)/dllprt0.as
$(AS) -o $(UNITTARGETDIRPREFIX)dllprt0$(OEXT) $(CPU_TARGET)/dllprt0.as
openbsd_ident$(OEXT) : $(CPU_TARGET)/openbsd_ident.as
$(AS) -o $(UNITTARGETDIRPREFIX)openbsd_ident$(OEXT) $(CPU_TARGET)/openbsd_ident.as
#
# $(SYSINIT_UNITS) Units

View File

@ -0,0 +1,7 @@
.section ".note.openbsd.ident", "a"
.p2align 2
.long 8
.long 4
.long 1
.ascii "OpenBSD\0"
.long 0

View File

@ -22,6 +22,7 @@ interface
implementation
{$i si_impl.inc}
{$i si_c.inc}
end.

View File

@ -22,6 +22,7 @@ interface
implementation
{$i si_impl.inc}
{$i si_dll.inc}
end.

View File

@ -12,6 +12,8 @@
**********************************************************************}
{$LINK openbsd_ident}
procedure PascalMain; external name 'PASCALMAIN';
var

View File

@ -15,6 +15,7 @@
**********************************************************************}
{$SMARTLINK OFF}
{$GOTO ON}
var
operatingsystem_parameter_envp: ppchar; public name 'operatingsystem_parameter_envp';

View File

@ -0,0 +1,7 @@
.section ".note.openbsd.ident", "a"
.p2align 2
.long 8
.long 4
.long 1
.ascii "OpenBSD\0"
.long 0

View File

@ -14,4 +14,163 @@
**********************************************************************}
{$asmmode gas}
var
_etext: Byte; external name '_etext';
_eprol: Byte; external name '_eprol';
procedure _mcleanup; external name '_mcleanup';
procedure atexit; external name 'atexit';
procedure monstartup; external name 'monstartup';
procedure _init; external name '_init';
procedure _FPC_proc___start; forward;
procedure _FPC_proc_start; assembler; nostackframe; public name '_start'; public name '__start';
asm
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 $0xFFFFFFFFFFFFFFF0,%rsp
addq $8,%rsp
jmp _FPC_proc___start
end;
procedure _FPC_proc_haltproc; forward;
function _strrchr(str: PChar; character: LongInt): PChar; forward;
procedure _FPC_proc___start; assembler; nostackframe; public name '___start';
asm
pushq %rbp
movq %rsp, %rbp
subq $64, %rsp
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(%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:
leaq __progname_storage(%rip), %rax
movq %rax, -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
leaq __progname_storage+255(%rip), %rax
cmpq %rax, -16(%rbp)
jb .L8
.L9:
leaq __progname_storage(%rip), %rax
movq %rax, __progname(%rip)
movq -16(%rbp), %rax
movb $0, (%rax)
.L2:
movq _mcleanup@GOTPCREL(%rip), %rdi
call atexit
movq _etext@GOTPCREL(%rip), %rsi
movq _eprol(%rip), %rdi
call monstartup@plt
movl $0, %eax
call _init
movq environ(%rip), %rdx
movq -32(%rbp), %rsi
movl -20(%rbp), %edi
movq %rdi,operatingsystem_parameter_argc(%rip)
movq %rsi,operatingsystem_parameter_argv(%rip)
movl $0, %eax
call PASCALMAIN
// movl %eax, %edi
// call exit
jmp _FPC_proc_haltproc
end;
procedure _FPC_proc_haltproc; assembler; nostackframe; public name '_haltproc';
asm
movq $1,%rax
movl operatingsystem_result(%rip),%ebx
pushq %rbx
call .Lactualsyscall
addq $8,%rsp
jmp _FPC_proc_haltproc
.Lactualsyscall:
int $0x80
jb .LErrorcode
xor %rbx,%rbx
ret
.LErrorcode:
movq %rax,%rbx
movq $-1,%rax
end;
function _strrchr(str: PChar; character: LongInt): PChar; assembler; nostackframe; public name '_strrchr';
asm
pushq %rbp
movq %rsp, %rbp
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
end;
procedure MD_EPROL_LABEL; assembler; nostackframe; public name '_eprol';
asm
end;

View File

@ -14,4 +14,169 @@
**********************************************************************}
{$asmmode gas}
procedure _init; external name '_init';
procedure _FPC_proc___start; forward;
procedure _FPC_proc_start; assembler; nostackframe; public name '_start'; public name '__start';
asm
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 $0xFFFFFFFFFFFFFFF0,%rsp
addq $8,%rsp
jmp _FPC_proc___start
end;
procedure _FPC_proc_haltproc; forward;
function _strrchr(str: PChar; character: LongInt): PChar; forward;
procedure _FPC_proc___start; assembler; nostackframe; public name '___start';
asm
pushq %rbp
movq %rsp, %rbp
subq $64, %rsp
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 PASCALMAIN@PLT
// movl %eax, %edi
// call exit
jmp _FPC_proc_haltproc@PLT
end;
procedure _FPC_proc_haltproc; assembler; nostackframe; public name '_haltproc';
asm
movq $1,%rax
movl operatingsystem_result(%rip),%ebx
pushq %rbx
call .Lactualsyscall
addq $8,%rsp
jmp _FPC_proc_haltproc
.Lactualsyscall:
int $0x80
jb .LErrorcode
xor %rbx,%rbx
ret
.LErrorcode:
movq %rax,%rbx
movq $-1,%rax
end;
function _strrchr(str: PChar; character: LongInt): PChar; assembler; nostackframe; public name '_strrchr';
asm
pushq %rbp
movq %rsp, %rbp
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
end;