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",