17275 Commits

Author SHA1 Message Date
Paul Floyd
2e873534bb macOS: drd pth_mutex_signal test doesn't build
pth_mutex_signal.c:50:13: error: use of undeclared identifier 'SIGRTMAX'
  sigaction(NATIVE_IO_INTERRUPT_SIGNAL, &signalAction, NULL);

Put this target under a condition for the moment.
2023-01-29 18:00:59 +01:00
Paul Floyd
44a6e87492 Compiler warning expansion to defined
Clang doesn't like
m_debuginfo/tinfl.c:182:45: warning: macro expansion producing 'defined' has undefined behavior [-Wexpansion-to-defined]
2023-01-29 17:49:11 +01:00
Paul Floyd
ea733f262e macOS: Try to fix build, doesn't like .debug_gdb_scripts 2023-01-29 17:35:08 +01:00
Paul Floyd
a1f3651505 Remove one lingering trace of tilegx 2023-01-28 22:08:29 +01:00
Mark Wielaard
3155bacf26 tsan_thread_wrappers_pthread.h: Only include cstdint for C++11
Fixes build on older g++.
2023-01-28 21:54:03 +01:00
Mark Wielaard
092d908544 configure.ac: Update AC_PROG_CC checks
AM_PROG_CC_C_O has been obsolete since automake 1.14.
AC_PROG_CC does the same check. With autoconf 2.70 we
must use AC_PROG_CC (which will check for c11 and c99),
for earlier versions we'll use AC_PROG_CC_C99.
2023-01-28 21:11:38 +01:00
Paul Floyd
45c61d598f Illumos: regtest filters and gitignore
Filter for the gdb python autoload warnings
Filter for another variation of shell abort messages
2023-01-28 18:27:16 +01:00
Paul Floyd
cbba7f699a Regtest: broaden suppression for helgrind bug 392331
Inlining differences on different Linux platforms.
2023-01-27 20:00:26 +01:00
Paul Floyd
f7e4bb4af2 Bug 382034 - Testcases build fixes for musl 2023-01-27 08:42:06 +01:00
Paul Floyd
dee222c6e8 Bug 464859 - Build failures with GCC-13 (drd tsan_unittest)
Patch submitted by
	Khem Raj <raj.khem@gmail.com>
2023-01-27 08:30:41 +01:00
Paul Floyd
57c1641d04 Linux regtest: some extra filtering for helgrind bug392331
Was failing on rhel 7.6
2023-01-27 08:22:19 +01:00
Paul Floyd
0df691f9d9 Linux regtest: forgot prereq test for scalar_openat2 2023-01-27 07:40:31 +01:00
Paul Floyd
5830ece5cd FreeBSD: update comment about __sysctlbyname and kern.proc.pathname 2023-01-25 08:31:09 +01:00
Paul Floyd
e2eeebafa6 FreeBSD: fix compile of auxv on FreeBSD 12 2023-01-24 22:00:44 +01:00
Paul Floyd
e56436d560 FreeBSD: fix build on older OSes
A bad copy-and-paste broke compilation on FreeBSD 12.
2023-01-24 21:54:09 +01:00
Paul Floyd
8dba06c771 FreeBSD: remove different reserved fds number
No idea where it originated. Causes no problems on
FreeBSD 13.1 amd64.
2023-01-24 21:03:48 +01:00
Paul Floyd
7886c072e1 FreeBSD: switch to FreeBSD 12 versions of syscalls for fstat etc
This was a change that enabled 64bit inodes (ino64).

Also a couple of typos in READMEs.
2023-01-24 20:41:15 +01:00
Paul Floyd
5a6f1c1322 Bug 435441 - valgrind fails to interpose malloc on musl 1.2.2 due to weak symbol name and no libc soname
Patch by Michael Forney <mforney@mforney.org>
2023-01-23 09:05:50 +01:00
Paul Floyd
7f95310985 FreeBSD: More details on interrupting vgdb and correct 1 typo. 2023-01-23 07:27:55 +01:00
Paul Floyd
c15993dcb4 FreeBSD: start adding more checks for /proc
Also add a couple of expecteds.
2023-01-22 21:48:51 +01:00
Paul Floyd
f7983be3f2 FreeBSD: improve auxv filter
Didn't work id the clone directory isn't 'valgrind'
2023-01-22 09:41:49 +01:00
Paul Floyd
a526bbd051 FreeBSD: Fix auxv AT_EXECPATH
This was being copied from the host. Now it's synthesized for
the guest. Also improve the none/freebsd/auxv test to
print a few of the strings in auxv (but not the envp ones).
2023-01-21 20:49:30 +01:00
Paul Floyd
2b1c6db9c8 Two more debuginfo.c typos 2023-01-21 18:09:47 +01:00
Paul Floyd
5d38764204 Bug 464476 - Firefox fails to start under Valgrind
On FreeBSD, Firefox uses the kern.proc.pathname.PID sysctl
to get the binary path (where PID can be the actual pid
or -1). The user path is /usr/local/bin/firefox which is
a symlink to /usr/local/lib/firefox/firefox.

This was failing because we were not handling this MIB.
That meant that the sysctl returned the path for the
binary of the running tool (e.g.,
/home/paulf/scratch/valgrind/memcheck/memcheck-amd64-freebsd).
Firefox looks for files in the same directory.
Since it was the wrong directory it failed to find them and
exited.

I also noticed a lot of _umtx_op errors. On analysis they
are spurious. The wake ops take an "obj" argument, a pointer
to a variable. They only use the address as a key for
lookups and don't read the contents.
2023-01-21 17:55:09 +01:00
Paul Floyd
ded1adc432 FreeBSD: small change for pthread mutex types
It seems what is 'normal' and 'default' is not
portable.

And a bit more debuginfo mmap comment fixing
2023-01-21 13:51:50 +01:00
Paul Floyd
6d8ea1bd86 Cleanup mmap comments in debuginfo.c 2023-01-21 13:34:47 +01:00
Mark Wielaard
fdda0bece6 m_debuginfo: Suppress warning about not handling entry_value ops
The warning: evaluate_Dwarf3_Expr: unhandled DW_OP_ 0xf3 isn't
very helpful. This means we didn't handle DW_OP_GNU_entry_value.

DW_OP_GNU_entry_value (or DWARF5 DW_OP_entry_value) means interpreting
the given DWARF expression using register values as they were upon
entering the function. Which is non-trivial to implement.

We can fail the evaluation of the DWARF expression without warning
about it by default, since it isn't really needed for any current
valgrind functionality (and it is only done with --read-var-info=yes.
2023-01-15 14:24:31 +01:00
Paul Floyd
cae2118d95 FreeBSD: some _umtx_op corrections
mutex trylock doesn't user timer arguments
plain mutex lock doesn't need restart

still not sure about mutex trylock
2023-01-15 09:05:55 +01:00
Paul Floyd
30cdbfbb2c FreeBSD: some more clangd refactoring 2023-01-15 07:20:08 +01:00
Paul Floyd
3c9cb7a711 Remove execute bit from drd tests std_string.cpp 2023-01-14 16:24:00 +01:00
Paul Floyd
ed73978bdb Update wrong expecteds for Bug 241072 2023-01-12 08:00:27 +01:00
Paul Floyd
8fcc813468 Bug 241072 List tools in --help output 2023-01-11 21:42:41 +01:00
Andreas Arnez
4f4cd4b8d5 s390: Add z16 support to ecag testcase
The testcase 'none/tests/s390x/ecag' requires expected output from any
machine it runs on.  This is missing for z16, so add it.
2023-01-11 16:44:38 +01:00
Andreas Arnez
d6073d34d4 s390: Add test for short/extended vector float insns
Several issues with vector floating point instructions have gone unnoticed
due to a lack of test coverage in this area.  Add a test case that
improves the coverage, particuarly when dealing with short and extended
floating point formats.
2023-01-11 16:44:38 +01:00
Andreas Arnez
1b8dcec1b4 s390: Stop CC clobbering by VFMIN and VFMAX
Valgrind's implementation of the VFMIN and VFMAX instructions clobbers the
condition code, which is wrong.  Stop doing that.
2023-01-11 16:44:38 +01:00
Andreas Arnez
73ab2978f8 s390: Un-swap implementations of VFCH and VFCHE
When running under Valgrind, the VFCH instruction behaves like VFCHE, and
vice versa.  Fix this.
2023-01-11 16:44:38 +01:00
Andreas Arnez
e05f55c77c s390: Fix VFMA, VFMS, VFNMA, and VFNMS for 128-bit FP
When trying to execute any of the vector float multiply-and-add family
instructions, Valgrind panics with the message "Iex_Qop with F128 data".

So far all F128 operations were implemented with instructions that operate
on FP register pairs.  However, such instructions don't exist for
Iop_MAddF128 and Iop_MSubF128, so they must be implemented with vector
instructions instead.  This was missed when emitting them in
"guest_s390_toIR.c".

Add the missing support.  This also involves adding a few new features to
host_s390_defs:

* a new vector operation S390_VEC_INIT_FROM_FPRS

* the capability to move the left half of a VR to an FPR

* S390_VEC_FLOAT_MADD/_MSUB for 128-bit sizes
2023-01-11 16:44:38 +01:00
Andreas Arnez
6da4025b59 Bug 460356 -- s390: Fix code generation for Iop_Sqrt32Fx4
There is no instruction selector for Iop_Sqrt32Fx4, leading to Valgrind
panicking with the message:

   s390_isel_vec_expr: cannot reduce tree

Fix this.
2023-01-11 16:44:38 +01:00
Mark Wielaard
c5d52a4056 gdbserver tests filter out uninstalled python scripts warnings
Filter out loading error messages when python scripts haven't
been installed yet (running against vg-in-place)
2023-01-11 15:45:32 +01:00
Paul Floyd
36b9fea113 Linux regtest: openat2 not available on older systems
The x86-linux/scalar testcase fas failing to compile.
So split out openat2 into a separate test with a condfigure test.
2023-01-10 21:00:22 +01:00
Philippe Waroquiers
e41dff2999 Fix gdbserver tests failing when python code cannot be autoloaded.
If the valgrind python code loading is not authorised by GDB config,
ensure the related error messages and info messages are filtered.
2023-01-10 00:28:38 +01:00
Paul Floyd
99dfad28a5 Cleanup warnings
Now no warnings on Fedora 36
For a short while
2023-01-09 23:57:01 +01:00
Paul Floyd
d320fc123b FreeBSD: clang-tidy corrections 2023-01-08 17:52:48 +01:00
Paul Floyd
1cea0e151b Cleanup of warnings, mostly -Wno-unused-but-set-variable 2023-01-08 17:51:37 +01:00
Philippe Waroquiers
39a063513c Implement front end GDB commands for Valgrind gdbserver monitor commands.
This commit implements in python a set of GDB commands corresponding to the
Valgrind gdbserver monitor commands.

Basically, the idea is that one GDB command is defined for each valgrind
gdbserver subcommand and will generate and send a monitor command to valgrind.

The python code is auto-loaded by GDB as soon as GDB observes that the valgrind
preload core shared lib is loaded (e.g. vgpreload_core-amd64-linux.so).
This automatic loading is done thanks to the .debug_gdb_scripts section
added in vg_preloaded.c file.

Sadly, the auto-load only happens once valgrind has started to execute the code
of ld that loads this vg_preload file.

I have tried 2 approaches to have the python code auto-loaded when attaching at
startup to valgrind:
  * have valgrind gdbserver reporting first to GDB that the executable file is
    the tool executable (with a .debug_gdb_scripts section) and then reporting
    the real (guest) executable file.
    The drawback of this approach is that it triggers a warning/question in GDB
    according to the GDB setting 'set exec-file-mismatch'.
  * have valgrind gdbserver pretending to be multiprocess enabled, and report
    a fake process using the tool executable with a .debug_gdb_scripts section.
    The drawback of this is that this always creates a second inferior in GDB,
    which will be confusing.

Possibly, we might complete the below message :
  ==2984378== (action at startup) vgdb me ...
  ==2984378==
  ==2984378== TO DEBUG THIS PROCESS USING GDB: start GDB like this
  ==2984378==   /path/to/gdb /home/philippe/valgrind/littleprogs/some_mem
  ==2984378== and then give GDB the following command
  ==2984378==   target remote | /home/philippe/valgrind/git/improve/Inst/libexec/valgrind/../../bin/vgdb --pid=2984378
  ==2984378== --pid is optional if only one valgrind process is running

with:
  ==2984378== GDB valgrind python specific commands will be auto-loaded when execution begins.
  ==2984378== Alternatively, you might load it before with the GDB command:
  ==2984378==   source /abs/path/to/valgrind/install/libexec/valgrind/valgrind-monitor.py

The following GDB setting traces the monitor commands sent by a GDB valgrind
command to the valgrind gdbserver:
  set debug valgrind-execute-monitor on

How to use the new GDB valgrind commands?
-----------------------------------------

The usage of the GDB front end commands is compatible with the
monitor command as accepted today by Valgrind.

For example, the memcheck monitor command "xb' has the following usage:
 xb <addr> [<len>]

With some piece of code:
   'char some_mem [5];'
xb can be used the following way:
  (gdb) print &some_mem
  (gdb) $2 = (char (*)[5]) 0x1ffefffe8b
  (gdb) monitor xb 0x1ffefffe8b 5
  		    ff	  ff	  ff	  ff	  ff
  0x4A43040:	  0x00	0x00	0x00	0x00	0x00
  (gdb)

The same action can be done with the new GDB 'memcheck xb' command:
  (gdb) memcheck xb 0x1ffefffe8b 5
  		    ff	  ff	  ff	  ff	  ff
  0x1FFEFFFE8B:	  0x00	0x00	0x00	0x00	0x00
  (gdb)

At this point, you might ask yourself: "what is the interest ?".

Using GDB valgrind commands provides several advantages compared to
the valgrind gdbserver monitor commands.

Evaluation of arguments by GDB:
-------------------------------
For relevant arguments, the GDB command will evaluate its arguments using
the usual GDB evaluation logic, for example, instead of printing/copying
the address and size of 'some_mem', the following will work:
  (gdb) memcheck xb &some_mem sizeof(some_mem)
  		    ff	  ff	  ff	  ff	  ff
  0x1FFEFFFE8B:	  0x00	0x00	0x00	0x00	0x00
  (gdb)

or:
  (gdb) p some_mem
  $4 = "\000\000\000\000"
  (gdb) memcheck xb &$4
  		    ff	  ff	  ff	  ff	  ff
  0x1FFEFFFE8B:	  0x00	0x00	0x00	0x00	0x00
  (gdb)

This is both easier to use interactively and easier to use in GDB scripts,
as you can directly use variable names in the GDB valgrind commands.

Command completion by GDB:
--------------------------
The usual command completion in GDB will work for the GDB valgrind commands.
For example, typing TAB after the letter 'l' in:
  (gdb) valgrind v.info l
will show the 2 "valgrind v.info" subcommands:
  last_error  location
  (gdb) valgrind v.info l

Note that as usual, GDB will recognise a command as soon as it is unambiguous.

Usual help and apropos support by GDB:
--------------------------------------
The Valgrind gdbserver provides an online help using:
  (gdb) monitor help
However, this gives the help for all monitor commands, and is not searchable.
GDB provides a better help and documentation search.
For example, the following commands can be used to get various help
or search the GDB Valgrind command online documentation:
   help valgrind
   help memcheck
   help helgrind
   help callgrind
   help massif
to get help about the general valgrind commands or the tool specific commands.

Examples of searching the online documentation:
  apropos valgrind.*location
  apropos -v validity
  apropos -v leak

User can define aliases for the valgrind commands:
--------------------------------------------------
The following aliases are predefined:
  v and vg for valgrind
  mc for memcheck
  hg for helgrind
  cg for callgrind
  ms for massif

So, the following will be equivalent:
   (gdb) valgrind v.info location &some_mem
   (gdb) v v.i lo &some_mem
   (gdb) alias Vl = valgrind v.info location
   (gdb) Vl &some_mem

Thanks to Hassan El Karouni for the help in factorising the python
code common to all valgrind python commands using a decorator.
2023-01-08 16:00:57 +01:00
Philippe Waroquiers
3a046ec1c1 Avoid doing mempool specific leak search activities if there are no mempools
For most memcheck users, no mempools are used, but the leak search logic
was doing in any case special handling, leading to useless work such as
sorting again an already sorted array and making a copy of an array without
modifying it.

This slightly optimises the perf reg tests of memcheck.
perl perf/vg_perf --tools=memcheck --vg=. --vg=../trunk_untouched perf
-- Running  tests in perf ----------------------------------------------
-- bigcode1 --
bigcode1 .         :0.08s  me: 3.0s (38.1x, -----)
bigcode1 trunk_untouched:0.08s  me: 3.1s (38.6x, -1.3%)
-- bigcode2 --
bigcode2 .         :0.07s  me: 7.4s (105.9x, -----)
bigcode2 trunk_untouched:0.07s  me: 7.5s (107.4x, -1.5%)
-- bz2 --
bz2      .         :0.40s  me: 5.2s (12.9x, -----)
bz2      trunk_untouched:0.40s  me: 5.4s (13.6x, -5.0%)
-- fbench --
fbench   .         :0.15s  me: 2.8s (18.8x, -----)
fbench   trunk_untouched:0.15s  me: 2.9s (19.0x, -1.1%)
-- ffbench --
ffbench  .         :0.16s  me: 2.7s (16.8x, -----)
ffbench  trunk_untouched:0.16s  me: 2.7s (17.1x, -1.9%)
-- heap --
heap     .         :0.06s  me: 4.0s (66.5x, -----)
heap     trunk_untouched:0.06s  me: 4.1s (68.7x, -3.3%)
-- heap_pdb4 --
heap_pdb4 .         :0.07s  me: 6.2s (89.1x, -----)
heap_pdb4 trunk_untouched:0.07s  me: 6.6s (94.9x, -6.4%)
-- many-loss-records --
many-loss-records .         :0.01s  me: 1.2s (122.0x, -----)
many-loss-records trunk_untouched:0.01s  me: 1.2s (125.0x, -2.5%)
-- many-xpts --
many-xpts .         :0.03s  me: 1.2s (41.7x, -----)
many-xpts trunk_untouched:0.03s  me: 1.3s (43.7x, -4.8%)
-- memrw --
memrw    .         :0.06s  me: 1.2s (19.8x, -----)
memrw    trunk_untouched:0.06s  me: 1.2s (20.2x, -1.7%)
-- sarp --
sarp     .         :0.02s  me: 1.8s (91.5x, -----)
sarp     trunk_untouched:0.02s  me: 2.1s (103.5x,-13.1%)
-- tinycc --
tinycc   .         :0.11s  me: 7.1s (64.4x, -----)
tinycc   trunk_untouched:0.11s  me: 7.1s (64.3x,  0.1%)
-- Finished tests in perf ----------------------------------------------

== 12 programs, 24 timings =================
2023-01-08 11:50:07 +01:00
Paul Floyd
2c93baf53a Bug 433873 - openat2 syscall unimplemented on Linux
This syscall is not exposed via glibc, so there is only an
addition to the scalar test.
2023-01-06 21:27:01 +01:00
Julian Seward
394ca9b400 Remove a debugging line if (0) .. that mistakenly got landed in fa3a9cc43c22593c70796a99aff33bb9436ad448. 2023-01-04 17:43:21 +01:00
Julian Seward
1b8d0cbc81 Fix 64-bit uncleanness in VG_(get_bbs_translated)/VG_(get_bbs_discarded_or_dumped) ..
.. and some debug printing associated with them.  I don't think this affects
anything apart from debug printing.  Noticed when running a x86 (32-bit)
Firefox build.
2023-01-04 17:12:21 +01:00
Julian Seward
fe4e6578d4 amd64 and x86 front ends: add a few more spec rules.
amd64:
  S and NS  after LOGICQ (per comments from Eyal Soha on the dev list)
  S         after SHLQ
  NZ        after SHLL

x86:
  NZ        after SHRL
  Z         after SHLL

I would have liked to have added the inverse conditions in all cases (eg, both
S and NS, or both Z and NZ), but finding use cases for some of these is almost
impossible, hence they are sometimes omitted.  All of the added cases have
been tested.
2023-01-04 17:06:01 +01:00