diff --git a/compiler/aasmbase.pas b/compiler/aasmbase.pas index f8ee2f15e4..0437b89b0c 100644 --- a/compiler/aasmbase.pas +++ b/compiler/aasmbase.pas @@ -56,6 +56,8 @@ interface sec_rodata, sec_bss, sec_threadvar, + { used for wince exception handling } + sec_pdata, { used for darwin import stubs } sec_stub, { stabs } diff --git a/compiler/aggas.pas b/compiler/aggas.pas index b93e22cc45..98ef43310e 100644 --- a/compiler/aggas.pas +++ b/compiler/aggas.pas @@ -244,6 +244,7 @@ implementation {$endif arm} '.bss', '.threadvar', + '.pdata', '', { stubs } '.stab', '.stabstr', @@ -259,6 +260,7 @@ implementation '.data.rel', '.bss', '.threadvar', + '.pdata', '', { stubs } '.stab', '.stabstr', diff --git a/compiler/i386/ag386nsm.pas b/compiler/i386/ag386nsm.pas index 03f952d1de..f3c16c85be 100644 --- a/compiler/i386/ag386nsm.pas +++ b/compiler/i386/ag386nsm.pas @@ -360,6 +360,7 @@ interface '.rodata', '.bss', '.tbss', + '.pdata', '.text', '.stab', '.stabstr', diff --git a/compiler/ogbase.pas b/compiler/ogbase.pas index f571ddf056..1fa4a9ecb3 100644 --- a/compiler/ogbase.pas +++ b/compiler/ogbase.pas @@ -737,6 +737,7 @@ implementation 'roData', 'bss', 'threadvar', + 'pdata', 'stub', 'stab','stabstr', 'iData2','iData4','iData5','iData6','iData7','eData', @@ -762,6 +763,7 @@ implementation {roData} [oso_Data,oso_load,oso_write,oso_keep], {bss} [oso_load,oso_write,oso_keep], {threadvar} [oso_load,oso_write], + {pdata} [oso_load,oso_readonly,oso_keep], {stub} [oso_Data,oso_load,oso_readonly,oso_executable], {stab} [oso_Data,oso_noload,oso_debug], {stabstr} [oso_Data,oso_noload,oso_strings,oso_debug], diff --git a/compiler/ogcoff.pas b/compiler/ogcoff.pas index 97ff6eb02c..c448774c4a 100644 --- a/compiler/ogcoff.pas +++ b/compiler/ogcoff.pas @@ -473,6 +473,7 @@ implementation coffsecnames : array[TAsmSectiontype] of string[17] = ('', '.text','.data','.data','.bss','.tls', '.text', + '.pdata', '.stab','.stabstr', '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata', '.eh_frame', @@ -1918,7 +1919,10 @@ const win32stub : array[0..131] of byte=( inherited create; win32:=awin32; if win32 then - imagebase:=$400000; + if target_info.system in [system_arm_wince] then + imagebase:=$10000 + else + imagebase:=$400000; end; @@ -2455,8 +2459,6 @@ const win32stub : array[0..131] of byte=( begin with LinkScript do begin - if target_info.system in [system_arm_wince,system_i386_wince] then - Concat('READOBJECT ' + FindObjectFile('wprt0','',false)); Concat('READUNITOBJECTS'); if IsSharedLibrary then begin @@ -2469,8 +2471,6 @@ const win32stub : array[0..131] of byte=( end else begin - if target_info.system in [system_arm_wince] then - Concat('IMAGEBASE $10000'); if apptype=app_gui then Concat('ENTRYNAME _WinMainCRTStartup') else @@ -2478,6 +2478,9 @@ const win32stub : array[0..131] of byte=( end; Concat('HEADER'); Concat('EXESECTION .text'); +{$ifdef arm} + Concat(' OBJSECTION .pdata.FPC_EH_PROLOG'); +{$endif arm} Concat(' OBJSECTION .text*'); Concat(' SYMBOL etext'); Concat('ENDEXESECTION'); diff --git a/compiler/ogelf.pas b/compiler/ogelf.pas index ff7972ad5c..22c11e9909 100644 --- a/compiler/ogelf.pas +++ b/compiler/ogelf.pas @@ -583,6 +583,7 @@ implementation {$else userodata} '.text','.data','.data','.bss','.threadvar', {$endif userodata} + '.pdata', '.text', { darwin stubs } '.stab','.stabstr', '.idata$2','.idata$4','.idata$5','.idata$6','.idata$7','.edata', diff --git a/compiler/pmodules.pas b/compiler/pmodules.pas index 5f7036d612..8cd4243213 100644 --- a/compiler/pmodules.pas +++ b/compiler/pmodules.pas @@ -221,6 +221,19 @@ implementation ltvTable.Free; end; +{$ifdef arm} + procedure InsertPData; + begin + new_section(current_asmdata.asmlists[al_globals],sec_pdata,'FPC_EH_PROLOG',sizeof(aint)); + current_asmdata.asmlists[al_globals].concat(Tai_const.Createname('_ARM_ExceptionHandler', 0)); + current_asmdata.asmlists[al_globals].concat(Tai_const.Create_32bit(0)); + current_asmdata.asmlists[al_globals].concat(Tai_symbol.Createname_global('FPC_EH_CODE_START',AT_DATA,0)); + + new_section(current_asmdata.asmlists[al_globals],sec_pdata,'',sizeof(aint)); + current_asmdata.asmlists[al_globals].concat(Tai_const.Createname('FPC_EH_CODE_START', 0)); + current_asmdata.asmlists[al_globals].concat(Tai_const.Create_32bit($cfffff02)); + end; +{$endif arm} Procedure InsertResourceInfo; @@ -1376,6 +1389,13 @@ implementation { do we need to add the variants unit? } maybeloadvariantsunit; + +{$ifdef arm} + { Insert .pdata section for arm-wince. + It is needed for exception handling. } + if target_info.system in [system_arm_wince] then + InsertPData; +{$endif arm} { generate debuginfo } if (cs_debuginfo in aktmoduleswitches) then diff --git a/compiler/powerpc/agppcmpw.pas b/compiler/powerpc/agppcmpw.pas index 16fc943729..bcfe6fa31d 100644 --- a/compiler/powerpc/agppcmpw.pas +++ b/compiler/powerpc/agppcmpw.pas @@ -72,7 +72,7 @@ interface 'csect', {code} 'csect', {data} 'csect', {read only data} - 'csect', {bss} 'csect', + 'csect', {bss} 'csect', '', 'csect','csect','csect','csect', '','','','','','','','','','','','' ); diff --git a/compiler/systems/t_win.pas b/compiler/systems/t_win.pas index 26a7c8eb8d..b5c7b0f5fa 100644 --- a/compiler/systems/t_win.pas +++ b/compiler/systems/t_win.pas @@ -997,11 +997,6 @@ begin if not ObjectFiles.Empty then begin Add('INPUT('); - { For wince external startup file is used and placed first, } - { because ARM prolog structure must be located at the very } - { beginning of code. Otherwise exceptions do not work properly. } - if target_info.system in [system_arm_wince,system_i386_wince] then - LinkRes.AddFileName(MaybeQuoted(FindObjectFile('wprt0','',false))); while not ObjectFiles.Empty do begin s:=ObjectFiles.GetFirst; @@ -1054,6 +1049,9 @@ begin Add(' . = ALIGN(__section_alignment__);'); Add(' .text __image_base__ + ( __section_alignment__ < 0x1000 ? . : __section_alignment__ ) :'); Add(' {'); +{$ifdef arm} + Add(' *(.pdata.FPC_EH_PROLOG)'); +{$endif arm} Add(' *(.init)'); add(' *(.text .stub .text.* .gnu.linkonce.t.*)'); Add(' *(SORT(.text$*))'); diff --git a/compiler/x86/agx86int.pas b/compiler/x86/agx86int.pas index ba935a32b2..e4206bf198 100644 --- a/compiler/x86/agx86int.pas +++ b/compiler/x86/agx86int.pas @@ -60,7 +60,7 @@ implementation secnames : array[TAsmSectiontype] of string[4] = ('', 'CODE','DATA','DATA','BSS','', - '','','','','', + '','','','','','', '','','','', '', '','','','', @@ -70,7 +70,7 @@ implementation secnamesml64 : array[TAsmSectiontype] of string[7] = ('', '_TEXT','_DATE','_DATA','_BSS','', - '','','', + '','','','', 'idata$2','idata$4','idata$5','idata$6','idata$7','edata', '', '','','','', diff --git a/rtl/wince/Makefile b/rtl/wince/Makefile index b05d4ff061..4f9f359733 100644 --- a/rtl/wince/Makefile +++ b/rtl/wince/Makefile @@ -1,8 +1,8 @@ # -# Don't edit, this file is generated by FPCMake Version 2.0.0 [2006/05/11] +# Don't edit, this file is generated by FPCMake Version 2.0.0 [2005/11/26] # default: all -MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd x86_64-win64 arm-linux arm-palmos arm-wince powerpc64-linux +MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-emx i386-watcom i386-netwlibc i386-wince m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd x86_64-win64 arm-linux arm-wince powerpc64-linux BSDs = freebsd netbsd openbsd darwin UNIXs = linux $(BSDs) solaris qnx LIMIT83fs = go32v2 os2 emx watcom @@ -284,9 +284,6 @@ endif ifeq ($(FULL_TARGET),i386-wdosx) override TARGET_UNITS+=$(SYSTEMUNIT) ctypes objpas macpas strings lineinfo heaptrc windows messages dynlibs dos objects rtlconsts sysconst sysutils typinfo types classes strutils convutils math dateutils varutils variants matrix ucomplex charset getopts winsock winsock2 sockets endif -ifeq ($(FULL_TARGET),i386-darwin) -override TARGET_UNITS+=$(SYSTEMUNIT) ctypes objpas macpas strings lineinfo heaptrc windows messages dynlibs dos objects rtlconsts sysconst sysutils typinfo types classes strutils convutils math dateutils varutils variants matrix ucomplex charset getopts winsock winsock2 sockets -endif ifeq ($(FULL_TARGET),i386-emx) override TARGET_UNITS+=$(SYSTEMUNIT) ctypes objpas macpas strings lineinfo heaptrc windows messages dynlibs dos objects rtlconsts sysconst sysutils typinfo types classes strutils convutils math dateutils varutils variants matrix ucomplex charset getopts winsock winsock2 sockets endif @@ -356,132 +353,12 @@ endif ifeq ($(FULL_TARGET),arm-linux) override TARGET_UNITS+=$(SYSTEMUNIT) ctypes objpas macpas strings lineinfo heaptrc windows messages dynlibs dos objects rtlconsts sysconst sysutils typinfo types classes strutils convutils math dateutils varutils variants matrix ucomplex charset getopts winsock winsock2 sockets endif -ifeq ($(FULL_TARGET),arm-palmos) -override TARGET_UNITS+=$(SYSTEMUNIT) ctypes objpas macpas strings lineinfo heaptrc windows messages dynlibs dos objects rtlconsts sysconst sysutils typinfo types classes strutils convutils math dateutils varutils variants matrix ucomplex charset getopts winsock winsock2 sockets -endif ifeq ($(FULL_TARGET),arm-wince) override TARGET_UNITS+=$(SYSTEMUNIT) ctypes objpas macpas strings lineinfo heaptrc windows messages dynlibs dos objects rtlconsts sysconst sysutils typinfo types classes strutils convutils math dateutils varutils variants matrix ucomplex charset getopts winsock winsock2 sockets endif ifeq ($(FULL_TARGET),powerpc64-linux) override TARGET_UNITS+=$(SYSTEMUNIT) ctypes objpas macpas strings lineinfo heaptrc windows messages dynlibs dos objects rtlconsts sysconst sysutils typinfo types classes strutils convutils math dateutils varutils variants matrix ucomplex charset getopts winsock winsock2 sockets endif -ifeq ($(FULL_TARGET),i386-linux) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-go32v2) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-win32) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-os2) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-freebsd) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-beos) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-netbsd) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-solaris) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-qnx) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-netware) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-openbsd) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-wdosx) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-darwin) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-emx) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-watcom) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-netwlibc) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),i386-wince) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),m68k-linux) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),m68k-freebsd) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),m68k-netbsd) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),m68k-amiga) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),m68k-atari) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),m68k-openbsd) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),m68k-palmos) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),powerpc-linux) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),powerpc-netbsd) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),powerpc-macos) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),powerpc-darwin) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),powerpc-morphos) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),sparc-linux) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),sparc-netbsd) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),sparc-solaris) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),x86_64-linux) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),x86_64-freebsd) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),x86_64-win64) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),arm-linux) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),arm-palmos) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),arm-wince) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif -ifeq ($(FULL_TARGET),powerpc64-linux) -override TARGET_LOADERS+=wprt0 #wdllprt0 -endif override INSTALL_FPCPACKAGE=y ifeq ($(FULL_TARGET),i386-linux) override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(RTL)/win @@ -519,9 +396,6 @@ endif ifeq ($(FULL_TARGET),i386-wdosx) override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(RTL)/win endif -ifeq ($(FULL_TARGET),i386-darwin) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(RTL)/win -endif ifeq ($(FULL_TARGET),i386-emx) override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(RTL)/win endif @@ -591,9 +465,6 @@ endif ifeq ($(FULL_TARGET),arm-linux) override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(RTL)/win endif -ifeq ($(FULL_TARGET),arm-palmos) -override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(RTL)/win -endif ifeq ($(FULL_TARGET),arm-wince) override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC) $(RTL)/win endif @@ -636,9 +507,6 @@ endif ifeq ($(FULL_TARGET),i386-wdosx) override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) endif -ifeq ($(FULL_TARGET),i386-darwin) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) -endif ifeq ($(FULL_TARGET),i386-emx) override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) endif @@ -708,9 +576,6 @@ endif ifeq ($(FULL_TARGET),arm-linux) override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) endif -ifeq ($(FULL_TARGET),arm-palmos) -override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) -endif ifeq ($(FULL_TARGET),arm-wince) override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) endif @@ -900,9 +765,6 @@ endif ifndef INSTALL_DATADIR INSTALL_DATADIR=$(INSTALL_BASEDIR) endif -ifndef INSTALL_SHAREDDIR -INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib -endif ifdef CROSSCOMPILE ifndef CROSSBINDIR CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX)) @@ -923,9 +785,7 @@ ASMEXT=.s SMARTEXT=.sl STATICLIBEXT=.a SHAREDLIBEXT=.so -SHAREDLIBPREFIX=libfp STATICLIBPREFIX=libp -IMPORTLIBPREFIX=libimp RSTEXT=.rst ifeq ($(findstring 1.0.,$(FPC_VERSION)),) ifeq ($(OS_TARGET),go32v1) @@ -1358,17 +1218,12 @@ endif endif export ZIPPROG ifndef TARPROG -TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(TARPROG),) TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH)))) ifeq ($(TARPROG),) TARPROG= __missing_command_TARPROG else TARPROG:=$(firstword $(TARPROG)) endif -else -TARPROG:=$(firstword $(TARPROG)) -endif endif export TARPROG ASNAME=$(BINUTILSPREFIX)as @@ -1461,9 +1316,6 @@ endif ifneq ($(OS_TARGET),$(OS_SOURCE)) override FPCOPT+=-T$(OS_TARGET) endif -ifneq ($(CPU_TARGET),$(CPU_SOURCE)) -override FPCOPT+=-P$(CPU_TARGET) -endif ifeq ($(OS_SOURCE),openbsd) override FPCOPT+=-FD$(NEW_BINUTILS_PATH) endif @@ -1498,15 +1350,14 @@ override FPCOPT+=-gl override FPCOPTDEF+=DEBUG endif ifdef RELEASE -ifneq ($(findstring 2.0.,$(FPC_VERSION)),) ifeq ($(CPU_TARGET),i386) FPCCPUOPT:=-OG2p3 -endif +else ifeq ($(CPU_TARGET),powerpc) FPCCPUOPT:=-O1r -endif else -FPCCPUOPT:=-O2 +FPCCPUOPT:= +endif endif override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n override FPCOPTDEF+=RELEASE @@ -1515,7 +1366,9 @@ ifdef STRIP override FPCOPT+=-Xs endif ifdef OPTIMIZE -override FPCOPT+=-O2 +ifeq ($(CPU_TARGET),i386) +override FPCOPT+=-OG2p3 +endif endif ifdef VERBOSE override FPCOPT+=-vwni @@ -1559,14 +1412,11 @@ override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR) override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX) endif endif -ifdef CREATESHARED -override FPCOPT+=-Cg -ifeq ($(CPU_TARGET),i386) -override FPCOPT+=-Aas +ifeq ($(OS_TARGET),linux) +ifeq ($(FPC_VERSION),1.0.6) +override FPCOPTDEF+=HASUNIX endif endif -ifdef LINKSHARED -endif ifdef OPT override FPCOPT+=$(OPT) endif @@ -1581,14 +1431,6 @@ override FPCEXTCMD:=$(FPCOPT) override FPCOPT:=!FPCEXTCMD export FPCEXTCMD endif -override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET) -override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE) -ifneq ($(AFULL_TARGET),$(AFULL_SOURCE)) -override ACROSSCOMPILE=1 -endif -ifdef ACROSSCOMPILE -override FPCOPT+=$(CROSSOPT) -endif override COMPILER:=$(FPC) $(FPCOPT) ifeq (,$(findstring -s ,$(COMPILER))) EXECPPAS= @@ -1597,33 +1439,6 @@ ifeq ($(FULL_SOURCE),$(FULL_TARGET)) EXECPPAS:=@$(PPAS) endif endif -.PHONY: fpc_loaders -ifneq ($(TARGET_LOADERS),) -override ALLTARGET+=fpc_loaders -override CLEANTARGET+=fpc_loaders_clean -override INSTALLTARGET+=fpc_loaders_install -override LOADEROFILES:=$(addsuffix $(OEXT),$(TARGET_LOADERS)) -endif -%$(OEXT): %$(LOADEREXT) -ifdef COMPILER_UNITTARGETDIR - $(AS) -o $(COMPILER_UNITTARGETDIR)/$*$(OEXT) $< -else - $(AS) -o $*$(OEXT) $< -endif -fpc_loaders: $(COMPILER_UNITTARGETDIR) $(LOADEROFILES) -fpc_loaders_clean: -ifdef COMPILER_UNITTARGETDIR - -$(DEL) $(addprefix $(COMPILER_UNITTARGETDIR)/,$(LOADEROFILES)) -else - -$(DEL) $(LOADEROFILES) -endif -fpc_loaders_install: - $(MKDIR) $(INSTALL_UNITDIR) -ifdef COMPILER_UNITTARGETDIR - $(INSTALL) $(addprefix $(COMPILER_UNITTARGETDIR)/,$(LOADEROFILES)) $(INSTALL_UNITDIR) -else - $(INSTALL) $(LOADEROFILES) $(INSTALL_UNITDIR) -endif .PHONY: fpc_units ifneq ($(TARGET_UNITS),) override ALLTARGET+=fpc_units @@ -1637,7 +1452,7 @@ ifdef TARGET_RSTS override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS)) override CLEANRSTFILES+=$(RSTFILES) endif -.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared +.PHONY: fpc_all fpc_smart fpc_debug fpc_release $(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET) @$(ECHOREDIR) Compiled > $(FPCMADE) fpc_all: $(FPCMADE) @@ -1678,38 +1493,6 @@ vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) vpath %$(OEXT) $(COMPILER_UNITTARGETDIR) vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR) -.PHONY: fpc_shared -override INSTALLTARGET+=fpc_shared_install -ifndef SHARED_LIBVERSION -SHARED_LIBVERSION=$(FPC_VERSION) -endif -ifndef SHARED_LIBNAME -SHARED_LIBNAME=$(PACKAGE_NAME) -endif -ifndef SHARED_FULLNAME -SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT) -endif -ifndef SHARED_LIBUNITS -SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS) -override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS)) -endif -fpc_shared: -ifdef HASSHAREDLIB - $(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1 -ifneq ($(SHARED_BUILD),n) - $(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR) -endif -else - @$(ECHO) Shared Libraries not supported -endif -fpc_shared_install: -ifneq ($(SHARED_BUILD),n) -ifneq ($(SHARED_LIBUNITS),) -ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),) - $(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR) -endif -endif -endif .PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall ifdef INSTALL_UNITS override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS)) @@ -1718,7 +1501,7 @@ ifdef INSTALL_BUILDUNIT override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES)) endif ifdef INSTALLPPUFILES -override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) +override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) ifneq ($(UNITTARGETDIRPREFIX),) override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES))) override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES)))) @@ -1788,7 +1571,7 @@ ifdef CLEAN_UNITS override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS)) endif ifdef CLEANPPUFILES -override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) +override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) ifdef DEBUGSYMEXT override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES)) endif @@ -1959,7 +1742,7 @@ smart: fpc_smart release: fpc_release units: fpc_units examples: -shared: fpc_shared +shared: install: fpc_install sourceinstall: fpc_sourceinstall exampleinstall: fpc_exampleinstall @@ -1983,8 +1766,6 @@ SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES)) include $(PROCINC)/makefile.cpu SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES)) SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS) winres.inc -wprt0$(OEXT) : $(CPU_TARGET)/$(PRT0).as - $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)wprt0$(OEXT) $(CPU_TARGET)/$(PRT0).as $(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp $(SYSDEPS) $(COMPILER) -Us -Sg $(SYSTEMUNIT).pp objpas$(PPUEXT): $(OBJPASDIR)/objpas.pp $(INC)/except.inc $(SYSTEMUNIT)$(PPUEXT) diff --git a/rtl/wince/Makefile.fpc b/rtl/wince/Makefile.fpc index e4b8026c58..0cae9d4892 100644 --- a/rtl/wince/Makefile.fpc +++ b/rtl/wince/Makefile.fpc @@ -6,7 +6,6 @@ main=rtl [target] -loaders= wprt0 #wdllprt0 units=$(SYSTEMUNIT) ctypes objpas macpas strings \ lineinfo heaptrc \ windows messages dynlibs \ @@ -88,15 +87,6 @@ SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES)) SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS) winres.inc -# -# Loaders -# - -wprt0$(OEXT) : $(CPU_TARGET)/$(PRT0).as - $(AS) $(ASTARGET) -o $(UNITTARGETDIRPREFIX)wprt0$(OEXT) $(CPU_TARGET)/$(PRT0).as - -#wdllprt0$(OEXT) : wdllprt0.as - # # System Units (System, Objpas, Strings) # diff --git a/rtl/wince/system.pp b/rtl/wince/system.pp index 7f2f52bbb3..63a70a0831 100644 --- a/rtl/wince/system.pp +++ b/rtl/wince/system.pp @@ -844,14 +844,6 @@ begin end; end; -procedure DLLMainStartup(_hinstance,_dllreason,_dllparam:longint);stdcall;public name '_FPC_DLLMainStartup'; -begin - sysinstance:=_hinstance; - dllreason:=_dllreason; - dllparam:=_dllparam; - DLL_Entry; -end; - {$ifdef WINCE_EXCEPTION_HANDLING} // @@ -1441,6 +1433,37 @@ begin system_exit; end; +procedure _FPC_mainCRTStartup;stdcall;public name '_mainCRTStartup'; +begin + IsConsole:=True; + Exe_entry; +end; + +procedure _FPC_WinMainCRTStartup;stdcall;public name '_WinMainCRTStartup'; +begin + IsConsole:=False; + Exe_entry; +end; + +procedure _FPC_DLLMainCRTStartup(_hinstance,_dllreason,_dllparam:longint);stdcall;public name '_DLLMainCRTStartup'; +begin + IsConsole:=true; + sysinstance:=_hinstance; + dllreason:=_dllreason; + dllparam:=_dllparam; + DLL_Entry; +end; + + +procedure _FPC_DLLWinMainCRTStartup(_hinstance,_dllreason,_dllparam:longint);stdcall;public name '_DLLWinMainCRTStartup'; +begin + IsConsole:=false; + sysinstance:=_hinstance; + dllreason:=_dllreason; + dllparam:=_dllparam; + DLL_Entry; +end; + {**************************************************************************** OS dependend widestrings ****************************************************************************}