Full text of program is: #include <iostream> using std::cout; #include <random> using std::random_device; int main() { random_device random_seeder; cout << "number is " << random_seeder() << "\n"; return 0; } uname -a Linux colin-Precision-Tower-3620 4.4.0-42-generic #62-Ubuntu SMP Fri Oct 7 23:11:45 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux Valgrind command line: valgrind --read-inline-info=yes --log-file=valgrind.out -v ./random Contents of valgrind.out: ==30058== Memcheck, a memory error detector ==30058== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==30058== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==30058== Command: ./random ==30058== Parent PID: 28615 ==30058== --30058-- --30058-- Valgrind options: --30058-- --read-inline-info=yes --30058-- --log-file=valgrind.out --30058-- -v --30058-- Contents of /proc/version: --30058-- Linux version 4.4.0-42-generic (buildd@lgw01-13) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.2) ) #62-Ubuntu SMP Fri Oct 7 23:11:45 UTC 2016 --30058-- --30058-- Arch and hwcaps: AMD64, LittleEndian, amd64-cx16-lzcnt-rdtscp-sse3-avx-avx2-bmi --30058-- Page sizes: currently 4096, max supported 4096 --30058-- Valgrind library directory: /usr/lib/valgrind --30058-- Reading syms from /media/big/colin/projects/c++-play/random-device/random --30058-- Reading syms from /lib/x86_64-linux-gnu/ld-2.23.so --30058-- Considering /lib/x86_64-linux-gnu/ld-2.23.so .. --30058-- .. CRC mismatch (computed d3da0723 wanted a1c29704) --30058-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/ld-2.23.so .. --30058-- .. CRC is valid --30058-- Reading syms from /usr/lib/valgrind/memcheck-amd64-linux --30058-- Considering /usr/lib/valgrind/memcheck-amd64-linux .. --30058-- .. CRC mismatch (computed 5529a2c7 wanted 5bd23904) --30058-- object doesn't have a symbol table --30058-- object doesn't have a dynamic symbol table --30058-- Scheduler: using generic scheduler lock implementation. --30058-- Reading suppressions file: /usr/lib/valgrind/default.supp ==30058== embedded gdbserver: reading from /tmp/vgdb-pipe-from-vgdb-to-30058-by-colin-on-??? ==30058== embedded gdbserver: writing to /tmp/vgdb-pipe-to-vgdb-from-30058-by-colin-on-??? ==30058== embedded gdbserver: shared mem /tmp/vgdb-pipe-shared-mem-vgdb-30058-by-colin-on-??? ==30058== ==30058== TO CONTROL THIS PROCESS USING vgdb (which you probably ==30058== don't want to do, unless you know exactly what you're doing, ==30058== or are doing some strange experiment): ==30058== /usr/lib/valgrind/../../bin/vgdb --pid=30058 ...command... ==30058== ==30058== TO DEBUG THIS PROCESS USING GDB: start GDB like this ==30058== /path/to/gdb ./random ==30058== and then give GDB the following command ==30058== target remote | /usr/lib/valgrind/../../bin/vgdb --pid=30058 ==30058== --pid is optional if only one valgrind process is running ==30058== --30058-- REDIR: 0x401cdc0 (ld-linux-x86-64.so.2:strlen) redirected to 0x3809e181 (???) --30058-- Reading syms from /usr/lib/valgrind/vgpreload_core-amd64-linux.so --30058-- Considering /usr/lib/valgrind/vgpreload_core-amd64-linux.so .. --30058-- .. CRC mismatch (computed a30c8eaa wanted 7ae2fed4) --30058-- object doesn't have a symbol table --30058-- Reading syms from /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so --30058-- Considering /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so .. --30058-- .. CRC mismatch (computed 402c2ab5 wanted 745f25ae) --30058-- object doesn't have a symbol table ==30058== WARNING: new redirection conflicts with existing -- ignoring it --30058-- old: 0x0401cdc0 (strlen ) R-> (0000.0) 0x3809e181 ??? --30058-- new: 0x0401cdc0 (strlen ) R-> (2007.0) 0x04c31020 strlen --30058-- REDIR: 0x401b710 (ld-linux-x86-64.so.2:index) redirected to 0x4c30bc0 (index) --30058-- REDIR: 0x401b930 (ld-linux-x86-64.so.2:strcmp) redirected to 0x4c320d0 (strcmp) --30058-- REDIR: 0x401db20 (ld-linux-x86-64.so.2:mempcpy) redirected to 0x4c35270 (mempcpy) --30058-- Reading syms from /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 --30058-- Considering /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 .. --30058-- .. CRC mismatch (computed 834c912e wanted c67ab13d) --30058-- object doesn't have a symbol table --30058-- Reading syms from /lib/x86_64-linux-gnu/libgcc_s.so.1 --30058-- Considering /lib/x86_64-linux-gnu/libgcc_s.so.1 .. --30058-- .. CRC mismatch (computed b9a68419 wanted 29d51b00) --30058-- object doesn't have a symbol table --30058-- Reading syms from /lib/x86_64-linux-gnu/libc-2.23.so --30058-- Considering /lib/x86_64-linux-gnu/libc-2.23.so .. --30058-- .. CRC mismatch (computed 2adb2e50 wanted 9b73f606) --30058-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.23.so .. --30058-- .. CRC is valid --30058-- Reading syms from /lib/x86_64-linux-gnu/libm-2.23.so --30058-- Considering /lib/x86_64-linux-gnu/libm-2.23.so .. --30058-- .. CRC mismatch (computed f7791cb7 wanted 92acf4be) --30058-- Considering /usr/lib/debug/lib/x86_64-linux-gnu/libm-2.23.so .. --30058-- .. CRC is valid --30058-- REDIR: 0x5460fd0 (libc.so.6:strcasecmp) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper) --30058-- REDIR: 0x545c850 (libc.so.6:strcspn) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper) --30058-- REDIR: 0x54632c0 (libc.so.6:strncasecmp) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper) --30058-- REDIR: 0x545ecc0 (libc.so.6:strpbrk) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper) --30058-- REDIR: 0x545f050 (libc.so.6:strspn) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper) --30058-- REDIR: 0x546071b (libc.so.6:memcpy@GLIBC_2.2.5) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper) --30058-- REDIR: 0x545e9d0 (libc.so.6:rindex) redirected to 0x4c308a0 (rindex) --30058-- REDIR: 0x5455550 (libc.so.6:malloc) redirected to 0x4c2db20 (malloc) --30058-- REDIR: 0x545ccf0 (libc.so.6:strlen) redirected to 0x4c30f60 (strlen) --30058-- REDIR: 0x54601c0 (libc.so.6:__GI_memcmp) redirected to 0x4c33b90 (__GI_memcmp) --30058-- REDIR: 0x545b2a0 (libc.so.6:strcmp) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper) --30058-- REDIR: 0x5470b40 (libc.so.6:__strcmp_sse2_unaligned) redirected to 0x4c31f90 (strcmp) --30058-- REDIR: 0x54659c0 (libc.so.6:memcpy@@GLIBC_2.14) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper) --30058-- REDIR: 0x551f6d0 (libc.so.6:__memcpy_avx_unaligned) redirected to 0x4c324a0 (memcpy@@GLIBC_2.14) --30058-- REDIR: 0x5460180 (libc.so.6:bcmp) redirected to 0x4a286f0 (_vgnU_ifunc_wrapper) --30058-- REDIR: 0x553fc60 (libc.so.6:__memcmp_sse4_1) redirected to 0x4c33cd0 (__memcmp_sse4_1) vex amd64->IR: unhandled instruction bytes: 0xF 0xC7 0xF0 0x89 0x6 0xF 0x42 0xC1 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=0F vex amd64->IR: PFX.66=0 PFX.F2=0 PFX.F3=0 ==30058== valgrind: Unrecognised instruction at address 0x4ef1b15. ==30058== at 0x4EF1B15: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21) ==30058== by 0x4EF1CB1: std::random_device::_M_getval() (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21) ==30058== by 0x400E49: std::random_device::operator()() (random.h:1612) ==30058== by 0x400CF0: main (random.cpp:10) ==30058== Your program just tried to execute an instruction that Valgrind ==30058== did not recognise. There are two possible reasons for this. ==30058== 1. Your program has a bug and erroneously jumped to a non-code ==30058== location. If you are running Memcheck and you just saw a ==30058== warning about a bad jump, it's probably your program's fault. ==30058== 2. The instruction is legitimate but Valgrind doesn't handle it, ==30058== i.e. it's Valgrind's fault. If you think this is the case or ==30058== you are not sure, please let us know and we'll try to fix it. ==30058== Either way, Valgrind will now raise a SIGILL signal which will ==30058== probably kill your program. ==30058== ==30058== Process terminating with default action of signal 4 (SIGILL) ==30058== Illegal opcode at address 0x4EF1B15 ==30058== at 0x4EF1B15: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21) ==30058== by 0x4EF1CB1: std::random_device::_M_getval() (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21) ==30058== by 0x400E49: std::random_device::operator()() (random.h:1612) ==30058== by 0x400CF0: main (random.cpp:10) --30058-- REDIR: 0x5455a70 (libc.so.6:free) redirected to 0x4c2ed80 (free) ==30058== ==30058== HEAP SUMMARY: ==30058== in use at exit: 72,704 bytes in 1 blocks ==30058== total heap usage: 1 allocs, 0 frees, 72,704 bytes allocated ==30058== ==30058== Searching for pointers to 1 not-freed blocks ==30058== Checked 115,632 bytes ==30058== ==30058== LEAK SUMMARY: ==30058== definitely lost: 0 bytes in 0 blocks ==30058== indirectly lost: 0 bytes in 0 blocks ==30058== possibly lost: 0 bytes in 0 blocks ==30058== still reachable: 72,704 bytes in 1 blocks ==30058== suppressed: 0 bytes in 0 blocks ==30058== Rerun with --leak-check=full to see details of leaked memory ==30058== ==30058== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) ==30058== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
That's an RDRAND instruction which should be fixed in 3.12.0 already. *** This bug has been marked as a duplicate of bug 353370 ***