* 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:
florian 2007-01-07 10:04:19 +00:00
parent c238bb15d1
commit c59c9cdfae
3 changed files with 96 additions and 84 deletions

View File

@ -241,8 +241,13 @@ UNIXINC=$(RTL)/unix
UNITPREFIX=rtl UNITPREFIX=rtl
CPU_UNITS= CPU_UNITS=
SYSINIT_UNITS= SYSINIT_UNITS=
LOADER=prt0 dllprt0 cprt0 gprt0
ifeq ($(CPU_TARGET),i386) 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 CPU_UNITS=x86 ports cpu mmx
SYSINIT_UNITS=si_prc si_c21g si_c21 si_c si_dll SYSINIT_UNITS=si_prc si_c21g si_c21 si_c si_dll
endif 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 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 endif
ifeq ($(FULL_TARGET),i386-linux) ifeq ($(FULL_TARGET),i386-linux)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-go32v2) ifeq ($(FULL_TARGET),i386-go32v2)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-win32) ifeq ($(FULL_TARGET),i386-win32)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-os2) ifeq ($(FULL_TARGET),i386-os2)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-freebsd) ifeq ($(FULL_TARGET),i386-freebsd)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-beos) ifeq ($(FULL_TARGET),i386-beos)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-netbsd) ifeq ($(FULL_TARGET),i386-netbsd)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-solaris) ifeq ($(FULL_TARGET),i386-solaris)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-qnx) ifeq ($(FULL_TARGET),i386-qnx)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-netware) ifeq ($(FULL_TARGET),i386-netware)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-openbsd) ifeq ($(FULL_TARGET),i386-openbsd)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-wdosx) ifeq ($(FULL_TARGET),i386-wdosx)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-darwin) ifeq ($(FULL_TARGET),i386-darwin)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-emx) ifeq ($(FULL_TARGET),i386-emx)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-watcom) ifeq ($(FULL_TARGET),i386-watcom)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-netwlibc) ifeq ($(FULL_TARGET),i386-netwlibc)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-wince) ifeq ($(FULL_TARGET),i386-wince)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-embedded) ifeq ($(FULL_TARGET),i386-embedded)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),m68k-linux) ifeq ($(FULL_TARGET),m68k-linux)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),m68k-freebsd) ifeq ($(FULL_TARGET),m68k-freebsd)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),m68k-netbsd) ifeq ($(FULL_TARGET),m68k-netbsd)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),m68k-amiga) ifeq ($(FULL_TARGET),m68k-amiga)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),m68k-atari) ifeq ($(FULL_TARGET),m68k-atari)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),m68k-openbsd) ifeq ($(FULL_TARGET),m68k-openbsd)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),m68k-palmos) ifeq ($(FULL_TARGET),m68k-palmos)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),m68k-embedded) ifeq ($(FULL_TARGET),m68k-embedded)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),powerpc-linux) ifeq ($(FULL_TARGET),powerpc-linux)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),powerpc-netbsd) ifeq ($(FULL_TARGET),powerpc-netbsd)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),powerpc-amiga) ifeq ($(FULL_TARGET),powerpc-amiga)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),powerpc-macos) ifeq ($(FULL_TARGET),powerpc-macos)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),powerpc-darwin) ifeq ($(FULL_TARGET),powerpc-darwin)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),powerpc-morphos) ifeq ($(FULL_TARGET),powerpc-morphos)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),powerpc-embedded) ifeq ($(FULL_TARGET),powerpc-embedded)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),sparc-linux) ifeq ($(FULL_TARGET),sparc-linux)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),sparc-netbsd) ifeq ($(FULL_TARGET),sparc-netbsd)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),sparc-solaris) ifeq ($(FULL_TARGET),sparc-solaris)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),sparc-embedded) ifeq ($(FULL_TARGET),sparc-embedded)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),x86_64-linux) ifeq ($(FULL_TARGET),x86_64-linux)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),x86_64-freebsd) ifeq ($(FULL_TARGET),x86_64-freebsd)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),x86_64-win64) ifeq ($(FULL_TARGET),x86_64-win64)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),x86_64-embedded) ifeq ($(FULL_TARGET),x86_64-embedded)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),arm-linux) ifeq ($(FULL_TARGET),arm-linux)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),arm-palmos) ifeq ($(FULL_TARGET),arm-palmos)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),arm-wince) ifeq ($(FULL_TARGET),arm-wince)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),arm-gba) ifeq ($(FULL_TARGET),arm-gba)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),arm-nds) ifeq ($(FULL_TARGET),arm-nds)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),arm-embedded) ifeq ($(FULL_TARGET),arm-embedded)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),powerpc64-linux) ifeq ($(FULL_TARGET),powerpc64-linux)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),powerpc64-embedded) ifeq ($(FULL_TARGET),powerpc64-embedded)
override TARGET_LOADERS+=prt0 dllprt0 cprt0 gprt0 $(CRT21) override TARGET_LOADERS+=$(LOADERS)
endif endif
ifeq ($(FULL_TARGET),i386-linux) ifeq ($(FULL_TARGET),i386-linux)
override TARGET_RSTS+=math varutils typinfo variants sysconst rtlconsts stdconvs override TARGET_RSTS+=math varutils typinfo variants sysconst rtlconsts stdconvs

View File

@ -6,7 +6,7 @@
main=rtl main=rtl
[target] [target]
loaders=prt0 dllprt0 cprt0 gprt0 $(CRT21) loaders=$(LOADERS)
units=$(SYSTEMUNIT) $(SYSINIT_UNITS) \ units=$(SYSTEMUNIT) $(SYSINIT_UNITS) \
unixtype ctypes baseunix strings objpas macpas syscall unixutil \ unixtype ctypes baseunix strings objpas macpas syscall unixutil \
heaptrc lineinfo lnfodwrf \ heaptrc lineinfo lnfodwrf \
@ -58,8 +58,14 @@ UNITPREFIX=rtl
CPU_UNITS= CPU_UNITS=
SYSINIT_UNITS= SYSINIT_UNITS=
LOADER=prt0 dllprt0 cprt0 gprt0
ifeq ($(CPU_TARGET),i386) 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 CPU_UNITS=x86 ports cpu mmx
SYSINIT_UNITS=si_prc si_c21g si_c21 si_c si_dll SYSINIT_UNITS=si_prc si_c21g si_c21 si_c si_dll
endif endif

View File

@ -11,7 +11,7 @@
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************} **********************************************************************}
{$goto on}
{ {
Linux ELF startup code for Free Pascal Linux ELF startup code for Free Pascal
@ -39,40 +39,41 @@ procedure PASCALMAIN; external name 'PASCALMAIN';
Shared library start/halt Shared library start/halt
******************************************************************************} ******************************************************************************}
procedure _FPC_shared_lib_start; assembler; nostackframe; public name '_start'; 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 asm
pushl %ebp
movl %esp,%ebp
{$ifdef FPC_PIC}
call fpc_geteipasebx
addl $_GLOBAL_OFFSET_TABLE_,%ebx
{$endif}
movl 8(%ebp),%eax
movl 12(%ebp),%ecx
movl 16(%ebp),%edx
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 } { Save initial stackpointer }
movl %esp,initialstkptr movl %esp,initialstkptr
call PASCALMAIN
leave
ret
end; end;
operatingsystem_parameter_argc:=argc; { Copy the argument count }
operatingsystem_parameter_argv:=argv; { Copy the argument pointer }
operatingsystem_parameter_envp:=envp; { Copy the environment pointer }
IsLibrary:=true;
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'; procedure _FPC_shared_lib_haltproc; assembler; nostackframe; public name '_haltproc';
asm asm
{$ifdef FPC_PIC} {$ifdef FPC_PIC}