diff --git a/valgrind-3.14.0-ppc64-unaligned-words.patch b/valgrind-3.14.0-ppc64-unaligned-words.patch new file mode 100644 index 0000000..75c8bf6 --- /dev/null +++ b/valgrind-3.14.0-ppc64-unaligned-words.patch @@ -0,0 +1,148 @@ +commit c5a5bea00af75f6ac50da10967d956f117b956f1 +Author: Mark Wielaard +Date: Sat Dec 8 13:47:43 2018 -0500 + + 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. + +diff --git a/memcheck/mc_main.c b/memcheck/mc_main.c +index 3ef7cb9..737f79d 100644 +--- a/memcheck/mc_main.c ++++ b/memcheck/mc_main.c +@@ -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) +diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am +index 2af4dd1..70b8ada 100644 +--- a/memcheck/tests/Makefile.am ++++ b/memcheck/tests/Makefile.am +@@ -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 \ +diff --git a/memcheck/tests/partial_load.c b/memcheck/tests/partial_load.c +index 0b2f10b..685ca8d 100644 +--- a/memcheck/tests/partial_load.c ++++ b/memcheck/tests/partial_load.c +@@ -1,14 +1,14 @@ +- ++#include + #include + #include + + 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++; +diff --git a/memcheck/tests/partial_load_dflt.stderr.exp-ppc64 b/memcheck/tests/partial_load_dflt.stderr.exp-ppc64 +new file mode 100644 +index 0000000..cf32bcf +--- /dev/null ++++ b/memcheck/tests/partial_load_dflt.stderr.exp-ppc64 +@@ -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) +diff --git a/memcheck/tests/partial_load_ok.stderr.exp-ppc64 b/memcheck/tests/partial_load_ok.stderr.exp-ppc64 +new file mode 100644 +index 0000000..cf32bcf +--- /dev/null ++++ b/memcheck/tests/partial_load_ok.stderr.exp-ppc64 +@@ -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) +diff -ur valgrind-3.14.0.orig/memcheck/tests/Makefile.in valgrind-3.14.0/memcheck/tests/Makefile.in +--- valgrind-3.14.0.orig/memcheck/tests/Makefile.in 2018-12-12 23:17:07.525501080 +0100 ++++ valgrind-3.14.0/memcheck/tests/Makefile.in 2018-12-12 23:18:13.404014757 +0100 +@@ -1546,8 +1546,10 @@ + 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 \ diff --git a/valgrind.spec b/valgrind.spec index a455c9e..1a9a64e 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -138,6 +138,7 @@ Patch18: valgrind-3.14.0-final_tidyup.patch # KDE#386945 Bogus memcheck errors on ppc64(le) when using strcmp # See also patches 10 to 16 (yes, there are this many...) Patch19: valgrind-3.14.0-ppc64-ldbrx.patch +Patch20: valgrind-3.14.0-ppc64-unaligned-words.patch %if %{build_multilib} # Ensure glibc{,-devel} is installed for both multilib arches @@ -290,6 +291,7 @@ Valgrind User Manual for details. %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 %build CC=gcc @@ -527,6 +529,7 @@ fi * Wed Dec 12 2018 Mark Wielaard - Add valgrind-3.14.0-final_tidyup.patch - Add valgrind-3.14.0-ppc64-ldbrx.patch +- Add valgrind-3.14.0-ppc64-unaligned-words.patch * Sat Dec 1 2018 Mark Wielaard - 3.14.0.5 - Add valgrind-3.14.0-wcsncmp.patch (#1645971)