I don't think anybody actually uses this instruction

Odd.

The runtime code for DynASM [1] looks a bit … odd, and I was curious what Valgrind [2] had to say about it.

>
```
[spc]lucy:~/source/jit>valgrind ./calc
==15664== Memcheck, a memory error detector.
==15664== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
==15664== Using LibVEX rev 1575, a library for dynamic binary translation.
==15664== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.
==15664== Using valgrind-3.1.1, a dynamic binary instrumentation framework.
==15664== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
==15664== For more details, rerun with: -v
==15664==
x = 1 - 0
vex x86->IR: unhandled instruction bytes: 0xCE 0x66 0xA3 0xCE
==15664== Your program just tried to execute an instruction that Valgrind
==15664== did not recognise. There are two possible reasons for this.
==15664== 1. Your program has a bug and erroneously jumped to a non-code
==15664== location. If you are running Memcheck and you just saw a
==15664== warning about a bad jump, it's probably your program's fault.
==15664== 2. The instruction is legitimate but Valgrind doesn't handle it,
==15664== i.e. it's Valgrind's fault. If you think this is the case or
==15664== you are not sure, please let us know.
==15664== Either way, Valgrind will now raise a SIGILL signal which will
==15664== probably kill your program.
==15664== Use of uninitialised value of size 4
==15664== at 0xBC945C: _itoa_word (in /lib/tls/libc-2.3.4.so)
==15664== by 0xBCCA09: vfprintf (in /lib/tls/libc-2.3.4.so)
==15664== by 0xBE5ACA: vsprintf (in /lib/tls/libc-2.3.4.so)
==15664== by 0xBD2DEA: sprintf (in /lib/tls/libc-2.3.4.so)
==15664== by 0x804ACA3: crashreport_hexdump (crashreport.c:154)
==15664== by 0x804B2BD: crashreport_handler (crashreport.c:388)
==15664== by 0xBB79AF: (within /lib/tls/libc-2.3.4.so)
==15664== by 0x804A9DD: main (calc.dasc:472)
==15664==
==15664== Conditional jump or move depends on uninitialised value(s)
==15664== at 0xBC9462: _itoa_word (in /lib/tls/libc-2.3.4.so)
==15664== by 0xBCCA09: vfprintf (in /lib/tls/libc-2.3.4.so)
==15664== by 0xBE5ACA: vsprintf (in /lib/tls/libc-2.3.4.so)
==15664== by 0xBD2DEA: sprintf (in /lib/tls/libc-2.3.4.so)
==15664== by 0x804ACA3: crashreport_hexdump (crashreport.c:154)
==15664== by 0x804B2BD: crashreport_handler (crashreport.c:388)
==15664== by 0xBB79AF: (within /lib/tls/libc-2.3.4.so)
==15664== by 0x804A9DD: main (calc.dasc:472)
==15664==
==15664== Use of uninitialised value of size 4
==15664== at 0xBC9474: _itoa_word (in /lib/tls/libc-2.3.4.so)
==15664== by 0xBCCA09: vfprintf (in /lib/tls/libc-2.3.4.so)
==15664== by 0xBE5ACA: vsprintf (in /lib/tls/libc-2.3.4.so)
==15664== by 0xBD2DEA: sprintf (in /lib/tls/libc-2.3.4.so)
==15664== by 0x804ACA3: crashreport_hexdump (crashreport.c:154)
==15664== by 0x804B2BD: crashreport_handler (crashreport.c:388)
==15664== by 0xBB79AF: (within /lib/tls/libc-2.3.4.so)
==15664== by 0x804A9DD: main (calc.dasc:472)
==15664==
==15664== Use of uninitialised value of size 4
==15664== at 0x804ACC0: crashreport_hexdump (crashreport.c:155)
==15664== by 0x804B2BD: crashreport_handler (crashreport.c:388)
==15664== by 0xBB79AF: (within /lib/tls/libc-2.3.4.so)
==15664== by 0x804A9DD: main (calc.dasc:472)
not in syscall (0xB0044ADC - 0xB0044B31)
valgrind: m_syswrap/syswrap-main.c:606 (vgPlain_client_syscall): Assertion 'sci->status.what == SsIdle' failed.
==15664== at 0xB000E029: report_and_quit (m_libcassert.c:122)
==15664== by 0xB000E1C2: vgPlain_assert_fail (m_libcassert.c:185)
==15664== by 0xB003AEA6: vgPlain_client_syscall (syswrap-main.c:606)
==15664== by 0xB002C826: handle_syscall (scheduler.c:623)
==15664== by 0xB002CAED: vgPlain_scheduler (scheduler.c:726)
==15664== by 0xB0014568: final_tidyup (m_main.c:2716)
==15664== by 0xB00141C9: shutdown_actions_NORETURN (m_main.c:2578)
==15664== by 0xB003C2D5: run_a_thread_NORETURN (syswrap-linux.c:139)
sched status:
running_tid=1
Thread 1: status = VgTs_Runnable
==15664== at 0xD080B5: pthread_once (in /lib/tls/libpthread-2.3.4.so)
==15664== by 0xC9BB76: free_mem (in /lib/tls/libc-2.3.4.so)
==15664== by 0xC9B811: __libc_freeres (in /lib/tls/libc-2.3.4.so)
==15664== by 0x4000336: _vgw_freeres (vg_preloaded.c:62)
==15664== by 0xBB78C4: raise (in /lib/tls/libc-2.3.4.so)
==15664== by 0x804B3E7: crashreport_handler (crashreport.c:495)
==15664== by 0xBB79AF: (within /lib/tls/libc-2.3.4.so)
==15664== by 0x804A9DD: main (calc.dasc:472)
Note: see also the FAQ.txt in the source distribution.
It contains workarounds to several common problems.
If that doesn't help, please report this bug to: www.valgrind.org
In the bug report, send all the above text, the valgrind
version, and what Linux distro you are using. Thanks.
[spc]lucy:~/source/jit>
```

Really Valgrind? You don't support the INTO opcode? Wow …

[1] http://luajit.org/dynasm.html

[2] http://valgrind.org/

Gemini Mention this post

Contact the author