Forráskód Böngészése

- Removed need of assembler startup files for wince. Now compiler directly creates .pdata section needed for arm-wince exception handling.

git-svn-id: trunk@3764 -
yury 19 éve
szülő
commit
550626ef34

+ 2 - 0
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 }

+ 2 - 0
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',

+ 1 - 0
compiler/i386/ag386nsm.pas

@@ -360,6 +360,7 @@ interface
           '.rodata',
           '.bss',
           '.tbss',
+          '.pdata',
           '.text',
           '.stab',
           '.stabstr',

+ 2 - 0
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],

+ 8 - 5
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');

+ 1 - 0
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',

+ 20 - 0
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

+ 1 - 1
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',
          '','','','','','','','','','','',''
       );

+ 3 - 5
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$*))');

+ 2 - 2
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',
         '',
         '','','','',

+ 15 - 234
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,13 +1412,10 @@ override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
 override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
 endif
 endif
-ifdef CREATESHARED
-override FPCOPT+=-Cg
-ifeq ($(CPU_TARGET),i386)
-override FPCOPT+=-Aas
-endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(FPC_VERSION),1.0.6)
+override FPCOPTDEF+=HASUNIX
 endif
-ifdef LINKSHARED
 endif
 ifdef OPT
 override FPCOPT+=$(OPT)
@@ -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)

+ 0 - 10
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)
 #

+ 31 - 8
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
 ****************************************************************************}