1603 Commits

Author SHA1 Message Date
Julian Seward
48f0d5bfbe Handle Iop_QAdd16Ux2. Needed for recent ARM v6media additions committed
in vex r2731.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13446
2013-07-04 20:37:33 +00:00
Florian Krohm
849b105814 valgrind side changes to support the new IRops introduced
in VEX r2727 (conversion ops between binary floating point and
decimal floating point).
Patch by Maran Pakkirisamy (maranp@linux.vnet.ibm.com).
Part of fixing BZ 307113.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13428
2013-06-17 19:04:24 +00:00
Florian Krohm
ceccc0771e More comment only changes as the "DFP rounding mode" has been removed.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13421
2013-06-06 21:21:46 +00:00
Florian Krohm
feeb97b9c8 Comment only changes: IRRoundingModeDFP -> IRRoundingMode.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13419
2013-06-06 19:13:29 +00:00
Petar Jovanovic
c195593e52 update cond_ld_st test and expected outputs
Line numbers are off by one in some outputs since it differs on GCC version
how it will map source code to line number for the ternary operator written
in multiple lines.
This is small fix that replaces one occurrence of ternary operator with
if-then-else. The excepted outputs have been changed accordingly.

This fixes the test memcheck/tests/cond_ld_st for different platforms with
different GCC versions.

Tested on x86, i386, ARM, MIPS32, and MIPS64.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13415
2013-06-02 03:22:28 +00:00
Florian Krohm
7b5334ad4c s390x: The CC_DEP1 field is accessed as a whole or bits [0:31]
in case the field holds a 32-bit floating point value.
Patch by Maran Pakkirisamy (maranp@linux.vnet.ibm.com).
Part of fixing BZ 307113.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13413
2013-05-31 15:44:06 +00:00
Mark Wielaard
86f74d6026 Support Linux kernel AF_BLUETOOTH for bind().
Bug #320116. sockaddr_rc might contain some padding which might not be
initialized. Explicitly check the sockaddr_rc fields are set. That also
produces better diagnostics about which field is unitialized.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13404
2013-05-22 10:21:10 +00:00
Petar Jovanovic
8ad78e7e2f exp files for cond_ld and cond_st for 32-bit architectures
This fixes:
- memcheck/tests/cond_ld and
- memcheck/tests/cond_st

for 32-bit non-ARM architectures. Tested on IA32 and MIPS32.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13401
2013-05-20 15:39:11 +00:00
Petar Jovanovic
54992859d7 mips: atomic_add_8bit and atomic_add_16bit for MIPS64-BE
It fixes memcheck/tests/atomic_incs on MIPS64-BE.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13399
2013-05-14 13:33:27 +00:00
Julian Seward
77e6f16706 Fix incorrect filenames for the cond_ld_st tests.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13398
2013-05-13 13:27:00 +00:00
Julian Seward
cc44df221f cond_ld_st: Split the non-arm expected outputs into 32- and 64-bit
versions, since they will be different.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13395
2013-05-13 09:13:04 +00:00
Julian Seward
9c5edc6cb9 memcheck/tests/cond_ld_st: add expected outputs for ARM, where
we are using real conditional load/store instructions.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13394
2013-05-13 08:35:19 +00:00
Julian Seward
8845cb1355 Fix up output filtering for cond_st so that the stacks are
actually present.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13393
2013-05-13 08:28:31 +00:00
Julian Seward
25c2291974 Add test cases for instrumentation of IR-level loads and stores.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13392
2013-05-12 11:07:59 +00:00
Julian Seward
6f2565de0e Whitespace-only changes.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13391
2013-05-12 10:43:31 +00:00
Julian Seward
26ec2b06c1 complainIfUndefined: reinstate the 3rd argument (guard) so as to make
the definedness check and possible shadow temp set-to-defined be
optional.  Use this to properly instrument IRLoadG and IRStoreG, so
that if the load/store does not happen, not only is the validity of
the address not checked, neither is the definedness.

This fixes a regression introduced by the COMEM branch on ARM, in
which conditional loads/stores with addresses which are undefined at
runtime and with guards which are false, would generate false errors.

Also extensively re-checked the check-generation machinery and updated
a bunch of comments.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13386
2013-05-11 13:42:08 +00:00
Florian Krohm
1260ec88fa valgrind side support for
Iop_F64toD64, Iop_D64toF64
Iop_F64toD128, Iop_D128toF64,
Iop_F128toD128, Iop_D128toF128

Companion patch of VEX r2717.
Patch by Maran Pakkirisamy (maranp@linux.vnet.ibm.com).
Part of fixing BZ #307113


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13382
2013-05-05 15:05:42 +00:00
Julian Seward
2582e074ba Whitespace changes only -- no functional change.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13377
2013-04-23 12:15:37 +00:00
Mark Wielaard
bca0cb2aa5 strchr.vgtest mc_replace_strmem.c [r]index and [__GI_]str[r]chr are the same.
Add memcheck/tests/filter_strchr to make it so for the testcase.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13370
2013-04-17 15:23:22 +00:00
Mark Wielaard
b81e3c86b6 Fix double 'the the' in documentation.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13363
2013-04-05 13:19:12 +00:00
Philippe Waroquiers
a36350923b temporarily disable memalign part of the undef_malloc_args.c test
as this is breaking Darwin.

A better fix should follow



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13362
2013-04-05 12:53:16 +00:00
Philippe Waroquiers
a819df9d0a Solve false negative for various malloc replaced functions arguments
The replacement functions are running on the simulated CPU.
The code on the simulated CPU does not necessarily use
all arguments. E.g. args can be ignored and/or only given
to a NON SIMD call.
The definedness of such 'unused' arguments will not be verified
by memcheck.
A call to 'trigger_memcheck_error_if_undefined' allows 
memcheck to detect such errors for the otherwise unused args.
Apart of allowing memcheck to detect an error, the function
trigger_memcheck_error_if_undefined has no effect and
has a minimal cost for other tools replacing malloc functions.

(suggestion of the 'no operation check' from Julian).

tested on f12/x86, debian6/amd64, f18/ppc64
Note that some Darwin specific code has been modified
in coregrind/m_replace_malloc/vg_replace_malloc.c.
(Some of) this code has not been compiled (no access to a
Darwin system). The code changed is trivial, so there is
some chance it will compile and even maybe work.

Added a new test verifying that various malloc related
functions undefined args are triggering an error in memcheck.




git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13361
2013-04-04 21:10:22 +00:00
Petar Jovanovic
1644841498 mips: add mips64le support for atomic_incs and annotate_hbefore tests
Add mips64-le implementation of:

- atomic_add_8bit
- atomic_add_16bit
- atomic_add_32bit
- atomic_add_64bit
- do_acasW

Minor fixes for mips32 implementations are included as well.

These functions are needed to execute atomic_incs and annotate_hbefore
tests on mips64le.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13357
2013-04-03 22:51:23 +00:00
Mark Wielaard
0ec8df03c1 For memcheck overlap filter_memcpy str[n]cpy and __GI_str[n]cpy are equal.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13349
2013-03-28 22:52:14 +00:00
Mark Wielaard
684a15246c memcheck/tests/strchr test should not depend on line numbers.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13348
2013-03-28 22:52:13 +00:00
Mark Wielaard
cc1ee7885f Add new MISC vector Iops to memcheck/tests/vbit-test/irops.c.
memcheck/tests/vbit-test fails with unknown opcode after introduction
of new Iops for AVX2, BMI, FMA support #317506

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13347
2013-03-28 21:24:57 +00:00
Julian Seward
9c91869bc9 Memcheck fixes for new IR ops introduced by r2702 (which added support
for AVX2, BMI1, BMI2 and FMA instructions).  Part of #305728.
(Jakub Jelinek, jakub@redhat.com)



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13338
2013-03-27 11:40:02 +00:00
Philippe Waroquiers
66bc0e6f56 Undo void change done as part of rev 13329
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13330
2013-03-18 22:51:57 +00:00
Philippe Waroquiers
b5c064dfea Better fix for 295590
(problem reported in bug 307082, comment 8).
Solution applied is similar to what is in 307082 patch
(i.e. do not destroy the internal helgrind var if nWaiters > 0).
But also do not remove it from the FM.

+ add a test case (re-using the drd test case)



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13329
2013-03-18 22:48:22 +00:00
Philippe Waroquiers
30275f300c Fix 316535 Use of |signed int| instead of (unsigned) |size_t| in messages...
* when SEGV trapped, report the main thread size as an unsigned size_t
* Similar for memcheck overlap errors
  For example, for the 2 calls:
     memcpy(&a, &a, 2147483648UL);
     memcpy(&a, &a, -1);  // silently accepted by gcc 4.4.4 -Wall
                          // while the 3rd arg is supposed to be a size_t
  we now obtain (on a 32 bit system)
    Source and destination overlap in memcpy(0xbe97113f, 0xbe97113f, 2147483648)
    Source and destination overlap in memcpy(0xbef6d13f, 0xbef6d13f, 4294967295)
  instead of
    Source and destination overlap in memcpy(0xbe8e012f, 0xbe8e012f, -2147483648)
    Source and destination overlap in memcpy(0xbe8e012f, 0xbe8e012f, -1)

Do not ask me why 
   memcpy(&a, &a, -1);
is supposed to be accepted/acceptable/valid code.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13326
2013-03-13 21:44:07 +00:00
Philippe Waroquiers
48f3860354 Avoid warning that format argument is not a string literal
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13303
2013-03-02 15:44:03 +00:00
Philippe Waroquiers
f239a1c516 small changes in sendmsg.c regtest
* avoid a warning related to pointer types
* replace exit (0) by return 0 (might help backtraces on Darwin, suggestion by Rich Coe)



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13301
2013-03-01 23:05:43 +00:00
Tom Hughes
592e58c747 Don't check the flags word in msghdr for sendmsg as the
kernel will neither read nor write it.

Patch from Mark Wielaard to fix BZ#315441.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13294
2013-02-28 12:50:55 +00:00
Petar Jovanovic
5dd4c02e39 mips: adding MIPS64LE support to Valgrind
Necessary changes to Valgrind to support MIPS64LE on Linux.
Minor cleanup/style changes embedded in the patch as well.
The change corresponds to r2687 in VEX.
Patch written by Dejan Jevtic and Petar Jovanovic.

More information about this issue:
https://bugs.kde.org/show_bug.cgi?id=313267


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13292
2013-02-27 23:17:33 +00:00
Florian Krohm
1f53bd2199 s390: Testcases and vbit-tester changes for the following
DFP insns:
- extract basied exponent
- insert biased exponent
- quantize
- reround to significance
Patch by Maran Pakkirisamy (maranp@linux.vnet.ibm.com).
Part of fixing BZ #307113.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13286
2013-02-14 14:28:22 +00:00
Florian Krohm
6965adf43e s390: Add testcase for these DFP insns: CDGTRA, CXGTR, CGXTR, and CGDTR (VEX r2680).
Update vbit tester. Patch by Maran Pakkirisamy (maranp@linux.vnet.ibm.com).
Part of fixing BZ #307113.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13285
2013-02-08 23:34:31 +00:00
Julian Seward
ac5abb76ac test_reservation(), test_double_pair_instrs(): Fix broken inline assembly
causing segfaults with gcc-4.7.  The inline assembly still isn't right,
but it's better than it was before.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13279
2013-01-29 22:14:01 +00:00
Julian Seward
dbf3bf279d Increase maximum usable memory amount from 32GB to 64GB on 64-bit Linux.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13278
2013-01-29 21:14:46 +00:00
Julian Seward
d120d46f76 get_otrack_shadow_offset_wrk: amd64: add a (very rare) missing case.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13277
2013-01-29 21:13:00 +00:00
Julian Seward
0fe8fb34cf Non functional change (formatting, comments) related to newly created
Iex_ITE.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13276
2013-01-29 21:11:55 +00:00
Julian Seward
875aed56c4 Fix the mkLazy3 case for I32 x I8 x I128 -> I128.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13275
2013-01-29 17:18:56 +00:00
Florian Krohm
ed4825e88e Infrastructure cleanup part 2. valgrind side changes.
Replace Iex_Mux0X with Iex_ITE (if-then-else).
Companion patch to VEX r2668.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13273
2013-01-29 03:57:40 +00:00
Julian Seward
45bb2fab08 Changes to track r2664, which changed the type of the condition field
of Mux0X from Ity_I8 to Ity_I1.  Patch from Florian Krohm.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13267
2013-01-26 11:49:15 +00:00
Carl Love
fa4ebebbd7 Fix implementation of the DFP integer operands.
The implementation of integer operands doesn't really match the documentation
for the Iop. Take for example Iop_ExtractExpD64. It is documented as
D64 -> I64 but the implementation of the UNARY is defined as
UNARY(Ity_D64, Ity_D64). The result is an integer that is stored in an integer
format in a floating point register. On the IBM s390 however, the architecture
stores the integer value in a general purpose register (GPR) not a floating
point register. This issue exists with the implementation of 11 Iops where the
PPC implementation has either a source or destination whose value is an integer
but the value is stored in a floating point register in an integer format. After
reviewing the PPC implementation with the s390 developer, it was agreed the
cleanest way to fix this is to change the PPC implementation. The BINOP will be
changed to be consistent with the Iop description. This means the PPC
instruction implementation of the PPC instruction in guest_ppc_toIR.c will need
to reinterpret integer source operands as integers which will move the value
from a floating point register to an integer register before calling binop().
The underlying PPC implementation of the unop() for the specific Iop will also
need to change to move the value from the integer register back to the floating
point register so the native instruction can be issued with the integer value
in a floating point register. It was decided that making the changed in PPC,
rather then having the s390 reinterpret integers as DFP and then move the value
back to an integer register, was preferable as it makes the implementation of
the unop(), binops(), triop() consistent with the definition of the Iop.

This patch also includes the needed changes for the vbit tester.  The Iop
definitions in memcheck/tests/vbit-test/util.c had to be updated to be consitent
with the changes in the Iops as documented below.  Also, the function mkLazy3()
in memcheck/mc_translate.c had to be updated to handle the I32 x I8 x I64 -> I64
and I32 x I8 x I128 -> I128 cases.

The specific list of changes are as follows:

Iop name in pub/libvex_ir.h
   documented type
     type of UNARY/BINARY/TERNARY in priv/ir_defs.c
-------------------------------------------------------

Iop_ExtractExpD64
   D64 -> I64
      UNARY(Ity_D64, Ity_D64); (current)
      UNARY(Ity_D64, Ity_I64); (fix)
 

Iop_ExtractExpD128
   D128 -> I64
       UNARY(Ity_D128, Ity_D64); (current)
       UNARY(Ity_D128, Ity_I64); (fix)

Iop_InsertExpD64
   I64 x I64 -> D64
   I64 x D64 -> D64 (fix definition)
       BINARY(Ity_D64,Ity_D64, Ity_D64); (current)
       BINARY(Ity_I64,Ity_D64, Ity_D64); (fix)

Iop_InsertExpD128
    I64 x I128 -> D128
    I64 x D128 -> D128 (fix definition)
        BINARY(Ity_D64,Ity_D128, Ity_D128); (current)
        BINARY(Ity_I64,Ity_D128, Ity_D128); (fix)

Iop_I64StoD128
    I64S -> D128
        UNARY(Ity_D64, Ity_D128); (current)
        UNARY(Ity_I64, Ity_D128); (fix)

Iop_D64toI64S
    IRRoundingModeDFP(I32) x D64 -> I64
        BINARY(ity_RMode, Ity_D64, Ity_D64) (current)
        BINARY(ity_RMode, Ity_D64, Ity_I64) (fix)

Iop_D128toI64S
    IRRoundingModeDFP(I32) x D128 -> I64
        BINARY(ity_RMode, Ity_D128, Ity_D64); (current)
        BINARY(ity_RMode, Ity_D128, Ity_I64); (fix)

Iop_I64StoD64
    IRRoundingModeDFP(I32) x I64 -> D64
        BINARY(ity_RMode, Ity_D64, Ity_D64); (current)
        BINARY(ity_RMode, Ity_I64, Ity_D64); (fix)

Iop_SignificanceRoundD64
    IRRoundingModeDFP(I32) x I8 x D64 -> D64
        TERNARY(ity_RMode,Ity_D64,Ity_D64, Ity_D64); (current)
        TERNARY(ity_RMode,Ity_I8,Ity_D64, Ity_D64); (fix)

Iop_SignificanceRoundD128
    IRRoundingModeDFP(I32) x I8 x D128 -> D128
         TERNARY(ity_RMode,Ity_D128,Ity_D128, Ity_D128); (current)
         TERNARY(ity_RMode,Ity_I8,Ity_D128, Ity_D128); (fix)

The patch is for bugzilla 311100
VEX Committed revision 2652

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13260
2013-01-22 20:26:34 +00:00
Philippe Waroquiers
35ee46968d Fix NULL dereference if no integer arg given to monitor block_list cmd
Reported by Florian (spotted by coverity).


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13257
2013-01-21 22:05:47 +00:00
Tom Hughes
b97113218b Replace bcopy on linux as, at least in 32 bit build, glibc will
sometimes choose to use an optimised version. Fixes #311407.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13253
2013-01-21 15:17:02 +00:00
Florian Krohm
29cf6415c3 In mc_translate a NULL guard expression is sometimes passed around
functions to indicate a "true" expression. That caused some confusion
and led people to believe believe, that IRDirty::guard could be NULL.
It cannot.
This confusion was indirectly spotted by coverity's checker who figured
out that IRDirty::guard was sometimes unconditionally dereferenced
and sometimes compared against NULL.
Cleaning this up...


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13250
2013-01-21 01:27:22 +00:00
Philippe Waroquiers
6fb1158a78 Implement --merge-recursive-frames + provide VALGRIND_MONITOR_COMMAND client req.
In a big applications, some recursive algorithms have created
hundreds of thousands of stacktraces, taking a lot of memory.

Option --merge-recursive-frames=<number> tells Valgrind to
detect and merge (collapse) recursive calls when recording stack traces.
The value is changeable using the monitor command
'v.set merge-recursive-frames'.

Also, this provides a new client request: VALGRIND_MONITOR_COMMAND
allowing to execute a gdbsrv monitor command from the client
program.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13246
2013-01-20 17:11:58 +00:00
Florian Krohm
436730a4f6 Fix a comment. Spotted by Maran.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13242
2013-01-19 02:50:41 +00:00
Julian Seward
9244972b6d Add an implementation of memset() that costs half as much on 64 bit
platforms.  (But why are we intercepting memset anyway?  It makes no
sense to me.)


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13239
2013-01-18 11:01:53 +00:00