mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 10:05:29 +00:00
memcheck: Allow unaligned loads of words on ppc64[le].
On powerpc partial unaligned loads of words from partially invalid addresses are OK and could be generated by our translation of ldbrx. Adjust partial_load memcheck tests to allow partial loads of words on powerpc64. Part of resolving bug #386945.
This commit is contained in:
parent
0ed17bc9f6
commit
5ecdecdcd3
@ -1508,6 +1508,9 @@ ULong mc_LOADVn_slow ( Addr a, SizeT nBits, Bool bigendian )
|
||||
# if defined(VGA_mips64) && defined(VGABI_N32)
|
||||
if (szB == VG_WORDSIZE * 2 && VG_IS_WORD_ALIGNED(a)
|
||||
&& n_addrs_bad < VG_WORDSIZE * 2)
|
||||
# elif defined(VGA_ppc64be) || defined(VGA_ppc64le)
|
||||
/* On power unaligned loads of words are OK. */
|
||||
if (szB == VG_WORDSIZE && n_addrs_bad < VG_WORDSIZE)
|
||||
# else
|
||||
if (szB == VG_WORDSIZE && VG_IS_WORD_ALIGNED(a)
|
||||
&& n_addrs_bad < VG_WORDSIZE)
|
||||
|
||||
@ -235,8 +235,10 @@ EXTRA_DIST = \
|
||||
partiallydefinedeq.stdout.exp \
|
||||
partial_load_ok.vgtest partial_load_ok.stderr.exp \
|
||||
partial_load_ok.stderr.exp64 \
|
||||
partial_load_ok.stderr.exp-ppc64 \
|
||||
partial_load_dflt.vgtest partial_load_dflt.stderr.exp \
|
||||
partial_load_dflt.stderr.exp64 \
|
||||
partial_load_dflt.stderr.exp-ppc64 \
|
||||
partial_load_dflt.stderr.expr-s390x-mvc \
|
||||
pdb-realloc.stderr.exp pdb-realloc.vgtest \
|
||||
pdb-realloc2.stderr.exp pdb-realloc2.stdout.exp pdb-realloc2.vgtest \
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
|
||||
int main ( void )
|
||||
{
|
||||
long w;
|
||||
int i;
|
||||
char* p;
|
||||
|
||||
long w; int i; char* p;
|
||||
assert(sizeof(long) == sizeof(void*));
|
||||
#if defined(__powerpc64__)
|
||||
fprintf (stderr, "powerpc64\n"); /* Used to select correct .exp file. */
|
||||
#endif
|
||||
|
||||
/* partial load, which --partial-loads-ok=yes should suppress */
|
||||
p = calloc( sizeof(long)-1, 1 );
|
||||
@ -16,7 +16,7 @@ int main ( void )
|
||||
w = *(long*)p;
|
||||
free(p);
|
||||
|
||||
/* partial but misaligned, cannot be suppressed */
|
||||
/* partial but misaligned, ppc64[le] ok, but otherwise cannot be suppressed */
|
||||
p = calloc( sizeof(long), 1 );
|
||||
assert(p);
|
||||
p++;
|
||||
|
||||
23
memcheck/tests/partial_load_dflt.stderr.exp-ppc64
Normal file
23
memcheck/tests/partial_load_dflt.stderr.exp-ppc64
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
powerpc64
|
||||
Invalid read of size 2
|
||||
at 0x........: main (partial_load.c:30)
|
||||
Address 0x........ is 0 bytes inside a block of size 1 alloc'd
|
||||
at 0x........: calloc (vg_replace_malloc.c:...)
|
||||
by 0x........: main (partial_load.c:28)
|
||||
|
||||
Invalid read of size 8
|
||||
at 0x........: main (partial_load.c:37)
|
||||
Address 0x........ is 0 bytes inside a block of size 8 free'd
|
||||
at 0x........: free (vg_replace_malloc.c:...)
|
||||
by 0x........: main (partial_load.c:36)
|
||||
|
||||
|
||||
HEAP SUMMARY:
|
||||
in use at exit: ... bytes in ... blocks
|
||||
total heap usage: ... allocs, ... frees, ... bytes allocated
|
||||
|
||||
For a detailed leak analysis, rerun with: --leak-check=full
|
||||
|
||||
For counts of detected and suppressed errors, rerun with: -v
|
||||
ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
|
||||
23
memcheck/tests/partial_load_ok.stderr.exp-ppc64
Normal file
23
memcheck/tests/partial_load_ok.stderr.exp-ppc64
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
powerpc64
|
||||
Invalid read of size 2
|
||||
at 0x........: main (partial_load.c:30)
|
||||
Address 0x........ is 0 bytes inside a block of size 1 alloc'd
|
||||
at 0x........: calloc (vg_replace_malloc.c:...)
|
||||
by 0x........: main (partial_load.c:28)
|
||||
|
||||
Invalid read of size 8
|
||||
at 0x........: main (partial_load.c:37)
|
||||
Address 0x........ is 0 bytes inside a block of size 8 free'd
|
||||
at 0x........: free (vg_replace_malloc.c:...)
|
||||
by 0x........: main (partial_load.c:36)
|
||||
|
||||
|
||||
HEAP SUMMARY:
|
||||
in use at exit: ... bytes in ... blocks
|
||||
total heap usage: ... allocs, ... frees, ... bytes allocated
|
||||
|
||||
For a detailed leak analysis, rerun with: --leak-check=full
|
||||
|
||||
For counts of detected and suppressed errors, rerun with: -v
|
||||
ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
|
||||
Loading…
x
Reference in New Issue
Block a user