]> git.ipfire.org Git - thirdparty/valgrind.git/log
thirdparty/valgrind.git
5 years agos390x: Replace use of deprecated Iop_Clz64 operator
Andreas Arnez [Tue, 25 Feb 2020 14:54:46 +0000 (15:54 +0100)] 
s390x: Replace use of deprecated Iop_Clz64 operator

The operator Iop_Clz64 has been deprecated.  Drop it in the s390x backend
and replace it by Iop_ClzNat64.  Previously s390_irgen_FLOGR() handled the
value zero specially and replaced it by 1 before applying Iop_Clz64.  With
Iop_ClzNat64 this is no longer needed, so remove this special-case
handling.

5 years agoPPC64, fix for alignment of the rt_sigframe data structure.
Carl Love [Fri, 21 Feb 2020 23:22:26 +0000 (17:22 -0600)] 
PPC64, fix for alignment of the rt_sigframe data structure.

The PPC64 implementation checks that the data structure is aligned.  The
changes in commit listed below breaks the alignment.  This patch adds an
explicit alignment directive to ensure the data structure is allocated
with the required alignment.  This fixes 31 stderr failures, 10 stdout
failures on the Power 7, Power 8 and Power 9 platforms.

commit 3bac39a10abf292d332bb20ab58c6dd5c28f9108
Author: Eugene Syromyatnikov <evgsyr@gmail.com>
Date:   Fri Mar 8 04:07:00 2019 +0100

    include/vki: fix vki_siginfo_t definition on amd64, arm64, and ppc64

    As it turned out, the size of vki_siginfo_t is incorrect on these 64-bit
    architectures:

        (gdb) p sizeof(vki_siginfo_t)
        $1 = 136
        (gdb) ptype struct vki_siginfo
        type = struct vki_siginfo {
            int si_signo;
            int si_errno;
            int si_code;
            union {
                int _pad[29];
                struct {...} _kill;
                struct {...} _timer;
                struct {...} _rt;
                struct {...} _sigchld;
                struct {...} _sigfault;
                struct {...} _sigpoll;
            } _sifields;
        }
  etc.

5 years agoFlip the default value of `--auto` and `--show-percs` to `yes`.
Nicholas Nethercote [Sun, 16 Feb 2020 22:40:26 +0000 (09:40 +1100)] 
Flip the default value of `--auto` and `--show-percs` to `yes`.

In both `cg_annotate` and `callgrind_annotate`.

5 years agoMark returned descriptor as valid when CLONE_PIDFD is used
Tom Hughes [Thu, 20 Feb 2020 09:18:17 +0000 (09:18 +0000)] 
Mark returned descriptor as valid when CLONE_PIDFD is used

When CLONE_PIDFD is set the descriptor is returned via the
argument otherwise used for the parent thread id.

5 years agoAllow clone with CLONE_VFORK and no CLONE_VM
Tom Hughes [Thu, 20 Feb 2020 09:14:24 +0000 (09:14 +0000)] 
Allow clone with CLONE_VFORK and no CLONE_VM

The CLONE_VFORK flag causes the parent to suspend until the child
exits or execs so without the memory sharing CLONE_VM would give
this is really closer to fork but we convert vfork to fork by
removing CLONE_VM anyway so there is no reason not to allow this.

Fixes BZ#417906

5 years agoSynchronise CLONE_xxx flags with kernel source
Tom Hughes [Thu, 20 Feb 2020 08:43:58 +0000 (08:43 +0000)] 
Synchronise CLONE_xxx flags with kernel source

5 years agoBug 417452 - s390x: Force 12-bit amode for vector stores in isel
Andreas Arnez [Wed, 12 Feb 2020 13:13:55 +0000 (14:13 +0100)] 
Bug 417452 - s390x: Force 12-bit amode for vector stores in isel

It was seen that the s390 instruction selector chose a wrong addressing
mode for storing a vector register.  The VST instruction only handles
short (12-bit unsigned) displacements, but a long (20-bit signed)
displacement was generated instead, resulting in a panic:

vex: the `impossible' happened:
   s390_insn_store_emit: unknown dst->tag for HRcVec128

The fix prevents long displacements for vector store operations.  It also
optimizes vector store operations from an Iex_Get, by converting them to a
memory copy.  This optimization was already performed for integer
registers.

5 years agos390x: Fix printing of virtual register numbers
Andreas Arnez [Mon, 10 Feb 2020 12:37:03 +0000 (13:37 +0100)] 
s390x: Fix printing of virtual register numbers

As noticed by Julian Seward, the code for printing s390x register names
currently does not show the virtual register numbers correctly.  Although
it distinguishes between virtual and real registers, it uses the hardware
register number for both cases.  This is fixed.

5 years agoAdd option -T to vgdb to output timestamps in vgdb information/error messages
Philippe Waroquiers [Sat, 8 Feb 2020 12:01:24 +0000 (13:01 +0100)] 
Add option -T to vgdb to output timestamps in vgdb information/error messages

Also cleanup some trailink blanks.

5 years agoBug 416301 - s390x: Support "compare and signal" instructions
Andreas Arnez [Thu, 16 Jan 2020 12:49:10 +0000 (13:49 +0100)] 
Bug 416301 - s390x: Support "compare and signal" instructions

Add VEX support for the s390x "compare and signal" instructions KEBR,
KDBR, KXBR, KEB, and KDB.  For now, let them behave exactly like their
non-signalling counterparts.  Enhance the bfp-4 test case to cover these
instructions as well.  Update the list of supported instructions in
s390-opcodes.csv.  Add a disclaimer to README.s390, explaining that FP
signalling is not handled accurately on s390x at the moment.

5 years agoUpdate .gitignore with none/tests/x86/bswapw
Rhys Kidd [Wed, 29 Jan 2020 12:55:15 +0000 (23:55 +1100)] 
Update .gitignore with none/tests/x86/bswapw

Add
  none/tests/x86/bswapw

to .gitignore.

Fixes: 6e0573777 ("Bug 415757 - vex x86->IR: unhandled instruction bytes: 0x66 0xF 0xCE (bswapw).")
5 years agodrd/tests/pth_detached3: Make pthread_detach() call portable across platforms
Khem Raj [Tue, 28 Jan 2020 03:50:04 +0000 (19:50 -0800)] 
drd/tests/pth_detached3: Make pthread_detach() call portable across platforms

pthread_t is opaque type therefore we can not apply simple arithmetic to
variables of pthread_t type this test needs to pass a invalid pthread_t
handle, typcasting to uintptr_t works too and is portable across glibc and
musl

Fixes
| pth_detached3.c:24:25: error: invalid use of undefined type 'struct __pthread'
|    24 |   pthread_detach(thread + 8);
|       |                         ^

[ bvanassche: reformatted patch description and fixed up line numbers ]

5 years agoPPC64: Fix assembler constraints.
Carl Love [Tue, 28 Jan 2020 18:17:16 +0000 (12:17 -0600)] 
PPC64: Fix assembler constraints.

The PPC64 assembler constraints "ws", "wa" and "ww" have changed to "wa"
in GCC 10.  Update the ppc64 tests test_isa_2_07_part1.c and test_isa_3_0.c.

5 years agoFix non-glibc build of the test suite with s390x_features
Rhys Kidd [Tue, 28 Jan 2020 08:33:03 +0000 (19:33 +1100)] 
Fix non-glibc build of the test suite with s390x_features

s390x_features is built unconditionally on a range of platforms, accordingly
any non-portable or glibc-specific functionality must be guarded.

Fixes error reported when running 'make check' or 'make regtest' on a platform
with an alternative libc that Valgrind supports, in this case Apple's libc:

  s390x_features.c:13:10: fatal error: 'features.h' file not found
  #include <features.h>  // __GLIBC_PREREQ
           ^
  1 error generated.

Fixes: 161d22f0a ("s390x: Fix vector facility (vx) check in test suite")
5 years agos390x: Fix some typos in s390-opcodes.csv
Andreas Arnez [Thu, 16 Jan 2020 12:47:17 +0000 (13:47 +0100)] 
s390x: Fix some typos in s390-opcodes.csv

Some lines in s390-opcodes.csv contain entries that look like this:

    ...,"arch12"implemented",...

They are probably introduced by some cut-and-paste error.  This is fixed.

5 years agoUpdate bug status.
Julian Seward [Sun, 26 Jan 2020 15:40:40 +0000 (16:40 +0100)] 
Update bug status.

5 years agox86 and amd64 tests: Use .text and .previous around all top-level asm.
Mark Wielaard [Sat, 25 Jan 2020 17:34:58 +0000 (18:34 +0100)] 
x86 and amd64 tests: Use .text and .previous around all top-level asm.

GCC10 defaults to -fno-common which exposes some latent bugs in
some of the top-level asm code in various .c test files. Some of the
tests started to segfault (even if not run under valgrind). Such code
needs to be wrapped inside a .text and a .previous asm statement to
make sure the code is generated in the .text code section and to
make sure the compiler doesn't lose track of the section currently
being used to generate data or code in. Without it code might be
generated inside a data section or the other way around.

5 years agoRevert accidentially added changes in commit ce094ba912
Mark Wielaard [Sat, 25 Jan 2020 16:44:43 +0000 (17:44 +0100)] 
Revert accidentially added changes in commit ce094ba912

These changes were part of my local testing of bug 416667
gcc10 ppc64le impossible constraint in 'asm' in test_isa
And shouldn't have been committed yet before review.

5 years agonone/tests/amd64/avx_estimate_insn.vgtest: Add missing prereq.
Mark Wielaard [Sat, 25 Jan 2020 16:19:11 +0000 (17:19 +0100)] 
none/tests/amd64/avx_estimate_insn.vgtest: Add missing prereq.

This test only works when the processor actually implements AVX.

5 years agoarm: Hook up preadv2 and pwritev2 syscalls.
Mark Wielaard [Sat, 25 Jan 2020 14:10:22 +0000 (15:10 +0100)] 
arm: Hook up preadv2 and pwritev2 syscalls.

They work the same as on other linux architectures.

5 years agoguest_generic_bb_to_IR.c (stmt_is_guardable): Handle Ist_LoadG.
Mark Wielaard [Sat, 25 Jan 2020 14:00:29 +0000 (15:00 +0100)] 
guest_generic_bb_to_IR.c (stmt_is_guardable): Handle Ist_LoadG.

Triggers on Fedora 31 armv7hl with glibc 2.30 in _dl_relocate_object.

5 years agoFix tests/x86/incdec_alt.c asm for GCC10.
Mark Wielaard [Fri, 24 Jan 2020 10:26:25 +0000 (11:26 +0100)] 
Fix tests/x86/incdec_alt.c asm for GCC10.

Thanks to Jakub Jelinek. The test is broken. It blindly assumes the
toplevel inline asm is placed into some sensible section, but that is
a wrong assumption. The right thing is to start the inline asm with
.text directive and end with .previous. The reason gcc 10 breaks it
is the -fno-common default, the int r1, ... vars are emitted into .bss
section and that is the section that is current when the inline asm is
emitted previously they were in .common at the end of the assembly file.

5 years agoWork around apparently-bogus warning from gcc 10.
Julian Seward [Fri, 24 Jan 2020 10:02:53 +0000 (11:02 +0100)] 
Work around apparently-bogus warning from gcc 10.

5 years agoFix GCC10 issue in guest_s390_defs.h typedef enum type s390x_vec_op_t.
Mark Wielaard [Thu, 23 Jan 2020 20:30:59 +0000 (21:30 +0100)] 
Fix GCC10 issue in guest_s390_defs.h typedef enum type s390x_vec_op_t.

GCC10 defaults to -fno-common which produces this error:

  guest_s390_defs.h:291: multiple definition of `s390x_vec_op_t

This is because GCC10 detects there are multiple definitions of the
variable s390x_vec_op_t. We don't want to define a variable though.
We had wanted to define a type (one that currently isn't used).
Fix this by making it a typedef enum.

https://bugzilla.redhat.com/show_bug.cgi?id=1794482

5 years agomips: update none/tests/mips32/msa_fpu.c
Stefan Maksimovic [Thu, 23 Jan 2020 13:32:56 +0000 (13:32 +0000)] 
mips: update none/tests/mips32/msa_fpu.c

Guard withinEpsOf[FD] within none/tests/mips32/msa_fpu.c

Enclose the recently introduced functions with preprocessor guards,
much like the rest of the code is inside the main function.
Also mark the functions as static.
Minor code formatting.

5 years agoFix some spelling errors found by Lintian. Patch from Alessandro Ghedini <ghedo...
Julian Seward [Thu, 23 Jan 2020 09:53:36 +0000 (10:53 +0100)] 
Fix some spelling errors found by Lintian.  Patch from Alessandro Ghedini <ghedo@debian.org>.

5 years agoiselV128Expr_wrk: handle Iex_ITE. This is needed by the recent 'grail' changes....
Julian Seward [Wed, 22 Jan 2020 10:39:53 +0000 (11:39 +0100)] 
iselV128Expr_wrk: handle Iex_ITE.  This is needed by the recent 'grail' changes.  n-i-bz.

5 years agoarm64 front end: add support for 'dc civac', handling it the same as 'dc cvau'.
Julian Seward [Wed, 22 Jan 2020 10:21:53 +0000 (11:21 +0100)] 
arm64 front end: add support for 'dc civac', handling it the same as 'dc cvau'.

This partially fixes #412377.

5 years agoEnable sys_adjtimex() on arm-linux. Fixes #412408.
Julian Seward [Wed, 22 Jan 2020 10:03:54 +0000 (11:03 +0100)] 
Enable sys_adjtimex() on arm-linux.  Fixes #412408.

5 years agoBug 407376 - Update Xen support to 4.12 (4.13, actually) and add more coverage.
Julian Seward [Wed, 22 Jan 2020 09:55:33 +0000 (10:55 +0100)] 
Bug 407376 - Update Xen support to 4.12 (4.13, actually) and add more coverage.

Patch from Tamas K Lengyel (tamas@tklengyel.com).

5 years agoBug 416464 - Handle ioctl PR_CAPBSET_READ/DROP.
Julian Seward [Wed, 22 Jan 2020 09:45:40 +0000 (10:45 +0100)] 
Bug 416464 - Handle ioctl PR_CAPBSET_READ/DROP.

Patch from Stefan Bruens (stefan.bruens@rwth-aachen.de).

5 years agoBug 385386 - Assertion failed "szB >= CACHE_ENTRY_SIZE" on m_debuginfo/image.c:517.
Julian Seward [Wed, 22 Jan 2020 09:32:31 +0000 (10:32 +0100)] 
Bug 385386 - Assertion failed "szB >= CACHE_ENTRY_SIZE" on m_debuginfo/image.c:517.

Patch from Reimar Doeffinger (kde@reimardoeffinger.de).

5 years agoBug 415757 - vex x86->IR: unhandled instruction bytes: 0x66 0xF 0xCE (bswapw).
Julian Seward [Wed, 22 Jan 2020 08:26:43 +0000 (09:26 +0100)] 
Bug 415757 - vex x86->IR: unhandled instruction bytes: 0x66 0xF 0xCE (bswapw).

Implement bswapw, even though the instruction does not officially exist.  Patch
from Alex Henrie (alexhenrie24@gmail.com).

5 years agoUpdate bug lists.
Julian Seward [Wed, 22 Jan 2020 08:08:54 +0000 (09:08 +0100)] 
Update bug lists.

5 years agoAdd bugs 416239 and 416387 to NEWS.
Mark Wielaard [Sat, 18 Jan 2020 01:09:49 +0000 (02:09 +0100)] 
Add bugs 416239 and 416387 to NEWS.

commit 58fc707804b9c1db66124737f5dcbb2715b230e1
416239  valgrind crashes when handling clock_adjtime

commit 7d4071fe8530fa1c217bb775b0e19fd97d871502
416387  finit_module and bpf syscalls are unhandled on arm64

5 years agoarm64: hook up finit_module and bpf syscalls
Alexandra Hajkova [Fri, 17 Jan 2020 11:59:11 +0000 (06:59 -0500)] 
arm64: hook up finit_module and bpf syscalls

This fixes "WARNING: unhandled arm64-linux syscall" in
delete_module01 and bpf_prog01 tests in the LTP test suite.

5 years agomips64: fix assert in host_mips_defs.c for Malu_MADD
Stefan Maksimovic [Fri, 17 Jan 2020 13:19:44 +0000 (13:19 +0000)] 
mips64: fix assert in host_mips_defs.c for Malu_MADD

Mark the immediate as signed for Iex_Get and Ist_Put for Ity_V128 on BE.

The Malu_MADD case in emit_MIPSInst in VEX/priv/host_mips_defs.c expects a
signed immediate, hence the change.

This fixes an assert in host_mips_defs.c.

5 years agomips64: rework math tests to take into account allowed approximation
Stefan Maksimovic [Fri, 17 Jan 2020 12:58:07 +0000 (12:58 +0000)] 
mips64: rework math tests to take into account allowed approximation

Change the math tests to check whether the results are approximate to the
expected values instead of checking for exact matches since the calculations
in question are allowed to be approximate.

This fixes
  /none/tests/mips64/test_math and
  /none/tests/mips64/msa_fpu

on mips64r6.

5 years agodrd/tests/std_mutex: Add a unit test for std::mutex
Bart Van Assche [Thu, 16 Jan 2020 03:23:02 +0000 (19:23 -0800)] 
drd/tests/std_mutex: Add a unit test for std::mutex

5 years agodrd: Fix 'conflicting load' error on std::mutex::lock()
Bart Van Assche [Thu, 16 Jan 2020 03:59:44 +0000 (19:59 -0800)] 
drd: Fix 'conflicting load' error on std::mutex::lock()

5 years agodrd/tests/Makefile.am: Fix indentation
Bart Van Assche [Thu, 16 Jan 2020 03:55:47 +0000 (19:55 -0800)] 
drd/tests/Makefile.am: Fix indentation

5 years agopriv/guest_generic_bb_to_IR.c stmt_is_guardable(): Add Ist_Dirty.
Mark Wielaard [Wed, 15 Jan 2020 16:43:15 +0000 (17:43 +0100)] 
priv/guest_generic_bb_to_IR.c stmt_is_guardable(): Add Ist_Dirty.

This might happen when the source contains something like
if (something_involving_pcmpxstrx && foo) { .. }
which might use amd64g_dirtyhelper_PCMPxSTRx.

5 years agosyswrap-linux.c: fix clock_adjtime handling
Alexandra Hájková [Mon, 13 Jan 2020 17:29:55 +0000 (12:29 -0500)] 
syswrap-linux.c: fix clock_adjtime handling

Not checking whether valgrind can dereference timex pointer
casues VALGRIND INTERNAL ERROR while handling clock_adjtime.

5 years agomips: Implement Iex_CCall for nanoMIPS
Petar Jovanovic [Tue, 14 Jan 2020 17:45:00 +0000 (17:45 +0000)] 
mips: Implement Iex_CCall for nanoMIPS

Implement Iex_CCall for nanoMIPS.

This fixes none/tests/nestedfns.

Patch by Stefan Maksimovic.

5 years agomips: Fix BEQC[16] and BNEC[16] instructions for nanoMIPS
Petar Jovanovic [Tue, 14 Jan 2020 17:37:21 +0000 (17:37 +0000)] 
mips: Fix BEQC[16] and BNEC[16] instructions for nanoMIPS

Instruction decoding was not correct. In some cases, BEQC has been decoded
as BNEC and vice versa.

It caused problems with musl malloc() function.

Patch by Stefan Maksimovic.

5 years agomips: Fix return from syscall mechanism for nanoMIPS
Aleksandar Rikalo [Tue, 14 Jan 2020 17:24:29 +0000 (17:24 +0000)] 
mips: Fix return from syscall mechanism for nanoMIPS

- Restore guest sigmask in VG_(sigframe_destroy)
- Use "syscall[32]" asm idiom instead of "syscall" with immediate parameter
  in VG_(nanomips_linux_SUBST_FOR_rt_sigreturn)
- Call ML_(fixup_guest_state_to_restart_syscall) from PRE(sys_rt_sigreturn)
- Tiny code refactor of sigframe-nanomips-linux.c

This fixes none/tests/thread-exits.

5 years agomips: Add membarrier syscall for nanoMIPS
Petar Jovanovic [Tue, 14 Jan 2020 12:43:13 +0000 (12:43 +0000)] 
mips: Add membarrier syscall for nanoMIPS

This fixes none/tests/linux/membarrier.

5 years agomips: Add Iop_ROTX for nanoMIPS
Petar Jovanovic [Tue, 14 Jan 2020 12:40:09 +0000 (12:40 +0000)] 
mips: Add Iop_ROTX for nanoMIPS

Implement Iop_ROTX and use it for ROTX instruction.
Fixes libvexmultiarch_test and libvex_test.

Patch by: Aleksandra Karadzic and Nikola Milutinovic.

5 years agomips: Fix UASWM and UALWM instructions for nanoMIPS
Aleksandar Rikalo [Tue, 14 Jan 2020 12:09:18 +0000 (12:09 +0000)] 
mips: Fix UASWM and UALWM instructions for nanoMIPS

UASWM and UALWM have not been implemented correctly.
Code used to implement SWM and LWM has been reused without making all of
the required adjustments.

This fixes memcpy() and memset() libc functions.

5 years agomips: Change client request convention for nanoMIPS
Aleksandar Rikalo [Tue, 14 Jan 2020 12:07:11 +0000 (12:07 +0000)] 
mips: Change client request convention for nanoMIPS

Use a7/t0 register pair for for client requests. The same convention is
used throughout the rest of the code, as well as for mips32/64.

5 years agomips: Fix Ist_CAS for nanoMIPS
Aleksandar Rikalo [Tue, 14 Jan 2020 12:04:31 +0000 (12:04 +0000)] 
mips: Fix Ist_CAS for nanoMIPS

This code portion introduced a SEGFAULT:

-  if (&i->NMin.Cas.sz){
+  if (i->NMin.Cas.sz == 8) {

The implementation of Ist_Cas has been fixed and missing logging has been
added as well.

5 years agomips: Fix SAVE instruction for nanoMIPS
Aleksandar Rikalo [Tue, 14 Jan 2020 11:54:15 +0000 (11:54 +0000)] 
mips: Fix SAVE instruction for nanoMIPS

During a save (push) instruction adjusting the SP is required before doing
a store, otherwise Memcheck reports warning because of a write operation
outside of the stack area.

5 years agomips: Fix BRSC and BALRSC instructions for nanoMIPS
Petar Jovanovic [Tue, 14 Jan 2020 09:48:56 +0000 (09:48 +0000)] 
mips: Fix BRSC and BALRSC instructions for nanoMIPS

Basic blocks should be terminated after detecting branch instruction.

5 years agomips: Fix clone syscall for nanoMIPS
Petar Jovanovic [Tue, 14 Jan 2020 09:31:48 +0000 (09:31 +0000)] 
mips: Fix clone syscall for nanoMIPS

- Reset syscall return register (a0) in clone_new_thread()
- Use "syscall[32]" asm idiom instead of "syscall" with immediate parameter
  in ML_ (call_on_new_stack_0_1)()
- Optimize stack usage in ML_ (call_on_new_stack_0_1)()
- Code refactor of ML_ (call_on_new_stack_0_1)()

It partially fixes all tests which use clone system call, e.g. none/tests/pth_atfork1.

Patch by Aleksandar Rikalo.

5 years agomips: add IOP_And1 and Iop_Or1 for nanoMIPS
Petar Jovanovic [Thu, 9 Jan 2020 18:28:57 +0000 (18:28 +0000)] 
mips: add IOP_And1 and Iop_Or1 for nanoMIPS

Support IOP_And1 and Iop_Or1 in iselWordExpr_R_wrk().

5 years agomips: Implement Iop_CmpNEZ32, Iop_CmpNEZ64, Iop_And1 and Iop_Or1
Petar Jovanovic [Thu, 9 Jan 2020 18:05:07 +0000 (19:05 +0100)] 
mips: Implement Iop_CmpNEZ32, Iop_CmpNEZ64, Iop_And1 and Iop_Or1

Implement Iop_CmpNEZ32, Iop_CmpNEZ64, Iop_And1 and Iop_Or1
and fix broken Memcheck for mips32/64.

5 years agomips: update NEWS and README.mips
Petar Jovanovic [Mon, 6 Jan 2020 16:51:37 +0000 (16:51 +0000)] 
mips: update NEWS and README.mips

Patches from Bug #400872 (Add nanoMIPS support to Valgrind) have been
merged.

Update README.mips with a correct configure line applicable for the latest
nanomips toolchain package in public.

5 years agomips: Add tests for nanoMIPS instruction set
Petar Jovanovic [Fri, 3 Jan 2020 17:29:11 +0000 (17:29 +0000)] 
mips: Add tests for nanoMIPS instruction set

Patch by Tamara Vlahovic, Aleksandar Rikalo and Dimitrije Nikolic.

Related KDE issue: #400872.

5 years agosys_statx: don't complain if both |filename| and |buf| are NULL.
Julian Seward [Thu, 2 Jan 2020 13:27:24 +0000 (14:27 +0100)] 
sys_statx: don't complain if both |filename| and |buf| are NULL.

So as to work around the Rust library's dubious use of statx.

5 years agoamd64 insn selector: improved handling of Or1/And1 trees.
Julian Seward [Thu, 2 Jan 2020 08:32:19 +0000 (09:32 +0100)] 
amd64 insn selector: improved handling of Or1/And1 trees.

This splits function iselCondCode into iselCondCode_C and iselCondCode_R, the
former of which is the old one that computes boolean expressions into an amd64
condition code, but the latter being new, and computes boolean expressions
into the lowest bit of an integer register.  This enables much better code
generation for Or1/And1 trees, which now result quite commonly from the new
&&-recovery machinery in the front end.

5 years agoamd64 back end: generate 32-bit shift instructions for 32-bit IR shifts.
Julian Seward [Thu, 2 Jan 2020 08:23:46 +0000 (09:23 +0100)] 
amd64 back end: generate 32-bit shift instructions for 32-bit IR shifts.

Until now these have been handled by possibly widening the value to 64 bits,
if necessary, followed by a 64-bit shift.  That wastes instructions and code
space.

5 years agoEnable expensive handling of CmpEQ64/CmpNE64 for amd64 by default.
Julian Seward [Thu, 2 Jan 2020 08:10:06 +0000 (09:10 +0100)] 
Enable expensive handling of CmpEQ64/CmpNE64 for amd64 by default.

This has unfortunately become necessary because optimising compilers are
generating 64-bit equality comparisons on partially defined values on this
target.  There will shortly be two followup commits which partially mitigate
the resulting performance loss.

5 years agoFold Iop_CmpEQ32x8(x,x) to all-1s ..
Julian Seward [Thu, 2 Jan 2020 07:00:07 +0000 (08:00 +0100)] 
Fold Iop_CmpEQ32x8(x,x) to all-1s ..

    .. hence treating it as a dependency-breaking idiom.  Also handle the
    resulting IRConst_V256(0xFFFFFFFF) in the amd64 insn selector.

(dup of 96de5118f5332ae145912ebe91b8fa143df74b8d from 'grail')

Possibly fixes #409429.

5 years ago'grail' fixes for MIPS:
Julian Seward [Sun, 15 Dec 2019 19:14:37 +0000 (20:14 +0100)] 
'grail' fixes for MIPS:

This isn't a good result.  It merely disables the new functionality on MIPS
because enabling it causes segfaults, even with --tool=none, the cause of
which are not obvious.  It is only chasing through conditional branches that
is disabled, though.  Chasing through unconditional branches (jumps and calls
to known destinations) is still enabled.

* guest_generic_bb_to_IR.c bb_to_IR(): Disable, hopefully temporarily, the key
  &&-recovery transformation on MIPS.

* VEX/priv/host_mips_isel.c iselWordExpr_R_wrk(), iselCondCode_wrk():

  - add support for Iop_And1, Iop_Or1, and IRConst_U1.  This code is my best
    guess about what is correct, but is #if 0'd for now.

  - Properly guard some Iex_Binop cases that lacked a leading check that the
    expression actually was a Binop.

5 years ago'grail' fixes for s390x:
Julian Seward [Sun, 1 Dec 2019 06:01:20 +0000 (07:01 +0100)] 
'grail' fixes for s390x:

This isn't a good result.  It merely disables the new functionality on s390x,
for the reason stated below.

* guest_generic_bb_to_IR.c bb_to_IR(): Disable, hopefully temporarily, the key
  &&-recovery transformation on s390x, since it causes Memcheck to crash for
  reasons I couldn't figure out.  It also exposes some missing Iex_ITE cases
  in the s390x insn selector, although those shouldn't be a big deal to fix.

  Maybe it's some strangeness to do with the s390x "ex" instruction.  I don't
  exactly understand how that trickery works, but from some study of it, I
  didn't see anything obviously wrong.

  It is only chasing through conditional branches that is disabled for s390x.
  Chasing through unconditional branches (jumps and calls to known
  destinations) is still enabled.

* host_s390_isel.c s390_isel_cc(): No functional change.  Code has been added
  here to handle the new Iop_And1 and Iop_Or1, and it is somewhat tested, but
  is not needed until conditional branch chasing is enabled on s390x.

5 years ago'grail' fixes for ppc32 and ppc64:
Julian Seward [Wed, 27 Nov 2019 07:52:45 +0000 (08:52 +0100)] 
'grail' fixes for ppc32 and ppc64:

* do_minimal_initial_iropt_BB: for ppc64, flatten rather than assert flatness.
  (Kludge. Sigh.)

* priv/host_ppc_isel.c iselCondCode_wrk(): handle And1 and Or1, the
  not-particularly-optimal way

* priv/host_ppc_isel.c iselCondCode_wrk(): handle Ico_U1(0).

5 years ago'grail' fixes for arm32:
Julian Seward [Wed, 27 Nov 2019 05:37:42 +0000 (06:37 +0100)] 
'grail' fixes for arm32:

* priv/guest_generic_bb_to_IR.c expr_is_guardable(), stmt_is_guardable():
  add some missing cases

* do_minimal_initial_iropt_BB: add comment (no functional change)

* priv/host_arm_isel.c iselCondCode_wrk(): handle And1 and Or1, the
  not-particularly-optimal way

5 years ago'grail' fixes for arm64:
Julian Seward [Sun, 24 Nov 2019 14:13:54 +0000 (15:13 +0100)] 
'grail' fixes for arm64:

* guest_arm64_toIR.c: use |sigill_diag| to guard auxiliary diagnostic printing
  in case of decode failure

* guest_generic_bb_to_IR.c expr_is_guardable(), stmt_is_guardable(): handle a
  few more cases that didn't turn up so far on x86 or amd64

* host_arm64_defs.[ch]:

  - new instruction ARM64Instr_Set64, to copy a condition code value into a
    register (the CSET instruction)

  - use this to reimplement Iop_And1 and Iop_Or1

5 years agobb_to_IR(): Avoid causing spurious SIGILL-diagnostic messages ..
Julian Seward [Fri, 22 Nov 2019 18:27:43 +0000 (19:27 +0100)] 
bb_to_IR(): Avoid causing spurious SIGILL-diagnostic messages ..

.. when speculating into conditional-branch destinations.  A simple change
requiring a big comment explaining the rationale.

5 years agoImplement And1 and Or1 for the x86 insn selector.
Julian Seward [Fri, 22 Nov 2019 07:32:03 +0000 (08:32 +0100)] 
Implement And1 and Or1 for the x86 insn selector.

5 years agoTidy up ir_opt.c aspects relating to the 'grail' work. In particular:
Julian Seward [Thu, 21 Nov 2019 19:03:47 +0000 (20:03 +0100)] 
Tidy up ir_opt.c aspects relating to the 'grail' work.  In particular:

* Rewrite do_minimal_initial_iropt_BB so it doesn't do full constant folding;
  that is unnecessary expense at this point, and later passes will do it
  anyway

* do_iropt_BB: don't flatten the incoming block, because
  do_minimal_initial_iropt_BB will have run earlier and done so.  But at least
  for the moment, assert that it really is flat.

* VEX/priv/guest_generic_bb_to_IR.c create_self_checks_as_needed: generate
  flat IR so as not to fail the abovementioned assertion.

I believe this completes the target-independent aspects of this work, and also
the x86_64 specifics (of which there are very few).

5 years agoAdd statistics printing for the new trace construction algorithm.
Julian Seward [Thu, 21 Nov 2019 07:55:43 +0000 (08:55 +0100)] 
Add statistics printing for the new trace construction algorithm.

5 years agoAdd a change that should have been part of 6e4db6e9172a55a983105c8e73c89987ce97308a.
Julian Seward [Tue, 19 Nov 2019 07:20:31 +0000 (08:20 +0100)] 
Add a change that should have been part of 6e4db6e9172a55a983105c8e73c89987ce97308a.

5 years agoRationalise --vex-guest* flags in the new IRSB construction framework
Julian Seward [Mon, 18 Nov 2019 18:12:49 +0000 (19:12 +0100)] 
Rationalise --vex-guest* flags in the new IRSB construction framework

* removes --vex-guest-chase-cond=no|yes.  This was never used in practice.

* rename --vex-guest-chase-thresh=<0..99> to --vex-guest-chase=no|yes.  In
  otherwords, downgrade it from a numeric flag to a boolean one, that can
  simply disable all chasing if required.  (Some tools, notably Callgrind,
  force-disable block chasing, so this functionality at least needs to be
  retained).

5 years agoinsn_has_no_other_exits_or_PUTs_to_PC: also check Ist_PutI and Ist_Dirty for writes...
Julian Seward [Wed, 13 Nov 2019 14:45:11 +0000 (15:45 +0100)] 
insn_has_no_other_exits_or_PUTs_to_PC: also check Ist_PutI and Ist_Dirty for writes to the PC.

5 years agoanalyse_block_end: tidy this up ..
Julian Seward [Tue, 12 Nov 2019 19:16:54 +0000 (20:16 +0100)] 
analyse_block_end: tidy this up ..

.. and check more carefully for unexpected control flow in the blocks being
analysed.

5 years agoiselFltExpr_wrk: handle Iex_ITE, presumably caused by newly-created guarding machinery.
Julian Seward [Mon, 11 Nov 2019 16:06:54 +0000 (17:06 +0100)] 
iselFltExpr_wrk: handle Iex_ITE, presumably caused by newly-created guarding machinery.

5 years agoClean up machinery to do with conditionalising IRStmts:
Julian Seward [Mon, 11 Nov 2019 15:11:20 +0000 (16:11 +0100)] 
Clean up machinery to do with conditionalising IRStmts:

* document some functions

* change naming and terminology from 'speculation' (which it isn't)
  to 'guarding' (which it is)

* add a new function |primopMightTrap| so as to avoid conditionalising
  IRExprs involving potentially trappy IROps

5 years agoInitial implementation of C-source-level &&-idiom recovery
Julian Seward [Mon, 21 Oct 2019 09:19:59 +0000 (11:19 +0200)] 
Initial implementation of C-source-level &&-idiom recovery

This branch contains code which avoids Memcheck false positives resulting from
gcc and clang creating branches on uninitialised data.  For example:

   bool isClosed;
   if (src.isRect(..., &isClosed, ...) && isClosed) {

clang9 -O2 compiles this as:

   callq  7e7cdc0 <_ZNK6SkPath6isRectEP6SkRectPbPNS_9DirectionE>

   cmpb   $0x0,-0x60(%rbp)  // "if (isClosed) { .."
   je     7ed9e08           // "je after"

   test   %al,%al           // "if (return value of call is nonzero) { .."
   je     7ed9e08           // "je after"

   ..
   after:

That is, the && has been evaluated right-to-left.  This is a correct
transformation if the compiler can prove that the call to |isRect| returns
|false| along any path on which it does not write its out-parameter
|&isClosed|.

In general, for the lazy-semantics (L->R) C-source-level && operator, we have
|A && B| == |B && A| if you can prove that |B| is |false| whenever A is
undefined.  I assume that clang has some kind of interprocedural analysis that
tells it that.  The compiler is further obliged to show that |B| won't trap,
since it is now being evaluated speculatively, but that's no big deal to
prove.

A similar result holds, per de Morgan, for transformations involving the C
language ||.

Memcheck correctly handles bitwise &&/|| in the presence of undefined inputs.
It has done so since the beginning.  However, it assumes that every
conditional branch in the program is important -- any branch on uninitialised
data is an error.  However, this idiom demonstrates otherwise.  It defeats
Memcheck's existing &&/|| handling because the &&/|| is spread across two
basic blocks, rather than being bitwise.

This initial commit contains a complete initial implementation to fix that.
The basic idea is to detect the && condition spread across two blocks, and
transform it into a single block using bitwise &&.  Then Memcheck's existing
accurate instrumentation of bitwise && will correctly handle it.  The
transformation is

   <contents of basic block A>
   C1 = ...
   if (!C1) goto after
   .. falls through to ..

   <contents of basic block B>
   C2 = ...
   if (!C2) goto after
   .. falls through to ..

   after:

 ===>

   <contents of basic block A>
   C1 = ...
   <contents of basic block B, conditional on C1>
   C2 = ...
   if (!C1 && !C2) goto after
   .. falls through to ..

   after:

This assumes that <contents of basic block B> can be conditionalised, at the
IR level, so that the guest state is not modified if C1 is |false|.  That's
not possible for all IRStmt kinds, but it is possible for a large enough
subset to make this transformation feasible.

There is no corresponding transformation that recovers an || condition,
because, per de Morgan, that merely corresponds to swapping the side exits vs
fallthoughs, and inverting the sense of the tests, and the pattern-recogniser
as implemented checks all possible combinations already.

The analysis and block-building is performed on the IR returned by the
architecture specific front ends.  So they are almost not modified at all: in
fact they are simplified because all logic related to chasing through
unconditional and conditional branches has been removed from them, redone at
the IR level, and centralised.

The only file with big changes is the IRSB constructor logic,
guest_generic_bb_to_IR.c (a.k.a the "trace builder").  This is a complete
rewrite.

There is some additional work for the IR optimiser (ir_opt.c), since that
needs to do a quick initial simplification pass of the basic blocks, in order
to reduce the number of different IR variants that the trace-builder has to
pattern match on.  An important followup task is to further reduce this cost.

There are two new IROps to support this: And1 and Or1, which both operate on
Ity_I1.  They are regarded as evaluating both arguments, consistent with AndXX
and OrXX for all other sizes.  It is possible to synthesise at the IR level by
widening the value to Ity_I8 or above, doing bitwise And/Or, and re-narrowing
it, but this gives inefficient code, so I chose to represent them directly.

The transformation appears to work for amd64-linux.  In principle -- because
it operates entirely at the IR level -- it should work for all targets,
providing the initial pre-simplification pass can normalise the block ends
into the required form.  That will no doubt require some tuning.  And1 and Or1
will have to be implemented in all instruction selectors, but that's easy
enough.

Remaining FIXMEs in the code:

* Rename `expr_is_speculatable` et al to `expr_is_conditionalisable`.  These
  functions merely conditionalise code; the speculation has already been done
  by gcc/clang.

* `expr_is_speculatable`: properly check that Iex_Unop/Binop don't contain
  operatins that might trap (Div, Rem, etc).

* `analyse_block_end`: recognise all block ends, and abort on ones that can't
  be recognised.  Needed to ensure we don't miss any cases.

* maybe: guest_amd64_toIR.c: generate better code for And1/Or1

* ir_opt.c, do_iropt_BB: remove the initial flattening pass since presimp
  will already have done it

* ir_opt.c, do_minimal_initial_iropt_BB (a.k.a. presimp).  Make this as
  cheap as possible.  In particular, calling `cprop_BB_wrk` is total overkill
  since we only need copy propagation.

* ir_opt.c: once the above is done, remove boolean parameter for `cprop_BB_wrk`.

* ir_opt.c: concatenate_irsbs: maybe de-dup w.r.t. maybe_unroll_loop_BB.

* remove option `guest_chase_cond` from VexControl (?).  It was never used.

* convert option `guest_chase_thresh` from VexControl (?) into a Bool, since
the revised code here only cares about the 0-vs-nonzero distinction now.

5 years agoUpdate following recent bug-fix commits.
Julian Seward [Thu, 2 Jan 2020 05:34:52 +0000 (06:34 +0100)] 
Update following recent bug-fix commits.

5 years agomips: update tests to compile for nanoMIPS
Petar Jovanovic [Tue, 31 Dec 2019 15:56:23 +0000 (15:56 +0000)] 
mips: update tests to compile for nanoMIPS

Update the tests so they can be compiled for nanoMIPS.

Patch by Dimitrije Nikolic and Aleksandra Karadzic.

5 years agoupdate .gitignore with /none/tests/sigprocmask
Petar Jovanovic [Tue, 31 Dec 2019 12:09:34 +0000 (12:09 +0000)] 
update .gitignore with /none/tests/sigprocmask

Add
  /none/tests/sigprocmask

to .gitignore.

5 years agomips: Add nanoMIPS support to Valgrind 4/4
Petar Jovanovic [Tue, 31 Dec 2019 12:05:33 +0000 (12:05 +0000)] 
mips: Add nanoMIPS support to Valgrind 4/4

Necessary changes to support nanoMIPS on Linux.

Part 4/4 - Other changes (mainly include/*)

Patch by Aleksandar Rikalo, Dimitrije Nikolic, Tamara Vlahovic,
Nikola Milutinovic and Aleksandra Karadzic.

Related KDE issue: #400872.

5 years agomips: Add nanoMIPS support to Valgrind 3/4
Petar Jovanovic [Tue, 31 Dec 2019 09:44:42 +0000 (09:44 +0000)] 
mips: Add nanoMIPS support to Valgrind 3/4

Necessary changes to support nanoMIPS on Linux.

Part 3/4 - Coregrind and tools changes

Patch by Aleksandar Rikalo, Dimitrije Nikolic, Tamara Vlahovic,
Nikola Milutinovic and Aleksandra Karadzic.

Related KDE issue: #400872.

5 years agoBug 411451 - amd64->IR of bt/btc/bts/btr with immediate clears zero flag.
Julian Seward [Mon, 30 Dec 2019 10:43:42 +0000 (11:43 +0100)] 
Bug 411451 - amd64->IR of bt/btc/bts/btr with immediate clears zero flag.

Patch from baumratte@outlook.com.

5 years agoBug 413119 - ioctl wrapper for DRM_IOCTL_I915_GEM_MMAP.
Julian Seward [Mon, 30 Dec 2019 10:23:32 +0000 (11:23 +0100)] 
Bug 413119 - ioctl wrapper for DRM_IOCTL_I915_GEM_MMAP.

Patches from Simon Richter <Simon.Richter@hogyros.de>.

5 years agoBug 410556 - add support for BLKIO{MIN,OPT} and BLKALIGNOFF ioctls.
Julian Seward [Mon, 30 Dec 2019 10:13:13 +0000 (11:13 +0100)] 
Bug 410556 - add support for BLKIO{MIN,OPT} and BLKALIGNOFF ioctls.

Patch from Nick Black <dankamongmen@gmail.com>.

5 years agoBug 409206 - Support for Linux PPS and PTP ioctls.
Julian Seward [Mon, 30 Dec 2019 10:03:19 +0000 (11:03 +0100)] 
Bug 409206 - Support for Linux PPS and PTP ioctls.

Patches from Miroslav Lichvar <mlichvar@redhat.com>.

5 years agoComplete initial triage pass.
Julian Seward [Sat, 28 Dec 2019 19:30:39 +0000 (20:30 +0100)] 
Complete initial triage pass.

5 years agoFirst pass at creating a list of bugs reported in 3.15.0, that are as yet un-fixed.
Julian Seward [Sat, 28 Dec 2019 09:41:35 +0000 (10:41 +0100)] 
First pass at creating a list of bugs reported in 3.15.0, that are as yet un-fixed.

5 years agoCreate docs/internals/3_15_BUGSTATUS.txt, as-yet empty.
Julian Seward [Fri, 27 Dec 2019 15:22:25 +0000 (16:22 +0100)] 
Create docs/internals/3_15_BUGSTATUS.txt, as-yet empty.

5 years agosyswrap-linux.c: fix the wrapper for ioctl(SIOCETHTOOL), case ETHTOOL_GSET. n-i-bz.
Julian Seward [Fri, 27 Dec 2019 15:20:32 +0000 (16:20 +0100)] 
syswrap-linux.c: fix the wrapper for ioctl(SIOCETHTOOL), case ETHTOOL_GSET.  n-i-bz.

For the case ETHTOOL_GSET, don't insist that the whole structure is defined.
That appears to cause false positives.  All other cases remain unchanged.

5 years agoBug 413634 - ARMv8.1 arithmetic instructions are not supported
Julian Seward [Fri, 27 Dec 2019 14:30:21 +0000 (15:30 +0100)] 
Bug 413634 - ARMv8.1 arithmetic instructions are not supported

Patch from Assad Hashmi <assad.hashmi@linaro.org>.

This patch adds support for AArch64 ARMv8.1 SIMD instructions:
SQRDMLAH <V><d>, <V><n>, <V><m>
SQRDMLAH <Vd>.<T>, <Vn>.<T>, <Vm>.<T>
SQRDMLAH <V><d>, <V><n>, <Vm>.<Ts>[<index>]
SQRDMLAH <Vd>.<T>, <Vn>.<T>, <Vm>.<Ts>[<index>]
SQRDMLSH <V><d>, <V><n>, <V><m>
SQRDMLSH <Vd>.<T>, <Vn>.<T>, <Vm>.<T>
SQRDMLSH <V><d>, <V><n>, <Vm>.<Ts>[<index>]
SQRDMLSH <Vd>.<T>, <Vn>.<T>, <Vm>.<Ts>[<index>]

5 years agonone/tests: Add test for bz414565.
Alexandra Hájková [Mon, 16 Dec 2019 14:58:26 +0000 (15:58 +0100)] 
none/tests: Add test for bz414565.

Integrate the test case written by Nikola Milutinovic to the
testsuite. (https://bugs.kde.org/show_bug.cgi?id=414565)

5 years agosigprocmask should ignore HOW argument when SET is NULL.
Nikola Milutinovic [Sun, 22 Dec 2019 14:49:04 +0000 (15:49 +0100)] 
sigprocmask should ignore HOW argument when SET is NULL.

Specific use case bug found in SysRes VG_(do_sys_sigprocmask).

Fix for case when ,,set,, parameter is NULL.
In this case ,,how,, parameter should be ignored because we are
only requesting from kernel to put current signal mask into ,,oldset,,.
But instead we determine the action based on ,,how,, parameter and
therefore make the system call fail when it should pass.
Taken from linux man pages (sigprocmask).

The same is specified for POSIX.

https://bugs.kde.org/show_bug.cgi?id=414565

5 years agomips: define PLAT_mips32_linux if __mips==32
Petar Jovanovic [Tue, 17 Dec 2019 17:08:40 +0000 (17:08 +0000)] 
mips: define PLAT_mips32_linux if __mips==32

Define PLAT_mips32_linux if __mips==32 rather than if __mips!=64.

Patch by Rosen Penev <rosenp@gmail.com>.

5 years agos390x: Fix offsets in comments to VexGuestS390XState
Andreas Arnez [Thu, 5 Dec 2019 17:22:43 +0000 (18:22 +0100)] 
s390x: Fix offsets in comments to VexGuestS390XState

Each member of the structure declaration for `VexGuestS390XState' is
commented with its offset within the structure.  But starting with
`guest_r0' and for all remaining members, these comments indicate the
wrong offsets, and the actual offsets are 8 bytes higher.  Adjust the
comments accordingly.

5 years agomips64: use generic Linux wrapper for sys_unshare
Petar Jovanovic [Wed, 27 Nov 2019 13:32:57 +0000 (13:32 +0000)] 
mips64: use generic Linux wrapper for sys_unshare

No need for mips64-specific Linux wrappers for sys_unshare.

5 years agomips: enable sloppyXcheck for mips32 and mips64
Petar Jovanovic [Wed, 27 Nov 2019 12:22:46 +0000 (12:22 +0000)] 
mips: enable sloppyXcheck for mips32 and mips64

Newer mips kernels (post 4.7.0) assign execute permissions to loadable
program segments which originally did not have them as per the
information provided in the elf file itself.

Include mips32/mips64 in the list of architectures for which the address
space manager should allow the kernel to report execute permissions in
sync_check_mapping_callback.

Patch by Stefan Maksimovic.

5 years agomips: add ld-linux-mipsn8.so.1 as a valid soname
Petar Jovanovic [Wed, 27 Nov 2019 12:00:43 +0000 (12:00 +0000)] 
mips: add ld-linux-mipsn8.so.1 as a valid soname

NaN2008 dynamic linker is named ld-linux-mipsn8.so.1.

Update include/pub_tool_redir.h by adding ld-linux-mipsn8.so.1 to the list
of sonames with an accompanying check in coregrind/m_redir.c.

Patch by Stefan Maksimovic.