* 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 : 'unwindregs-at-mem-access' (replacing
+ --vex-iropt-precise-memory-exns=no), 'allregs-at-mem-access'
+ (replacing --vex-iropt-precise-memory-exns=yes)
+ and a new value 'allregs-at-each-insn'.
+ 'allregs-at-each-insn' allows the Valgrind gdbserver to always
+ show up to date values to GDB.
+
* ==================== FIXED BUGS ====================
The following bugs have been fixed or resolved. Note that "n-i-bz"
" 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=unwindregs-at-mem-access\n"
+" |allregs-at-mem-access\n"
+" |allregs-at-each-insn [unwindregs-at-mem-access]\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"
else if VG_STREQN(14, arg, "--core-redzone-size") {}
else if VG_STREQN(14, arg, "--redzone-size") {}
+ /* Obsolete options. Report an error and exit */
+ else if VG_STREQN(34, arg, "--vex-iropt-precise-memory-exns=no") {
+ VG_(fmsg_bad_option)
+ (arg,
+ "--vex-iropt-precise-memory-exns is obsolete\n"
+ "Use --vex-iropt-register-updates=unwindregs-at-mem-access instead\n");
+ }
+ else if VG_STREQN(35, arg, "--vex-iropt-precise-memory-exns=yes") {
+ VG_(fmsg_bad_option)
+ (arg,
+ "--vex-iropt-precise-memory-exns is obsolete\n"
+ "Use --vex-iropt-register-updates=allregs-at-mem-access instead\n"
+ " (or --vex-iropt-register-updates=allregs-at-each-insn)\n");
+ }
+
// These options are new.
else if (VG_STREQ(arg, "-v") ||
VG_STREQ(arg, "--verbose"))
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 updates register values at each insn
+ with --vgdb=full */
+ VG_(clo_vex_control).iropt_register_updates
+ = VexRegUpdAllregsAtEachInsn;
+ }
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)) {}
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=unwindregs-at-mem-access",
+ VG_(clo_vex_control).iropt_register_updates,
+ VexRegUpdUnwindregsAtMemAccess);
+ else if VG_XACT_CLO(arg,
+ "--vex-iropt-register-updates=allregs-at-mem-access",
+ VG_(clo_vex_control).iropt_register_updates,
+ VexRegUpdAllregsAtMemAccess);
+ else if VG_XACT_CLO(arg,
+ "--vex-iropt-register-updates=allregs-at-each-insn",
+ VG_(clo_vex_control).iropt_register_updates,
+ VexRegUpdAllregsAtEachInsn);
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",
<para>When Valgrind gdbserver stops on an error, on a breakpoint
or when single stepping, registers and flags values might not be always
up to date due to the optimisations done by the Valgrind core.
- Disabling some optimisations using the following options will increase
+ The default value
+ <option>--vex-iropt-register-updates=unwindregs-at-mem-access</option>
+ ensures that the registers needed to make a stack trace (typically
+ PC/SP/FP) are up to date at each memory access (i.e. memory exception
+ points).
+ Disabling some optimisations using the following values will increase
the precision of registers and flags values (a typical performance
impact for memcheck is given for each option).
<itemizedlist>
<listitem>
- <option>--vex-iropt-precise-memory-exns=yes</option> (+5%) ensures
- that all integer registers are up to date at each memory access.
+ <option>--vex-iropt-register-updates=allregs-at-mem-access</option> (+10%)
+ ensures that all registers and flags are up to date at each memory
+ access.
</listitem>
<listitem>
- <option>--vex-guest-max-insns=1</option> (+100%) ensures that
- all registers and flags values are up to date at each instruction.
+ <option>--vex-iropt-register-updates=allregs-at-each-insn</option> (+25%)
+ ensures that all registers and flags are up to date at each instruction.
</listitem>
</itemizedlist>
- Note that the above options can be combined with <option>--vgdb=full</option>
- (+500%, see above Precision of "stop-at" commands).
+ Note that <option>--vgdb=full</option> (+500%, see above
+ Precision of "stop-at" commands) automatically
+ activates <option>--vex-iropt-register-updates=allregs-at-each-insn</option>.
</para>
</listitem>
<para>On PPC32/PPC64, stack unwinding for leaf functions
(functions that do not call any other functions) works properly
only when you give the option
- <option>--vex-iropt-precise-memory-exns=yes</option>.
+ <option>--vex-iropt-register-updates=allregs-at-mem-access</option>
+ or <option>--vex-iropt-register-updates=allregs-at-each-insn</option>.
You must also pass this option in order to get a precise stack when
a signal is trapped by GDB.
</para>
<para>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 <option>--vex-iropt-precise-memory-exns=yes</option>.
+to use <option>--vex-iropt-register-updates=allregs-at-mem-access</option>
+or <option>--vex-iropt-register-updates=allregs-at-each-insn</option>.
</para>
<para>If your program dies as a result of a fatal core-dumping signal,
# 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=allregs-at-mem-access --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-mcsignopass
stderr_filter: filter_memcheck_monitor
stderr_filter_args: faultstatus.c
progB: gdb
# 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=allregs-at-mem-access --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-mcsigpass
stderr_filter: filter_memcheck_monitor
stderr_filter_args: faultstatus.c
progB: gdb
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=unwindregs-at-mem-access
+ |allregs-at-mem-access
+ |allregs-at-each-insn [unwindregs-at-mem-access]
--vex-iropt-unroll-thresh=<0..400> [120]
--vex-guest-max-insns=<1..100> [50]
--vex-guest-chase-thresh=<0..99> [10]
prog: ../../coregrind/valgrind --tool=none --command-line-only=yes ./selfrun
-vgopts: --vex-iropt-precise-memory-exns=yes
+vgopts: --vex-iropt-register-updates=allregs-at-mem-access
prereq: grep '^#define HAVE_PIE 1' ../../config.h > /dev/null