* 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
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

View File

@ -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

View File

@ -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