Hi,

I wrote a compiler for brainfuck to x86.
The result is quite fast but I was curious if I could tune it even more.
So I ran it in callgrind but this resulted in:

folkert@snsv ~/Projects/bf-compiler (master)$ valgrind --tool=callgrind ./test
==77043== Callgrind, a call-graph generating cache profiler
==77043== Copyright (C) 2002-2017, and GNU GPL'd, by Josef Weidendorfer et al.
==77043== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==77043== Command: ./test
==77043== 
==77043== For interactive control, run 'callgrind_control -h'.
vex amd64->IR: unhandled instruction bytes: 0xCD 0x80 0xC3 0x67 0x80 0x3E 0x0 
0x74 0x5 0x83
vex amd64->IR:   REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
vex amd64->IR:   VEX=0 VEX.L=0 VEX.nVVVV=0x0 ESC=NONE
vex amd64->IR:   PFX.66=0 PFX.F2=0 PFX.F3=0
==77043== valgrind: Unrecognised instruction at address 0x40274e.
==77043==    at 0x40274E: ??? (in /home/folkert/Projects/bf-compiler/test)
==77043==    by 0x4020EE: ??? (in /home/folkert/Projects/bf-compiler/test)
==77043== Your program just tried to execute an instruction that Valgrind
==77043== did not recognise.  There are two possible reasons for this.
==77043== 1. Your program has a bug and erroneously jumped to a non-code
==77043==    location.  If you are running Memcheck and you just saw a
==77043==    warning about a bad jump, it's probably your program's fault.
==77043== 2. The instruction is legitimate but Valgrind doesn't handle it,
==77043==    i.e. it's Valgrind's fault.  If you think this is the case or
==77043==    you are not sure, please let us know and we'll try to fix it.
==77043== Either way, Valgrind will now raise a SIGILL signal which will
==77043== probably kill your program.
==77043== 
==77043== Process terminating with default action of signal 4 (SIGILL)
==77043==  Illegal opcode at address 0x40274E
==77043==    at 0x40274E: ??? (in /home/folkert/Projects/bf-compiler/test)
==77043==    by 0x4020EE: ??? (in /home/folkert/Projects/bf-compiler/test)
==77043== 
==77043== Events    : Ir
==77043== Collected : 28836
==77043== 
==77043== I   refs:      28,836
Illegal instruction (core dumped)

If you're curious what is going wrong here, the source assembly and the
x86 binary can be retrieved from
https://vanheusden.com/permshare/callgrind-error.tar.xz

Oh and if you would like to assemble the assembly yourself:

as -g mandelbrot.s
ld -g a.out -o test

./test then results in the mandelbrot-fractal.


Regards,

Folkert van Heusden


_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to