Index: docs/xml/manual-core.xml =================================================================== --- docs/xml/manual-core.xml (revision 12792) +++ docs/xml/manual-core.xml (working copy) @@ -2054,7 +2054,8 @@ If you're using signals in clever ways (for example, catching SIGSEGV, modifying page state and restarting the instruction), you're probably relying on precise exceptions. In this case, you will need -to use . +to use +or . If your program dies as a result of a fatal core-dumping signal, Index: docs/xml/manual-core-adv.xml =================================================================== --- docs/xml/manual-core-adv.xml (revision 12792) +++ docs/xml/manual-core-adv.xml (working copy) @@ -793,16 +793,17 @@ impact for memcheck is given for each option). - (+5%) ensures - that all integer registers are up to date at each memory access. + (+10%) ensures + that all registers and flags are up to date at each memory access. - (+100%) ensures that - all registers and flags values are up to date at each instruction. + (+25%) ensures + that all registers and flags are up to date at each instruction. - Note that the above options can be combined with - (+500%, see above Precision of "stop-at" commands). + Note the + (+500%, see above Precision of "stop-at" commands) automatically + activates . @@ -898,7 +899,8 @@ On PPC32/PPC64, stack unwinding for leaf functions (functions that do not call any other functions) works properly only when you give the option - . + + or . You must also pass this option in order to get a precise stack when a signal is trapped by GDB. Index: gdbserver_tests/mcsignopass.vgtest =================================================================== --- gdbserver_tests/mcsignopass.vgtest (revision 12792) +++ gdbserver_tests/mcsignopass.vgtest (working copy) @@ -6,7 +6,7 @@ # are eventually passed. prereq: test -e gdb prog: ../none/tests/faultstatus -vgopts: --tool=memcheck --vgdb=full --vex-iropt-precise-memory-exns=yes --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-mcsignopass +vgopts: --tool=memcheck --vgdb=full --vex-iropt-register-updates=atmemaccess --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-mcsignopass stderr_filter: filter_memcheck_monitor stderr_filter_args: faultstatus.c progB: gdb Index: gdbserver_tests/mcsigpass.vgtest =================================================================== --- gdbserver_tests/mcsigpass.vgtest (revision 12792) +++ gdbserver_tests/mcsigpass.vgtest (working copy) @@ -1,7 +1,7 @@ # test the signal handling, when signals are passed to the Valgrind guest. prereq: test -e gdb prog: ../none/tests/faultstatus -vgopts: --tool=memcheck --vgdb=full --vex-iropt-precise-memory-exns=yes --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-mcsigpass +vgopts: --tool=memcheck --vgdb=full --vex-iropt-register-updates=atmemaccess --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-mcsigpass stderr_filter: filter_memcheck_monitor stderr_filter_args: faultstatus.c progB: gdb Index: NEWS =================================================================== --- NEWS (revision 12792) +++ NEWS (working copy) @@ -82,6 +82,10 @@ * Improved DWARF4 support (284124) +* Option --vex-iropt-precise-memory-exns has been removed. + It is replaced by --vex-iropt-register-updates which accepts + 3 values : 'minimal', 'atmemaccess', 'exact'. + * ==================== FIXED BUGS ==================== The following bugs have been fixed or resolved. Note that "n-i-bz" Index: none/tests/selfrun.vgtest =================================================================== --- none/tests/selfrun.vgtest (revision 12792) +++ none/tests/selfrun.vgtest (working copy) @@ -1,3 +1,3 @@ prog: ../../coregrind/valgrind --tool=none --command-line-only=yes ./selfrun -vgopts: --vex-iropt-precise-memory-exns=yes +vgopts: --vex-iropt-register-updates=atmemaccess prereq: grep '^#define HAVE_PIE 1' ../../config.h > /dev/null Index: none/tests/cmdline2.stdout.exp =================================================================== --- none/tests/cmdline2.stdout.exp (revision 12792) +++ none/tests/cmdline2.stdout.exp (working copy) @@ -113,7 +113,7 @@ Vex options for all Valgrind tools: --vex-iropt-verbosity=<0..9> [0] --vex-iropt-level=<0..2> [2] - --vex-iropt-precise-memory-exns=no|yes [no] + --vex-iropt-register-updates=minimal|atmemaccess|exact [minimal] --vex-iropt-unroll-thresh=<0..400> [120] --vex-guest-max-insns=<1..100> [50] --vex-guest-chase-thresh=<0..99> [10] Index: coregrind/m_main.c =================================================================== --- coregrind/m_main.c (revision 12792) +++ coregrind/m_main.c (working copy) @@ -224,7 +224,7 @@ " Vex options for all Valgrind tools:\n" " --vex-iropt-verbosity=<0..9> [0]\n" " --vex-iropt-level=<0..2> [2]\n" -" --vex-iropt-precise-memory-exns=no|yes [no]\n" +" --vex-iropt-register-updates=minimal|atmemaccess|exact [minimal]\n" " --vex-iropt-unroll-thresh=<0..400> [120]\n" " --vex-guest-max-insns=<1..100> [50]\n" " --vex-guest-chase-thresh=<0..99> [10]\n" @@ -468,6 +468,13 @@ else if VG_STREQN(11, arg, "--sim-hints") {} else if VG_STREQN(14, arg, "--profile-heap") {} + /* Obsolete option. Report an error and exit */ + else if VG_STREQN(31, arg, "--vex-iropt-precise-memory-exns") { + VG_(fmsg_bad_option)(arg, + "--vex-iropt-precise-memory-exns is obsolete\n" + "Use --vex-iropt-register-updates instead\n"); + } + // These options are new. else if (VG_STREQ(arg, "-v") || VG_STREQ(arg, "--verbose")) @@ -483,7 +490,10 @@ else if VG_XACT_CLO(arg, "--vgdb=no", VG_(clo_vgdb), Vg_VgdbNo) {} else if VG_XACT_CLO(arg, "--vgdb=yes", VG_(clo_vgdb), Vg_VgdbYes) {} - else if VG_XACT_CLO(arg, "--vgdb=full", VG_(clo_vgdb), Vg_VgdbFull) {} + else if VG_XACT_CLO(arg, "--vgdb=full", VG_(clo_vgdb), Vg_VgdbFull) { + /* automatically sets register values to exact with --vgdb=full */ + VG_(clo_vex_control).iropt_register_updates = 2; + } else if VG_INT_CLO (arg, "--vgdb-poll", VG_(clo_vgdb_poll)) {} else if VG_INT_CLO (arg, "--vgdb-error", VG_(clo_vgdb_error)) {} else if VG_STR_CLO (arg, "--vgdb-prefix", VG_(clo_vgdb_prefix)) {} @@ -562,8 +572,15 @@ VG_(clo_vex_control).iropt_verbosity, 0, 10) {} else if VG_BINT_CLO(arg, "--vex-iropt-level", VG_(clo_vex_control).iropt_level, 0, 2) {} - else if VG_BOOL_CLO(arg, "--vex-iropt-precise-memory-exns", - VG_(clo_vex_control).iropt_precise_memory_exns) {} + else if VG_XACT_CLO(arg, "--vex-iropt-register-updates=minimal", + VG_(clo_vex_control).iropt_register_updates, + 0); + else if VG_XACT_CLO(arg, "--vex-iropt-register-updates=atmemaccess", + VG_(clo_vex_control).iropt_register_updates, + 1); + else if VG_XACT_CLO(arg, "--vex-iropt-register-updates=exact", + VG_(clo_vex_control).iropt_register_updates, + 2); else if VG_BINT_CLO(arg, "--vex-iropt-unroll-thresh", VG_(clo_vex_control).iropt_unroll_thresh, 0, 400) {} else if VG_BINT_CLO(arg, "--vex-guest-max-insns",