Thanks very much for all your help, as well as IobuWu, Papirosnik, and Martins Mozeiko. However, even after trying everything, I am still unable to get anything but the generic calling convention working on an ARM processor. I've asked a question to Marmalade like you suggested.
I would love to help solve this as it'd make my life a whole lot easier, having chosen AngelScript as the scripting language for the game project I'm working on. The generic calling conventions are also a problem when using things like the "ref" type extension, which I need to let my game objects communicate, but I'll have to modify to use generic calling conventions if I can't solve the cdecl problem.
It appears that some of the suggestions in this thread may have been coded into the newest version of AngelScript (2.25.2) which I am now using. I still have made sure that MARMALADE and _ARM_ are getting defined by putting them into the project manually. Defining AS_NO_THREADS doesn't seem to be necessary anymore (though I have tried with and without). I tried using the *.S files instead of *.asm with scons as suggested (had to delete the comments as I couldn't figure out the correct syntax to change it to), unfortunately I still get the same runtime error when running the scons builds.
It doesn't seem that Marmalade defines _MSC_VER when compiling for ARM from within MSVC. It doesn't seem to define that either when compiling with scons. Perhaps this is the problem, as it gets into the other two just fine when I force that one to true. However, I can't simply do this to make it work as it seems to cause a domino-chain of other compiler errors that I can't fix without intimate knowledge of AngelScript's inner workings.
In an effort to make the problem as clear as possible I've put together a complete "Hello World" Angelscript/Marmalade project that should be runnable on any system with even the free trial of Marmalade installed (and MSVC). It's attached to this message. If this project worked without crashing on ARM it would be like gold to me (I've spent days trying to troubleshoot this). As it is now, here are instructions on how to reproduce the crash:
MSVC way:
1.) Double-click AngelScript_HelloWorld.mkb to open the project in MSVC.
2.) If you'd like, compile the debug or release version for x86 and run it. This is what's supposed to happen (a "Hello World" dialog)
3.) Compile the debug version using GCC(ARM). This should compile successfully.
4.) Hit F5 and this will start the special ARM simulator and debugger.
5.) To see the exact point of the problem, navigate to as_scriptengine.cpp and put a breakpoint on line 2473.
6.) Click "continue" and the program will hit the breakpoint (which means the error has occurred)
(note that _ARM_ isn't actually defined for the MSVC build as I haven't figured out how to do this for only one build with Marmalade. However, even if you explicitly declare _ARM_ in the project settings, the same error occurs because _MSC_VER isn't defined for the ARM compiler)
Scons way:
1.) Double-click the scons.bat file that I put in the same directory as the project files, this should compile to ARM files with scons.
2.) Navigate to the build_angelscript_helloworld_scons_scons_arm directory.
3.) Choose either debug or release directory.
4.) Copy the *.s3e file in that directory to the "data" directory under the project's folder. You can double-click it to run it from there (ignore the Marmalade warning message).
5.) You should get the same result as if you ran the ARM simulator from MSVC.
6.) If you want to debug, you should be able to click the *.s3e file and click "debug." Then you can point the ARM simulator to the generated *.elf file in the directory where the build came from.
That is the situation as best as I've been able to understand it. I hope that this leads to a solution. I've been very happy with AngelScript so far, it's just this calling convention problem that's been driving me up a wall.
Thank you very much,
Sebastian







