[Scummvm-cvs-logs] SF.net SVN: scummvm: [25078] scummvm/trunk/backends/platform/PalmOS/Src/ native
chrilith at users.sourceforge.net
chrilith at users.sourceforge.net
Sun Jan 14 12:02:25 CET 2007
Revision: 25078
http://scummvm.svn.sourceforge.net/scummvm/?rev=25078&view=rev
Author: chrilith
Date: 2007-01-14 03:02:24 -0800 (Sun, 14 Jan 2007)
Log Message:
-----------
Added static initializers to handle global objects allocation
Modified Paths:
--------------
scummvm/trunk/backends/platform/PalmOS/Src/native/pnoARM.c
scummvm/trunk/backends/platform/PalmOS/Src/native/zodiacARM.cpp
scummvm/trunk/backends/platform/PalmOS/Src/native/zodiacStartup.cpp
Modified: scummvm/trunk/backends/platform/PalmOS/Src/native/pnoARM.c
===================================================================
--- scummvm/trunk/backends/platform/PalmOS/Src/native/pnoARM.c 2007-01-14 00:29:20 UTC (rev 25077)
+++ scummvm/trunk/backends/platform/PalmOS/Src/native/pnoARM.c 2007-01-14 11:02:24 UTC (rev 25078)
@@ -33,20 +33,26 @@
// contrast to "PilotMain" for 68K applications.
#define PNO_Main ARMlet_Main
-#ifdef COMPILE_ZODIAC
- const void* twEmulState;
- Call68KFuncType* twCall68KFunc;
-#endif
+/* Prepare static initializers */
+extern long __sinit__[];
+extern void __ARMlet_Startup__();
+/* simple function pointer */
+typedef void (*StaticInitializer)(void);
+
unsigned long PNO_Main(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP) {
-#ifdef COMPILE_ZODIAC
- twEmulState = emulStateP;
- twCall68KFunc = call68KFuncP;
-#else
global.emulStateP = (EmulStateType *)emulStateP;
global.call68KFuncP = call68KFuncP;
-#endif
+ // handle static initializers
+ if (__sinit__) {
+ long base = (long)__ARMlet_Startup__;
+ long s, *p;
+
+ for (p = __sinit__; p && (s = *p) != 0; p++)
+ ((StaticInitializer)(s + base))();
+ }
+
return PilotMain(sysAppLaunchCmdNormalLaunch, userData68KP, 0);
}
Modified: scummvm/trunk/backends/platform/PalmOS/Src/native/zodiacARM.cpp
===================================================================
--- scummvm/trunk/backends/platform/PalmOS/Src/native/zodiacARM.cpp 2007-01-14 00:29:20 UTC (rev 25077)
+++ scummvm/trunk/backends/platform/PalmOS/Src/native/zodiacARM.cpp 2007-01-14 11:02:24 UTC (rev 25078)
@@ -48,6 +48,8 @@
GlobalsDataPtr gVars = &g_vars;
UInt32 g_stackSize;
+extern "C" void __destroy_global_chain(void);
+
static void palm_main(int argc, char **argvP) {
#ifdef COMPILE_OS5
if (gVars->advancedMode)
@@ -143,5 +145,8 @@
free(g_newStack);
}
+ // Destroy all constructed global objects
+ __destroy_global_chain();
+
return 0;
}
Modified: scummvm/trunk/backends/platform/PalmOS/Src/native/zodiacStartup.cpp
===================================================================
--- scummvm/trunk/backends/platform/PalmOS/Src/native/zodiacStartup.cpp 2007-01-14 00:29:20 UTC (rev 25077)
+++ scummvm/trunk/backends/platform/PalmOS/Src/native/zodiacStartup.cpp 2007-01-14 11:02:24 UTC (rev 25078)
@@ -56,6 +56,7 @@
* mark the start and end of the various data sections.
*/
extern long __DataStart__[];
+extern long __sinit__[];
extern long __RODataStart__[];
extern long __BSSStart__[];
extern long __BSSEnd__[];
@@ -64,6 +65,9 @@
extern long __DataRelocStart__[];
extern long __DataRelocEnd__[];
+/* simple function pointer */
+typedef void (*StaticInitializer)(void);
+
/*
* This function performs relocation for Tapwave Native Application.
*/
@@ -73,6 +77,14 @@
long base = (long) __ARMlet_Startup__;
long *cur, *end;
+ // handle static initializers
+ if (__sinit__) {
+ long s, *p;
+
+ for (p = __sinit__; p && (s = *p) != 0; p++)
+ ((StaticInitializer)(s + base))();
+ }
+
// handle code-to-data relocation
cur = __CodeRelocStart__;
end = __CodeRelocEnd__;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list