Okay, forget about this for now, it is more than 50% likely be my code, not neko. But for debugging, is there anyway during a neko runtime to get a stack trace wrt to my original haxe code?
edA-qa mort-ora-y wrote:
> I'm getting Neko to go into an infinite loop with Int32 operations
> (source code as haXe).
>
> I can reproduce it easily enough, but not with a fixed set of input --
> that is, it happens at random, but frequently.
>
> The code, in haXe is a Mersenne Twister initilization loop:
>
> inline static var _N = 624;
>
> public function initializeGenerator( seed : Int ) {
> mt[0] = Int32.ofInt( seed );
> for( i in 1..._N ) {
> mt[i] = Int32.add( uintMul( Int32.make( 0x6c07, 0x8965 ), Int32.xor(
> mt[i-1], ( Int32.ushr( mt[i-1], 30) ) ) ), Int32.ofInt( i ) );
> }
> }
>
> Some stack traces from GDB, obtained by breaking when I detect a loop
> and dumping the stack. I then "cont" and break a few times to get
> different stacks.
>
> Program received signal SIGINT, Interrupt.
> 0x00002ae72cdd1fa0 in memcpy () from /lib/libc.so.6
> (gdb) back
> #0 0x00002ae72cdd1fa0 in memcpy () from /lib/libc.so.6
> #1 0x00002ae72cb3ffad in neko_interp () from /usr/local/lib/libneko.so
> #2 0x00002ae72cb3a9fa in neko_val_callEx () from /usr/local/lib/libneko.so
> #3 0x00002ae72cb3e4a5 in neko_interp_loop () from /usr/local/lib/libneko.so
> #4 0x00002ae72cb400e9 in neko_interp () from /usr/local/lib/libneko.so
> #5 0x00002ae72cb3a9fa in neko_val_callEx () from /usr/local/lib/libneko.so
> #6 0x00002ae72cb39270 in builtin_call () from /usr/local/lib/libneko.so
> #7 0x00002ae72cb3eb02 in neko_interp_loop () from /usr/local/lib/libneko.so
> #8 0x00002ae72cb400e9 in neko_interp () from /usr/local/lib/libneko.so
> #9 0x00002ae72cb40248 in neko_vm_execute () from /usr/local/lib/libneko.so
> #10 0x00002ae72cb40e12 in loader_loadmodule () from
> /usr/local/lib/libneko.so
> #11 0x00002ae72cb3a8b9 in neko_val_callEx () from /usr/local/lib/libneko.so
> #12 0x0000000000401e38 in neko_stats_measure ()
> #13 0x00002ae72cd7a4ca in __libc_start_main () from /lib/libc.so.6
> #14 0x00000000004012fa in ?? ()
> #15 0x00007fff7e08c6f8 in ?? ()
> #16 0x0000000000000000 in ?? ()
>
> Program received signal SIGINT, Interrupt.
> 0x00002ae72cc51531 in pthread_getspecific () from /lib/libpthread.so.0
> (gdb) break
> Breakpoint 1 at 0x2ae72cc51531
> (gdb) back
> #0 0x00002ae72cc51531 in pthread_getspecific () from /lib/libpthread.so.0
> #1 0x00002ae72cb3a560 in neko_val_callEx () from /usr/local/lib/libneko.so
> #2 0x00002ae72cb3e4a5 in neko_interp_loop () from /usr/local/lib/libneko.so
> #3 0x00002ae72cb400e9 in neko_interp () from /usr/local/lib/libneko.so
> #4 0x00002ae72cb3a9fa in neko_val_callEx () from /usr/local/lib/libneko.so
> #5 0x00002ae72cb39270 in builtin_call () from /usr/local/lib/libneko.so
> #6 0x00002ae72cb3eb02 in neko_interp_loop () from /usr/local/lib/libneko.so
> #7 0x00002ae72cb400e9 in neko_interp () from /usr/local/lib/libneko.so
> #8 0x00002ae72cb40248 in neko_vm_execute () from /usr/local/lib/libneko.so
> #9 0x00002ae72cb40e12 in loader_loadmodule () from
> /usr/local/lib/libneko.so
> #10 0x00002ae72cb3a8b9 in neko_val_callEx () from /usr/local/lib/libneko.so
> #11 0x0000000000401e38 in neko_stats_measure ()
> #12 0x00002ae72cd7a4ca in __libc_start_main () from /lib/libc.so.6
> #13 0x00000000004012fa in ?? ()
> #14 0x00007fff7e08c6f8 in ?? ()
> #15 0x0000000000000000 in ?? ()
>
> rogram received signal SIGINT, Interrupt.
> 0x00002ae72cdd1f96 in memcpy () from /lib/libc.so.6
> (gdb) back
> #0 0x00002ae72cdd1f96 in memcpy () from /lib/libc.so.6
> #1 0x00002ae72cb3ffad in neko_interp () from /usr/local/lib/libneko.so
> #2 0x00002ae72cb3a9fa in neko_val_callEx () from /usr/local/lib/libneko.so
> #3 0x00002ae72cb3e4a5 in neko_interp_loop () from /usr/local/lib/libneko.so
> #4 0x00002ae72cb400e9 in neko_interp () from /usr/local/lib/libneko.so
> #5 0x00002ae72cb3a9fa in neko_val_callEx () from /usr/local/lib/libneko.so
> #6 0x00002ae72cb39270 in builtin_call () from /usr/local/lib/libneko.so
> #7 0x00002ae72cb3eb02 in neko_interp_loop () from /usr/local/lib/libneko.so
> #8 0x00002ae72cb400e9 in neko_interp () from /usr/local/lib/libneko.so
> #9 0x00002ae72cb40248 in neko_vm_execute () from /usr/local/lib/libneko.so
> #10 0x00002ae72cb40e12 in loader_loadmodule () from
> /usr/local/lib/libneko.so
> #11 0x00002ae72cb3a8b9 in neko_val_callEx () from /usr/local/lib/libneko.so
> #12 0x0000000000401e38 in neko_stats_measure ()
> #13 0x00002ae72cd7a4ca in __libc_start_main () from /lib/libc.so.6
> #14 0x00000000004012fa in ?? ()
> #15 0x00007fff7e08c6f8 in ?? ()
> #16 0x0000000000000000 in ?? ()
>
>
> The code for uintMul is:
>
> /**
> * Public only for test cases
> * Ref: http://www.cs.uaf.edu/~cs301/notes/Chapter5/node5.html
> */
> public function uintMul( a : Int32, b : Int32 )
> {
> //FEATURE: could we probably just use normal ints after this
> initial
> transformation?
> var A = Int32.ushr( a, 16 );
> var B = Int32.and( a, Int32.ofInt( 0xffff ) );
> var C = Int32.ushr( b, 16 );
> var D = Int32.and( b, Int32.ofInt( 0xffff ) );
>
> var BD = Int32.mul( B, D );
> var AD = Int32.mul( A, D );
> var CB = Int32.mul( C, B );
> //we have no place to store the AC so we don't calculate that
> part
>
> var hi = Int32.add( Int32.add( Int32.ushr( BD, 16 ), AD ), CB );
> var lo = Int32.and( BD, Int32.ofInt( 0xffff ) );
>
> return Int32.add( lo, Int32.shl( hi, 16 ) );
> }
>
--
edA-qa mort-ora-y
http://disemia.com/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Have a look in my brain:
http://brainbrain.eu/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Sign: Please digitally sign your emails.
Encrypt: I'm also happy to receive encrypted mail.
signature.asc
Description: OpenPGP digital signature
-- Neko : One VM to run them all (http://nekovm.org)
