mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 18:13:01 +00:00
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:
parent
63da47e2c2
commit
36ca11463d
9
NEWS
9
NEWS
@ -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"
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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]
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user