1:BUILD_BY[name] student5 1:BUILD_ENVIRONMENT[operating system 32 vs 64] 1:END_BUILD_ENVIRONMENT 1:DEPENDENCIES[list of dependencies with where to get them] GMP. MPFR and Valgrind are required dependencies Download GMP in version 5.0.1: http://ftp.gnu.org/gnu/gmp/ Apply the patch in the main directory: patch -p1 -i gmp-5.0.1.patch Build and install GMP Download MPFR in version 3.0.0: http://www.mpfr.org/mpfr-3.0.0/ Apply the patch in the main directory: patch -p1 -i mpfr-3.0.0.patch Copy src/valgrind_additions.c into the src folder of MPFR. Build and install MPFR Download Valgrind http://valgrind.org/downloads/current.html 1:END_DEPENDENCIES 1:NOTES[notes on attempted build] When MPFR 3.0.0 was configured, it returned an error message: configure: error: libgmp not found or uses a different ABI. Please read the INSTALL file -- see "In case of problem". The INSTALL file could not provide much insights into how to correct this error. 1:END_NOTES 2:BUILD_BY[name] student8 2:BUILD_ENVIRONMENT[operating system 32 vs 64] Ubuntu 11.04 32-bit 2:END_BUILD_ENVIRONMENT 2:DEPENDENCIES[list of dependencies with where to get them] m4 1.4.1 from http://ftp.gnu.org/gnu/m4/ GMP 5.0.1 from http://ftp.gnu.org/gnu/gmp/ mpfr 3.0.0 from http://www.mpfr.org/mpfr-3.0.0/ valgrin 3.7.0 from http://valgrind.org/downloads/current.html 2:END_DEPENDENCIES 2:NOTES[notes on attempted build] To install m4: Download m4 1.4.1 from http://ftp.gnu.org/gnu/m4/ In the main directory of m4: $ ./configure $ make $ sudo make install To install the modified gmp: Downloaded GMP 5.0.1 from http://ftp.gnu.org/gnu/gmp/ In the main directory of gmp: $ patch -p1 -i gmp-5.0.1.patch $ ./configure $ make $ make check $ sudo make install To install the modified mpfr: Downloaded mpfr 3.0.0 from http://www.mpfr.org/mpfr-3.0.0/ In the main directory of mpfr: $ patch -p1 -i mpfr-3.0.0.patch $ cp src/valgrind_additions.c mpfr-3.0.0 $ ./configure $ make $ make check $ sudo make install To install the modified valgrind: Download valgrin 3.7.0 from http://valgrind.org/downloads/current.html $ cp -R fpdebug/ valgrind-3.7.0/ Edit Makefile.am by adding the new directory fpdebug to the EXP_TOOLS variables Edit configure.in by adding fpdebug/Makefile to the AC_CONFIG_FILES list Edit configure by adding fpdebug to the ac_config_files list and add the following at line 10008: "fpdebug/Makefile") CONFIG_FILES="$CONFIG_FILES fpdebug/Makefile" ;; Edit Makefile.in by adding the new directory fpdebug to the EXP_TOOLS variables In valgrind-3.7.0/fpdebug: cp -R ../exp-dhat/tests ./ Commented out the following line in valgrind-3.7.0/fpdebug/opToString.c to avoid "not declared" error: 359, 396, 397, 733-756 In the main directory of valgrin 3.7.0: $ ./configure $ make $ sudo make install To test: In directory valgrind-3.7.0/fpdebug: $ gcc test_1.c -O0 -g -mfpmath=387 -o test_1.out $ valgrind --tool=fpdebug ./test_1.out ==9916== FpDebug-0.1, Floating-point arithmetic debugger ==9916== Copyright (C) 2010-2011 by Florian Benz. ==9916== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info ==9916== Command: ./test_1.out ==9916== ==9916== precision=120 ==9916== mean-error=yes ==9916== ignore-libraries=no ==9916== ignore-accurate=yes ==9916== sim-origin al=no ==9916== analyze-all=yes ==9916== bad-cancellations=yes ==9916== ignore-end=no IR SANITY CHECK FAILURE IRSB { t0:I32 t1:I32 t2:I32 t3:I32 t4:I32 t5:I32 t6:I32 t7:I32 t8:I32 t9:I32 t10:I32 t11:I32 t12:I32 t13:I32 t14:I32 t15:I32 t16:I32 t17:I32 t18:I32 t19:I32 t20:I32 t21:I32 t22:I32 t23:I32 t24:I32 t25:I32 t26:I32 t27:I32 t28:I32 t29:I32 t30:I32 t31:I32 t32:I64 t33:I64 t32 = LDle:I64(0x3846EEE8:I64) t33 = Add64(t32,0x1:I64) STle(0x3846EEE8:I64) = t33 ------ IMark(0x4000850, 2, 0) ------ t16 = GET:I32(16) DIRTY 1:I1 ::: processGet[rp=2]{0x3800cf20}(0x10:I64,0x10:I64) PUT(0) = t16 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x0:I64,0x10:I64) ------ IMark(0x4000852, 5, 0) ------ PUT(60) = 0x4000852:I32 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x3C:I64,0xFFFFFFFFFFFFFFFF:I64) t17 = Sub32(t16,0x4:I32) PUT(16) = t17 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x10:I64,0x11:I64) STle(t17) = 0x4000857:I32 DIRTY 1:I1 ::: processStore[rp=3]{0x3800c860}(t17,0xFFFFFFFFFFFFFFFF:I64,0x1:I64) ------ IMark(0x4004770, 1, 0) ------ PUT(60) = 0x4004770:I32 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x3C:I64,0xFFFFFFFFFFFFFFFF:I64) t1 = GET:I32(20) DIRTY 1:I1 ::: processGet[rp=2]{0x3800cf20}(0x14:I64,0x1:I64) t19 = Sub32(t17,0x4:I32) PUT(16) = t19 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x10:I64,0x13:I64) STle(t19) = t1 STle(0x61FC3120:I64) = t1 DIRTY 1:I1 ::: processStore[rp=3]{0x3800c860}(t19,0x1:I64,0x1:I64) ------ IMark(0x4004771, 2, 0) ------ PUT(20) = t19 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x14:I64,0x13:I64) ------ IMark(0x4004773, 1, 0) ------ PUT(60) = 0x4004773:I32 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x3C:I64,0xFFFFFFFFFFFFFFFF:I64) t3 = GET:I32(28) DIRTY 1:I1 ::: processGet[rp=2]{0x3800cf20}(0x1C:I64,0x3:I64) t22 = Sub32(t19,0x4:I32) PUT(16) = t22 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x10:I64,0x16:I64) STle(t22) = t3 STle(0x61FC3120:I64) = t3 DIRTY 1:I1 ::: processStore[rp=3]{0x3800c860}(t22,0x3:I64,0x1:I64) ------ IMark(0x4004774, 1, 0) ------ PUT(60) = 0x4004774:I32 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x3C:I64,0xFFFFFFFFFFFFFFFF:I64) t5 = GET:I32(24) DIRTY 1:I1 ::: processGet[rp=2]{0x3800cf20}(0x18:I64,0x5:I64) t24 = Sub32(t22,0x4:I32) PUT(16) = t24 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x10:I64,0x18:I64) STle(t24) = t5 STle(0x61FC3120:I64) = t5 DIRTY 1:I1 ::: processStore[rp=3]{0x3800c860}(t24,0x5:I64,0x1:I64) ------ IMark(0x4004775, 1, 0) ------ PUT(60) = 0x4004775:I32 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x3C:I64,0xFFFFFFFFFFFFFFFF:I64) t7 = GET:I32(12) DIRTY 1:I1 ::: processGet[rp=2]{0x3800cf20}(0xC:I64,0x7:I64) t26 = Sub32(t24,0x4:I32) PUT(16) = t26 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x10:I64,0x1A:I64) STle(t26) = t7 STle(0x61FC3120:I64) = t7 DIRTY 1:I1 ::: processStore[rp=3]{0x3800c860}(t26,0x7:I64,0x1:I64) ------ IMark(0x4004776, 3, 0) ------ t9 = Sub32(t26,0x38:I32) PUT(32) = 0x6:I32 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x20:I64,0xFFFFFFFFFFFFFFFF:I64) PUT(36) = t26 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x24:I64,0x1A:I64) PUT(40) = 0x38:I32 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x28:I64,0xFFFFFFFFFFFFFFFF:I64) PUT(44) = 0x0:I32 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x2C:I64,0xFFFFFFFFFFFFFFFF:I64) ------ IMark(0x4004779, 5, 0) ------ PUT(60) = 0x4004779:I32 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x3C:I64,0xFFFFFFFFFFFFFFFF:I64) t28 = Sub32(t9,0x4:I32) PUT(16) = t28 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x10:I64,0x1C:I64) STle(t28) = 0x400477E:I32 DIRTY 1:I1 ::: processStore[rp=3]{0x3800c860}(t28,0xFFFFFFFFFFFFFFFF:I64,0x1:I64) ------ IMark(0x40174AB, 3, 0) ------ PUT(60) = 0x40174AB:I32 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x3C:I64,0xFFFFFFFFFFFFFFFF:I64) t30 = LDle:I32(t28) DIRTY 1:I1 ::: processLoad[rp=2]{0x3800bec0}(0x1E:I64,t28) PUT(12) = t30 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0xC:I64,0x1E:I64) ------ IMark(0x40174AE, 1, 0) ------ PUT(60) = 0x40174AE:I32 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x3C:I64,0xFFFFFFFFFFFFFFFF:I64) t15 = LDle:I32(t28) DIRTY 1:I1 ::: processLoad[rp=2]{0x3800bec0}(0xF:I64,t28) t31 = Add32(t28,0x4:I32) PUT(16) = t31 DIRTY 1:I1 ::: processPut[rp=2]{0x3800c3e0}(0x10:I64,0x1F:I64) goto {Return} t15 } IN STATEMENT: t32 = LDle:I64(0x3846EEE8:I64) ERROR = Iex.Load.addr: not :: guest word type vex: the `impossible' happened: sanityCheckFail: exiting due to bad IR vex storage: T total 0 bytes allocated vex storage: P total 0 bytes allocated valgrind: the 'impossible' happened: LibVEX called failure_exit(). ==9916== at 0x3801111D: report_and_quit (m_libcassert.c:210) ==9916== by 0x38011176: panic (m_libcassert.c:294) ==9916== by 0x3801132D: vgPlain_core_panic_at (m_libcassert.c:299) ==9916== by 0x38011348: vgPlain_core_panic (m_libcassert.c:304) ==9916== by 0x3802D2B6: failure_exit (m_translate.c:700) ==9916== by 0x380BAC2E: vpanic (main_util.c:226) ==9916== by 0x380BF56C: sanityCheckFail (ir_defs.c:2881) ==9916== by 0x380C1B04: tcExpr (ir_defs.c:3204) ==9916== by 0x380C27B1: sanityCheckIRSB (ir_defs.c:3288) ==9916== by 0x380B94AC: LibVEX_Translate (main_main.c:606) ==9916== by 0x3802D832: vgPlain_translate (m_translate.c:1544) ==9916== by 0x3805B5F3: vgPlain_scheduler (scheduler.c:901) ==9916== by 0x3806DC64: run_a_thread_NORETURN (syswrap-linux.c:98) sched status: running_tid=1 Thread 1: status = VgTs_Runnable ==9916== at 0x4000850: ??? (in /lib/i386-linux-gnu/ld-2.13.so) Note: see also the FAQ in the source distribution. It contains workarounds to several common problems. In particular, if Valgrind aborted or crashed after identifying problems in your program, there's a good chance that fixing those problems will prevent Valgrind aborting or crashing, especially if it happened in m_mallocfree.c. 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 OS and version you are using. Thanks. In summary, it could be run and compiled. But there was a runtime error.