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