Okay, tracing further this isn't likely the code causing the infinite
loop, it is something that occurs afterwards.  I'll track further to
ensure that it isn't my code doing it.


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.

Attachment: signature.asc
Description: OpenPGP digital signature

-- 
Neko : One VM to run them all
(http://nekovm.org)

Reply via email to