Remove --vex-iropt-precise-memory-exns, implement --vex-iropt-register-updates

* 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.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12809
This commit is contained in:
Philippe Waroquiers 2012-08-01 22:03:12 +00:00
parent 63da47e2c2
commit 36ca11463d
8 changed files with 69 additions and 17 deletions

9
NEWS
View File

@ -88,6 +88,15 @@ xxx Don't forget to update VALGRIND_MAJOR/MINOR before release
* 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"

View File

@ -228,7 +228,9 @@ static void usage_NORETURN ( Bool debug_help )
" 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"
@ -488,6 +490,21 @@ void main_process_cmd_line_options ( /*OUT*/Bool* logging_to_fd,
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"))
@ -503,7 +520,12 @@ void main_process_cmd_line_options ( /*OUT*/Bool* logging_to_fd,
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)) {}
@ -582,8 +604,18 @@ void main_process_cmd_line_options ( /*OUT*/Bool* logging_to_fd,
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",

View File

@ -788,21 +788,28 @@ are however some limitations and peculiarities:</para>
<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>
@ -898,7 +905,8 @@ Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.
<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>

View File

@ -2074,7 +2074,8 @@ able to cope with any POSIX-compliant use of signals.</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,

View File

@ -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=allregs-at-mem-access --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-mcsignopass
stderr_filter: filter_memcheck_monitor
stderr_filter_args: faultstatus.c
progB: gdb

View File

@ -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=allregs-at-mem-access --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-mcsigpass
stderr_filter: filter_memcheck_monitor
stderr_filter_args: faultstatus.c
progB: gdb

View File

@ -117,7 +117,9 @@ usage: valgrind [options] prog-and-args
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]

View File

@ -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=allregs-at-mem-access
prereq: grep '^#define HAVE_PIE 1' ../../config.h > /dev/null