mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 00:29:07 +02:00
* don't build .as with 2.1.1 on i386
* first fix to library entry code git-svn-id: trunk@5836 -
This commit is contained in:
parent
c238bb15d1
commit
c59c9cdfae
@ -241,8 +241,13 @@ UNIXINC=$(RTL)/unix
|
||||
UNITPREFIX=rtl
|
||||
CPU_UNITS=
|
||||
SYSINIT_UNITS=
|
||||
LOADER=prt0 dllprt0 cprt0 gprt0
|
||||
ifeq ($(CPU_TARGET),i386)
|
||||
CRT21=cprt21 gprt21
|
||||
ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
|
||||
override LOADERS=
|
||||
else
|
||||
override LOADERS+=cprt21 gprt21
|
||||
endif
|
||||
CPU_UNITS=x86 ports cpu mmx
|
||||
SYSINIT_UNITS=si_prc si_c21g si_c21 si_c si_dll
|
||||
endif
|
||||
@ -402,151 +407,151 @@ ifeq ($(FULL_TARGET),powerpc64-embedded)
|
||||
override TARGET_UNITS+=$(SYSTEMUNIT) $(SYSINIT_UNITS) unixtype ctypes baseunix strings objpas macpas syscall unixutil heaptrc lineinfo lnfodwrf termio unix linux initc cmem $(CPU_UNITS) crt printer linuxvcs sysutils typinfo math matrix varutils charset ucomplex getopts errors sockets gpm ipc serial terminfo dl dynlibs video mouse keyboard variants types dateutils sysconst fmtbcd cthreads classes fgl convutils stdconvs strutils rtlconsts dos objects cwstring fpcylix
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-linux)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-go32v2)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-win32)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-os2)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-freebsd)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-beos)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-netbsd)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-solaris)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-qnx)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-netware)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-openbsd)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-wdosx)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-darwin)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-emx)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-watcom)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-netwlibc)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-wince)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-embedded)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-linux)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-freebsd)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-netbsd)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-amiga)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-atari)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-openbsd)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-palmos)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),m68k-embedded)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-linux)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-netbsd)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-amiga)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-macos)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-darwin)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-morphos)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc-embedded)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),sparc-linux)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),sparc-netbsd)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),sparc-solaris)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),sparc-embedded)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-linux)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-freebsd)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-win64)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),x86_64-embedded)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-linux)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-palmos)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-wince)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-gba)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-nds)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),arm-embedded)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc64-linux)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
||||
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
override TARGET_LOADERS+=$(LOADERS)
|
||||
endif
|
||||
ifeq ($(FULL_TARGET),i386-linux)
|
||||
override TARGET_RSTS+=math varutils typinfo variants sysconst rtlconsts stdconvs
|
||||
|
@ -6,7 +6,7 @@
|
||||
main=rtl
|
||||
|
||||
[target]
|
||||
loaders=prt0 dllprt0 cprt0 gprt0 $(CRT21)
|
||||
loaders=$(LOADERS)
|
||||
units=$(SYSTEMUNIT) $(SYSINIT_UNITS) \
|
||||
unixtype ctypes baseunix strings objpas macpas syscall unixutil \
|
||||
heaptrc lineinfo lnfodwrf \
|
||||
@ -58,8 +58,14 @@ UNITPREFIX=rtl
|
||||
CPU_UNITS=
|
||||
SYSINIT_UNITS=
|
||||
|
||||
LOADER=prt0 dllprt0 cprt0 gprt0
|
||||
|
||||
ifeq ($(CPU_TARGET),i386)
|
||||
CRT21=cprt21 gprt21
|
||||
ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
|
||||
override LOADERS=
|
||||
else
|
||||
override LOADERS+=cprt21 gprt21
|
||||
endif
|
||||
CPU_UNITS=x86 ports cpu mmx
|
||||
SYSINIT_UNITS=si_prc si_c21g si_c21 si_c si_dll
|
||||
endif
|
||||
|
@ -11,7 +11,7 @@
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{$goto on}
|
||||
{
|
||||
Linux ELF startup code for Free Pascal
|
||||
|
||||
@ -39,40 +39,41 @@ procedure PASCALMAIN; external name 'PASCALMAIN';
|
||||
Shared library start/halt
|
||||
******************************************************************************}
|
||||
|
||||
procedure _FPC_shared_lib_start; assembler; nostackframe; public name '_start';
|
||||
asm
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
procedure _FPC_shared_lib_start(argc : dword;argv,envp : pointer); cdecl; public name '_start';
|
||||
begin
|
||||
{ we've to discuss about the use of this ;) }
|
||||
asm
|
||||
{ Save initial stackpointer }
|
||||
movl %esp,initialstkptr
|
||||
end;
|
||||
|
||||
{$ifdef FPC_PIC}
|
||||
call fpc_geteipasebx
|
||||
addl $_GLOBAL_OFFSET_TABLE_,%ebx
|
||||
{$endif}
|
||||
operatingsystem_parameter_argc:=argc; { Copy the argument count }
|
||||
operatingsystem_parameter_argv:=argv; { Copy the argument pointer }
|
||||
operatingsystem_parameter_envp:=envp; { Copy the environment pointer }
|
||||
|
||||
movl 8(%ebp),%eax
|
||||
movl 12(%ebp),%ecx
|
||||
movl 16(%ebp),%edx
|
||||
IsLibrary:=true;
|
||||
|
||||
movl %eax,operatingsystem_parameter_argc { Copy the argument count }
|
||||
movl %ecx,operatingsystem_parameter_argv { Copy the argument pointer }
|
||||
movl %edx,operatingsystem_parameter_envp { Copy the environment pointer }
|
||||
|
||||
{$ifdef FPC_PIC}
|
||||
movl ISLIBRARY@GOT(%ebx),%eax
|
||||
movb $1,(%eax)
|
||||
{$else}
|
||||
movb $1,ISLIBRARY
|
||||
{$endif}
|
||||
|
||||
{ Save initial stackpointer }
|
||||
movl %esp,initialstkptr
|
||||
|
||||
call PASCALMAIN
|
||||
|
||||
leave
|
||||
ret
|
||||
PASCALMAIN;
|
||||
end;
|
||||
|
||||
procedure initdummy; assembler; nostackframe;
|
||||
label
|
||||
FPC_LIB_START;
|
||||
asm
|
||||
.init
|
||||
.align 16
|
||||
.globl FPC_LIB_START
|
||||
// .type FPC_LIB_START,@function
|
||||
FPC_LIB_START:
|
||||
{$ifdef FPC_PIC}
|
||||
jmp _FPC_shared_lib_start@PLT
|
||||
{$else FPC_PIC}
|
||||
jmp _FPC_shared_lib_start
|
||||
{$endif FPC_PIC}
|
||||
.text
|
||||
end;
|
||||
|
||||
|
||||
procedure _FPC_shared_lib_haltproc; assembler; nostackframe; public name '_haltproc';
|
||||
asm
|
||||
{$ifdef FPC_PIC}
|
||||
@ -83,10 +84,10 @@ asm
|
||||
xorl %eax,%eax
|
||||
incl %eax { eax=1, exit call }
|
||||
{$ifdef FPC_PIC}
|
||||
pushl %ebx
|
||||
pushl %ebx
|
||||
movl ExitCode@GOT(%ebx),%ebx
|
||||
movzwl (%ebx),%ebx
|
||||
{$endif}
|
||||
{$endif}
|
||||
int $0x80
|
||||
jmp .Lhaltproc
|
||||
popl %ebx
|
||||
|
Loading…
Reference in New Issue
Block a user