It seems that mono actually does use the stack for execution, but only when using the debugger. :(
$ echo 'class MainClass { static void Main() { System.Console.WriteLine("Hello World!"); } }' > hello.cs
$ gmcs hello.cs
$ mdb ./hello.exe
Mono Debugger
(mdb) run
Starting program: ./hello.exe
Cannot read symbol file `/usr/lib/mono/2.0/mscorlib.dll.mdb': Could not find file "/usr/lib/mono/2.0/mscorlib.dll.mdb".
Cannot read symbol file `/home/kees/hello.exe.mdb': Could not find file "/home/kees/hello.exe.mdb".
(mdb) Thread @1 received signal 11 at #0: 0xff87c909.
0xff87c909 push $0xff87c932
quit
The program is running. Exit anyway? (y or n) y
Thread @1 exited.
Process #1 exited.
Target exited.
It seems that mono actually does use the stack for execution, but only when using the debugger. :(
$ echo 'class MainClass { static void Main() { System. Console. WriteLine( "Hello World!"); } }' > hello.cs mono/2. 0/mscorlib. dll.mdb' : Could not find file "/usr/lib/ mono/2. 0/mscorlib. dll.mdb" . kees/hello. exe.mdb' : Could not find file "/home/ kees/hello. exe.mdb" .
$ gmcs hello.cs
$ mdb ./hello.exe
Mono Debugger
(mdb) run
Starting program: ./hello.exe
Cannot read symbol file `/usr/lib/
Cannot read symbol file `/home/
(mdb) Thread @1 received signal 11 at #0: 0xff87c909.
0xff87c909 push $0xff87c932
quit
The program is running. Exit anyway? (y or n) y
Thread @1 exited.
Process #1 exited.
Target exited.