]> git.ipfire.org Git - thirdparty/valgrind.git/log
thirdparty/valgrind.git
7 years agoCherry pick 074de238d44c0cdaf394489ea69a67b76916fbce from master. jit-hacks-2
Ivo Raisr [Sat, 23 Sep 2017 07:46:40 +0000 (09:46 +0200)] 
Cherry pick 074de238d44c0cdaf394489ea69a67b76916fbce from master.

VEX register allocator: allocate caller-save registers for short lived vregs.

Allocate caller-saved registers for short lived vregs and callee-save registers
for vregs which span accross helper calls.
Fixes BZ#384987.

7 years agoFollow up to 90e405b81b8f49121240db713620a173b988abfb (MOV coalescing).
Ivo Raisr [Thu, 12 Oct 2017 23:08:57 +0000 (01:08 +0200)] 
Follow up to 90e405b81b8f49121240db713620a173b988abfb (MOV coalescing).

Clone the register allocator state properly.

7 years agoCherry pick 83cabd32492e6d19d483a63522e4e874fa64b617 from master.
Ivo Raisr [Fri, 22 Sep 2017 20:50:11 +0000 (22:50 +0200)] 
Cherry pick 83cabd32492e6d19d483a63522e4e874fa64b617 from master.

Refactor tracking of MOV coalescing.

Reg<->Reg MOV coalescing status is now a part of the HRegUsage.
This allows register allocation to query it two times without incurring
a performance penalty. This in turn allows to better keep track of
vreg<->vreg MOV coalescing so that all vregs in the coalesce chain
get the effective |dead_before| of the last vreg.

A small performance improvement has been observed because this allows
to coalesce even spilled vregs (previously only assigned ones).

7 years agoCherry pick 07e286ea303b2dfcb7188dcb6092b5025623b800 from master.
Ivo Raisr [Tue, 26 Sep 2017 07:33:27 +0000 (09:33 +0200)] 
Cherry pick 07e286ea303b2dfcb7188dcb6092b5025623b800 from master.

Reorder allocatable registers for s390x so that the callee saved are listed first.

Helper calls always trash all caller saved registers. By listing the callee saved
first then VEX register allocator (both v2 and v3) is more likely to pick them
and does not need to spill that much before helper calls.

7 years agoCherry pick 00d4667295a821fef9eb198abcb0c942dffb6045 from master.
Ivo Raisr [Wed, 6 Sep 2017 06:10:36 +0000 (08:10 +0200)] 
Cherry pick 00d4667295a821fef9eb198abcb0c942dffb6045 from master.

Reorder allocatable registers for AMD64, X86, and PPC so that the callee saved are listed first.

Helper calls always trash all caller saved registers. By listing the callee saved
first then VEX register allocator (both v2 and v3) is more likely to pick them
and does not need to spill that much before helper calls.

7 years agoRegister allocator: Implement spilled/assigned vreg state merge.
Ivo Raisr [Wed, 11 Oct 2017 19:22:57 +0000 (21:22 +0200)] 
Register allocator: Implement spilled/assigned vreg state merge.

7 years agoRegister allocator: Fix merging of assigned/spilled vregs.
Ivo Raisr [Wed, 11 Oct 2017 17:42:50 +0000 (19:42 +0200)] 
Register allocator: Fix merging of assigned/spilled vregs.

Fix the case when vreg2 is spilled but rreg1 in state2 is bound
to an offending vreg, still live.

7 years agoVirtual-methodize the assembler in the usual way.
Julian Seward [Tue, 3 Oct 2017 09:28:26 +0000 (11:28 +0200)] 
Virtual-methodize the assembler in the usual way.

So that it can be made to work for architectures other than X86.

7 years agolibvex_BackEnd: lift the assembler out into its own function, for tidyness. No funct...
Julian Seward [Mon, 2 Oct 2017 16:43:22 +0000 (18:43 +0200)] 
libvex_BackEnd: lift the assembler out into its own function, for tidyness.  No functional change.

7 years agoRegister allocator: Implement merging of Assigned/Spilled vregs.
Ivo Raisr [Mon, 2 Oct 2017 03:46:46 +0000 (05:46 +0200)] 
Register allocator: Implement merging of Assigned/Spilled vregs.

7 years agoRegister allocator: Implement merging of Assigned/Assigned bound rreg.
Ivo Raisr [Mon, 2 Oct 2017 01:45:56 +0000 (03:45 +0200)] 
Register allocator: Implement merging of Assigned/Assigned bound rreg.

7 years agoRegister allocator: Fix merging of Assigned/Assigned vregs.
Ivo Raisr [Mon, 2 Oct 2017 01:35:03 +0000 (03:35 +0200)] 
Register allocator: Fix merging of Assigned/Assigned vregs.

7 years agoRegister allocator: fix merging of Unallocated/Spilled vreg.
Ivo Raisr [Sun, 1 Oct 2017 05:12:05 +0000 (07:12 +0200)] 
Register allocator: fix merging of Unallocated/Spilled vreg.

Spilled vreg has no associated rreg to free.

7 years agoMemcheck: share tmpMap among all MCEnv instances.
Ivo Raisr [Sat, 30 Sep 2017 17:20:01 +0000 (19:20 +0200)] 
Memcheck: share tmpMap among all MCEnv instances.

tmpMap needs to mimic tyenv as they manage the same set of IRTemp's.

7 years agoImplement If-Then-Else leg lifting if the condition is a constant.
Ivo Raisr [Fri, 29 Sep 2017 20:57:15 +0000 (22:57 +0200)] 
Implement If-Then-Else leg lifting if the condition is a constant.

7 years agoemit_X86Instr, case Xin_Jmp: fix incorrect offset field calculations.
Julian Seward [Fri, 29 Sep 2017 10:09:56 +0000 (12:09 +0200)] 
emit_X86Instr, case Xin_Jmp: fix incorrect offset field calculations.

7 years agoFix initialization of inherited ATmpInfo in initAEnv().
Ivo Raisr [Fri, 29 Sep 2017 05:06:03 +0000 (07:06 +0200)] 
Fix initialization of inherited ATmpInfo in initAEnv().

7 years agoFix missing breaks in merge_vreg_states().
Ivo Raisr [Thu, 28 Sep 2017 19:06:25 +0000 (21:06 +0200)] 
Fix missing breaks in merge_vreg_states().

7 years agoCherry pick 8cdeee4ebba9cbcc267cf6b2a9464ba1de958680 from master.
Ivo Raisr [Thu, 28 Sep 2017 07:23:27 +0000 (09:23 +0200)] 
Cherry pick 8cdeee4ebba9cbcc267cf6b2a9464ba1de958680 from master.

Minor refactoring for VEX register allocator v3. No functional change.

7 years agoFix a merging scenario in merge_vreg_states().
Ivo Raisr [Wed, 27 Sep 2017 20:46:53 +0000 (22:46 +0200)] 
Fix a merging scenario in merge_vreg_states().

When a vreg becomes dead in one If-Then-Else leg, and is never
referenced in the other leg, mark it as dead at the merge point.

The other scenarios will need the same treatment eventually.

7 years agoMinor debug printing fix for DEBUG_REGALLOC.
Ivo Raisr [Wed, 27 Sep 2017 20:16:58 +0000 (22:16 +0200)] 
Minor debug printing fix for DEBUG_REGALLOC.

No functional change.

7 years agoFix subst_and_fold_PhiNodes().
Ivo Raisr [Wed, 27 Sep 2017 15:40:39 +0000 (17:40 +0200)] 
Fix subst_and_fold_PhiNodes().

Check first whether to output WrTmp.

7 years agoRemove debug hack accidentally committed in 829549ae33cf40d553e26df28e5cc1e914068c1c...
Julian Seward [Tue, 26 Sep 2017 15:44:58 +0000 (17:44 +0200)] 
Remove debug hack accidentally committed in 829549ae33cf40d553e26df28e5cc1e914068c1c.  Duh.

7 years agostage1(): don't assert when presented with an empty instruction vector.
Julian Seward [Tue, 26 Sep 2017 15:42:18 +0000 (17:42 +0200)] 
stage1(): don't assert when presented with an empty instruction vector.

7 years agoMinor debug printing fixes to do with IfThenElse. No functional change.
Julian Seward [Tue, 26 Sep 2017 15:40:05 +0000 (17:40 +0200)] 
Minor debug printing fixes to do with IfThenElse.  No functional change.

7 years agoiselStmtVec: take notice of the IR level branch hint.
Julian Seward [Tue, 26 Sep 2017 15:34:28 +0000 (17:34 +0200)] 
iselStmtVec: take notice of the IR level branch hint.

When computing the cc to be embedded within the resulting HInstrIfThenElse,
it is necessary to take notice of the branch hint, and invert the sense of
the condition code if the |else| branch is to be the OOL one.

7 years agoFirst attempt at an assembler for the new IfThenElse stuff. Currently this will...
Julian Seward [Tue, 26 Sep 2017 14:30:12 +0000 (16:30 +0200)] 
First attempt at an assembler for the new IfThenElse stuff.  Currently this will only work for x86-linux.

7 years agoCherry pick b9df4c8dec4d3154257818eb81111df43f2a7bf2 from master.
Ivo Raisr [Sat, 16 Sep 2017 20:22:53 +0000 (22:22 +0200)] 
Cherry pick b9df4c8dec4d3154257818eb81111df43f2a7bf2 from master.

Fix a typo bug in VEX register allocator v3.
Also scanning a few more instructions ahead helps producing better code.

7 years agoClone and merge the register allocator states for If-Then-Else support.
Ivo Raisr [Wed, 13 Sep 2017 15:38:13 +0000 (17:38 +0200)] 
Clone and merge the register allocator states for If-Then-Else support.

The register allocator state is cloned in stage 4, before fall-through
and out-of-line legs are processed. The states are then merged back
at the legs join.

7 years agoCherry-pick 3117cd9637a843cbab5de302fb30e22153fbfc1c from master.
Ivo Raisr [Sun, 10 Sep 2017 09:47:01 +0000 (11:47 +0200)] 
Cherry-pick 3117cd9637a843cbab5de302fb30e22153fbfc1c from master.

Reduce number of spill instructions generated by VEX register allocator v3.

Keeps track whether the bound real register has been reloaded from a virtual
register recently and if this real reg is still equal to that spill slot.
Avoids unnecessary spilling that vreg later, when this rreg needs
to be reserved, usually as a caller save register for a helper call.

7 years agoUsed UInt instead of UChar for bitset array element.
Ivo Raisr [Sat, 2 Sep 2017 11:23:30 +0000 (13:23 +0200)] 
Used UInt instead of UChar for bitset array element.

7 years agoRegister allocator generates properly HInstr containing HInstrIfThenElse into output...
Ivo Raisr [Tue, 29 Aug 2017 21:08:43 +0000 (23:08 +0200)] 
Register allocator generates properly HInstr containing HInstrIfThenElse into output instruction HInstrVec.

Stage 4 is still missing state forks before HInstrIfThenElse
and merges after HInstrIfThenElse legs join.

7 years agoAdd some support for If-Then-Else into VEX register allocator v3.
Ivo Raisr [Mon, 28 Aug 2017 22:07:32 +0000 (00:07 +0200)] 
Add some support for If-Then-Else into VEX register allocator v3.

Stages 1-3 work correctly on and HInstrVec hierarchy.
Stage 4 is missing merges after HInstrIfThenElse legs join.

7 years agoFix VEX register allocator (v3) to work with HInstrSB, HInstrVec.
Ivo Raisr [Sun, 13 Aug 2017 17:18:11 +0000 (19:18 +0200)] 
Fix VEX register allocator (v3) to work with HInstrSB, HInstrVec.

It does not support If-Then-Else, though.

7 years agoSupport If-Then-Else in Memcheck.
Ivo Raisr [Tue, 8 Aug 2017 12:12:39 +0000 (14:12 +0200)] 
Support If-Then-Else in Memcheck.

7 years agoSupport If-Then-Else in Valgrind's gdbserver.
Ivo Raisr [Tue, 8 Aug 2017 10:56:35 +0000 (12:56 +0200)] 
Support If-Then-Else in Valgrind's gdbserver.

7 years agoSupport If-Then-Else in the main JITter.
Ivo Raisr [Tue, 8 Aug 2017 09:47:18 +0000 (11:47 +0200)] 
Support If-Then-Else in the main JITter.

7 years agoMake VEX/useful/test_main.c compile under new rules.
Ivo Raisr [Tue, 8 Aug 2017 09:16:28 +0000 (11:16 +0200)] 
Make VEX/useful/test_main.c compile under new rules.

7 years agoSupport If-Then-Else and Phi nodes in VEX/priv/main_main.c.
Ivo Raisr [Mon, 28 Aug 2017 21:31:03 +0000 (23:31 +0200)] 
Support If-Then-Else and Phi nodes in VEX/priv/main_main.c.

7 years agoSupport If-Then-Else in x86 isel backend.
Ivo Raisr [Tue, 8 Aug 2017 07:47:24 +0000 (09:47 +0200)] 
Support If-Then-Else in x86 isel backend.

7 years agoIntroduce HInstrSB into VEX backend headers.
Ivo Raisr [Tue, 8 Aug 2017 05:03:04 +0000 (07:03 +0200)] 
Introduce HInstrSB into VEX backend headers.

7 years agoNecessary infrastructure to support HInstrVec, HInstrSB into host_generic_regs.c
Ivo Raisr [Tue, 8 Aug 2017 08:59:08 +0000 (10:59 +0200)] 
Necessary infrastructure to support HInstrVec, HInstrSB into host_generic_regs.c

7 years agoIntroduce HInstrVec, HInstrIfThenElse and HInstrSB into host_generic_regs.h.
Ivo Raisr [Tue, 8 Aug 2017 04:57:43 +0000 (06:57 +0200)] 
Introduce HInstrVec, HInstrIfThenElse and HInstrSB into host_generic_regs.h.

7 years agoIntroduce an important assertion for a claim from libvex_ir.h.
Ivo Raisr [Tue, 8 Aug 2017 04:40:24 +0000 (06:40 +0200)] 
Introduce an important assertion for a claim from libvex_ir.h.

7 years agoMake guest_x86_toIR.c compile under new rules.
Ivo Raisr [Tue, 8 Aug 2017 08:13:43 +0000 (10:13 +0200)] 
Make guest_x86_toIR.c compile under new rules.

7 years agoMake guest_generic_bb_to_IR.c compile under new rules.
Ivo Raisr [Tue, 8 Aug 2017 07:50:19 +0000 (09:50 +0200)] 
Make guest_generic_bb_to_IR.c compile under new rules.

7 years agoir_inject.c now plays according to the new rules.
Ivo Raisr [Tue, 8 Aug 2017 04:38:54 +0000 (06:38 +0200)] 
ir_inject.c now plays according to the new rules.

7 years agoSupport If-Then-Else and Phi nodes in the IR optimizer.
Ivo Raisr [Tue, 8 Aug 2017 04:31:55 +0000 (06:31 +0200)] 
Support If-Then-Else and Phi nodes in the IR optimizer.

7 years agoImplement support for If-Then-Else and Phi nodes into ir_defs.c.
Ivo Raisr [Tue, 8 Aug 2017 04:20:57 +0000 (06:20 +0200)] 
Implement support for If-Then-Else and Phi nodes into ir_defs.c.

7 years agoIntroduce If-Then-Else concept and Phi nodes into VEX IR.
Ivo Raisr [Tue, 8 Aug 2017 04:15:58 +0000 (06:15 +0200)] 
Introduce If-Then-Else concept and Phi nodes into VEX IR.

7 years agoUntil all VEX backends are back in place, libvexmultiarch_test cannot be built.
Ivo Raisr [Sun, 13 Aug 2017 17:14:51 +0000 (19:14 +0200)] 
Until all VEX backends are back in place, libvexmultiarch_test cannot be built.

7 years agoFocus initially on x86 architecture and Memcheck tool.
Ivo Raisr [Mon, 28 Aug 2017 21:14:55 +0000 (23:14 +0200)] 
Focus initially on x86 architecture and Memcheck tool.

7 years agoVEX register allocator version 3.
Ivo Raisr [Fri, 25 Aug 2017 22:19:05 +0000 (00:19 +0200)] 
VEX register allocator version 3.

Implements a new version of VEX register allocator which
keeps the main state per virtual registers, as opposed
to real registers in v2. This results in a simpler and
cleaner design and much simpler implementation.
It has been observed that the new allocator executes 20-30%
faster than the previous one but could produce slightly worse
spilling decisions. Overall performance improvement when running
the Valgrind performance regression test suite has been observed
in terms of a few percent.

The new register allocator (v3) is now the default one.
The old register allocator (v2) is still kept around and can be
activated with command line option '--vex-regalloc-version=2'.

Fixes BZ#381553.

7 years agoFollow up to 9f9ad501 : ensure we only have a single X if several files modified
Philippe Waroquiers [Sat, 26 Aug 2017 07:01:42 +0000 (09:01 +0200)] 
Follow up to 9f9ad501 : ensure we only have a single X if several files modified

7 years agoAdd to -v --version commit date+(optional) trailing X char if some files are changed
Philippe Waroquiers [Sat, 26 Aug 2017 06:47:46 +0000 (08:47 +0200)] 
Add to -v --version commit date+(optional) trailing X char if some files are changed

7 years agomips: remove incorrect implementation of several Iops
Petar Jovanovic [Tue, 22 Aug 2017 14:05:00 +0000 (16:05 +0200)] 
mips: remove incorrect implementation of several Iops

Remove incorrect implementation of
  Iop_DivModU64to32
  Iop_DivModS64to32
  Iop_DivModU128to64
  Iop_DivModS128to64

7 years agomips: reimplement handling of div, divu and ddivu
Petar Jovanovic [Tue, 22 Aug 2017 13:53:15 +0000 (15:53 +0200)] 
mips: reimplement handling of div, divu and ddivu

Previous implementation misused some opcodes, and a side effect was
dead code emission.
To reimplement handling of these instructions, three new IoPs have been
introduced:

      Iop_DivModU64to64, // :: I64,I64 -> I128
                         // of which lo half is div and hi half is mod
      Iop_DivModS32to32, // :: I32,I32 -> I64
                         // of which lo half is div and hi half is mod
      Iop_DivModU32to32, // :: I32,I32 -> I64
                         // of which lo half is div and hi half is mod

Patch by Aleksandra Karadzic and Tamara Vlahovic.

7 years agoRecognize signal 151 (SIGLIBRT) sent by gdb.
Ivo Raisr [Fri, 18 Aug 2017 14:53:57 +0000 (16:53 +0200)] 
Recognize signal 151 (SIGLIBRT) sent by gdb.

It has been observed that gdb on Solaris sends this signal to
child processes. Unfortunately array "pass_signals" was too small
to accomodate this signal and subsequently VG_(clo_vex_control).iropt_verbosity
was overwritten.
This has been fixed now.

7 years agoAdd missing error kinds for Memcheck into XML output protocol 4.
Ivo Raisr [Thu, 17 Aug 2017 08:18:21 +0000 (10:18 +0200)] 
Add missing error kinds for Memcheck into XML output protocol 4.

Error kinds have been re-ordered to match MC_ErrorTag.
Patch by: John Davis <jedavis@alumni.cmu.edu>

7 years agoFix out-of-tree build on Solaris.
Ivo Raisr [Thu, 17 Aug 2017 20:38:18 +0000 (22:38 +0200)] 
Fix out-of-tree build on Solaris.

Simply #include config.h with no path at all.
Path by: Rob Boehne <robb@datalogics.com>

7 years agomips32: finetune vfp test to avoid compiler warnings
Petar Jovanovic [Thu, 17 Aug 2017 18:08:17 +0000 (20:08 +0200)] 
mips32: finetune vfp test to avoid compiler warnings

This patch removes two compiler warnings from the test:

vfp.c: In function 'handler':
vfp.c:260:4: warning: implicit declaration of function 'exit'
[-Wimplicit-function-declaration]
    exit(0);
    ^
vfp.c:260:4: warning: incompatible implicit declaration of built-in
function 'exit'
vfp.c: At top level:
vfp.c:258:13: warning: 'handler' defined but not used [-Wunused-function]
 static void handler(int sig)
             ^

7 years agomips: mute 'uninitialized' value compiler warning
Petar Jovanovic [Thu, 17 Aug 2017 17:10:25 +0000 (19:10 +0200)] 
mips: mute 'uninitialized' value compiler warning

fadvise64.c deliberately uses uninitialized value.
This patch removes the following warning:

warning: 'x' is used uninitialized in this function

7 years agoAdd nightly config file for Solaris Trunk x86.
Ivo Raisr [Tue, 15 Aug 2017 21:37:41 +0000 (21:37 +0000)] 
Add nightly config file for Solaris Trunk x86.

7 years ago Small improvement to user manual: capitalise another occurence of memcheck
Philippe Waroquiers [Tue, 15 Aug 2017 21:30:46 +0000 (23:30 +0200)] 
 Small improvement to user manual: capitalise another occurence of memcheck

   (yes, I am experimenting with valgrind git repository :)

7 years agoSmall improvement to user manual: capitalise one occurence of memcheck
Philippe Waroquiers [Tue, 15 Aug 2017 21:06:28 +0000 (23:06 +0200)] 
Small improvement to user manual: capitalise one occurence of memcheck

7 years agoAdd nightly config file for Solaris 11.3 x86.
Ivo Raisr [Tue, 15 Aug 2017 20:06:25 +0000 (22:06 +0200)] 
Add nightly config file for Solaris 11.3 x86.

7 years agoFix bin/nightly.
Ivo Raisr [Tue, 15 Aug 2017 20:05:02 +0000 (22:05 +0200)] 
Fix bin/nightly.

Reported and patch suggested by: Rich Coe <rcoe@wi.rr.com>

7 years agoAdd missing entries to .gitignore.
Ivo Raisr [Wed, 9 Aug 2017 10:35:50 +0000 (12:35 +0200)] 
Add missing entries to .gitignore.

7 years agogit-HOWTO.txt: Add to repository
Bart Van Assche [Mon, 26 Jun 2017 12:56:52 +0000 (14:56 +0200)] 
git-HOWTO.txt: Add to repository

7 years agoConvert release-HOWTO.txt from SVN to GIT
Ivo Raisr [Sat, 4 Mar 2017 21:21:33 +0000 (22:21 +0100)] 
Convert release-HOWTO.txt from SVN to GIT

7 years agoChange Subversion to GIT in various places
Ivo Raisr [Sat, 4 Mar 2017 21:10:03 +0000 (22:10 +0100)] 
Change Subversion to GIT in various places

7 years agofix verbose version reporting for git
Austin English [Sun, 26 Feb 2017 08:05:24 +0000 (02:05 -0600)] 
fix verbose version reporting for git

Signed-off-by: Austin English <austinenglish@gmail.com>
7 years agoFix nightly build script to work with new Valgrind GIT repository.
Ivo Raisr [Sun, 26 Feb 2017 14:00:42 +0000 (15:00 +0100)] 
Fix nightly build script to work with new Valgrind GIT repository.

7 years agoUpdate auxprogs/update-demangler for Valgrind in GIT.
Ivo Raisr [Sun, 26 Feb 2017 04:02:33 +0000 (05:02 +0100)] 
Update auxprogs/update-demangler for Valgrind in GIT.

7 years agoChange SVN to GIT in various places and simple scripts.
Ivo Raisr [Fri, 16 Jun 2017 14:40:58 +0000 (16:40 +0200)] 
Change SVN to GIT in various places and simple scripts.

7 years agoConvert svn:ignore properties to combined .gitignore.
Ivo Raisr [Mon, 14 Aug 2017 10:26:40 +0000 (12:26 +0200)] 
Convert svn:ignore properties to combined .gitignore.

7 years agoMerge VEX/HEAD into Valgrind/HEAD
Ivo Raisr [Mon, 14 Aug 2017 10:26:12 +0000 (12:26 +0200)] 
Merge VEX/HEAD into Valgrind/HEAD

7 years agoEnsure host stack trace has better chance to work when valgrind is exiting
Philippe Waroquiers [Tue, 8 Aug 2017 21:15:45 +0000 (21:15 +0000)] 
Ensure host stack trace has better chance to work when valgrind is exiting

When investigating bug 383275, the host stacktrace was containing
only one IP. This is because the tid corresponding to the lwpid
is dead, and so no valid thread state was returned.
This then gave a rubbish stacktop of 0, which means unwinding
stops at first frame.

So, try harder to find a valid thread state when reporting the
host stacktrace.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16470

7 years agoFix 383275 - massif valgrind: m_xarray.c:162 (ensureSpaceXA): Assertion '!xa->arr...
Philippe Waroquiers [Tue, 8 Aug 2017 19:52:03 +0000 (19:52 +0000)] 
Fix 383275 - massif valgrind: m_xarray.c:162 (ensureSpaceXA): Assertion '!xa->arr' failed

When a massif xtree snapshot is taken when no allocation was done,
the xtree contains no exe context.
The data structure ips_order_xecu is then szied to 0 using VG_(hintSizeXA).
m_xarray.c then allocates an empty array, while later on, a zero size
is expected to correspond to no allocated array.

Fix the problem in m_xarray.c, by not doing any allocation if the
size hint is 0.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16469

8 years agoRemove empty directory VEX/docs.
Ivo Raisr [Sat, 5 Aug 2017 13:52:46 +0000 (13:52 +0000)] 
Remove empty directory VEX/docs.

SVN->GIT migration recipe gets slightly confused with it.
n-i-bz

git-svn-id: svn://svn.valgrind.org/vex/trunk@3400

8 years agoDocument Solaris kernel interfaces used. Not exhaustive list.
Ivo Raisr [Thu, 3 Aug 2017 20:46:33 +0000 (20:46 +0000)] 
Document Solaris kernel interfaces used. Not exhaustive list.
n-i-bz

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16468

8 years agoFix handling command line option --xml-socket.
Ivo Raisr [Thu, 3 Aug 2017 05:22:01 +0000 (05:22 +0000)] 
Fix handling command line option --xml-socket.
Fixes BZ#382998
Patch by: Orgad Shaneh <orgads@gmail.com>

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16467

8 years agoVarious minor fixes and correction in user manual and monitor command help
Philippe Waroquiers [Tue, 1 Aug 2017 20:21:38 +0000 (20:21 +0000)] 
Various minor fixes and correction in user manual and monitor command help

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16466

8 years agoFix 382515 - valgrind: "Assertion 'di->have_dinfo' failed." on wine's dlls/mscoree...
Philippe Waroquiers [Mon, 31 Jul 2017 20:43:43 +0000 (20:43 +0000)] 
Fix  382515 - valgrind: "Assertion 'di->have_dinfo' failed." on wine's dlls/mscoree/tests/mscoree.c

* produce (more) user messages when valgrind cannot read a pdb file.
* recover properly from an invalid/unsupported pdb file.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16465

8 years agoFix the Solaris build after development trunk has been renamed.
Ivo Raisr [Mon, 31 Jul 2017 15:24:08 +0000 (15:24 +0000)] 
Fix the Solaris build after development trunk has been renamed.

Effectively Solaris 12 is now becoming Solaris 11.4.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16464

8 years agoCheck whether it is ok to use compiler flag '-pie'.
Ivo Raisr [Fri, 28 Jul 2017 20:49:20 +0000 (20:49 +0000)] 
Check whether it is ok to use compiler flag '-pie'.
Some compilers actually do not support -pie and report its usage
as an error. We need to check if it is safe to use it first.
n-i-bz

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16463

8 years agovalgrind core side for Add inner requests in VEX (cfr revision 3399)
Philippe Waroquiers [Thu, 27 Jul 2017 19:11:21 +0000 (19:11 +0000)] 
valgrind core side for Add inner requests in VEX (cfr revision  3399)

When running Valgrind under Valgrind, the VEX memory allocation
(temporary or permanent) was not checked, as there was no
inner request.
This patch changes VEX to mark the temporary and permanent
allocations with redzone, and memory is marked unaddressable
when the VEX temporary pool is cleared.

The changes are:
* add a file libvex_inner.h which mostly takes over what
  was in pub_core_inner.h (which now just includes libvex_inner.h)

* modify main_util.h and main_util.c to mark the temporary
  and permanent pool with memcheck pool requests to indicate
  when a block is allocated or freed.

* Impact is (should be) none, unless Valgrind is configured
  as an inner.

* Outer memcheck/inner regression tests run on gcc20 (amd64).
  Nothing (more worrying than the 3.13 self hosting) detected

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16462

8 years agoAdd inner requests in VEX
Philippe Waroquiers [Thu, 27 Jul 2017 19:10:30 +0000 (19:10 +0000)] 
Add inner requests in VEX

When running Valgrind under Valgrind, the VEX memory allocation
(temporary or permanent) was not checked, as there was no
inner request.
This patch changes VEX to mark the temporary and permanent
allocations with redzone, and memory is marked unaddressable
when the VEX temporary pool is cleared.

The changes are:
* add a file libvex_inner.h which mostly takes over what
  was in pub_core_inner.h (which now just includes libvex_inner.h)

* modify main_util.h and main_util.c to mark the temporary
  and permanent pool with memcheck pool requests to indicate
  when a block is allocated or freed.

* Impact is (should be) none, unless Valgrind is configured
  as an inner.

* Outer memcheck/inner regression tests run on gcc20 (amd64).
  Nothing (more worrying than the 3.13 self hosting) detected

git-svn-id: svn://svn.valgrind.org/vex/trunk@3399

8 years agoNew command line option "--terse" for vg_perf.
Ivo Raisr [Sat, 22 Jul 2017 05:10:05 +0000 (05:10 +0000)] 
New command line option "--terse" for vg_perf.
Fixes BZ#382407.

Produces the following terse output:

-- bigcode1 --
vanilla   :  no: -----  me: -----  ca: -----  he: -----  ca: -----  dr: -----  ma: -----
ra3-005   :  no:  0.0%  me: -4.7%  ca:  0.2%  he: -1.1%  ca: -1.5%  dr: -0.6%  ma:  0.0%
ra3-005-J :  no:  0.0%  me:  0.4%  ca:  0.3%  he: -0.5%  ca: -0.9%  dr:  0.0%  ma:  0.6%
ra3-006   :  no:  0.0%  me:  0.4%  ca:  0.2%  he: -0.0%  ca: -1.2%  dr:  0.0%  ma:  0.0%
ra3-007   :  no:  0.0%  me:  0.7%  ca:  0.5%  he: -0.5%  ca: -0.6%  dr:  0.0%  ma:  1.2%

instead the full output (when the option is not used):
-- bigcode1 --
bigcode1 vanilla:0.09s  no: 1.6s (18.0x, -----)  me: 3.1s (35.0x, -----)  ca:12.7s (140.8x, -----)  he: 2.0s (22.8x, -----)  ca: 3.7s (41.2x, -----)  dr: 2.0s (22.2x, -----)  ma: 1.9s (20.7x, -----)
bigcode1 ra3-005:0.09s  no: 1.6s (17.8x,  1.2%)  me: 3.0s (33.3x,  4.8%)  ca:12.7s (140.7x,  0.1%)  he: 2.0s (22.2x,  2.4%)  ca: 3.6s (40.2x,  2.4%)  dr: 1.9s (21.7x,  2.5%)  ma: 1.9s (20.7x,  0.0%)

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16461

8 years agofix misleading indentation
Philippe Waroquiers [Fri, 21 Jul 2017 18:46:35 +0000 (18:46 +0000)] 
fix misleading indentation

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16460

8 years agoFix the configure check whether the compiler supports compressed debug sections.
Ivo Raisr [Sun, 16 Jul 2017 20:12:26 +0000 (20:12 +0000)] 
Fix the configure check whether the compiler supports compressed debug sections.
We need to actually link instead of just compile.
Fixes BZ#382256.

Patch by: Ross Burton <ross@burtonini.com>

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16459

8 years agoBug 381805 arm32 needs ld.so index hardwire for new glibc security fixes
Mark Wielaard [Wed, 5 Jul 2017 09:57:48 +0000 (09:57 +0000)] 
Bug 381805 arm32 needs ld.so index hardwire for new glibc security fixes

glibc added some security hardening adding (optimized) index/strchr
calls in the LD_PRELOAD path:

    commit 6d0ba622891bed9d8394eef1935add53003b12e8
    Author: Florian Weimer <fweimer@redhat.com>
    Date:   Mon Jun 19 22:31:04 2017 +0200

        ld.so: Reject overly long LD_PRELOAD path elements

arm32 doesn't have an ld.so hardwire for index/strchr like other
architectures and so will always complain during early startup:

    ==9495== Conditional jump or move depends on uninitialised value(s)
    ==9495==    at 0x401CF84: index (in /usr/lib/ld-2.25.so)
    ==9495==
    ==9495== Conditional jump or move depends on uninitialised value(s)
    ==9495==    at 0x401CF88: index (in /usr/lib/ld-2.25.so)

index/strchr is doing a word load from a partially-written
stack-allocated buffer, therefore accessing uninitialized data.
This is normal for an optimized string function. The uninitialized
data does not affect the function result.

This can be suppressed by adding a index hardwire for ld.so on arm32
like on other arches. There even was already some commented out code
to do that. Enable that code.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16458

8 years agomemcheck/tests: Use ucontext_t instead of struct ucontext
Mark Wielaard [Thu, 29 Jun 2017 15:26:30 +0000 (15:26 +0000)] 
memcheck/tests: Use ucontext_t instead of struct ucontext

glibc 2.26 does not expose struct ucontext anymore.

Signed-off-by: Khem Raj <raj.khem@gmail.com>
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16457

8 years agoRevert r16455.
Tom Hughes [Mon, 26 Jun 2017 12:14:29 +0000 (12:14 +0000)] 
Revert r16455.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16456

8 years agoAllow setuid/setgid/setcap binaries to be run if
Tom Hughes [Mon, 26 Jun 2017 12:10:42 +0000 (12:10 +0000)] 
Allow setuid/setgid/setcap binaries to be run if
valgrind is running as root.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16455

8 years agoAfter fork, vgdb activity is polled according to the nr of bbs done :
Philippe Waroquiers [Sun, 25 Jun 2017 20:25:50 +0000 (20:25 +0000)] 
After fork, vgdb activity is polled according to the nr of bbs done :
once the nr of bbs done reaches the next vgdb poll, a check for vgdb
activity is done.
This might lead to the activation of gdbserver after fork.
Such poll is however not expected, unless the children is
to be trace.
This spurious poll in the forked child can cause failures
depending on the nr of bbs done before the fork, and the
nr of bbs done between the fork and the exec.

=> disable vgdb poll in the child in the cleanup after fork
in the child, unless the children have to be traced.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16454

8 years agoFix some tests failure with GDB 8.0
Philippe Waroquiers [Sun, 25 Jun 2017 12:40:53 +0000 (12:40 +0000)] 
Fix some tests failure with GDB 8.0

At the beginning of a Valgrind gdbserver test,
2 messages are produced when launching the command
   target remote | vgdb

A message output by vgdb:
   relaying data between gdb and process <pid>
(this message is read by GDB from the vgdb pipe, and re-output
on stderr)
and a message produced by GDB:
   Remote debugging using | ./vgdb

GDB 8.0 changes the order in which the above messages are output.
This causes 2 tests to fail, as the 'relaying' line appears
then in a part of the output deleted by a filter script.

To avoid this, change the filter scripts to always remove
this 'relaying line', which is not particularly interesting to check.
All the .exp files containining such a 'relaying' line are updated
accordingly.

This has been tested with various gdb versions (7.5, 7.7, 7.12, 8.0)
on amd64 and/or ppc64.

Thanks to Mark Wielaard, which helped to investigate this problem
by bisecting the GDB patches in GDB 8.0 causing this change of
behaviour.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16453

8 years agoAdd VEX fix 'powerpc too chatty even with --sigill-diagnostics=no' to NEWS.
Mark Wielaard [Tue, 20 Jun 2017 17:58:07 +0000 (17:58 +0000)] 
Add VEX fix 'powerpc too chatty even with --sigill-diagnostics=no' to NEWS.

Bug 381274. VEX svn r3398.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16452

8 years agoBug 381274 powerpc too chatty even with --sigill-diagnostics=no.
Mark Wielaard [Tue, 20 Jun 2017 17:55:13 +0000 (17:55 +0000)] 
Bug 381274 powerpc too chatty even with --sigill-diagnostics=no.

Even with valgrind --sigill-diagnostics=no (or -q) guest_ppc_toIR.c
will report various cases why it didn't handle an instruction. e.g.

  disInstr(ppc): found the Power 8 instruction 0x10000508 that can't be
  handled by Valgrind on this host.  This instruction requires a host
  that supports Power 8 instructions.

After which valgrind will generate a SIGILL. But in case the user uses
-q or --sigill-diagnostics=no they aren't interested in that diagnostics.
For example openssl will try some power 8 instructions while initializing
and catch the SIGILL if not supported without issue.

Guard those cases with if (sigill_diag) like the generic decode_failure.

git-svn-id: svn://svn.valgrind.org/vex/trunk@3398

8 years agoepoll_pwait can have a NULL sigmask.
Mark Wielaard [Sat, 17 Jun 2017 13:49:22 +0000 (13:49 +0000)] 
epoll_pwait can have a NULL sigmask.

According to the epoll_pwait(2) man page:

       The  sigmask  argument  may  be  specified  as  NULL,  in  which  case
       epoll_pwait() is equivalent to epoll_wait().

But doing that under valgrind gives:

==13887== Syscall param epoll_pwait(sigmask) points to unaddressable byte(s)
==13887==    at 0x4F2B940: epoll_pwait (epoll_pwait.c:43)
==13887==    by 0x400ADE: main (syscalls-2007.c:89)
==13887==  Address 0x0 is not stack'd, malloc'd or (recently) free'd

This is because the sys_epoll_pwait wrapper has:

   if (ARG4)
      PRE_MEM_READ( "epoll_pwait(sigmask)", ARG5, sizeof(vki_sigset_t) );

Which looks like a typo (ARG4 is timeout and ARG5 is sigmask).

This shows up with newer glibc which translates an epoll_wait call into
an epoll_pwait call with NULL sigmask.

Fix typo and add a testcase.

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

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16451