merge from SF
authorTom Sutcliffe <thomas.sutcliffe@accenture.com>
Wed, 28 Jul 2010 18:43:53 +0100
changeset 12 d0b16e01f384
parent 11 8a3293f6c06f (current diff)
parent 10 ba0a96c1cc51 (diff)
child 13 eb50996ae8a8
child 16 18a55d594fba
merge from SF
documentation/common_mmh.pod
--- a/build/common/bld.inf	Wed Jul 28 18:43:05 2010 +0100
+++ b/build/common/bld.inf	Wed Jul 28 18:43:53 2010 +0100
@@ -33,7 +33,9 @@
 #include "..\..\plugins\consoles\rcons\group\bld.inf"
 #include "..\..\plugins\consoles\vt100cons\group\bld.inf"
 #include "..\..\plugins\consoles\win32cons\group\bld.inf"
+#ifdef FSHELL_TESTEXECUTE_SUPPORT
 #include "..\..\plugins\consoles\tefcons\bld.inf"
+#endif
 #include "..\..\plugins\networking\nullnif\group\bld.inf"
 #include "..\..\plugins\networking\tcpcsy\group\bld.inf"
 #include "..\..\plugins\networking\winsockprt\group\bld.inf"
--- a/build/common/common.mmh	Wed Jul 28 18:43:05 2010 +0100
+++ b/build/common/common.mmh	Wed Jul 28 18:43:53 2010 +0100
@@ -88,6 +88,9 @@
 #ifndef FSHELL_NO_MD4_SUPPORT
 #define FSHELL_MD4_SUPPORT
 #endif
+#ifndef FSHELL_NO_SPCRE_SUPPORT
+#define FSHELL_SPCRE_SUPPORT
+#endif
 
 //
 // PlatSec.
--- a/build/s60/platform_generic.mmh	Wed Jul 28 18:43:05 2010 +0100
+++ b/build/s60/platform_generic.mmh	Wed Jul 28 18:43:53 2010 +0100
@@ -31,6 +31,6 @@
 #define SYMBIAN_JAVA_NOT_INCLUDED
 #endif
 
-#define FSHELL_SPCRE_SUPPORT
+#define FSHELL_TESTEXECUTE_SUPPORT
 
 #endif // FSHELL_PLATFORM_GENERIC_MMH
--- a/commands/group/bld.inf	Wed Jul 28 18:43:05 2010 +0100
+++ b/commands/group/bld.inf	Wed Jul 28 18:43:53 2010 +0100
@@ -37,7 +37,6 @@
 ..\fed\group\fed.cif                     z:\resource\cif\fshell\fed.cif
 ..\snake\snake.cif                       z:\resource\cif\fshell\snake.cif
 ..\iniedit\iniedit.cif                   z:\resource\cif\fshell\iniedit.cif
-..\testexecute\testexecute.cif           z:\resource\cif\fshell\testexecute.cif
 
 PRJ_MMPFILES
 ..\cat\cat.mmp
@@ -61,7 +60,6 @@
 ..\fed\group\fed.mmp
 ..\snake\snake.mmp
 ..\iniedit\iniedit.mmp
-..\testexecute\testexecute.mmp
 
 #ifdef FSHELL_CORE_SUPPORT_SWI
 PRJ_EXPORTS
@@ -447,3 +445,10 @@
 PRJ_MMPFILES
 ..\memspy\memspy.mmp
 #endif
+
+#ifdef FSHELL_TESTEXECUTE_SUPPORT
+PRJ_EXPORTS
+..\testexecute\testexecute.mmp
+PRJ_MMPFILES
+..\testexecute\testexecute.cif           z:\resource\cif\fshell\testexecute.cif
+#endif
--- a/commands/group/fshell_commands.iby	Wed Jul 28 18:43:05 2010 +0100
+++ b/commands/group/fshell_commands.iby	Wed Jul 28 18:43:53 2010 +0100
@@ -369,7 +369,9 @@
 FSHELL_COMMAND_INFO_FILE(fshell,top.cif)
 #endif
 
+#ifdef FSHELL_TESTEXECUTE_SUPPORT
 FSHELL_EXECUTABLE_FILE(fshell_testexecute.exe)
 FSHELL_COMMAND_INFO_FILE(fshell,testexecute.cif)
+#endif
 
 #endif // __FSHELL_COMMANDS_IBY__
--- a/core/src/command_factory.cpp	Wed Jul 28 18:43:05 2010 +0100
+++ b/core/src/command_factory.cpp	Wed Jul 28 18:43:53 2010 +0100
@@ -472,10 +472,6 @@
 			}
 		}
 
-	//_LIT(KDllExtension, ".dll");
-	//TUidType dllUids(KNullUid, KFshellDllUid, KNullUid);
-	//AppendExternalCommandsL(dllUids, KDllExtension);
-
 	_LIT(KExeExtension, ".exe");
 	TUidType exeUids(KNullUid, KFshellExeUid, KNullUid);
 	AppendExternalCommandsL(exeUids, KExeExtension);
--- a/documentation/common_mmh.pod	Wed Jul 28 18:43:05 2010 +0100
+++ b/documentation/common_mmh.pod	Wed Jul 28 18:43:53 2010 +0100
@@ -202,7 +202,7 @@
 
 Indicates that the baseline is recent enough to be aware of the flexible memory model. It doesn't necessarily mean that the flexible model is actually the one being used. It generally guards kernel APIs that weren't introduced until the FMM was (such as Kern::ChunkUserBase).
 
-=item FSHELL_SPCRE_SUPPORT
+=item FSHELL_[NO_]SPCRE_SUPPORT
 
 The regular expression libraries spcre.dll and libpcre.dll are available.
 
@@ -214,6 +214,10 @@
 
 The MemSpy Engine APIs are available.
 
+=item FSHELL_TESTEXECUTE_SUPPORT
+
+The TestExecute APIs are available.
+
 =back
 
 A couple of further macros follow - these are specifically for platforms that provide an custom implementation of the relevant command rather than using fshell's built-in version.
--- a/documentation/fshell_builddocs.mk	Wed Jul 28 18:43:05 2010 +0100
+++ b/documentation/fshell_builddocs.mk	Wed Jul 28 18:43:53 2010 +0100
@@ -9,7 +9,7 @@
 # Initial Contributors:
 # Accenture - Initial contribution
 #
-MAKMAKE :
+BLD :
 	..\tools\fsh-builddocs -i $(EPOCROOT)epoc32/include pod-list.txt
 
 RELEASABLES :
@@ -18,4 +18,4 @@
 CLEAN :
 	..\tools\fsh-builddocs -i $(EPOCROOT)epoc32/include pod-list.txt -c
 
-BLD FREEZE LIB CLEANLIB RESOURCE SAVESPACE FINAL : 
+MAKMAKE FREEZE LIB CLEANLIB RESOURCE SAVESPACE FINAL : 
--- a/documentation/getting_started.pod	Wed Jul 28 18:43:05 2010 +0100
+++ b/documentation/getting_started.pod	Wed Jul 28 18:43:53 2010 +0100
@@ -14,6 +14,8 @@
 
 __END__
 
+=head1 Getting started with FShell
+
 =head1 Retreiving the FShell Source Code
 
 I<Todo - add instructions for accessing the Mercurial repository.>
@@ -32,7 +34,7 @@
 
 =back
 
-Each of these platforms have a separate directory with F<\fshell\build>. In some platforms there may be further separate sub-directories for specific variants of the platform. You need to identify a suitable directory (that contains a file named F<bld.inf>) from which to build from. Open a command prompt and C<cd> to this directory.
+Each of these platforms have a separate directory with F<\fshell\build>. In some platforms there may be further separate sub-directories for specific variants of the platform. You need to identify a suitable directory (that contains a file named F<bld.inf>) from which to build from. For example to build for the Symbian^3 release you need to build from F<\fshell\build\sf\3>. Open a command prompt and C<cd> to this directory.
 
 You also need to identify the type of binaries you want to build. Common ones are:
 
@@ -48,11 +50,11 @@
 
 =item * C<gcce>
 
-Used for running fshell on either physical or simulated ARM hardware. Requires an installation of the GCC-E. I<Todo - does the SF provide builds of GCC-E?>
+Used for running fshell on either physical or simulated ARM hardware. Requires an installation of the GCC crosscompiler (for arm-none-symbianelf) - see here for more information: http://developer.symbian.org/wiki/index.php/The_GCCE_toolchain_initiative.
 
 =back
 
-Lastly, you need to identify the build variant you plan to use, either debug (C<udeb>) or release (C<urel>). Commonly, C<udeb> is used on the emulator whereas C<urel> is used on target hardward. For the purposes of this introduction we will assume that you will be building C<winscw udeb> and C<armv5 urel>.
+Lastly, you need to identify the build variant you plan to use, either debug (C<udeb>) or release (C<urel>). Commonly, C<udeb> is used on the emulator whereas C<urel> is used on target hardware. For the purposes of this introduction we will assume that you will be building C<winscw udeb> and C<armv5 urel>.
 
 =head2 SBSv1 (aka abld)
 
@@ -62,7 +64,25 @@
 
 =head2 SBSv2 (aka Raptor)
 
-  M:\fshell\build\sf\2>sbs -c armv5_urel -c winscw_udeb
+  M:\fshell\build\sf\2>sbs -c armv5_urel
+  M:\fshell\build\sf\2>sbs -c winscw_udeb
+
+I<Note:> There are currently some concurrency issues in the build process that mean we don't recommend building multiple platforms in a single invocation of sbs. Ie do the above rather than C<sbs -c armv5_urel -c winscw_udeb>. In some cases you may even need to add the option C<-j 1> to sbs to have it run completely single-threaded. We'll fix this as soon as we can!
+
+=head2 Notes on building for GCC
+
+Fshell has only been tested to build with GCC-E 4.4.1, and the legacy 3.4.2.
+
+I<Note:> The SF website appears to be out of date with regards to how to build with GCC-E on Raptor - at the time of writing the way to build is as follows:
+
+  S:\fshell\build\sf\3>set SBS_GCCE432BIN=Nothing
+  S:\fshell\build\sf\3>set SBS_GCCE433BIN=Nothing
+  S:\fshell\build\sf\3>set SBS_GCCE441BIN=c:/apps/gcce/bin
+  S:\fshell\build\sf\3>sbs -c arm.v5.urel.gcce4_4_1
+
+You may also need to update the compiler support libraries - I had to unzip rt_3_1_bin.zip from \sf\os\kernelhwsrv\kernel\eka\compsupp from a different baseline. (Unzip over \epoc32\release\armv5). The working libraries I used had datestamp of 28/1/2009, the non-working ones were 1/1/2009.
+
+There's one final gotcha if you want to build with GCC-E - at the time of writing the makefiles produced by SBS for PIPS executables is incorrect, therefore you need to add C<#define FSHELL_NO_PIPS_SUPPORT> to \fshell\build\sf\platform_shared.mmh. Hopefully this is a temporary measure.
 
 =head1 Installation
 
--- a/libraries/memoryaccess/MemoryAccess.mmp	Wed Jul 28 18:43:05 2010 +0100
+++ b/libraries/memoryaccess/MemoryAccess.mmp	Wed Jul 28 18:43:53 2010 +0100
@@ -36,7 +36,9 @@
 source		hwbreak.cia
 #endif
 
-#ifdef EABI
+#if defined(EABI) && !defined(GCCE)
+macro		SUPPORT_BREAKPOINT_STUFF
+// This doesn't build with GCC-E
 source		TrkNextInstructionAfterPC.cpp
 #endif
 
--- a/libraries/memoryaccess/fdebuggerkernel.cpp	Wed Jul 28 18:43:05 2010 +0100
+++ b/libraries/memoryaccess/fdebuggerkernel.cpp	Wed Jul 28 18:43:53 2010 +0100
@@ -1496,7 +1496,7 @@
 
 TInt DDebuggerEventHandler::MoveBreakpointToNextInstructionForThread(DThread* aThread, SBreakpoint* aBreakpoint)
 	{
-#ifdef __EABI__
+#ifdef SUPPORT_BREAKPOINT_STUFF
 	ASSERT_BREAKPOINT_LOCKED();
 	TUint32 notUsed = 0;
 	TBool aModeChange = EFalse;
--- a/libraries/spcre/bwins/spcreu.def	Wed Jul 28 18:43:05 2010 +0100
+++ b/libraries/spcre/bwins/spcreu.def	Wed Jul 28 18:43:53 2010 +0100
@@ -4,32 +4,32 @@
 	?GlobalReplaceL@CRegEx@@QBEHABVTDesC8@@AAVTDes8@@@Z @ 3 NONAME ; int CRegEx::GlobalReplaceL(class TDesC8 const &, class TDes8 &) const
 	?FindAndConsumeL@CRegEx@@QBEHAAVTDes8@@@Z @ 4 NONAME ; int CRegEx::FindAndConsumeL(class TDes8 &) const
 	?ParseTUint8Hex@TRegExArg@@SAHABVTDesC8@@PAX@Z @ 5 NONAME ; int TRegExArg::ParseTUint8Hex(class TDesC8 const &, void *)
-	??0TRegExArg@@QAE@PAVTChar@@P6AHABVTDesC8@@PAX@Z@Z @ 6 NONAME ; TRegExArg::TRegExArg(class TChar *, int (*)(class TDesC8 const &, void *))
-	??0TRegExArg@@QAE@PAJ@Z @ 7 NONAME ; TRegExArg::TRegExArg(long *)
-	??0TRegExArg@@QAE@PAJP6AHABVTDesC8@@PAX@Z@Z @ 8 NONAME ; TRegExArg::TRegExArg(long *, int (*)(class TDesC8 const &, void *))
+	??0TRegExArg@@QAE@PAVTChar@@P6AHABVTDesC8@@PAX@Z@Z @ 6 NONAME ABSENT ; TRegExArg::TRegExArg(class TChar *, int (*)(class TDesC8 const &, void *))
+	??0TRegExArg@@QAE@PAJ@Z @ 7 NONAME ABSENT ; TRegExArg::TRegExArg(long *)
+	??0TRegExArg@@QAE@PAJP6AHABVTDesC8@@PAX@Z@Z @ 8 NONAME ABSENT ; TRegExArg::TRegExArg(long *, int (*)(class TDesC8 const &, void *))
 	??0TRegExOptions@@QAE@XZ @ 9 NONAME ; TRegExOptions::TRegExOptions(void)
 	?PartialMatchL@CRegEx@@QBEHABVTDesC8@@ABVTRegExArg@@11@Z @ 10 NONAME ; int CRegEx::PartialMatchL(class TDesC8 const &, class TRegExArg const &, class TRegExArg const &, class TRegExArg const &) const
 	?DoMatchL@CRegEx@@QBEHABVTDesC8@@W4TAnchor@1@AAHABV?$RPointerArray@$$CBVTRegExArg@@@@@Z @ 11 NONAME ; int CRegEx::DoMatchL(class TDesC8 const &, enum CRegEx::TAnchor, int &, class RPointerArray<class TRegExArg const > const &) const
 	?ParseTReal32@TRegExArg@@CAHABVTDesC8@@PAX@Z @ 12 NONAME ; int TRegExArg::ParseTReal32(class TDesC8 const &, void *)
-	??0TRegExArg@@QAE@PAVTPtrC8@@P6AHABVTDesC8@@PAX@Z@Z @ 13 NONAME ; TRegExArg::TRegExArg(class TPtrC8 *, int (*)(class TDesC8 const &, void *))
-	??0TRegExArg@@QAE@PAE@Z @ 14 NONAME ; TRegExArg::TRegExArg(unsigned char *)
+	??0TRegExArg@@QAE@PAVTPtrC8@@P6AHABVTDesC8@@PAX@Z@Z @ 13 NONAME ABSENT ; TRegExArg::TRegExArg(class TPtrC8 *, int (*)(class TDesC8 const &, void *))
+	??0TRegExArg@@QAE@PAE@Z @ 14 NONAME ABSENT ; TRegExArg::TRegExArg(unsigned char *)
 	?ParseTInt16@TRegExArg@@CAHABVTDesC8@@PAX@Z @ 15 NONAME ; int TRegExArg::ParseTInt16(class TDesC8 const &, void *)
 	?FindAndConsumeL@CRegEx@@QBEHAAVTDes8@@ABVTRegExArg@@111@Z @ 16 NONAME ; int CRegEx::FindAndConsumeL(class TDes8 &, class TRegExArg const &, class TRegExArg const &, class TRegExArg const &, class TRegExArg const &) const
 	?FullMatchL@CRegEx@@QBEHABVTDesC8@@ABVTRegExArg@@@Z @ 17 NONAME ; int CRegEx::FullMatchL(class TDesC8 const &, class TRegExArg const &) const
 	?FindAndConsumeL@CRegEx@@QBEHAAVTDes8@@ABVTRegExArg@@11@Z @ 18 NONAME ; int CRegEx::FindAndConsumeL(class TDes8 &, class TRegExArg const &, class TRegExArg const &, class TRegExArg const &) const
-	??0TRegExArg@@QAE@PAMP6AHABVTDesC8@@PAX@Z@Z @ 19 NONAME ; TRegExArg::TRegExArg(float *, int (*)(class TDesC8 const &, void *))
-	??0TRegExArg@@QAE@PACP6AHABVTDesC8@@PAX@Z@Z @ 20 NONAME ; TRegExArg::TRegExArg(signed char *, int (*)(class TDesC8 const &, void *))
-	??0TRegExArg@@QAE@PAVTDes8@@P6AHABVTDesC8@@PAX@Z@Z @ 21 NONAME ; TRegExArg::TRegExArg(class TDes8 *, int (*)(class TDesC8 const &, void *))
+	??0TRegExArg@@QAE@PAMP6AHABVTDesC8@@PAX@Z@Z @ 19 NONAME ABSENT ; TRegExArg::TRegExArg(float *, int (*)(class TDesC8 const &, void *))
+	??0TRegExArg@@QAE@PACP6AHABVTDesC8@@PAX@Z@Z @ 20 NONAME ABSENT ; TRegExArg::TRegExArg(signed char *, int (*)(class TDesC8 const &, void *))
+	??0TRegExArg@@QAE@PAVTDes8@@P6AHABVTDesC8@@PAX@Z@Z @ 21 NONAME ABSENT ; TRegExArg::TRegExArg(class TDes8 *, int (*)(class TDesC8 const &, void *))
 	?FullMatchL@CRegEx@@QBEHABVTDesC8@@ABVTRegExArg@@111@Z @ 22 NONAME ; int CRegEx::FullMatchL(class TDesC8 const &, class TRegExArg const &, class TRegExArg const &, class TRegExArg const &, class TRegExArg const &) const
 	?ExtractL@CRegEx@@QBEHABVTDesC8@@0AAVTDes8@@@Z @ 23 NONAME ; int CRegEx::ExtractL(class TDesC8 const &, class TDesC8 const &, class TDes8 &) const
-	??0TRegExArg@@QAE@PAVTChar@@@Z @ 24 NONAME ; TRegExArg::TRegExArg(class TChar *)
+	??0TRegExArg@@QAE@PAVTChar@@@Z @ 24 NONAME ABSENT ; TRegExArg::TRegExArg(class TChar *)
 	?ParseTInt@TRegExArg@@CAHABVTDesC8@@PAX@Z @ 25 NONAME ; int TRegExArg::ParseTInt(class TDesC8 const &, void *)
 	?ReplaceL@CRegEx@@QBEHABVTDesC8@@AAVTDes8@@@Z @ 26 NONAME ; int CRegEx::ReplaceL(class TDesC8 const &, class TDes8 &) const
 	?ParseTInt32@TRegExArg@@CAHABVTDesC8@@PAX@Z @ 27 NONAME ; int TRegExArg::ParseTInt32(class TDesC8 const &, void *)
-	??0TRegExArg@@QAE@PAG@Z @ 28 NONAME ; TRegExArg::TRegExArg(unsigned short *)
+	??0TRegExArg@@QAE@PAG@Z @ 28 NONAME ABSENT ; TRegExArg::TRegExArg(unsigned short *)
 	?ParseTInt64Hex@TRegExArg@@SAHABVTDesC8@@PAX@Z @ 29 NONAME ; int TRegExArg::ParseTInt64Hex(class TDesC8 const &, void *)
 	?FullMatchL@CRegEx@@QBEHABVTDesC8@@@Z @ 30 NONAME ; int CRegEx::FullMatchL(class TDesC8 const &) const
-	??0TRegExArg@@QAE@PAK@Z @ 31 NONAME ; TRegExArg::TRegExArg(unsigned long *)
+	??0TRegExArg@@QAE@PAK@Z @ 31 NONAME ABSENT ; TRegExArg::TRegExArg(unsigned long *)
 	?PartialMatchL@CRegEx@@QBEHABVTDesC8@@ABVTRegExArg@@111@Z @ 32 NONAME ; int CRegEx::PartialMatchL(class TDesC8 const &, class TRegExArg const &, class TRegExArg const &, class TRegExArg const &, class TRegExArg const &) const
 	??0TRegExArg@@QAE@PAIP6AHABVTDesC8@@PAX@Z@Z @ 33 NONAME ; TRegExArg::TRegExArg(unsigned int *, int (*)(class TDesC8 const &, void *))
 	??0TRegExArg@@QAE@PANP6AHABVTDesC8@@PAX@Z@Z @ 34 NONAME ; TRegExArg::TRegExArg(double *, int (*)(class TDesC8 const &, void *))
@@ -39,15 +39,15 @@
 	?FindAndConsumeL@CRegEx@@QBEHAAVTDes8@@ABVTRegExArg@@1@Z @ 38 NONAME ; int CRegEx::FindAndConsumeL(class TDes8 &, class TRegExArg const &, class TRegExArg const &) const
 	?DoMatchL@CRegEx@@QBEHABVTDesC8@@W4TAnchor@1@AAHABVTRegExArg@@333@Z @ 39 NONAME ; int CRegEx::DoMatchL(class TDesC8 const &, enum CRegEx::TAnchor, int &, class TRegExArg const &, class TRegExArg const &, class TRegExArg const &, class TRegExArg const &) const
 	?ConsumeL@CRegEx@@QBEHAAVTDes8@@ABVTRegExArg@@1@Z @ 40 NONAME ; int CRegEx::ConsumeL(class TDes8 &, class TRegExArg const &, class TRegExArg const &) const
-	??0TRegExArg@@QAE@PAFP6AHABVTDesC8@@PAX@Z@Z @ 41 NONAME ; TRegExArg::TRegExArg(short *, int (*)(class TDesC8 const &, void *))
-	??0TRegExArg@@QAE@PAN@Z @ 42 NONAME ; TRegExArg::TRegExArg(double *)
+	??0TRegExArg@@QAE@PAFP6AHABVTDesC8@@PAX@Z@Z @ 41 NONAME ABSENT ; TRegExArg::TRegExArg(short *, int (*)(class TDesC8 const &, void *))
+	??0TRegExArg@@QAE@PAN@Z @ 42 NONAME ABSENT ; TRegExArg::TRegExArg(double *)
 	?FindAndConsumeL@CRegEx@@QBEHAAVTDes8@@ABVTRegExArg@@@Z @ 43 NONAME ; int CRegEx::FindAndConsumeL(class TDes8 &, class TRegExArg const &) const
-	??0TRegExArg@@QAE@PAGP6AHABVTDesC8@@PAX@Z@Z @ 44 NONAME ; TRegExArg::TRegExArg(unsigned short *, int (*)(class TDesC8 const &, void *))
+	??0TRegExArg@@QAE@PAGP6AHABVTDesC8@@PAX@Z@Z @ 44 NONAME ABSENT ; TRegExArg::TRegExArg(unsigned short *, int (*)(class TDesC8 const &, void *))
 	?DoMatchL@CRegEx@@QBEHABVTDesC8@@W4TAnchor@1@AAHABVTRegExArg@@@Z @ 45 NONAME ; int CRegEx::DoMatchL(class TDesC8 const &, enum CRegEx::TAnchor, int &, class TRegExArg const &) const
 	?ParseTInt8@TRegExArg@@CAHABVTDesC8@@PAX@Z @ 46 NONAME ; int TRegExArg::ParseTInt8(class TDesC8 const &, void *)
 	?ParseTInt64Radix@TRegExArg@@CAHABVTDesC8@@PAXW4TRadix@@@Z @ 47 NONAME ; int TRegExArg::ParseTInt64Radix(class TDesC8 const &, void *, enum TRadix)
 	?ParseTInt64@TRegExArg@@CAHABVTDesC8@@PAX@Z @ 48 NONAME ; int TRegExArg::ParseTInt64(class TDesC8 const &, void *)
-	??0TRegExArg@@QAE@PAM@Z @ 49 NONAME ; TRegExArg::TRegExArg(float *)
+	??0TRegExArg@@QAE@PAM@Z @ 49 NONAME ABSENT ; TRegExArg::TRegExArg(float *)
 	?ParseTUint@TRegExArg@@CAHABVTDesC8@@PAX@Z @ 50 NONAME ; int TRegExArg::ParseTUint(class TDesC8 const &, void *)
 	?DoMatchL@CRegEx@@QBEHABVTDesC8@@W4TAnchor@1@AAH@Z @ 51 NONAME ; int CRegEx::DoMatchL(class TDesC8 const &, enum CRegEx::TAnchor, int &) const
 	??1CRegEx@@UAE@XZ @ 52 NONAME ; CRegEx::~CRegEx(void)
@@ -68,10 +68,10 @@
 	?ParseTUint8Octal@TRegExArg@@SAHABVTDesC8@@PAX@Z @ 67 NONAME ; int TRegExArg::ParseTUint8Octal(class TDesC8 const &, void *)
 	?NewLC@CRegEx@@SAPAV1@ABVTDesC8@@@Z @ 68 NONAME ; class CRegEx * CRegEx::NewLC(class TDesC8 const &)
 	?ParseTDes8@TRegExArg@@CAHABVTDesC8@@PAX@Z @ 69 NONAME ; int TRegExArg::ParseTDes8(class TDesC8 const &, void *)
-	??0TRegExArg@@QAE@PAI@Z @ 70 NONAME ; TRegExArg::TRegExArg(unsigned int *)
+	??0TRegExArg@@QAE@PAI@Z @ 70 NONAME ABSENT ; TRegExArg::TRegExArg(unsigned int *)
 	?PartialMatchL@CRegEx@@QBEHABVTDesC8@@@Z @ 71 NONAME ; int CRegEx::PartialMatchL(class TDesC8 const &) const
 	?ParseTUint8@TRegExArg@@CAHABVTDesC8@@PAX@Z @ 72 NONAME ; int TRegExArg::ParseTUint8(class TDesC8 const &, void *)
-	??0TRegExArg@@QAE@PAKP6AHABVTDesC8@@PAX@Z@Z @ 73 NONAME ; TRegExArg::TRegExArg(unsigned long *, int (*)(class TDesC8 const &, void *))
+	??0TRegExArg@@QAE@PAKP6AHABVTDesC8@@PAX@Z@Z @ 73 NONAME ABSENT ; TRegExArg::TRegExArg(unsigned long *, int (*)(class TDesC8 const &, void *))
 	?ParseTInt64Octal@TRegExArg@@SAHABVTDesC8@@PAX@Z @ 74 NONAME ; int TRegExArg::ParseTInt64Octal(class TDesC8 const &, void *)
 	?ConsumeL@CRegEx@@QBEHAAVTDes8@@ABVTRegExArg@@@Z @ 75 NONAME ; int CRegEx::ConsumeL(class TDes8 &, class TRegExArg const &) const
 	?ParseTUint8Radix@TRegExArg@@CAHABVTDesC8@@PAXW4TRadix@@@Z @ 76 NONAME ; int TRegExArg::ParseTUint8Radix(class TDesC8 const &, void *, enum TRadix)
@@ -79,23 +79,23 @@
 	??0TRegExArg@@QAE@PAH@Z @ 78 NONAME ; TRegExArg::TRegExArg(int *)
 	?ConsumeL@CRegEx@@QBEHAAVTDes8@@@Z @ 79 NONAME ; int CRegEx::ConsumeL(class TDes8 &) const
 	?ParseTUint16Hex@TRegExArg@@SAHABVTDesC8@@PAX@Z @ 80 NONAME ; int TRegExArg::ParseTUint16Hex(class TDesC8 const &, void *)
-	??0TRegExArg@@QAE@PA_J@Z @ 81 NONAME ; TRegExArg::TRegExArg(long long *)
+	??0TRegExArg@@QAE@PA_J@Z @ 81 NONAME ABSENT ; TRegExArg::TRegExArg(long long *)
 	?NewL@CRegEx@@SAPAV1@ABVTDesC8@@@Z @ 82 NONAME ; class CRegEx * CRegEx::NewL(class TDesC8 const &)
 	?FullMatchL@CRegEx@@QBEHABVTDesC8@@ABVTRegExArg@@11@Z @ 83 NONAME ; int CRegEx::FullMatchL(class TDesC8 const &, class TRegExArg const &, class TRegExArg const &, class TRegExArg const &) const
 	?FullMatchL@CRegEx@@QBEHABVTDesC8@@ABVTRegExArg@@1@Z @ 84 NONAME ; int CRegEx::FullMatchL(class TDesC8 const &, class TRegExArg const &, class TRegExArg const &) const
 	?QuoteMetaL@CRegEx@@SAPAVHBufC8@@ABVTDesC8@@@Z @ 85 NONAME ; class HBufC8 * CRegEx::QuoteMetaL(class TDesC8 const &)
-	??0TRegExArg@@QAE@PAVTDes8@@@Z @ 86 NONAME ; TRegExArg::TRegExArg(class TDes8 *)
+	??0TRegExArg@@QAE@PAVTDes8@@@Z @ 86 NONAME ABSENT ; TRegExArg::TRegExArg(class TDes8 *)
 	?ConsumeL@CRegEx@@QBEHAAVTDes8@@ABVTRegExArg@@11@Z @ 87 NONAME ; int CRegEx::ConsumeL(class TDes8 &, class TRegExArg const &, class TRegExArg const &, class TRegExArg const &) const
 	?NewLC@CRegEx@@SAPAV1@ABVTDesC8@@ABVTRegExOptions@@@Z @ 88 NONAME ; class CRegEx * CRegEx::NewLC(class TDesC8 const &, class TRegExOptions const &)
-	??0TRegExArg@@QAE@PAC@Z @ 89 NONAME ; TRegExArg::TRegExArg(signed char *)
-	??0TRegExArg@@QAE@PAVTPtrC8@@@Z @ 90 NONAME ; TRegExArg::TRegExArg(class TPtrC8 *)
-	??0TRegExArg@@QAE@PAF@Z @ 91 NONAME ; TRegExArg::TRegExArg(short *)
-	??0TRegExArg@@QAE@PAEP6AHABVTDesC8@@PAX@Z@Z @ 92 NONAME ; TRegExArg::TRegExArg(unsigned char *, int (*)(class TDesC8 const &, void *))
+	??0TRegExArg@@QAE@PAC@Z @ 89 NONAME ABSENT ; TRegExArg::TRegExArg(signed char *)
+	??0TRegExArg@@QAE@PAVTPtrC8@@@Z @ 90 NONAME ABSENT ; TRegExArg::TRegExArg(class TPtrC8 *)
+	??0TRegExArg@@QAE@PAF@Z @ 91 NONAME ABSENT ; TRegExArg::TRegExArg(short *)
+	??0TRegExArg@@QAE@PAEP6AHABVTDesC8@@PAX@Z@Z @ 92 NONAME ABSENT ; TRegExArg::TRegExArg(unsigned char *, int (*)(class TDesC8 const &, void *))
 	?ParseTPtrC8@TRegExArg@@CAHABVTDesC8@@PAX@Z @ 93 NONAME ; int TRegExArg::ParseTPtrC8(class TDesC8 const &, void *)
 	?DoMatchL@CRegEx@@QBEHABVTDesC8@@W4TAnchor@1@AAHABVTRegExArg@@33@Z @ 94 NONAME ; int CRegEx::DoMatchL(class TDesC8 const &, enum CRegEx::TAnchor, int &, class TRegExArg const &, class TRegExArg const &, class TRegExArg const &) const
 	??0TRegExOptions@@QAE@I@Z @ 95 NONAME ; TRegExOptions::TRegExOptions(unsigned int)
 	?ParseTUint32Radix@TRegExArg@@CAHABVTDesC8@@PAXW4TRadix@@@Z @ 96 NONAME ; int TRegExArg::ParseTUint32Radix(class TDesC8 const &, void *, enum TRadix)
-	??0TRegExArg@@QAE@PA_JP6AHABVTDesC8@@PAX@Z@Z @ 97 NONAME ; TRegExArg::TRegExArg(long long *, int (*)(class TDesC8 const &, void *))
-	??0TRegExArg@@QAE@PAHP6AHABVTDesC8@@PAX@Z@Z @ 98 NONAME ; TRegExArg::TRegExArg(int *, int (*)(class TDesC8 const &, void *))
+	??0TRegExArg@@QAE@PA_JP6AHABVTDesC8@@PAX@Z@Z @ 97 NONAME ABSENT ; TRegExArg::TRegExArg(long long *, int (*)(class TDesC8 const &, void *))
+	??0TRegExArg@@QAE@PAHP6AHABVTDesC8@@PAX@Z@Z @ 98 NONAME ABSENT ; TRegExArg::TRegExArg(int *, int (*)(class TDesC8 const &, void *))
 	?NewL@CRegEx@@SAPAV1@ABVTDesC16@@ABVTRegExOptions@@@Z @ 99 NONAME ; class CRegEx * CRegEx::NewL(class TDesC16 const &, class TRegExOptions const &)
 
--- a/libraries/spcre/inc/tregexarg.h	Wed Jul 28 18:43:05 2010 +0100
+++ b/libraries/spcre/inc/tregexarg.h	Wed Jul 28 18:43:53 2010 +0100
@@ -51,8 +51,8 @@
 	 
 // Type-specific parsers
 #define PCRE_MAKE_PARSER(type,name)															\
-	IMPORT_C TRegExArg(type* aType) : iArg(aType), iParser(name) { }						\
-	IMPORT_C TRegExArg(type* aType, Parser aParser) : iArg(aType), iParser(aParser) { }	
+	inline TRegExArg(type* aType) : iArg(aType), iParser(name) { }						\
+	inline TRegExArg(type* aType, Parser aParser) : iArg(aType), iParser(aParser) { }	
 	
 	PCRE_MAKE_PARSER(TChar,				ParseTChar)
 	PCRE_MAKE_PARSER(TInt8,				ParseTInt8)
--- a/libraries/spcre/libpcre/group/libpcre.mmp	Wed Jul 28 18:43:05 2010 +0100
+++ b/libraries/spcre/libpcre/group/libpcre.mmp	Wed Jul 28 18:43:53 2010 +0100
@@ -62,3 +62,9 @@
 
 library         euser.lib
 library         estlib.lib
+
+// Remove some of the many warnings that armcc doesn't like
+// Warning:  #546-D: transfer of control bypasses initialization of:
+// Warning:  #1134-D: literal treated as "long long"
+// Warning: C2874W: othercase may be used before being set
+option ARMCC --diag-supress 1134,2874,546
--- a/tools/fshell_copyright.pl	Wed Jul 28 18:43:05 2010 +0100
+++ b/tools/fshell_copyright.pl	Wed Jul 28 18:43:53 2010 +0100
@@ -48,7 +48,7 @@
   my @newlines = ();
   
   my $commentstart = "//";
-  if ($name =~ /\.(pl|pm|script|pod|ini|idf|esk|mk|cif)/i || !($name =~ /\./))
+  if ($name =~ /\.(pl|pm|script|pod|ini|idf|esk|mk|cif|flm)/i || !($name =~ /\./))
 	{
 	# Need to use # instead of //
 	# Second part of conditional is for perl scripts that don't specify any ending