diff --git a/.gitignore b/.gitignore index 25b6ceb..025b731 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/valgrind-3.10.0.tar.bz2 +SOURCES/valgrind-3.11.0.tar.bz2 diff --git a/.valgrind.metadata b/.valgrind.metadata index 33a21c5..d7087b5 100644 --- a/.valgrind.metadata +++ b/.valgrind.metadata @@ -1 +1 @@ -aec0b8cd042ec36c8cce4f6027b98627ab202f26 SOURCES/valgrind-3.10.0.tar.bz2 +340757e91d9e83591158fe8bb985c6b11bc53de5 SOURCES/valgrind-3.11.0.tar.bz2 diff --git a/SOURCES/valgrind-3.10-1-ppc64-sigpending.patch b/SOURCES/valgrind-3.10-1-ppc64-sigpending.patch deleted file mode 100644 index bffd8f5..0000000 --- a/SOURCES/valgrind-3.10-1-ppc64-sigpending.patch +++ /dev/null @@ -1,23 +0,0 @@ -commit b389b1806babbbf54cf92fe4c34c855a070a3cf4 -Author: mjw -Date: Wed Apr 22 15:29:03 2015 +0000 - - Enable rt_sigpending syscall on ppc64 linux. - - Patch from Thomas Huth - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15133 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c -index ba4116d..6f3c1f7 100644 ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c -@@ -988,7 +988,7 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_rt_sigaction, sys_rt_sigaction), // 173 - LINXY(__NR_rt_sigprocmask, sys_rt_sigprocmask), // 174 - --// _____(__NR_rt_sigpending, sys_rt_sigpending), // 175 -+ LINXY(__NR_rt_sigpending, sys_rt_sigpending), // 175 - LINXY(__NR_rt_sigtimedwait, sys_rt_sigtimedwait), // 176 - LINXY(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo), // 177 - LINX_(__NR_rt_sigsuspend, sys_rt_sigsuspend), // 178 diff --git a/SOURCES/valgrind-3.10-s390-spechelper.patch b/SOURCES/valgrind-3.10-s390-spechelper.patch deleted file mode 100644 index c4ffcab..0000000 --- a/SOURCES/valgrind-3.10-s390-spechelper.patch +++ /dev/null @@ -1,25 +0,0 @@ -commit d1d90974d5239151892742b11dd26cf12055aade -Author: cborntra -Date: Thu Feb 5 11:05:10 2015 +0000 - - Fix bug 343802. We need to handle one more special case in the spechelper - - - git-svn-id: svn://svn.valgrind.org/vex/trunk@3083 8f6e269a-dfd6-0310-a8e1-e2731360e62c - -diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c -index 78ca2ef..df1f24b 100644 ---- a/VEX/priv/guest_s390_helpers.c -+++ b/VEX/priv/guest_s390_helpers.c -@@ -1958,7 +1958,10 @@ guest_s390x_spechelper(const HChar *function_name, IRExpr **args, - return unop(Iop_1Uto32, binop(Iop_CmpNE64, cc_dep1, mkU64(0))); - } - if (cond == 4 || cond == 4 + 1) { -- return unop(Iop_1Uto32, binop(Iop_CmpLT64S, cc_dep1, mkU64(0))); -+ /* Special case cc_dep < 0. Only check the MSB to avoid bogus -+ memcheck complaints due to gcc magic. Fixes 343802 -+ */ -+ return unop(Iop_64to32, binop(Iop_Shr64, cc_dep1, mkU8(63))); - } - if (cond == 8 + 4 || cond == 8 + 4 + 1) { - return unop(Iop_1Uto32, binop(Iop_CmpLE64S, cc_dep1, mkU64(0))); diff --git a/SOURCES/valgrind-3.10.0-aarch64-dmb-sy.patch b/SOURCES/valgrind-3.10.0-aarch64-dmb-sy.patch deleted file mode 100644 index 7f1de8a..0000000 --- a/SOURCES/valgrind-3.10.0-aarch64-dmb-sy.patch +++ /dev/null @@ -1,24 +0,0 @@ -commit 5343bb38f44897fcb179b4756d75294719d75fbb -Author: mjw -Date: Sat Oct 11 19:13:35 2014 +0000 - - Bug 339858 arm64 recognize dmb sy. Data Memory Barrier full SYstem variant. - - git-svn-id: svn://svn.valgrind.org/vex/trunk@2975 8f6e269a-dfd6-0310-a8e1-e2731360e62c - -diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c -index 2aa145c..5ebe0a6 100644 ---- a/VEX/priv/guest_arm64_toIR.c -+++ b/VEX/priv/guest_arm64_toIR.c -@@ -5537,6 +5537,11 @@ Bool dis_ARM64_branch_etc(/*MB_OUT*/DisResult* dres, UInt insn, - DIP("isb\n"); - return True; - } -+ if (INSN(31,0) == 0xD5033FBF) { -+ stmt(IRStmt_MBE(Imbe_Fence)); -+ DIP("dmb sy\n"); -+ return True; -+ } - if (INSN(31,0) == 0xD5033BBF) { - stmt(IRStmt_MBE(Imbe_Fence)); - DIP("dmb ish\n"); diff --git a/SOURCES/valgrind-3.10.0-aarch64-fcvta.patch b/SOURCES/valgrind-3.10.0-aarch64-fcvta.patch deleted file mode 100644 index 8146c3b..0000000 --- a/SOURCES/valgrind-3.10.0-aarch64-fcvta.patch +++ /dev/null @@ -1,108 +0,0 @@ -commit f9fae2ab83f7263f8d58f83ddd58921cd5d1dca8 -Author: sewardj -Date: Thu Oct 30 23:10:45 2014 +0000 - - Implement FCVTAS W_S and FCVTAU W_S. Fixes #340509. - - - git-svn-id: svn://svn.valgrind.org/vex/trunk@2984 8f6e269a-dfd6-0310-a8e1-e2731360e62c - -diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c -index 2677211..acfdc02 100644 ---- a/VEX/priv/guest_arm64_toIR.c -+++ b/VEX/priv/guest_arm64_toIR.c -@@ -12189,6 +12189,7 @@ Bool dis_AdvSIMD_fp_to_from_int_conv(/*MB_OUT*/DisResult* dres, UInt insn) - /* 31 30 29 28 23 21 20 18 15 9 4 - sf 0 0 11110 type 1 rmode opcode 000000 n d - The first 3 bits are really "sf 0 S", but S is always zero. -+ Decode fields: sf,type,rmode,opcode - */ - # define INSN(_bMax,_bMin) SLICE_UInt(insn, (_bMax), (_bMin)) - if (INSN(30,29) != BITS2(0,0) -@@ -12205,7 +12206,7 @@ Bool dis_AdvSIMD_fp_to_from_int_conv(/*MB_OUT*/DisResult* dres, UInt insn) - UInt dd = INSN(4,0); - - // op = 000, 001 -- /* -------- FCVT{N,P,M,Z}{S,U} (scalar, integer) -------- */ -+ /* -------- FCVT{N,P,M,Z,A}{S,U} (scalar, integer) -------- */ - /* 30 23 20 18 15 9 4 - sf 00 11110 0x 1 00 000 000000 n d FCVTNS Rd, Fn (round to - sf 00 11110 0x 1 00 001 000000 n d FCVTNU Rd, Fn nearest) -@@ -12213,23 +12214,38 @@ Bool dis_AdvSIMD_fp_to_from_int_conv(/*MB_OUT*/DisResult* dres, UInt insn) - ---------------- 10 -------------- FCVTM-------- (round to -inf) - ---------------- 11 -------------- FCVTZ-------- (round to zero) - -+ ---------------- 00 100 ---------- FCVTAS------- (nearest, ties away) -+ ---------------- 00 101 ---------- FCVTAU------- (nearest, ties away) -+ - Rd is Xd when sf==1, Wd when sf==0 - Fn is Dn when x==1, Sn when x==0 - 20:19 carry the rounding mode, using the same encoding as FPCR - */ -- if (ty <= X01 && (op == BITS3(0,0,0) || op == BITS3(0,0,1))) { -+ if (ty <= X01 -+ && ( ((op == BITS3(0,0,0) || op == BITS3(0,0,1)) && True) -+ || ((op == BITS3(1,0,0) || op == BITS3(1,0,1)) && rm == BITS2(0,0)) -+ ) -+ ) { - Bool isI64 = bitSF == 1; - Bool isF64 = (ty & 1) == 1; - Bool isU = (op & 1) == 1; - /* Decide on the IR rounding mode to use. */ - IRRoundingMode irrm = 8; /*impossible*/ - HChar ch = '?'; -- switch (rm) { -- case BITS2(0,0): ch = 'n'; irrm = Irrm_NEAREST; break; -- case BITS2(0,1): ch = 'p'; irrm = Irrm_PosINF; break; -- case BITS2(1,0): ch = 'm'; irrm = Irrm_NegINF; break; -- case BITS2(1,1): ch = 'z'; irrm = Irrm_ZERO; break; -- default: vassert(0); -+ if (op == BITS3(0,0,0) || op == BITS3(0,0,1)) { -+ switch (rm) { -+ case BITS2(0,0): ch = 'n'; irrm = Irrm_NEAREST; break; -+ case BITS2(0,1): ch = 'p'; irrm = Irrm_PosINF; break; -+ case BITS2(1,0): ch = 'm'; irrm = Irrm_NegINF; break; -+ case BITS2(1,1): ch = 'z'; irrm = Irrm_ZERO; break; -+ default: vassert(0); -+ } -+ } else { -+ vassert(op == BITS3(1,0,0) || op == BITS3(1,0,1)); -+ switch (rm) { -+ case BITS2(0,0): ch = 'a'; irrm = Irrm_NEAREST; break; -+ default: vassert(0); -+ } - } - vassert(irrm != 8); - /* Decide on the conversion primop, based on the source size, -@@ -12254,9 +12270,11 @@ Bool dis_AdvSIMD_fp_to_from_int_conv(/*MB_OUT*/DisResult* dres, UInt insn) - (iop == Iop_F32toI32S && irrm == Irrm_ZERO) /* FCVTZS Wd,Sn */ - || (iop == Iop_F32toI32S && irrm == Irrm_NegINF) /* FCVTMS Wd,Sn */ - || (iop == Iop_F32toI32S && irrm == Irrm_PosINF) /* FCVTPS Wd,Sn */ -+ || (iop == Iop_F32toI32S && irrm == Irrm_NEAREST)/* FCVT{A,N}S W,S */ - /* F32toI32U */ - || (iop == Iop_F32toI32U && irrm == Irrm_ZERO) /* FCVTZU Wd,Sn */ - || (iop == Iop_F32toI32U && irrm == Irrm_NegINF) /* FCVTMU Wd,Sn */ -+ || (iop == Iop_F32toI32U && irrm == Irrm_NEAREST)/* FCVT{A,N}U W,S */ - /* F32toI64S */ - || (iop == Iop_F32toI64S && irrm == Irrm_ZERO) /* FCVTZS Xd,Sn */ - /* F32toI64U */ -commit 9f69352a36003c35cfe8ffe01ba8ef0f830b4198 -Author: mjw -Date: Tue Nov 4 15:30:42 2014 +0000 - - Bug 340632 arm64: unhandled instruction fcvtas - - git-svn-id: svn://svn.valgrind.org/vex/trunk@2987 8f6e269a-dfd6-0310-a8e1-e2731360e62c - -diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c -index 4229d6a..1426d00 100644 ---- a/VEX/priv/guest_arm64_toIR.c -+++ b/VEX/priv/guest_arm64_toIR.c -@@ -12304,6 +12304,7 @@ Bool dis_AdvSIMD_fp_to_from_int_conv(/*MB_OUT*/DisResult* dres, UInt insn) - || (iop == Iop_F64toI64S && irrm == Irrm_ZERO) /* FCVTZS Xd,Dn */ - || (iop == Iop_F64toI64S && irrm == Irrm_NegINF) /* FCVTMS Xd,Dn */ - || (iop == Iop_F64toI64S && irrm == Irrm_PosINF) /* FCVTPS Xd,Dn */ -+ || (iop == Iop_F64toI64S && irrm == Irrm_NEAREST) /* FCVT{A,N}S Xd,Dn */ - /* F64toI64U */ - || (iop == Iop_F64toI64U && irrm == Irrm_ZERO) /* FCVTZU Xd,Dn */ - || (iop == Iop_F64toI64U && irrm == Irrm_NegINF) /* FCVTMU Xd,Dn */ diff --git a/SOURCES/valgrind-3.10.0-aarch64-frint.patch b/SOURCES/valgrind-3.10.0-aarch64-frint.patch deleted file mode 100644 index 41b67bb..0000000 --- a/SOURCES/valgrind-3.10.0-aarch64-frint.patch +++ /dev/null @@ -1,33 +0,0 @@ -commit 35343350beb699e87bae86a5466895de6d9827e9 -Author: sewardj -Date: Thu Oct 30 15:37:16 2014 +0000 - - Implement frintx d_d and s_s. Fixes #339926. - - - git-svn-id: svn://svn.valgrind.org/vex/trunk@2981 8f6e269a-dfd6-0310-a8e1-e2731360e62c - -diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c -index 7f22f13..0377139 100644 ---- a/VEX/priv/guest_arm64_toIR.c -+++ b/VEX/priv/guest_arm64_toIR.c -@@ -11921,7 +11921,7 @@ Bool dis_AdvSIMD_fp_data_proc_1_source(/*MB_OUT*/DisResult* dres, UInt insn) - 011 zero (FRINTZ) - 000 tieeven - 100 tieaway (FRINTA) -- !! FIXME KLUDGED !! -- 110 per FPCR + "exact = TRUE" -+ 110 per FPCR + "exact = TRUE" (FRINTX) - 101 unallocated - */ - Bool isD = (ty & 1) == 1; -@@ -11935,6 +11935,10 @@ Bool dis_AdvSIMD_fp_data_proc_1_source(/*MB_OUT*/DisResult* dres, UInt insn) - case BITS3(0,0,1): ch = 'p'; irrmE = mkU32(Irrm_PosINF); break; - // The following is a kludge. Should be: Irrm_NEAREST_TIE_AWAY_0 - case BITS3(1,0,0): ch = 'a'; irrmE = mkU32(Irrm_NEAREST); break; -+ // I am unsure about the following, due to the "integral exact" -+ // description in the manual. What does it mean? -+ case BITS3(1,1,0): -+ ch = 'x'; irrmE = mkexpr(mk_get_IR_rounding_mode()); break; - default: break; - } - if (irrmE) { diff --git a/SOURCES/valgrind-3.10.0-aarch64-syscalls.patch b/SOURCES/valgrind-3.10.0-aarch64-syscalls.patch deleted file mode 100644 index 55475c3..0000000 --- a/SOURCES/valgrind-3.10.0-aarch64-syscalls.patch +++ /dev/null @@ -1,275 +0,0 @@ -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index e3f736b..dd13bda 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -953,6 +953,7 @@ static SyscallTableEntry syscall_main_table[] = { - LINX_(__NR_setresuid, sys_setresuid), // 147 - LINXY(__NR_getresuid, sys_getresuid), // 148 - LINXY(__NR_getresgid, sys_getresgid), // 150 -+ GENXY(__NR_times, sys_times), // 153 - GENX_(__NR_setpgid, sys_setpgid), // 154 - GENX_(__NR_getpgid, sys_getpgid), // 155 - GENXY(__NR_uname, sys_newuname), // 160 -@@ -1068,7 +1069,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ - //ZZ GENX_(__NR_rmdir, sys_rmdir), // 40 - //ZZ LINXY(__NR_pipe, sys_pipe), // 42 --//ZZ GENXY(__NR_times, sys_times), // 43 - //ZZ // GENX_(__NR_prof, sys_ni_syscall), // 44 - - //ZZ LINX_(__NR_setgid, sys_setgid16), // 46 -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index dd13bda..045b9b9 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -956,6 +956,8 @@ static SyscallTableEntry syscall_main_table[] = { - GENXY(__NR_times, sys_times), // 153 - GENX_(__NR_setpgid, sys_setpgid), // 154 - GENX_(__NR_getpgid, sys_getpgid), // 155 -+ GENX_(__NR_getsid, sys_getsid), // 156 -+ GENX_(__NR_setsid, sys_setsid), // 157 - GENXY(__NR_uname, sys_newuname), // 160 - GENXY(__NR_getrlimit, sys_old_getrlimit), // 163 - GENX_(__NR_setrlimit, sys_setrlimit), // 164 -@@ -1092,7 +1094,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ GENX_(__NR_getppid, sys_getppid), // 64 - //ZZ - //ZZ GENX_(__NR_getpgrp, sys_getpgrp), // 65 --//ZZ GENX_(__NR_setsid, sys_setsid), // 66 - //ZZ LINXY(__NR_sigaction, sys_sigaction), // 67 - //ZZ //zz // (__NR_sgetmask, sys_sgetmask), // 68 */* (ANSI C) - //ZZ //zz // (__NR_ssetmask, sys_ssetmask), // 69 */* (ANSI C) -@@ -1176,7 +1177,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ GENX_(__NR_flock, sys_flock), // 143 - //ZZ GENX_(__NR_msync, sys_msync), // 144 - //ZZ --//ZZ GENX_(__NR_getsid, sys_getsid), // 147 - //ZZ GENX_(__NR_fdatasync, sys_fdatasync), // 148 - //ZZ LINXY(__NR__sysctl, sys_sysctl), // 149 - //ZZ -commit 92379dfe8ab904b8f7ecfa2a6c9094cf3cc2481d -Author: sewardj -Date: Thu Oct 30 13:54:24 2014 +0000 - - Bug 339940 - (arm64/aarch64) unhandled syscall: 83 (sys_fdatasync) + patch - Patch from David Abdurachmanov - - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14675 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index 045b9b9..69a997c 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -922,6 +922,7 @@ static SyscallTableEntry syscall_main_table[] = { - - LINX_(__NR_utimensat, sys_utimensat), // 88 - GENX_(__NR_fsync, sys_fsync), // 82 -+ GENX_(__NR_fdatasync, sys_fdatasync), // 83 - LINXY(__NR_timerfd_create, sys_timerfd_create), // 85 - LINXY(__NR_timerfd_settime, sys_timerfd_settime), // 86 - LINXY(__NR_timerfd_gettime, sys_timerfd_gettime), // 87 -@@ -1177,7 +1178,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ GENX_(__NR_flock, sys_flock), // 143 - //ZZ GENX_(__NR_msync, sys_msync), // 144 - //ZZ --//ZZ GENX_(__NR_fdatasync, sys_fdatasync), // 148 - //ZZ LINXY(__NR__sysctl, sys_sysctl), // 149 - //ZZ - //ZZ GENX_(__NR_munlock, sys_munlock), // 151 - -commit 20a8d68dec8168d8a3df1b73f8128212344bcab0 -Author: sewardj -Date: Thu Oct 30 14:11:32 2014 +0000 - - Bug 340028 - unhandled syscalls for arm64 (msync, pread64, setreuid - and setregid) - Patch from dimitry@google.com. - - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14676 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index 69a997c..d0fe78d 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -910,6 +910,7 @@ static SyscallTableEntry syscall_main_table[] = { - GENX_(__NR_write, sys_write), // 64 - GENXY(__NR_readv, sys_readv), // 65 - GENX_(__NR_writev, sys_writev), // 66 -+ GENXY(__NR_pread64, sys_pread64), // 67 - GENX_(__NR_pwrite64, sys_pwrite64), // 68 - LINX_(__NR_pselect6, sys_pselect6), // 72 - LINXY(__NR_ppoll, sys_ppoll), // 73 -@@ -951,6 +952,8 @@ static SyscallTableEntry syscall_main_table[] = { - PLAX_(__NR_rt_sigreturn, sys_rt_sigreturn), // 139 - GENX_(__NR_setpriority, sys_setpriority), // 140 - GENX_(__NR_getpriority, sys_getpriority), // 141 -+ GENX_(__NR_setregid, sys_setregid), // 143 -+ GENX_(__NR_setreuid, sys_setreuid), // 145 - LINX_(__NR_setresuid, sys_setresuid), // 147 - LINXY(__NR_getresuid, sys_getresuid), // 148 - LINXY(__NR_getresgid, sys_getresgid), // 150 -@@ -1017,6 +1020,7 @@ static SyscallTableEntry syscall_main_table[] = { - PLAX_(__NR3264_fadvise64, sys_fadvise64), // 223 - - GENXY(__NR_mprotect, sys_mprotect), // 226 -+ GENX_(__NR_msync, sys_msync), // 227 - GENX_(__NR_mlock, sys_mlock), // 228 - GENX_(__NR_mlockall, sys_mlockall), // 230 - GENX_(__NR_madvise, sys_madvise), // 233 -@@ -1099,8 +1103,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ //zz // (__NR_sgetmask, sys_sgetmask), // 68 */* (ANSI C) - //ZZ //zz // (__NR_ssetmask, sys_ssetmask), // 69 */* (ANSI C) - //ZZ //zz --//ZZ LINX_(__NR_setreuid, sys_setreuid16), // 70 --//ZZ LINX_(__NR_setregid, sys_setregid16), // 71 - //ZZ PLAX_(__NR_sigsuspend, sys_sigsuspend), // 72 - //ZZ LINXY(__NR_sigpending, sys_sigpending), // 73 - //ZZ //zz // (__NR_sethostname, sys_sethostname), // 74 */* -@@ -1176,7 +1178,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ GENXY(__NR_getdents, sys_getdents), // 141 - //ZZ GENX_(__NR__newselect, sys_select), // 142 - //ZZ GENX_(__NR_flock, sys_flock), // 143 --//ZZ GENX_(__NR_msync, sys_msync), // 144 - //ZZ - //ZZ LINXY(__NR__sysctl, sys_sysctl), // 149 - //ZZ -@@ -1207,7 +1208,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ LINXY(__NR_rt_sigpending, sys_rt_sigpending), // 176 - //ZZ LINXY(__NR_rt_sigtimedwait, sys_rt_sigtimedwait),// 177 - //ZZ --//ZZ GENXY(__NR_pread64, sys_pread64), // 180 - //ZZ LINX_(__NR_chown, sys_chown16), // 182 - //ZZ - //ZZ LINX_(__NR_capset, sys_capset), // 185 - -commit f78d99007454b34d0619cabc99c3f66613b05285 -Author: sewardj -Date: Thu Oct 30 14:28:14 2014 +0000 - - Bug 340236 - 4 unhandled syscalls on aarch64/arm64: - mknodat (33), fchdir (50), chroot (51), fchownat (54) - Patch from Miroslav Franc (mfranc@redhat.com) - - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14677 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index d0fe78d..54238ed 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -880,6 +880,7 @@ static SyscallTableEntry syscall_main_table[] = { - LINX_(__NR_inotify_add_watch, sys_inotify_add_watch), // 27 - LINX_(__NR_inotify_rm_watch, sys_inotify_rm_watch), // 28 - LINXY(__NR_ioctl, sys_ioctl), // 29 -+ LINX_(__NR_mknodat, sys_mknodat), // 33 - LINX_(__NR_mkdirat, sys_mkdirat), // 34 - LINX_(__NR_unlinkat, sys_unlinkat), // 35 - LINX_(__NR_symlinkat, sys_symlinkat), // 36 -@@ -896,7 +897,10 @@ static SyscallTableEntry syscall_main_table[] = { - LINX_(__NR_fallocate, sys_fallocate), // 47 - LINX_(__NR_faccessat, sys_faccessat), // 48 - GENX_(__NR_chdir, sys_chdir), // 49 -+ GENX_(__NR_fchdir, sys_fchdir), // 50 -+ GENX_(__NR_chroot, sys_chroot), // 51 - LINX_(__NR_fchmodat, sys_fchmodat), // 53 -+ LINX_(__NR_fchownat, sys_fchownat), // 54 - LINXY(__NR_openat, sys_openat), // 56 - GENXY(__NR_close, sys_close), // 57 - LINXY(__NR_pipe2, sys_pipe2), // 59 -@@ -1093,7 +1097,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ // GENX_(__NR_ulimit, sys_ni_syscall), // 58 - //ZZ //zz // (__NR_oldolduname, sys_olduname), // 59 Linux -- obsolete - //ZZ //zz --//ZZ GENX_(__NR_chroot, sys_chroot), // 61 - //ZZ //zz // (__NR_ustat, sys_ustat) // 62 SVr4 -- deprecated - //ZZ GENXY(__NR_dup2, sys_dup2), // 63 - //ZZ GENX_(__NR_getppid, sys_getppid), // 64 -@@ -1165,7 +1168,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ //zz // Nb: get_kernel_syms() was removed 2.4-->2.6 - //ZZ // GENX_(__NR_get_kernel_syms, sys_ni_syscall), // 130 - //ZZ GENX_(__NR_getpgid, sys_getpgid), // 132 --//ZZ GENX_(__NR_fchdir, sys_fchdir), // 133 - //ZZ //zz // (__NR_bdflush, sys_bdflush), // 134 */Linux - //ZZ //zz - //ZZ //zz // (__NR_sysfs, sys_sysfs), // 135 SVr4 -@@ -1329,8 +1331,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ LINX_(__NR_inotify_init, sys_inotify_init), // 291 - //ZZ // LINX_(__NR_migrate_pages, sys_migrate_pages), // 294 - //ZZ --//ZZ LINX_(__NR_mknodat, sys_mknodat), // 297 --//ZZ LINX_(__NR_fchownat, sys_fchownat), // 298 - //ZZ LINX_(__NR_futimesat, sys_futimesat), // 326 on arm - //ZZ - //ZZ PLAXY(__NR_fstatat64, sys_fstatat64), // 300 - -commit 076d5f343c3753ea0db86701f922b7c84a83ec38 -Author: mjw -Date: Tue Nov 4 13:43:21 2014 +0000 - - Bug 340630 arm64: fchmod (52) and fchown (55) syscalls not recognized. - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14686 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index 54238ed..f8a59c1 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -899,8 +899,10 @@ static SyscallTableEntry syscall_main_table[] = { - GENX_(__NR_chdir, sys_chdir), // 49 - GENX_(__NR_fchdir, sys_fchdir), // 50 - GENX_(__NR_chroot, sys_chroot), // 51 -+ GENX_(__NR_fchmod, sys_fchmod), // 52 - LINX_(__NR_fchmodat, sys_fchmodat), // 53 - LINX_(__NR_fchownat, sys_fchownat), // 54 -+ GENX_(__NR_fchown, sys_fchown), // 55 - LINXY(__NR_openat, sys_openat), // 56 - GENXY(__NR_close, sys_close), // 57 - LINXY(__NR_pipe2, sys_pipe2), // 59 -@@ -1129,7 +1131,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ GENXY(__NR_munmap, sys_munmap), // 91 - //ZZ GENX_(__NR_truncate, sys_truncate), // 92 - //ZZ GENX_(__NR_ftruncate, sys_ftruncate), // 93 --//ZZ GENX_(__NR_fchmod, sys_fchmod), // 94 - //ZZ - //ZZ LINX_(__NR_fchown, sys_fchown16), // 95 - //ZZ // GENX_(__NR_profil, sys_ni_syscall), // 98 -@@ -1237,7 +1238,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ - //ZZ GENXY(__NR_getgroups32, sys_getgroups), // 205 - //ZZ GENX_(__NR_setgroups32, sys_setgroups), // 206 --//ZZ GENX_(__NR_fchown32, sys_fchown), // 207 - //ZZ LINX_(__NR_setresuid32, sys_setresuid), // 208 - //ZZ LINXY(__NR_getresuid32, sys_getresuid), // 209 - //ZZ -commit 2562dd489ed5ff9d5eb73f7d2957eb3b2c5dc801 -Author: mjw -Date: Thu Nov 13 13:03:25 2014 +0000 - - Bug 340922 arm64: unhandled getgroups/setgroups syscalls. - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14716 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index 59e1cf6..cd27ad2 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -968,6 +968,8 @@ static SyscallTableEntry syscall_main_table[] = { - GENX_(__NR_getpgid, sys_getpgid), // 155 - GENX_(__NR_getsid, sys_getsid), // 156 - GENX_(__NR_setsid, sys_setsid), // 157 -+ GENXY(__NR_getgroups, sys_getgroups), // 158 -+ GENX_(__NR_setgroups, sys_setgroups), // 159 - GENXY(__NR_uname, sys_newuname), // 160 - GENXY(__NR_getrlimit, sys_old_getrlimit), // 163 - GENX_(__NR_setrlimit, sys_setrlimit), // 164 -@@ -1237,8 +1239,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ GENX_(__NR_setreuid32, sys_setreuid), // 203 - //ZZ GENX_(__NR_setregid32, sys_setregid), // 204 - //ZZ --//ZZ GENXY(__NR_getgroups32, sys_getgroups), // 205 --//ZZ GENX_(__NR_setgroups32, sys_setgroups), // 206 - //ZZ LINX_(__NR_setresuid32, sys_setresuid), // 208 - //ZZ LINXY(__NR_getresuid32, sys_getresuid), // 209 - //ZZ diff --git a/SOURCES/valgrind-3.10.0-fcvtmu.patch b/SOURCES/valgrind-3.10.0-fcvtmu.patch deleted file mode 100644 index 617b088..0000000 --- a/SOURCES/valgrind-3.10.0-fcvtmu.patch +++ /dev/null @@ -1,21 +0,0 @@ -commit 9a20b6daf975d94f24d8c2688eb0159c7e651ff6 -Author: sewardj -Date: Thu Oct 30 15:54:53 2014 +0000 - - Implement fcvtmu x_d. Fixes #339927. - - - git-svn-id: svn://svn.valgrind.org/vex/trunk@2982 8f6e269a-dfd6-0310-a8e1-e2731360e62c - -diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c -index 0377139..23aea80 100644 ---- a/VEX/priv/guest_arm64_toIR.c -+++ b/VEX/priv/guest_arm64_toIR.c -@@ -12241,6 +12241,7 @@ Bool dis_AdvSIMD_fp_to_from_int_conv(/*MB_OUT*/DisResult* dres, UInt insn) - || (iop == Iop_F64toI64S && irrm == Irrm_PosINF) /* FCVTPS Xd,Dn */ - /* F64toI64U */ - || (iop == Iop_F64toI64U && irrm == Irrm_ZERO) /* FCVTZU Xd,Dn */ -+ || (iop == Iop_F64toI64U && irrm == Irrm_NegINF) /* FCVTMU Xd,Dn */ - || (iop == Iop_F64toI64U && irrm == Irrm_PosINF) /* FCVTPU Xd,Dn */ - ) { - /* validated */ diff --git a/SOURCES/valgrind-3.10.0-old-ppc32-instr-magic.patch b/SOURCES/valgrind-3.10.0-old-ppc32-instr-magic.patch deleted file mode 100644 index 8252e33..0000000 --- a/SOURCES/valgrind-3.10.0-old-ppc32-instr-magic.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c -index adabf64..8f7e4aa 100644 ---- a/VEX/priv/guest_ppc_toIR.c -+++ b/VEX/priv/guest_ppc_toIR.c -@@ -18783,10 +18783,26 @@ DisResult disInstr_PPC_WRK ( - UInt word2 = mode64 ? 0x78006800 : 0x5400683E; - UInt word3 = mode64 ? 0x7800E802 : 0x5400E83E; - UInt word4 = mode64 ? 0x78009802 : 0x5400983E; -+ Bool is_special_preamble = False; - if (getUIntPPCendianly(code+ 0) == word1 && - getUIntPPCendianly(code+ 4) == word2 && - getUIntPPCendianly(code+ 8) == word3 && - getUIntPPCendianly(code+12) == word4) { -+ is_special_preamble = True; -+ } else if (! mode64 && -+ getUIntPPCendianly(code+ 0) == 0x54001800 && -+ getUIntPPCendianly(code+ 4) == 0x54006800 && -+ getUIntPPCendianly(code+ 8) == 0x5400E800 && -+ getUIntPPCendianly(code+12) == 0x54009800) { -+ static Bool reported = False; -+ if (!reported) { -+ vex_printf("disInstr(ppc): old ppc32 instruction magic detected. Code might clobber r0.\n"); -+ vex_printf("disInstr(ppc): source needs to be recompiled against latest valgrind.h.\n"); -+ reported = True; -+ } -+ is_special_preamble = True; -+ } -+ if (is_special_preamble) { - /* Got a "Special" instruction preamble. Which one is it? */ - if (getUIntPPCendianly(code+16) == 0x7C210B78 /* or 1,1,1 */) { - /* %R3 = client_request ( %R4 ) */ diff --git a/SOURCES/valgrind-3.10.1-aarch64-syscalls.patch b/SOURCES/valgrind-3.10.1-aarch64-syscalls.patch deleted file mode 100644 index 0860b47..0000000 --- a/SOURCES/valgrind-3.10.1-aarch64-syscalls.patch +++ /dev/null @@ -1,214 +0,0 @@ -commit 143af81290bd49c76c46267d64baea896df50c40 -Author: sewardj -Date: Mon Nov 24 16:19:48 2014 +0000 - - Enable sys_flock on arm64-linux. - - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14777 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index cd27ad2..d90dcb6 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -880,6 +880,7 @@ static SyscallTableEntry syscall_main_table[] = { - LINX_(__NR_inotify_add_watch, sys_inotify_add_watch), // 27 - LINX_(__NR_inotify_rm_watch, sys_inotify_rm_watch), // 28 - LINXY(__NR_ioctl, sys_ioctl), // 29 -+ GENX_(__NR_flock, sys_flock), // 32 - LINX_(__NR_mknodat, sys_mknodat), // 33 - LINX_(__NR_mkdirat, sys_mkdirat), // 34 - LINX_(__NR_unlinkat, sys_unlinkat), // 35 -@@ -1183,7 +1184,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ LINXY(__NR__llseek, sys_llseek), // 140 - //ZZ GENXY(__NR_getdents, sys_getdents), // 141 - //ZZ GENX_(__NR__newselect, sys_select), // 142 --//ZZ GENX_(__NR_flock, sys_flock), // 143 - //ZZ - //ZZ LINXY(__NR__sysctl, sys_sysctl), // 149 - //ZZ -commit 9ae3282faa77f89c43fdd97186875ff8da90fff9 -Author: sewardj -Date: Thu Feb 5 15:28:28 2015 +0000 - - Enable sys_mbind, sys_get_mempolicy, sys_set_mempolicy on arm64-linux. - Patch from Hideaki Kimura (hideaki.kimura@gmail.com). Fixes #342038. - - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14907 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index a72392f..16df466 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -1032,6 +1032,9 @@ static SyscallTableEntry syscall_main_table[] = { - GENX_(__NR_mlock, sys_mlock), // 228 - GENX_(__NR_mlockall, sys_mlockall), // 230 - GENX_(__NR_madvise, sys_madvise), // 233 -+ LINX_(__NR_mbind, sys_mbind), // 235 -+ LINXY(__NR_get_mempolicy, sys_get_mempolicy), // 236 -+ LINX_(__NR_set_mempolicy, sys_set_mempolicy), // 237 - GENXY(__NR_wait4, sys_wait4), // 260 - - LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 270 -commit 9ee89cddf19b6ab8f45e8546ef73d3e4e997ad2f -Author: mjw -Date: Sat Feb 7 22:36:48 2015 +0000 - - Bug 343732 - Unhandled syscall 144 (setgid) on aarch64. - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14916 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index 16df466..ed66227 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -959,6 +959,7 @@ static SyscallTableEntry syscall_main_table[] = { - GENX_(__NR_setpriority, sys_setpriority), // 140 - GENX_(__NR_getpriority, sys_getpriority), // 141 - GENX_(__NR_setregid, sys_setregid), // 143 -+ GENX_(__NR_setgid, sys_setgid), // 144 - GENX_(__NR_setreuid, sys_setreuid), // 145 - LINX_(__NR_setresuid, sys_setresuid), // 147 - LINXY(__NR_getresuid, sys_getresuid), // 148 -@@ -1091,7 +1092,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ LINXY(__NR_pipe, sys_pipe), // 42 - //ZZ // GENX_(__NR_prof, sys_ni_syscall), // 44 - --//ZZ LINX_(__NR_setgid, sys_setgid16), // 46 - //ZZ LINX_(__NR_getgid, sys_getgid16), // 47 - //ZZ //zz // (__NR_signal, sys_signal), // 48 */* (ANSI C) - //ZZ LINX_(__NR_geteuid, sys_geteuid16), // 49 -commit ae70db15b2f8e013bd8a3874d3d6716eb5b8e48c -Author: mjw -Date: Sat Feb 7 22:58:51 2015 +0000 - - Bug 343733 Unhandled syscall 187 (msgctl and related) on aarch64 - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14917 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index ed66227..c23e6f7 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -992,6 +992,10 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_mq_timedreceive, sys_mq_timedreceive), // 183 - LINX_(__NR_mq_notify, sys_mq_notify), // 184 - LINXY(__NR_mq_getsetattr, sys_mq_getsetattr), // 185 -+ LINX_(__NR_msgget, sys_msgget), // 186 -+ LINXY(__NR_msgctl, sys_msgctl), // 187 -+ LINXY(__NR_msgrcv, sys_msgrcv), // 188 -+ LINX_(__NR_msgsnd, sys_msgsnd), // 189 - LINX_(__NR_semget, sys_semget), // 190 - LINXY(__NR_semctl, sys_semctl), // 191 - LINX_(__NR_semtimedop, sys_semtimedop), // 192 -@@ -1323,10 +1327,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ LINXY(__NR_recvfrom, sys_recvfrom), // 292 - //ZZ LINX_(__NR_semget, sys_semget), // 299 - //ZZ LINXY(__NR_semctl, sys_semctl), // 300 --//ZZ LINX_(__NR_msgget, sys_msgget), --//ZZ LINX_(__NR_msgsnd, sys_msgsnd), --//ZZ LINXY(__NR_msgrcv, sys_msgrcv), --//ZZ LINXY(__NR_msgctl, sys_msgctl), // 304 - //ZZ - //ZZ LINX_(__NR_request_key, sys_request_key), // 287 - //ZZ // LINX_(__NR_ioprio_set, sys_ioprio_set), // 289 -commit c79fe53e9e31d5c8e5d2ad3a0943b21e84129ccb -Author: mjw -Date: Tue Feb 10 13:39:04 2015 +0000 - - Bug #344007 accept4 syscall unhandled on arm64 (242) and ppc64 (344) - - ppc64 might fall back to socketcall in some cases, but arm64 always uses - accept4 syscall directly. Some (confusing) background on when/how glibc - (wrongly) decides to use a direct accept4 or the socketcall system call: - https://sourceware.org/ml/libc-alpha/2013-12/msg00014.html - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14926 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index c23e6f7..1f9670a 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -1040,6 +1040,7 @@ static SyscallTableEntry syscall_main_table[] = { - LINX_(__NR_mbind, sys_mbind), // 235 - LINXY(__NR_get_mempolicy, sys_get_mempolicy), // 236 - LINX_(__NR_set_mempolicy, sys_set_mempolicy), // 237 -+ LINXY(__NR_accept4, sys_accept4), // 242 - GENXY(__NR_wait4, sys_wait4), // 260 - - LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 270 -@@ -1379,8 +1380,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 363 - //ZZ LINXY(__NR_perf_event_open, sys_perf_event_open), // 364 - //ZZ --//ZZ LINXY(__NR_accept4, sys_accept4), // 366 --//ZZ - //ZZ LINXY(__NR_name_to_handle_at, sys_name_to_handle_at),// 370 - //ZZ LINXY(__NR_open_by_handle_at, sys_open_by_handle_at),// 371 - //ZZ LINXY(__NR_clock_adjtime, sys_clock_adjtime) // 372 -commit 52e770f94992d381dc1dbe104770ebc8cb9937c4 -Author: mjw -Date: Wed Feb 18 14:23:17 2015 +0000 - - Bug #344307 2 unhandled syscalls on aarch64/arm64: umount2(39), mount (40) - - Reporter: Branislav Blaskovic, bblaskov@redhat.com - Patch: Robin Hack, rhack@redhat.com - Test: Miloš Prchlík, mprchlik@redhat.com - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14944 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index 7b7e824..fc6ca08 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -887,6 +887,9 @@ static SyscallTableEntry syscall_main_table[] = { - LINX_(__NR_linkat, sys_linkat), // 37 - LINX_(__NR_renameat, sys_renameat), // 38 - -+ LINX_(__NR_umount2, sys_umount), // 39 -+ LINX_(__NR_mount, sys_mount), // 40 -+ - // FIXME IS THIS CORRECT? it may well not be. - GENXY(__NR3264_statfs, sys_statfs), // 43 - GENXY(__NR3264_fstatfs, sys_fstatfs), // 44 -@@ -1075,7 +1078,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ LINX_(__NR_lseek, sys_lseek), // 19 - //ZZ - //ZZ GENX_(__NR_getpid, sys_getpid), // 20 --//ZZ LINX_(__NR_mount, sys_mount), // 21 - //ZZ LINX_(__NR_umount, sys_oldumount), // 22 - //ZZ LINX_(__NR_setuid, sys_setuid16), // 23 ## P - //ZZ LINX_(__NR_getuid, sys_getuid16), // 24 ## P -@@ -1107,7 +1109,6 @@ static SyscallTableEntry syscall_main_table[] = { - //ZZ - //ZZ LINX_(__NR_getegid, sys_getegid16), // 50 - //ZZ GENX_(__NR_acct, sys_acct), // 51 --//ZZ LINX_(__NR_umount2, sys_umount), // 52 - //ZZ // GENX_(__NR_lock, sys_ni_syscall), // 53 - //ZZ - //ZZ LINXY(__NR_fcntl, sys_fcntl), // 55 -commit 53d91c0f31aba5d1c9a896b4fdb0ef5f7eca47cf -Author: mjw -Date: Sun Aug 9 22:37:52 2015 +0000 - - Bug #351140 arm64 syscalls setuid (146) and setresgid (149) not implemented. - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15517 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index ee224ca..10872fa 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -957,8 +957,10 @@ static SyscallTableEntry syscall_main_table[] = { - GENX_(__NR_setregid, sys_setregid), // 143 - GENX_(__NR_setgid, sys_setgid), // 144 - GENX_(__NR_setreuid, sys_setreuid), // 145 -+ GENX_(__NR_setuid, sys_setuid), // 146 - LINX_(__NR_setresuid, sys_setresuid), // 147 - LINXY(__NR_getresuid, sys_getresuid), // 148 -+ LINX_(__NR_setresgid, sys_setresgid), // 149 - LINXY(__NR_getresgid, sys_getresgid), // 150 - GENXY(__NR_times, sys_times), // 153 - GENX_(__NR_setpgid, sys_setpgid), // 154 diff --git a/SOURCES/valgrind-3.10.1-di_notify_mmap.patch b/SOURCES/valgrind-3.10.1-di_notify_mmap.patch deleted file mode 100644 index f6aa612..0000000 --- a/SOURCES/valgrind-3.10.1-di_notify_mmap.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- valgrind-3.10.1/coregrind/m_debuginfo/debuginfo.c.orig 2015-07-06 00:21:14.252904153 +0200 -+++ valgrind-3.10.1/coregrind/m_debuginfo/debuginfo.c 2015-07-06 00:22:30.975591973 +0200 -@@ -925,7 +925,7 @@ - - /* Note the details about the mapping. */ - struct _DebugInfoMapping map; -- map.avma = a; -+ map.avma = seg->start; - map.size = seg->end + 1 - seg->start; - map.foff = seg->offset; - map.rx = is_rx_map; diff --git a/SOURCES/valgrind-3.10.1-kernel-4.0.patch b/SOURCES/valgrind-3.10.1-kernel-4.0.patch deleted file mode 100644 index 65b9ed0..0000000 --- a/SOURCES/valgrind-3.10.1-kernel-4.0.patch +++ /dev/null @@ -1,96 +0,0 @@ -commit bf803555d10b5b4c9223b24bf13845ee88d8f3b5 -Author: cborntra -Date: Mon Feb 23 20:19:03 2015 +0000 - - Fix configure for Linux kernel >= 4.0-rc1 - In addition raise the minimal Linux version to 2.6 as there is almost - no test coverage for 2.4 and 2.6 was released in 2003. - - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14955 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/configure.ac b/configure.ac -index fe2897b..ebb0798 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -325,20 +325,14 @@ case "${host_os}" in - kernel=`uname -r` - - case "${kernel}" in -- 2.6.*|3.*) -- AC_MSG_RESULT([2.6.x/3.x family (${kernel})]) -- AC_DEFINE([KERNEL_2_6], 1, [Define to 1 if you're using Linux 2.6.x or Linux 3.x]) -- ;; -- -- 2.4.*) -- AC_MSG_RESULT([2.4 family (${kernel})]) -- AC_DEFINE([KERNEL_2_4], 1, [Define to 1 if you're using Linux 2.4.x]) -- ;; -- -- *) -+ 0.*|1.*|2.0.*|2.1.*|2.2.*|2.3.*|2.4.*|2.5.*) - AC_MSG_RESULT([unsupported (${kernel})]) -- AC_MSG_ERROR([Valgrind works on kernels 2.4, 2.6]) -+ AC_MSG_ERROR([Valgrind needs a Linux kernel >= 2.6]) - ;; -+ -+ *) -+ AC_MSG_RESULT([2.6 or later (${kernel})]) -+ ;; - esac - - ;; -diff -ur valgrind-3.10.1.orig/config.h.in valgrind-3.10.1/config.h.in ---- valgrind-3.10.1.orig/config.h.in 2015-06-19 11:36:36.495314032 +0200 -+++ valgrind-3.10.1/config.h.in 2015-06-19 11:36:50.000000000 +0200 -@@ -280,12 +280,6 @@ - /* Define to 1 if you have the `utimensat' function. */ - #undef HAVE_UTIMENSAT - --/* Define to 1 if you're using Linux 2.4.x */ --#undef KERNEL_2_4 -- --/* Define to 1 if you're using Linux 2.6.x or Linux 3.x */ --#undef KERNEL_2_6 -- - /* configured default page size 4k */ - #undef MIPS_PAGE_SHIFT - -diff -ur valgrind-3.10.1.orig/configure valgrind-3.10.1/configure ---- valgrind-3.10.1.orig/configure 2015-06-19 11:36:36.496314042 +0200 -+++ valgrind-3.10.1/configure 2015-06-19 11:36:56.837523466 +0200 -@@ -5554,27 +5554,16 @@ - kernel=`uname -r` - - case "${kernel}" in -- 2.6.*|3.*) -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: 2.6.x/3.x family (${kernel})" >&5 --$as_echo "2.6.x/3.x family (${kernel})" >&6; } -- --$as_echo "#define KERNEL_2_6 1" >>confdefs.h -- -- ;; -- -- 2.4.*) -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: 2.4 family (${kernel})" >&5 --$as_echo "2.4 family (${kernel})" >&6; } -- --$as_echo "#define KERNEL_2_4 1" >>confdefs.h -- -- ;; -- -- *) -+ 0.*|1.*|2.0.*|2.1.*|2.2.*|2.3.*|2.4.*|2.5.*) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported (${kernel})" >&5 - $as_echo "unsupported (${kernel})" >&6; } -- as_fn_error $? "Valgrind works on kernels 2.4, 2.6" "$LINENO" 5 -+ as_fn_error $? "Valgrind needs a Linux kernel >= 2.6" "$LINENO" 5 - ;; -+ -+ *) -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: 2.6 or later (${kernel})" >&5 -+$as_echo "2.6 or later (${kernel})" >&6; } -+ ;; - esac - - ;; diff --git a/SOURCES/valgrind-3.10.1-mempcpy.patch b/SOURCES/valgrind-3.10.1-mempcpy.patch deleted file mode 100644 index aff3d23..0000000 --- a/SOURCES/valgrind-3.10.1-mempcpy.patch +++ /dev/null @@ -1,20 +0,0 @@ -commit a7abe3d4ad8757a65b53230755a12b9ae5e79ffa -Author: mjw -Date: Tue Jan 13 16:10:20 2015 +0000 - - BZ #342795 Internal glibc __GI_mempcpy call should be intercepted. - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14866 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c -index 4ca652b..5203306 100644 ---- a/shared/vg_replace_strmem.c -+++ b/shared/vg_replace_strmem.c -@@ -1363,6 +1363,7 @@ static inline void my_exit ( int x ) - - #if defined(VGO_linux) - GLIBC25_MEMPCPY(VG_Z_LIBC_SONAME, mempcpy) -+ GLIBC25_MEMPCPY(VG_Z_LIBC_SONAME, __GI_mempcpy) - GLIBC25_MEMPCPY(VG_Z_LD_SO_1, mempcpy) /* ld.so.1 */ - GLIBC25_MEMPCPY(VG_Z_LD_LINUX_SO_3, mempcpy) /* ld-linux.so.3 */ - GLIBC25_MEMPCPY(VG_Z_LD_LINUX_X86_64_SO_2, mempcpy) /* ld-linux-x86-64.so.2 */ diff --git a/SOURCES/valgrind-3.10.1-ppc32-tabortdc.patch b/SOURCES/valgrind-3.10.1-ppc32-tabortdc.patch deleted file mode 100644 index 600aee4..0000000 --- a/SOURCES/valgrind-3.10.1-ppc32-tabortdc.patch +++ /dev/null @@ -1,37 +0,0 @@ -commit f874f7340f1880d9f2222d88afb9b4045652af56 -Author: Mark Wielaard -Date: Thu Aug 27 22:37:29 2015 +0200 - - Bug 351873 Newer gcc doesn't allow __builtin_tabortdc[i] in ppc32 mode. - -diff --git a/none/tests/ppc64/test_touch_tm.c b/none/tests/ppc64/test_touch_tm.c -index 6c0431d..57f89bb 100644 ---- a/none/tests/ppc64/test_touch_tm.c -+++ b/none/tests/ppc64/test_touch_tm.c -@@ -8,8 +8,10 @@ int main (void) { - * The rest are just treated as NOPS. - */ - __builtin_tabort (0); -+#ifdef __PPC64__ - __builtin_tabortdc (0,0,0); - __builtin_tabortdci (0,0,0); -+#endif - __builtin_tabortwc (0,0,0); - __builtin_tabortwci (0,0,0); - __builtin_tbegin (0); - -diff --git a/none/tests/ppc32/test_touch_tm.c b/none/tests/ppc32/test_touch_tm.c -index 6c0431d..57f89bb 100644 ---- a/none/tests/ppc32/test_touch_tm.c -+++ b/none/tests/ppc32/test_touch_tm.c -@@ -8,8 +8,10 @@ int main (void) { - * The rest are just treated as NOPS. - */ - __builtin_tabort (0); -+#ifdef __PPC64__ - __builtin_tabortdc (0,0,0); - __builtin_tabortdci (0,0,0); -+#endif - __builtin_tabortwc (0,0,0); - __builtin_tabortwci (0,0,0); - __builtin_tbegin (0); diff --git a/SOURCES/valgrind-3.10.1-ppc64-accept4.patch b/SOURCES/valgrind-3.10.1-ppc64-accept4.patch deleted file mode 100644 index 74d0b10..0000000 --- a/SOURCES/valgrind-3.10.1-ppc64-accept4.patch +++ /dev/null @@ -1,26 +0,0 @@ -commit c79fe53e9e31d5c8e5d2ad3a0943b21e84129ccb -Author: mjw -Date: Tue Feb 10 13:39:04 2015 +0000 - - Bug #344007 accept4 syscall unhandled on arm64 (242) and ppc64 (344) - - ppc64 might fall back to socketcall in some cases, but arm64 always uses - accept4 syscall directly. Some (confusing) background on when/how glibc - (wrongly) decides to use a direct accept4 or the socketcall system call: - https://sourceware.org/ml/libc-alpha/2013-12/msg00014.html - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14926 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c -index 25e0bde..8d5fa08 100644 ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c -@@ -1152,6 +1152,8 @@ static SyscallTableEntry syscall_table[] = { - LINX_(__NR_pwritev, sys_pwritev), // 321 - LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 322 - -+ LINXY(__NR_accept4, sys_accept4), // 344 -+ - LINXY(__NR_clock_adjtime, sys_clock_adjtime), // 347 - - LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351 diff --git a/SOURCES/valgrind-3.10.1-ppc64-hwcap2.patch b/SOURCES/valgrind-3.10.1-ppc64-hwcap2.patch deleted file mode 100644 index c88f198..0000000 --- a/SOURCES/valgrind-3.10.1-ppc64-hwcap2.patch +++ /dev/null @@ -1,246 +0,0 @@ -commit a7907a271cd158db319edc516299353213acb958 -Author: carll -Date: Thu Apr 9 16:23:20 2015 +0000 - - ADD AT_DCACHEBSIZE and AT_HWCAP2 support for POWER PC - - Valgrind currently does not support the following AUX vector entries: - AT_DCACHEBSIZE, and AT_HWCAP2. By default these entries are suppressed by - Valgrind. The attached patch adds the needed support so the user level programs - can correctly determine that hardware level they are running on. Specifically - that the ISA 2.07 for Power 8 is supported. - - Bugzilla 345695 - - This fix adds the needed support. It makes a minor change to allow the - VEX settings of the host platform to be passed down so they can be checked - against the HWCAP values. - - The files touched are: - coregrind/m_initimg/initimg-linux.c - coregrind/pub_core_initimg.h - coregrind/m_main.c - - committed by Carl Love cel@us.ibm.com - - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15078 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c -index 964e355..b198dbf 100644 ---- a/coregrind/m_initimg/initimg-linux.c -+++ b/coregrind/m_initimg/initimg-linux.c -@@ -246,6 +246,10 @@ static HChar** setup_client_env ( HChar** origenv, const HChar* toolname) - /*=== Setting up the client's stack ===*/ - /*====================================================================*/ - -+#ifndef AT_DCACHEBSIZE -+#define AT_DCACHEBSIZE 19 -+#endif /* AT_DCACHEBSIZE */ -+ - #ifndef AT_ICACHEBSIZE - #define AT_ICACHEBSIZE 20 - #endif /* AT_ICACHEBSIZE */ -@@ -262,6 +266,10 @@ static HChar** setup_client_env ( HChar** origenv, const HChar* toolname) - #define AT_RANDOM 25 - #endif /* AT_RANDOM */ - -+#ifndef AT_HWCAP2 -+#define AT_HWCAP2 26 -+#endif /* AT_HWCAP2 */ -+ - #ifndef AT_EXECFN - #define AT_EXECFN 31 - #endif /* AT_EXECFN */ -@@ -377,8 +385,14 @@ Addr setup_client_stack( void* init_sp, - const ExeInfo* info, - UInt** client_auxv, - Addr clstack_end, -- SizeT clstack_max_size ) -+ SizeT clstack_max_size, -+ const VexArchInfo* vex_archinfo ) - { -+ /* The HW configuration setting (hwcaps) of the target can be -+ * checked against the Vex settings of the host platform as given -+ * by the values in vex_archinfo. -+ */ -+ - SysRes res; - HChar **cpp; - HChar *strtab; /* string table */ -@@ -690,8 +704,44 @@ Addr setup_client_stack( void* init_sp, - } - # endif - break; -+# if defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux) -+ case AT_HWCAP2: -+ /* The HWCAP2 value has the entry arch_2_07 which indicates the -+ * processor is a Power 8 or beyond. The Valgrind vai.hwcaps -+ * value (coregrind/m_machine.c) has the VEX_HWCAPS_PPC64_ISA2_07 -+ * flag set so Valgrind knows about Power8. Need to pass the -+ * HWCAP2 value along so the user level programs can detect that -+ * the processor supports ISA 2.07 and beyond. -+ */ -+ /* Power Architecture 64-Bit ELF V2 ABI Specification -+ July 21, 2014, version 1.0, Page 124 -+ www-03.ibm.com/technologyconnect/tgcm/TGCMServlet.wss?alias=OpenPOWER&linkid=1n0000 -+ -+ AT_HWCAP2 -+ The a_val member of this entry is a bit map of hardware -+ capabilities. Some bit mask values include: -+ -+ PPC_FEATURE2_ARCH_2_07 0x80000000 -+ PPC_FEATURE2_HAS_HTM 0x40000000 -+ PPC_FEATURE2_HAS_DSCR 0x20000000 -+ PPC_FEATURE2_HAS_EBB 0x10000000 -+ PPC_FEATURE2_HAS_ISEL 0x08000000 -+ PPC_FEATURE2_HAS_TAR 0x04000000 -+ PPC_FEATURE2_HAS_VCRYPTO 0x02000000 -+ */ -+ -+ if ((auxv->u.a_val & ~(0x80000000ULL)) != 0) { -+ /* Verify if PPC_FEATURE2_ARCH_2_07 is set in HWCAP2 -+ * that arch_2_07 is also set in VEX HWCAPS -+ */ -+ vg_assert((vex_archinfo->hwcaps & VEX_HWCAPS_PPC64_ISA2_07) == VEX_HWCAPS_PPC64_ISA2_07); -+ } -+ -+ break; -+# endif - - case AT_ICACHEBSIZE: -+ case AT_DCACHEBSIZE: - case AT_UCACHEBSIZE: - # if defined(VGP_ppc32_linux) - /* acquire cache info */ -@@ -852,7 +902,8 @@ static void setup_client_dataseg ( SizeT max_size ) - /*====================================================================*/ - - /* Create the client's initial memory image. */ --IIFinaliseImageInfo VG_(ii_create_image)( IICreateImageInfo iicii ) -+IIFinaliseImageInfo VG_(ii_create_image)( IICreateImageInfo iicii, -+ const VexArchInfo* vex_archinfo ) - { - ExeInfo info; - HChar** env = NULL; -@@ -913,7 +964,8 @@ IIFinaliseImageInfo VG_(ii_create_image)( IICreateImageInfo iicii ) - iifii.initial_client_SP - = setup_client_stack( init_sp, env, - &info, &iifii.client_auxv, -- iicii.clstack_end, iifii.clstack_max_size ); -+ iicii.clstack_end, iifii.clstack_max_size, -+ vex_archinfo ); - - VG_(free)(env); - -diff --git a/coregrind/m_main.c b/coregrind/m_main.c -index 732e60e..05ddc35 100644 ---- a/coregrind/m_main.c -+++ b/coregrind/m_main.c -@@ -1822,9 +1822,12 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp ) - //-------------------------------------------------------------- - // Figure out what sort of CPU we're on, and whether it is - // able to run V. -+ /* The vex_archinfo structure is passed down later to the client -+ * to verify the HW info settings are consistent. -+ */ -+ VexArchInfo vex_archinfo; - VG_(debugLog)(1, "main", "Get hardware capabilities ...\n"); - { VexArch vex_arch; -- VexArchInfo vex_archinfo; - Bool ok = VG_(machine_get_hwcaps)(); - if (!ok) { - VG_(printf)("\n"); -@@ -1952,7 +1955,7 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp ) - # endif - - /* NOTE: this call reads VG_(clo_main_stacksize). */ -- the_iifii = VG_(ii_create_image)( the_iicii ); -+ the_iifii = VG_(ii_create_image)( the_iicii, &vex_archinfo ); - } - - //============================================================== -diff --git a/coregrind/pub_core_initimg.h b/coregrind/pub_core_initimg.h -index 5623498..428b0c2 100644 ---- a/coregrind/pub_core_initimg.h -+++ b/coregrind/pub_core_initimg.h -@@ -33,6 +33,7 @@ - #define __PUB_CORE_INITIMG_H - - #include "pub_core_basics.h" // Addr -+#include "libvex.h" - - //-------------------------------------------------------------------- - // PURPOSE: Map the client executable into memory, then set up its -@@ -50,7 +51,8 @@ typedef struct _IIFinaliseImageInfo IIFinaliseImageInfo; - structure, which is gathered in an OS-specific way at startup. - This returns an IIFinaliseImageInfo structure: */ - extern --IIFinaliseImageInfo VG_(ii_create_image)( IICreateImageInfo ); -+IIFinaliseImageInfo VG_(ii_create_image)( IICreateImageInfo, -+ const VexArchInfo* vex_archinfo ); - - /* Just before starting the client, we may need to make final - adjustments to its initial image. Also we need to set up the VEX -commit 21340a2747ac0dbe531949f2e6fbdb2683f1e444 -Author: carll -Date: Tue May 19 16:08:05 2015 +0000 - - Fix for the HWCAP2 aux vector. - - The support assumed that if HWCAP2 is present that the system also supports - ISA2.07. That assumption is not correct as we have found a few systems (OS) - where the HWCAP2 entry is present but the ISA2.07 bit is not set. This patch - fixes the assertion test to specifically check the ISA2.07 support bit setting - in the HWCAP2 and vex_archinfo->hwcaps variable. The setting for the - ISA2.07 support must be the same in both variables if the HWCAP2 entry exists. - - This patch updates Vagrind bugzilla 345695. - - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15257 a5019735-40e9-0310-863c-91ae7b9d1cf9 - -diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c -index cd0b7f3..d8ff159 100644 ---- a/coregrind/m_initimg/initimg-linux.c -+++ b/coregrind/m_initimg/initimg-linux.c -@@ -704,10 +704,12 @@ Addr setup_client_stack( void* init_sp, - # endif - break; - # if defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux) -- case AT_HWCAP2: -- /* The HWCAP2 value has the entry arch_2_07 which indicates the -- * processor is a Power 8 or beyond. The Valgrind vai.hwcaps -- * value (coregrind/m_machine.c) has the VEX_HWCAPS_PPC64_ISA2_07 -+ case AT_HWCAP2: { -+ Bool auxv_2_07, hw_caps_2_07; -+ /* The HWCAP2 field may contain an arch_2_07 entry that indicates -+ * if the processor is compliant with the 2.07 ISA. (i.e. Power 8 -+ * or beyond). The Valgrind vai.hwcaps value -+ * (coregrind/m_machine.c) has the VEX_HWCAPS_PPC64_ISA2_07 - * flag set so Valgrind knows about Power8. Need to pass the - * HWCAP2 value along so the user level programs can detect that - * the processor supports ISA 2.07 and beyond. -@@ -728,13 +730,15 @@ Addr setup_client_stack( void* init_sp, - PPC_FEATURE2_HAS_TAR 0x04000000 - PPC_FEATURE2_HAS_VCRYPTO 0x02000000 - */ -- -- if ((auxv->u.a_val & ~(0x80000000ULL)) != 0) { -- /* Verify if PPC_FEATURE2_ARCH_2_07 is set in HWCAP2 -- * that arch_2_07 is also set in VEX HWCAPS -- */ -- vg_assert((vex_archinfo->hwcaps & VEX_HWCAPS_PPC64_ISA2_07) == VEX_HWCAPS_PPC64_ISA2_07); -- } -+ auxv_2_07 = (auxv->u.a_val & 0x80000000ULL) == 0x80000000ULL; -+ hw_caps_2_07 = (vex_archinfo->hwcaps & VEX_HWCAPS_PPC64_ISA2_07) -+ == VEX_HWCAPS_PPC64_ISA2_07; -+ -+ /* Verify the PPC_FEATURE2_ARCH_2_07 setting in HWCAP2 -+ * matches the setting in VEX HWCAPS. -+ */ -+ vg_assert(auxv_2_07 == hw_caps_2_07); -+ } - - break; - # endif diff --git a/SOURCES/valgrind-3.10.1-s390x-fiebra.patch b/SOURCES/valgrind-3.10.1-s390x-fiebra.patch deleted file mode 100644 index 846e88a..0000000 --- a/SOURCES/valgrind-3.10.1-s390x-fiebra.patch +++ /dev/null @@ -1,301 +0,0 @@ -Subject: [PATCH v2] s390x: Fix unrecognized instruction fiebra - -Add support for the z/Architecture instructions FIEBRA and FIDBRA. -Also add a suitable test case. - -GCC may emit FIEBRA since the following GCC patch: - - S/390: Add support for the "load fp integer" instructions: - https://gcc.gnu.org/ml/gcc-patches/2013-09/msg00112.html - -Index: valgrind/none/tests/s390x/rounding-6.c -=================================================================== ---- valgrind.orig/none/tests/s390x/rounding-6.c -+++ valgrind/none/tests/s390x/rounding-6.c -@@ -44,6 +44,20 @@ do { \ - opcode, src, dst, cc, rtext(round)); \ - } while (0) - -+#define round_to_int(opcode,type,round,value) \ -+do { \ -+ type src = value; \ -+ type dst; \ -+ \ -+ __asm__ volatile (opcode " %[dst]," #round ",%[src]\n\t" \ -+ : [dst] "=f"(dst) \ -+ : [src] "f"(src) \ -+ : ); \ -+ \ -+ printf("%s %.5f\t-> %g %s\n", \ -+ opcode, src, dst, rtext(round)); \ -+} while (0) -+ - - #define cfebr(value, round) \ - convert_to_int("cfebr",float,int32_t,PRId32,round,value) -@@ -54,6 +68,11 @@ do { \ - #define cgdbr(value, round) \ - convert_to_int("cgdbr",double,int64_t,PRId64,round,value) - -+#define fiebr(value, round) \ -+ round_to_int("fiebr",float,round,value) -+#define fidbr(value, round) \ -+ round_to_int("fidbr",double,round,value) -+ - void - set_rounding_mode(unsigned mode) - { -@@ -117,5 +136,25 @@ int main(void) - cgdbr(dval[j], M3_BFP_ROUND_NEGINF); - } - -+ /* f32 -> f32, round to int */ -+ for (j = 0; j < sizeof dval / sizeof dval[0]; ++j) { -+ set_rounding_mode(FPC_BFP_ROUND_ZERO); -+ fiebr(dval[j], M3_BFP_ROUND_NEAREST_EVEN); -+ set_rounding_mode(FPC_BFP_ROUND_NEAREST_EVEN); -+ fiebr(dval[j], M3_BFP_ROUND_ZERO); -+ fiebr(dval[j], M3_BFP_ROUND_POSINF); -+ fiebr(dval[j], M3_BFP_ROUND_NEGINF); -+ } -+ -+ /* f64 -> f64, round to int */ -+ for (j = 0; j < sizeof dval / sizeof dval[0]; ++j) { -+ set_rounding_mode(FPC_BFP_ROUND_ZERO); -+ fidbr(dval[j], M3_BFP_ROUND_NEAREST_EVEN); -+ set_rounding_mode(FPC_BFP_ROUND_NEAREST_EVEN); -+ fidbr(dval[j], M3_BFP_ROUND_ZERO); -+ fidbr(dval[j], M3_BFP_ROUND_POSINF); -+ fidbr(dval[j], M3_BFP_ROUND_NEGINF); -+ } -+ - return 0; - } -Index: valgrind/none/tests/s390x/rounding-6.stdout.exp -=================================================================== ---- valgrind.orig/none/tests/s390x/rounding-6.stdout.exp -+++ valgrind/none/tests/s390x/rounding-6.stdout.exp -@@ -142,3 +142,75 @@ cgdbr 0.000000 -> 0 cc = 0 [-> nearest - cgdbr 0.000000 -> 0 cc = 0 [-> 0] - cgdbr 0.000000 -> 0 cc = 0 [-> +inf] - cgdbr 0.000000 -> 0 cc = 0 [-> -inf] -+fiebr 1.25000 -> 1 [-> nearest even] -+fiebr 1.25000 -> 1 [-> 0] -+fiebr 1.25000 -> 2 [-> +inf] -+fiebr 1.25000 -> 1 [-> -inf] -+fiebr 1.50000 -> 2 [-> nearest even] -+fiebr 1.50000 -> 1 [-> 0] -+fiebr 1.50000 -> 2 [-> +inf] -+fiebr 1.50000 -> 1 [-> -inf] -+fiebr 2.50000 -> 2 [-> nearest even] -+fiebr 2.50000 -> 2 [-> 0] -+fiebr 2.50000 -> 3 [-> +inf] -+fiebr 2.50000 -> 2 [-> -inf] -+fiebr 1.75000 -> 2 [-> nearest even] -+fiebr 1.75000 -> 1 [-> 0] -+fiebr 1.75000 -> 2 [-> +inf] -+fiebr 1.75000 -> 1 [-> -inf] -+fiebr -1.25000 -> -1 [-> nearest even] -+fiebr -1.25000 -> -1 [-> 0] -+fiebr -1.25000 -> -1 [-> +inf] -+fiebr -1.25000 -> -2 [-> -inf] -+fiebr -1.50000 -> -2 [-> nearest even] -+fiebr -1.50000 -> -1 [-> 0] -+fiebr -1.50000 -> -1 [-> +inf] -+fiebr -1.50000 -> -2 [-> -inf] -+fiebr -2.50000 -> -2 [-> nearest even] -+fiebr -2.50000 -> -2 [-> 0] -+fiebr -2.50000 -> -2 [-> +inf] -+fiebr -2.50000 -> -3 [-> -inf] -+fiebr -1.75000 -> -2 [-> nearest even] -+fiebr -1.75000 -> -1 [-> 0] -+fiebr -1.75000 -> -1 [-> +inf] -+fiebr -1.75000 -> -2 [-> -inf] -+fiebr 0.00000 -> 0 [-> nearest even] -+fiebr 0.00000 -> 0 [-> 0] -+fiebr 0.00000 -> 0 [-> +inf] -+fiebr 0.00000 -> 0 [-> -inf] -+fidbr 1.25000 -> 1 [-> nearest even] -+fidbr 1.25000 -> 1 [-> 0] -+fidbr 1.25000 -> 2 [-> +inf] -+fidbr 1.25000 -> 1 [-> -inf] -+fidbr 1.50000 -> 2 [-> nearest even] -+fidbr 1.50000 -> 1 [-> 0] -+fidbr 1.50000 -> 2 [-> +inf] -+fidbr 1.50000 -> 1 [-> -inf] -+fidbr 2.50000 -> 2 [-> nearest even] -+fidbr 2.50000 -> 2 [-> 0] -+fidbr 2.50000 -> 3 [-> +inf] -+fidbr 2.50000 -> 2 [-> -inf] -+fidbr 1.75000 -> 2 [-> nearest even] -+fidbr 1.75000 -> 1 [-> 0] -+fidbr 1.75000 -> 2 [-> +inf] -+fidbr 1.75000 -> 1 [-> -inf] -+fidbr -1.25000 -> -1 [-> nearest even] -+fidbr -1.25000 -> -1 [-> 0] -+fidbr -1.25000 -> -1 [-> +inf] -+fidbr -1.25000 -> -2 [-> -inf] -+fidbr -1.50000 -> -2 [-> nearest even] -+fidbr -1.50000 -> -1 [-> 0] -+fidbr -1.50000 -> -1 [-> +inf] -+fidbr -1.50000 -> -2 [-> -inf] -+fidbr -2.50000 -> -2 [-> nearest even] -+fidbr -2.50000 -> -2 [-> 0] -+fidbr -2.50000 -> -2 [-> +inf] -+fidbr -2.50000 -> -3 [-> -inf] -+fidbr -1.75000 -> -2 [-> nearest even] -+fidbr -1.75000 -> -1 [-> 0] -+fidbr -1.75000 -> -1 [-> +inf] -+fidbr -1.75000 -> -2 [-> -inf] -+fidbr 0.00000 -> 0 [-> nearest even] -+fidbr 0.00000 -> 0 [-> 0] -+fidbr 0.00000 -> 0 [-> +inf] -+fidbr 0.00000 -> 0 [-> -inf] -Index: valgrind/VEX/priv/guest_s390_toIR.c -=================================================================== ---- valgrind.orig/VEX/priv/guest_s390_toIR.c -+++ valgrind/VEX/priv/guest_s390_toIR.c -@@ -12384,6 +12384,32 @@ s390_irgen_LXEB(UChar r1, IRTemp op2addr - } - - static const HChar * -+s390_irgen_FIEBRA(UChar m3, UChar m4 __attribute__((unused)), -+ UChar r1, UChar r2) -+{ -+ IRTemp result = newTemp(Ity_F32); -+ -+ assign(result, binop(Iop_RoundF32toInt, mkexpr(encode_bfp_rounding_mode(m3)), -+ get_fpr_w0(r2))); -+ put_fpr_w0(r1, mkexpr(result)); -+ -+ return "fiebra"; -+} -+ -+static const HChar * -+s390_irgen_FIDBRA(UChar m3, UChar m4 __attribute__((unused)), -+ UChar r1, UChar r2) -+{ -+ IRTemp result = newTemp(Ity_F64); -+ -+ assign(result, binop(Iop_RoundF64toInt, mkexpr(encode_bfp_rounding_mode(m3)), -+ get_fpr_dw0(r2))); -+ put_fpr_dw0(r1, mkexpr(result)); -+ -+ return "fidbra"; -+} -+ -+static const HChar * - s390_irgen_LNEBR(UChar r1, UChar r2) - { - IRTemp result = newTemp(Ity_F32); -@@ -14520,11 +14546,15 @@ s390_decode_4byte_and_irgen(const UChar - case 0xb350: /* TBEDR */ goto unimplemented; - case 0xb351: /* TBDR */ goto unimplemented; - case 0xb353: /* DIEBR */ goto unimplemented; -- case 0xb357: /* FIEBR */ goto unimplemented; -+ case 0xb357: s390_format_RRF_UUFF(s390_irgen_FIEBRA, ovl.fmt.RRF2.m3, -+ ovl.fmt.RRF2.m4, ovl.fmt.RRF2.r1, -+ ovl.fmt.RRF2.r2); goto ok; - case 0xb358: /* THDER */ goto unimplemented; - case 0xb359: /* THDR */ goto unimplemented; - case 0xb35b: /* DIDBR */ goto unimplemented; -- case 0xb35f: /* FIDBR */ goto unimplemented; -+ case 0xb35f: s390_format_RRF_UUFF(s390_irgen_FIDBRA, ovl.fmt.RRF2.m3, -+ ovl.fmt.RRF2.m4, ovl.fmt.RRF2.r1, -+ ovl.fmt.RRF2.r2); goto ok; - case 0xb360: /* LPXR */ goto unimplemented; - case 0xb361: /* LNXR */ goto unimplemented; - case 0xb362: /* LTXR */ goto unimplemented; -Index: valgrind/VEX/priv/host_s390_defs.c -=================================================================== ---- valgrind.orig/VEX/priv/host_s390_defs.c -+++ valgrind/VEX/priv/host_s390_defs.c -@@ -3939,6 +3939,40 @@ s390_emit_LEXBRA(UChar *p, UChar m3, UCh - - - static UChar * -+s390_emit_FIEBRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2) -+{ -+ vassert(m3 == 0 || s390_host_has_fpext); -+ -+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) { -+ if (m4 == 0) -+ s390_disasm(ENC4(MNM, FPR, UINT, FPR), "fiebr", r1, m3, r2); -+ else -+ s390_disasm(ENC5(MNM, FPR, UINT, FPR, UINT), -+ "fiebra", r1, m3, r2, m4); -+ } -+ -+ return emit_RRF2(p, 0xb3570000, m3, m4, r1, r2); -+} -+ -+ -+static UChar * -+s390_emit_FIDBRA(UChar *p, UChar m3, UChar m4, UChar r1, UChar r2) -+{ -+ vassert(m3 == 0 || s390_host_has_fpext); -+ -+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) { -+ if (m4 == 0) -+ s390_disasm(ENC4(MNM, FPR, UINT, FPR), "fidbr", r1, m3, r2); -+ else -+ s390_disasm(ENC5(MNM, FPR, UINT, FPR, UINT), -+ "fidbra", r1, m3, r2, m4); -+ } -+ -+ return emit_RRF2(p, 0xb35f0000, m3, m4, r1, r2); -+} -+ -+ -+static UChar * - s390_emit_MEEBR(UChar *p, UChar r1, UChar r2) - { - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) -@@ -6693,6 +6727,8 @@ s390_insn_as_string(const s390_insn *ins - case S390_BFP_F64_TO_F128: - case S390_BFP_F128_TO_F32: - case S390_BFP_F128_TO_F64: op = "v-f2f"; break; -+ case S390_BFP_F32_TO_F32I: -+ case S390_BFP_F64_TO_F64I: op = "v-f2fi"; break; - default: goto fail; - } - s390_sprintf(buf, "%M %R,%R", op, insn->variant.bfp_convert.dst_hi, -@@ -8964,6 +9000,10 @@ s390_insn_bfp_convert_emit(UChar *buf, c - case S390_BFP_F128_TO_F32: return s390_emit_LEXBRA(buf, m3, m4, r1, r2); - case S390_BFP_F128_TO_F64: return s390_emit_LDXBRA(buf, m3, m4, r1, r2); - -+ /* Load FP integer */ -+ case S390_BFP_F32_TO_F32I: return s390_emit_FIEBRA(buf, m3, m4, r1, r2); -+ case S390_BFP_F64_TO_F64I: return s390_emit_FIDBRA(buf, m3, m4, r1, r2); -+ - default: goto fail; - } - -Index: valgrind/VEX/priv/host_s390_defs.h -=================================================================== ---- valgrind.orig/VEX/priv/host_s390_defs.h -+++ valgrind/VEX/priv/host_s390_defs.h -@@ -242,7 +242,9 @@ typedef enum { - S390_BFP_F128_TO_U32, - S390_BFP_F128_TO_U64, - S390_BFP_F128_TO_F32, -- S390_BFP_F128_TO_F64 -+ S390_BFP_F128_TO_F64, -+ S390_BFP_F32_TO_F32I, -+ S390_BFP_F64_TO_F64I - } s390_bfp_conv_t; - - /* Type conversion operations: to and/or from decimal floating point */ -Index: valgrind/VEX/priv/host_s390_isel.c -=================================================================== ---- valgrind.orig/VEX/priv/host_s390_isel.c -+++ valgrind/VEX/priv/host_s390_isel.c -@@ -2378,6 +2378,8 @@ s390_isel_float_expr_wrk(ISelEnv *env, I - return dst; - - case Iop_F64toF32: conv = S390_BFP_F64_TO_F32; goto convert_float; -+ case Iop_RoundF32toInt: conv = S390_BFP_F32_TO_F32I; goto convert_float; -+ case Iop_RoundF64toInt: conv = S390_BFP_F64_TO_F64I; goto convert_float; - case Iop_I32StoF32: conv = S390_BFP_I32_TO_F32; goto convert_int; - case Iop_I32UtoF32: conv = S390_BFP_U32_TO_F32; goto convert_int; - case Iop_I64StoF32: conv = S390_BFP_I64_TO_F32; goto convert_int; diff --git a/SOURCES/valgrind-3.10.1-send-recv-mmsg.patch b/SOURCES/valgrind-3.10.1-send-recv-mmsg.patch deleted file mode 100644 index c16e0ab..0000000 --- a/SOURCES/valgrind-3.10.1-send-recv-mmsg.patch +++ /dev/null @@ -1,262 +0,0 @@ -diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h -index 4a8d7e1..d093974 100644 ---- a/coregrind/m_syswrap/priv_syswrap-linux.h -+++ b/coregrind/m_syswrap/priv_syswrap-linux.h -@@ -305,6 +305,10 @@ extern void ML_(linux_POST_sys_msgctl) ( TId, UW, UW, UW, UW ); - extern void ML_(linux_PRE_sys_getsockopt) ( TId, UW, UW, UW, UW, UW ); - extern void ML_(linux_POST_sys_getsockopt) ( TId, SR, UW, UW, UW, UW, UW ); - extern void ML_(linux_PRE_sys_setsockopt) ( TId, UW, UW, UW, UW, UW ); -+extern void ML_(linux_PRE_sys_recvmmsg) ( TId, UW, UW, UW, UW, UW ); -+extern void ML_(linux_POST_sys_recvmmsg) ( TId, UW, UW, UW, UW, UW, UW ); -+extern void ML_(linux_PRE_sys_sendmmsg) ( TId, UW, UW, UW, UW ); -+extern void ML_(linux_POST_sys_sendmmsg) ( TId, UW, UW, UW, UW, UW ); - - // Linux-specific (but non-arch-specific) ptrace wrapper helpers - extern void ML_(linux_PRE_getregset) ( ThreadId, long, long ); -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 16df075..10c1fc2 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -4063,6 +4063,20 @@ PRE(sys_socketcall) - ML_(generic_PRE_sys_recvmsg)( tid, "msg", (struct vki_msghdr *)ARG2_1 ); - break; - -+ case VKI_SYS_RECVMMSG: -+ /* int recvmmsg(int s, struct mmsghdr *mmsg, int vlen, int flags, -+ struct timespec *timeout); */ -+ PRE_MEM_READ_ef("socketcall.recvmmsg(args)", ARG2, 5*sizeof(Addr) ); -+ ML_(linux_PRE_sys_recvmmsg)( tid, ARG2_0, ARG2_1, ARG2_2, ARG2_3, -+ ARG2_4 ); -+ break; -+ -+ case VKI_SYS_SENDMMSG: -+ /* int sendmmsg(int s, struct mmsghdr *mmsg, int vlen, int flags); */ -+ PRE_MEM_READ_ef("socketcall.sendmmsg(args)", ARG2, 4*sizeof(Addr) ); -+ ML_(linux_PRE_sys_sendmmsg)( tid, ARG2_0, ARG2_1, ARG2_2, ARG2_3 ); -+ break; -+ - default: - VG_(message)(Vg_DebugMsg,"Warning: unhandled socketcall 0x%lx\n",ARG1); - SET_STATUS_Failure( VKI_EINVAL ); -@@ -4168,6 +4182,15 @@ POST(sys_socketcall) - ML_(generic_POST_sys_recvmsg)( tid, "msg", (struct vki_msghdr *)ARG2_1, RES ); - break; - -+ case VKI_SYS_RECVMMSG: -+ ML_(linux_POST_sys_recvmmsg)( tid, RES, -+ ARG2_0, ARG2_1, ARG2_2, ARG2_3, ARG2_4 ); -+ break; -+ -+ case VKI_SYS_SENDMMSG: -+ ML_(linux_POST_sys_sendmmsg)( tid, RES, ARG2_0, ARG2_1, ARG2_2, ARG2_3 ); -+ break; -+ - default: - VG_(message)(Vg_DebugMsg,"FATAL: unhandled socketcall 0x%lx\n",ARG1); - VG_(core_panic)("... bye!\n"); -@@ -4846,64 +4869,31 @@ PRE(sys_process_vm_writev) - - PRE(sys_sendmmsg) - { -- struct vki_mmsghdr *mmsg = (struct vki_mmsghdr *)ARG2; -- HChar name[32]; -- UInt i; - *flags |= SfMayBlock; - PRINT("sys_sendmmsg ( %ld, %#lx, %ld, %ld )",ARG1,ARG2,ARG3,ARG4); - PRE_REG_READ4(long, "sendmmsg", - int, s, const struct mmsghdr *, mmsg, int, vlen, int, flags); -- for (i = 0; i < ARG3; i++) { -- VG_(sprintf)(name, "mmsg[%u].msg_hdr", i); -- ML_(generic_PRE_sys_sendmsg)(tid, name, &mmsg[i].msg_hdr); -- VG_(sprintf)(name, "sendmmsg(mmsg[%u].msg_len)", i); -- PRE_MEM_WRITE( name, (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) ); -- } -+ ML_(linux_PRE_sys_sendmmsg)(tid, ARG1,ARG2,ARG3,ARG4); - } - - POST(sys_sendmmsg) - { -- if (RES > 0) { -- struct vki_mmsghdr *mmsg = (struct vki_mmsghdr *)ARG2; -- UInt i; -- for (i = 0; i < RES; i++) { -- POST_MEM_WRITE( (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) ); -- } -- } -+ ML_(linux_POST_sys_sendmmsg) (tid, RES, ARG1,ARG2,ARG3,ARG4); - } - - PRE(sys_recvmmsg) - { -- struct vki_mmsghdr *mmsg = (struct vki_mmsghdr *)ARG2; -- HChar name[32]; -- UInt i; - *flags |= SfMayBlock; - PRINT("sys_recvmmsg ( %ld, %#lx, %ld, %ld, %#lx )",ARG1,ARG2,ARG3,ARG4,ARG5); - PRE_REG_READ5(long, "recvmmsg", - int, s, struct mmsghdr *, mmsg, int, vlen, - int, flags, struct timespec *, timeout); -- for (i = 0; i < ARG3; i++) { -- VG_(sprintf)(name, "mmsg[%u].msg_hdr", i); -- ML_(generic_PRE_sys_recvmsg)(tid, name, &mmsg[i].msg_hdr); -- VG_(sprintf)(name, "recvmmsg(mmsg[%u].msg_len)", i); -- PRE_MEM_WRITE( name, (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) ); -- } -- if (ARG5) -- PRE_MEM_READ( "recvmmsg(timeout)", ARG5, sizeof(struct vki_timespec) ); -+ ML_(linux_PRE_sys_recvmmsg)(tid, ARG1,ARG2,ARG3,ARG4,ARG5); - } - - POST(sys_recvmmsg) - { -- if (RES > 0) { -- struct vki_mmsghdr *mmsg = (struct vki_mmsghdr *)ARG2; -- HChar name[32]; -- UInt i; -- for (i = 0; i < RES; i++) { -- VG_(sprintf)(name, "mmsg[%u].msg_hdr", i); -- ML_(generic_POST_sys_recvmsg)(tid, name, &mmsg[i].msg_hdr, mmsg[i].msg_len); -- POST_MEM_WRITE( (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) ); -- } -- } -+ ML_(linux_POST_sys_recvmmsg) (tid, RES, ARG1,ARG2,ARG3,ARG4,ARG5); - } - - /* --------------------------------------------------------------------- -@@ -10271,6 +10261,69 @@ ML_(linux_PRE_sys_setsockopt) ( ThreadId tid, - } - } - -+void -+ML_(linux_PRE_sys_recvmmsg) ( ThreadId tid, -+ UWord arg1, UWord arg2, UWord arg3, -+ UWord arg4, UWord arg5 ) -+{ -+ struct vki_mmsghdr *mmsg = (struct vki_mmsghdr *)arg2; -+ HChar name[40]; // large enough -+ UInt i; -+ for (i = 0; i < arg3; i++) { -+ VG_(sprintf)(name, "mmsg[%u].msg_hdr", i); -+ ML_(generic_PRE_sys_recvmsg)(tid, name, &mmsg[i].msg_hdr); -+ VG_(sprintf)(name, "recvmmsg(mmsg[%u].msg_len)", i); -+ PRE_MEM_WRITE( name, (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) ); -+ } -+ if (arg5) -+ PRE_MEM_READ( "recvmmsg(timeout)", arg5, sizeof(struct vki_timespec) ); -+} -+ -+void -+ML_(linux_POST_sys_recvmmsg) (ThreadId tid, UWord res, -+ UWord arg1, UWord arg2, UWord arg3, -+ UWord arg4, UWord arg5 ) -+{ -+ if (res > 0) { -+ struct vki_mmsghdr *mmsg = (struct vki_mmsghdr *)arg2; -+ HChar name[32]; // large enough -+ UInt i; -+ for (i = 0; i < res; i++) { -+ VG_(sprintf)(name, "mmsg[%u].msg_hdr", i); -+ ML_(generic_POST_sys_recvmsg)(tid, name, &mmsg[i].msg_hdr, mmsg[i].msg_len); -+ POST_MEM_WRITE( (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) ); -+ } -+ } -+} -+ -+void -+ML_(linux_PRE_sys_sendmmsg) ( ThreadId tid, -+ UWord arg1, UWord arg2, UWord arg3, UWord arg4 ) -+{ -+ struct vki_mmsghdr *mmsg = (struct vki_mmsghdr *)arg2; -+ HChar name[40]; // large enough -+ UInt i; -+ for (i = 0; i < arg3; i++) { -+ VG_(sprintf)(name, "mmsg[%u].msg_hdr", i); -+ ML_(generic_PRE_sys_sendmsg)(tid, name, &mmsg[i].msg_hdr); -+ VG_(sprintf)(name, "sendmmsg(mmsg[%u].msg_len)", i); -+ PRE_MEM_WRITE( name, (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) ); -+ } -+} -+ -+void -+ML_(linux_POST_sys_sendmmsg) (ThreadId tid, UWord res, -+ UWord arg1, UWord arg2, UWord arg3, UWord arg4 ) -+{ -+ if (res > 0) { -+ struct vki_mmsghdr *mmsg = (struct vki_mmsghdr *)arg2; -+ UInt i; -+ for (i = 0; i < res; i++) { -+ POST_MEM_WRITE( (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) ); -+ } -+ } -+} -+ - /* --------------------------------------------------------------------- - ptrace wrapper helpers - ------------------------------------------------------------------ */ -diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h -index bf3ffee..af5cbaf 100644 ---- a/include/vki/vki-linux.h -+++ b/include/vki/vki-linux.h -@@ -596,6 +596,8 @@ typedef struct vki_sigevent { - #define VKI_SYS_SENDMSG 16 /* sys_sendmsg(2) */ - #define VKI_SYS_RECVMSG 17 /* sys_recvmsg(2) */ - #define VKI_SYS_ACCEPT4 18 /* sys_accept4(2) */ -+#define VKI_SYS_RECVMMSG 19 /* sys_recvmmsg(2) */ -+#define VKI_SYS_SENDMMSG 20 /* sys_sendmmsg(2) */ - - #ifndef ARCH_HAS_SOCKET_TYPES - enum vki_sock_type { -commit 4b2fb567b7422b2563c52a0ff2c1c166264a02e0 -Author: mjw -Date: Tue Feb 17 16:04:09 2015 +0000 - - Bug #344279 syscall sendmmsg on arm64 (269) and ppc32/64 (349) unhandled. - - git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14939 a5019735-40e9-0310-863c-91ae7b9d1cf9 - ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c.orig 2015-05-28 16:06:49.357168117 +0200 -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c 2015-05-28 16:14:20.622910269 +0200 -@@ -1041,9 +1041,13 @@ - LINX_(__NR_mbind, sys_mbind), // 235 - LINXY(__NR_get_mempolicy, sys_get_mempolicy), // 236 - LINX_(__NR_set_mempolicy, sys_set_mempolicy), // 237 -+ - LINXY(__NR_accept4, sys_accept4), // 242 -+ LINXY(__NR_recvmmsg, sys_recvmmsg), // 243 -+ - GENXY(__NR_wait4, sys_wait4), // 260 - -+ LINXY(__NR_sendmmsg, sys_sendmmsg), // 269 - LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 270 - LINX_(__NR_process_vm_writev, sys_process_vm_writev), // 271 - ---- a/coregrind/m_syswrap/syswrap-ppc32-linux.c.orig 2015-05-28 16:06:49.376168317 +0200 -+++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c 2015-05-28 16:15:20.304546477 +0200 -@@ -1253,8 +1253,11 @@ - LINX_(__NR_shutdown, sys_shutdown), // 338 - LINX_(__NR_setsockopt, sys_setsockopt), // 339 - -+ LINXY(__NR_recvmmsg, sys_recvmmsg), // 343 - LINXY(__NR_accept4, sys_accept4), // 344 - -+ LINXY(__NR_sendmmsg, sys_sendmmsg), // 349 -+ - LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351 - LINX_(__NR_process_vm_writev, sys_process_vm_writev) // 352 - }; ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c.orig 2015-05-28 16:06:49.325167778 +0200 -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c 2015-05-28 16:12:26.199711566 +0200 -@@ -1152,10 +1152,13 @@ - LINX_(__NR_pwritev, sys_pwritev), // 321 - LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 322 - -+ LINXY(__NR_recvmmsg, sys_recvmmsg), // 343 - LINXY(__NR_accept4, sys_accept4), // 344 - - LINXY(__NR_clock_adjtime, sys_clock_adjtime), // 347 - -+ LINXY(__NR_sendmmsg, sys_sendmmsg), // 349 -+ - LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351 - LINX_(__NR_process_vm_writev, sys_process_vm_writev) // 352 - }; diff --git a/SOURCES/valgrind-3.11.0-amd64-fcom.patch b/SOURCES/valgrind-3.11.0-amd64-fcom.patch new file mode 100644 index 0000000..0458258 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-amd64-fcom.patch @@ -0,0 +1,49 @@ +commit 6f472ff11be7fa4a1114b2e3d321609717325311 +Author: tom +Date: Wed Feb 3 10:14:18 2016 +0000 + + Handle missing FCOM case on amd64. + + Patch from Mark Harris on BZ#212352. + + + git-svn-id: svn://svn.valgrind.org/vex/trunk@3207 8f6e269a-dfd6-0310-a8e1-e2731360e62c + +diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c +index af4817f..936d16f 100644 +--- a/VEX/priv/guest_amd64_toIR.c ++++ b/VEX/priv/guest_amd64_toIR.c +@@ -6401,19 +6401,20 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok, + fp_do_op_mem_ST_0 ( addr, "mul", dis_buf, Iop_MulF64, True ); + break; + +-//.. case 2: /* FCOM double-real */ +-//.. DIP("fcoml %s\n", dis_buf); +-//.. /* This forces C1 to zero, which isn't right. */ +-//.. put_C3210( +-//.. binop( Iop_And32, +-//.. binop(Iop_Shl32, +-//.. binop(Iop_CmpF64, +-//.. get_ST(0), +-//.. loadLE(Ity_F64,mkexpr(addr))), +-//.. mkU8(8)), +-//.. mkU32(0x4500) +-//.. )); +-//.. break; ++ case 2: /* FCOM double-real */ ++ DIP("fcoml %s\n", dis_buf); ++ /* This forces C1 to zero, which isn't right. */ ++ put_C3210( ++ unop(Iop_32Uto64, ++ binop( Iop_And32, ++ binop(Iop_Shl32, ++ binop(Iop_CmpF64, ++ get_ST(0), ++ loadLE(Ity_F64,mkexpr(addr))), ++ mkU8(8)), ++ mkU32(0x4500) ++ ))); ++ break; + + case 3: /* FCOMP double-real */ + DIP("fcompl %s\n", dis_buf); diff --git a/SOURCES/valgrind-3.11.0-amd64-ld-index.patch b/SOURCES/valgrind-3.11.0-amd64-ld-index.patch new file mode 100644 index 0000000..7d6e336 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-amd64-ld-index.patch @@ -0,0 +1,92 @@ +commit b39a5966a9e64d343b65d7678e4759aed6860bec +Author: mjw +Date: Wed Feb 24 11:12:01 2016 +0000 + + Bug 359733 amd64 implement ld.so strchr/index override like x86 + + The suppression and redirection for ld.so strchr/index isn't needed for + x86. When testing a newer glibc or calling the ld.so through an alternative + path neither the suppression (doesn't match path/name) nor the redirection + (triggers too late) works. Since there is already an hardwire override for + strlen in amd64 ld.so anyway it makes sense to also hardware index (it is + always called when ld.so loads the preload images). + + This was also explained in the easy hacks Fosdem session. + See https://bugs.kde.org/show_bug.cgi?id=359733 for a pointer. + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15812 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c +index dcf1fb4..dae47f1 100644 +--- a/coregrind/m_redir.c ++++ b/coregrind/m_redir.c +@@ -1353,6 +1353,9 @@ void VG_(redir_initialise) ( void ) + if (0==VG_(strcmp)("Memcheck", VG_(details).name)) { + + add_hardwired_spec( ++ "ld-linux-x86-64.so.2", "index", ++ (Addr)&VG_(amd64_linux_REDIR_FOR_index), NULL); ++ add_hardwired_spec( + "ld-linux-x86-64.so.2", "strlen", + (Addr)&VG_(amd64_linux_REDIR_FOR_strlen), + # ifndef GLIBC_MANDATORY_STRLEN_REDIRECT +diff --git a/coregrind/m_trampoline.S b/coregrind/m_trampoline.S +index cac2288..176ea66 100644 +--- a/coregrind/m_trampoline.S ++++ b/coregrind/m_trampoline.S +@@ -220,6 +220,30 @@ VG_(amd64_linux_REDIR_FOR_strlen): + .LfnE5: + .size VG_(amd64_linux_REDIR_FOR_strlen), .-VG_(amd64_linux_REDIR_FOR_strlen) + ++.global VG_(amd64_linux_REDIR_FOR_index) ++.type VG_(amd64_linux_REDIR_FOR_index), @function ++VG_(amd64_linux_REDIR_FOR_index): ++ movzbl (%rdi), %eax ++ movl %esi, %edx ++ cmpb %sil, %al ++ jne .L4 ++ jmp .L5 ++.L10: ++ addq $1, %rdi ++ movzbl (%rdi), %eax ++ cmpb %dl, %al ++ je .L5 ++.L4: ++ testb %al, %al ++ jne .L10 ++ xorl %eax, %eax ++ ret ++.L5: ++ movq %rdi, %rax ++ ret ++.size VG_(amd64_linux_REDIR_FOR_index), .-VG_(amd64_linux_REDIR_FOR_index) ++ ++ + + /* A CIE for the above four functions, followed by their FDEs */ + .section .eh_frame,"a",@progbits +diff --git a/coregrind/pub_core_trampoline.h b/coregrind/pub_core_trampoline.h +index eda5ec6..1396519 100644 +--- a/coregrind/pub_core_trampoline.h ++++ b/coregrind/pub_core_trampoline.h +@@ -71,6 +71,7 @@ extern Addr VG_(amd64_linux_REDIR_FOR_vgettimeofday); + extern Addr VG_(amd64_linux_REDIR_FOR_vtime); + extern Addr VG_(amd64_linux_REDIR_FOR_vgetcpu); + extern UInt VG_(amd64_linux_REDIR_FOR_strlen)( void* ); ++extern Char* VG_(amd64_linux_REDIR_FOR_index) ( const Char*, Int ); + #endif + + #if defined(VGP_ppc32_linux) +diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c +index 005b679..8de085a 100644 +--- a/shared/vg_replace_strmem.c ++++ b/shared/vg_replace_strmem.c +@@ -247,7 +247,7 @@ static inline void my_exit ( int x ) + STRCHR(VG_Z_LIBC_SONAME, __strchr_sse2) + STRCHR(VG_Z_LIBC_SONAME, __strchr_sse2_no_bsf) + STRCHR(VG_Z_LIBC_SONAME, index) +-# if !defined(VGP_x86_linux) ++# if !defined(VGP_x86_linux) && !defined(VGP_amd64_linux) + STRCHR(VG_Z_LD_LINUX_SO_2, strchr) + STRCHR(VG_Z_LD_LINUX_SO_2, index) + STRCHR(VG_Z_LD_LINUX_X86_64_SO_2, strchr) diff --git a/SOURCES/valgrind-3.11.0-arm64-handle_at.patch b/SOURCES/valgrind-3.11.0-arm64-handle_at.patch new file mode 100644 index 0000000..66e409a --- /dev/null +++ b/SOURCES/valgrind-3.11.0-arm64-handle_at.patch @@ -0,0 +1,31 @@ +commit 4eec8a00bed541842afbed7e1f95551b0c786570 +Author: mjw +Date: Mon May 30 14:17:25 2016 +0000 + + Bug #363705 arm64 missing syscall name_to_handle_at and open_by_handle_at + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15887 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c +index 0b78f20..8842765 100644 +--- a/coregrind/m_syswrap/syswrap-arm64-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm64-linux.c +@@ -1096,6 +1096,9 @@ static SyscallTableEntry syscall_main_table[] = { + + GENXY(__NR_wait4, sys_wait4), // 260 + ++ LINXY(__NR_name_to_handle_at, sys_name_to_handle_at), // 264 ++ LINXY(__NR_open_by_handle_at, sys_open_by_handle_at), // 265 ++ + LINX_(__NR_syncfs, sys_syncfs), // 267 + + LINXY(__NR_sendmmsg, sys_sendmmsg), // 269 +@@ -1374,8 +1377,6 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ LINXY(__NR_epoll_create1, sys_epoll_create1), // 357 + //ZZ LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 363 + //ZZ +-//ZZ LINXY(__NR_name_to_handle_at, sys_name_to_handle_at),// 370 +-//ZZ LINXY(__NR_open_by_handle_at, sys_open_by_handle_at),// 371 + //ZZ LINXY(__NR_clock_adjtime, sys_clock_adjtime) // 372 + }; + diff --git a/SOURCES/valgrind-3.11.0-arm64-ldpsw.patch b/SOURCES/valgrind-3.11.0-arm64-ldpsw.patch new file mode 100644 index 0000000..4ac61b4 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-arm64-ldpsw.patch @@ -0,0 +1,268 @@ +commit 8f36c464966045b51a75144ca4c65f354082194f +Author: mjw +Date: Tue Mar 15 15:08:01 2016 +0000 + + Bug #360425 - arm64 unsupported instruction ldpsw tests. + + Add tests for ldpsw implementation VEX svn r3212. + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15830 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/none/tests/arm64/memory.c b/none/tests/arm64/memory.c +index cbf31fd..91949ac 100644 +--- a/none/tests/arm64/memory.c ++++ b/none/tests/arm64/memory.c +@@ -280,6 +280,18 @@ TESTINST2_hide2("ldarb w21, [x22]", AREA_MID, x21,x22,0); + + //////////////////////////////////////////////////////////////// + printf("STL{R,RH,RB} (entirely MISSING)\n"); ++ ++//////////////////////////////////////////////////////////////// ++// TESTINST2_hide2 allows use of x28 as scratch ++printf("LDPSW (immediate, simm7)\n"); ++ ++TESTINST2_hide2("ldpsw x21, x28, [x22], #-24 ; add x21,x21,x28", AREA_MID, x21,x22,0); ++TESTINST2_hide2("ldpsw x21, x28, [x22], #-24 ; eor x21,x21,x28", AREA_MID, x21,x22,0); ++TESTINST2_hide2("ldpsw x21, x28, [x22, #-40]! ; add x21,x21,x28", AREA_MID, x21,x22,0); ++TESTINST2_hide2("ldpsw x21, x28, [x22, #-40]! ; eor x21,x21,x28", AREA_MID, x21,x22,0); ++TESTINST2_hide2("ldpsw x21, x28, [x22, #-40] ; add x21,x21,x28", AREA_MID, x21,x22,0); ++TESTINST2_hide2("ldpsw x21, x28, [x22, #-40] ; eor x21,x21,x28", AREA_MID, x21,x22,0); ++ + } /* end of test_memory_old() */ + + +@@ -1608,6 +1620,12 @@ MEM_TEST("prfm pstl2strm, [x5,w6,uxtw #3]", 12, 4); + MEM_TEST("prfm pstl3keep, [x5,w6,sxtw #0]", 12, 4); + MEM_TEST("prfm pstl3strm, [x5,w6,sxtw #3]", 12, -4); + ++//////////////////////////////////////////////////////////////// ++printf("LDPSW (immediate, simm7)\n"); ++MEM_TEST("ldpsw x13, x23, [x5], #-24", 0, 0); ++MEM_TEST("ldpsw x13, x23, [x5, #-40]!", 0, 0); ++MEM_TEST("ldpsw x13, x23, [x5, #-40]", 0, 0); ++ + } /* end of test_memory2() */ + + //////////////////////////////////////////////////////////////// +diff --git a/none/tests/arm64/memory.stdout.exp b/none/tests/arm64/memory.stdout.exp +index eb6ec3f..be57108 100644 +--- a/none/tests/arm64/memory.stdout.exp ++++ b/none/tests/arm64/memory.stdout.exp +@@ -98,6 +98,13 @@ ldar w21, [x22] :: rd 00000000f3f2f1f0 rn (hidden), cin 0, nzcv 00000000 + ldarh w21, [x22] :: rd 000000000000f1f0 rn (hidden), cin 0, nzcv 00000000 + ldarb w21, [x22] :: rd 00000000000000f0 rn (hidden), cin 0, nzcv 00000000 + STL{R,RH,RB} (entirely MISSING) ++LDPSW (immediate, simm7) ++ldpsw x21, x28, [x22], #-24 ; add x21,x21,x28 :: rd ffffffffebe9e7e4 rn (hidden), cin 0, nzcv 00000000 ++ldpsw x21, x28, [x22], #-24 ; eor x21,x21,x28 :: rd 0000000004040404 rn (hidden), cin 0, nzcv 00000000 ++ldpsw x21, x28, [x22, #-40]! ; add x21,x21,x28 :: rd ffffffff9b999794 rn (hidden), cin 0, nzcv 00000000 ++ldpsw x21, x28, [x22, #-40]! ; eor x21,x21,x28 :: rd 0000000004040404 rn (hidden), cin 0, nzcv 00000000 ++ldpsw x21, x28, [x22, #-40] ; add x21,x21,x28 :: rd ffffffff9b999794 rn (hidden), cin 0, nzcv 00000000 ++ldpsw x21, x28, [x22, #-40] ; eor x21,x21,x28 :: rd 0000000004040404 rn (hidden), cin 0, nzcv 00000000 + LDR,STR (immediate, uimm12)ldr x13, [x5, #24] with x5 = middle_of_block+-1, x6=0 + [ 0] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. + [ 16] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. +@@ -26258,3 +26265,94 @@ prfm pstl3strm, [x5,w6,sxtw #3] with x5 = middle_of_block+12, x6=-4 + 0 x5 (sub, base reg) + 0 x6 (sub, index reg) + ++LDPSW (immediate, simm7) ++ldpsw x13, x23, [x5], #-24 with x5 = middle_of_block+0, x6=0 ++ [ 0] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 16] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 32] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 48] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 64] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 80] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 96] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [112] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [128] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [144] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [160] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [176] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [192] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [208] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [224] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [240] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ 5430cb99daf026bb x13 (xor, xfer intreg #1) ++ 58eb9b702726900d x23 (xor, xfer intreg #2) ++ 0000000000000000 v17.d[0] (xor, xfer vecreg #1) ++ 0000000000000000 v17.d[1] (xor, xfer vecreg #1) ++ 0000000000000000 v18.d[0] (xor, xfer vecreg #2) ++ 0000000000000000 v18.d[1] (xor, xfer vecreg #2) ++ 0000000000000000 v19.d[0] (xor, xfer vecreg #3) ++ 0000000000000000 v19.d[1] (xor, xfer vecreg #3) ++ 0000000000000000 v20.d[0] (xor, xfer vecreg #3) ++ 0000000000000000 v20.d[1] (xor, xfer vecreg #3) ++ -24 x5 (sub, base reg) ++ 0 x6 (sub, index reg) ++ ++ldpsw x13, x23, [x5, #-40]! with x5 = middle_of_block+0, x6=0 ++ [ 0] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 16] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 32] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 48] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 64] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 80] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 96] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [112] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [128] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [144] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [160] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [176] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [192] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [208] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [224] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [240] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ 7f799c624bfa7f08 x13 (xor, xfer intreg #1) ++ 3e7857cc51fd19f0 x23 (xor, xfer intreg #2) ++ 0000000000000000 v17.d[0] (xor, xfer vecreg #1) ++ 0000000000000000 v17.d[1] (xor, xfer vecreg #1) ++ 0000000000000000 v18.d[0] (xor, xfer vecreg #2) ++ 0000000000000000 v18.d[1] (xor, xfer vecreg #2) ++ 0000000000000000 v19.d[0] (xor, xfer vecreg #3) ++ 0000000000000000 v19.d[1] (xor, xfer vecreg #3) ++ 0000000000000000 v20.d[0] (xor, xfer vecreg #3) ++ 0000000000000000 v20.d[1] (xor, xfer vecreg #3) ++ -40 x5 (sub, base reg) ++ 0 x6 (sub, index reg) ++ ++ldpsw x13, x23, [x5, #-40] with x5 = middle_of_block+0, x6=0 ++ [ 0] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 16] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 32] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 48] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 64] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 80] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [ 96] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [112] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [128] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [144] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [160] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [176] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [192] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [208] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [224] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ [240] .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ++ 01ba3febe99768c0 x13 (xor, xfer intreg #1) ++ 1cef424f7c21ff9b x23 (xor, xfer intreg #2) ++ 0000000000000000 v17.d[0] (xor, xfer vecreg #1) ++ 0000000000000000 v17.d[1] (xor, xfer vecreg #1) ++ 0000000000000000 v18.d[0] (xor, xfer vecreg #2) ++ 0000000000000000 v18.d[1] (xor, xfer vecreg #2) ++ 0000000000000000 v19.d[0] (xor, xfer vecreg #3) ++ 0000000000000000 v19.d[1] (xor, xfer vecreg #3) ++ 0000000000000000 v20.d[0] (xor, xfer vecreg #3) ++ 0000000000000000 v20.d[1] (xor, xfer vecreg #3) ++ 0 x5 (sub, base reg) ++ 0 x6 (sub, index reg) ++ +commit c10b13cb0ec8b797124d8379b7f932f92341bd4b +Author: sewardj +Date: Tue Mar 15 14:24:56 2016 +0000 + + arm64: implement LDPSW. Fixes #360425. Initial patch+investigation by Mark Wielaard. + + + git-svn-id: svn://svn.valgrind.org/vex/trunk@3212 8f6e269a-dfd6-0310-a8e1-e2731360e62c + +diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c +index 8da9780..d4fe1b8 100644 +--- a/VEX/priv/guest_arm64_toIR.c ++++ b/VEX/priv/guest_arm64_toIR.c +@@ -4804,7 +4804,6 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn) + (at-EA) + x0 101 0010 L imm7 Rt2 Rn Rt1 mmP Rt1,Rt2, [Xn|SP, #imm] + */ +- + UInt insn_30_23 = INSN(30,23); + if (insn_30_23 == BITS8(0,1,0,1,0,0,0,1) + || insn_30_23 == BITS8(0,1,0,1,0,0,1,1) +@@ -4912,6 +4911,87 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn) + } + } + ++ /* -------- LDPSW (immediate, simm7) (INT REGS) -------- */ ++ /* Does 32 bit transfers which are sign extended to 64 bits. ++ simm7 is scaled by the (single-register) transfer size ++ ++ (at-Rn-then-Rn=EA) ++ 01 101 0001 1 imm7 Rt2 Rn Rt1 LDPSW Rt1,Rt2, [Xn|SP], #imm ++ ++ (at-EA-then-Rn=EA) ++ 01 101 0011 1 imm7 Rt2 Rn Rt1 LDPSW Rt1,Rt2, [Xn|SP, #imm]! ++ ++ (at-EA) ++ 01 101 0010 1 imm7 Rt2 Rn Rt1 LDPSW Rt1,Rt2, [Xn|SP, #imm] ++ */ ++ UInt insn_31_22 = INSN(31,22); ++ if (insn_31_22 == BITS10(0,1,1,0,1,0,0,0,1,1) ++ || insn_31_22 == BITS10(0,1,1,0,1,0,0,1,1,1) ++ || insn_31_22 == BITS10(0,1,1,0,1,0,0,1,0,1)) { ++ UInt bWBack = INSN(23,23); ++ UInt rT1 = INSN(4,0); ++ UInt rN = INSN(9,5); ++ UInt rT2 = INSN(14,10); ++ Long simm7 = (Long)sx_to_64(INSN(21,15), 7); ++ if ((bWBack && (rT1 == rN || rT2 == rN) && rN != 31) ++ || (rT1 == rT2)) { ++ /* undecodable; fall through */ ++ } else { ++ if (rN == 31) { /* FIXME generate stack alignment check */ } ++ ++ // Compute the transfer address TA and the writeback address WA. ++ IRTemp tRN = newTemp(Ity_I64); ++ assign(tRN, getIReg64orSP(rN)); ++ IRTemp tEA = newTemp(Ity_I64); ++ simm7 = 4 * simm7; ++ assign(tEA, binop(Iop_Add64, mkexpr(tRN), mkU64(simm7))); ++ ++ IRTemp tTA = newTemp(Ity_I64); ++ IRTemp tWA = newTemp(Ity_I64); ++ switch (INSN(24,23)) { ++ case BITS2(0,1): ++ assign(tTA, mkexpr(tRN)); assign(tWA, mkexpr(tEA)); break; ++ case BITS2(1,1): ++ assign(tTA, mkexpr(tEA)); assign(tWA, mkexpr(tEA)); break; ++ case BITS2(1,0): ++ assign(tTA, mkexpr(tEA)); /* tWA is unused */ break; ++ default: ++ vassert(0); /* NOTREACHED */ ++ } ++ ++ // 32 bit load, sign extended to 64 bits ++ putIReg64orZR(rT1, unop(Iop_32Sto64, ++ loadLE(Ity_I32, binop(Iop_Add64, ++ mkexpr(tTA), ++ mkU64(0))))); ++ putIReg64orZR(rT2, unop(Iop_32Sto64, ++ loadLE(Ity_I32, binop(Iop_Add64, ++ mkexpr(tTA), ++ mkU64(4))))); ++ if (bWBack) ++ putIReg64orSP(rN, mkexpr(tEA)); ++ ++ const HChar* fmt_str = NULL; ++ switch (INSN(24,23)) { ++ case BITS2(0,1): ++ fmt_str = "ldpsw %s, %s, [%s], #%lld (at-Rn-then-Rn=EA)\n"; ++ break; ++ case BITS2(1,1): ++ fmt_str = "ldpsw %s, %s, [%s, #%lld]! (at-EA-then-Rn=EA)\n"; ++ break; ++ case BITS2(1,0): ++ fmt_str = "ldpsw %s, %s, [%s, #%lld] (at-Rn)\n"; ++ break; ++ default: ++ vassert(0); ++ } ++ DIP(fmt_str, nameIReg64orZR(rT1), ++ nameIReg64orZR(rT2), ++ nameIReg64orSP(rN), simm7); ++ return True; ++ } ++ } ++ + /* ---------------- LDR (literal, int reg) ---------------- */ + /* 31 29 23 4 + 00 011 000 imm19 Rt LDR Wt, [PC + sxTo64(imm19 << 2)] diff --git a/SOURCES/valgrind-3.11.0-arm64-ldr-literal-test.patch b/SOURCES/valgrind-3.11.0-arm64-ldr-literal-test.patch new file mode 100644 index 0000000..3923bba --- /dev/null +++ b/SOURCES/valgrind-3.11.0-arm64-ldr-literal-test.patch @@ -0,0 +1,55 @@ +Index: valgrind/none/tests/arm64/memory.c +=================================================================== +--- valgrind/none/tests/arm64/memory.c (revision 15827) ++++ valgrind/none/tests/arm64/memory.c (working copy) +@@ -157,18 +157,18 @@ + + //////////////////////////////////////////////////////////////// + // This is a bit tricky. We load the value from just before and +-// just after the actual instruction. Because TESTINSN2_hide2 +-// generates two fixed insns either side of the test insn, these +-// should be constant and hence "safe" to check. ++// just after the actual instruction. So we place a couple of ++// nop insns either side of the test insn, these should "safe" ++// to check. + + printf("LDR (literal, int reg)\n"); +-TESTINST2_hide2("xyzzy00: ldr x21, xyzzy00 - 8", AREA_MID, x21,x22,0); +-TESTINST2_hide2("xyzzy01: ldr x21, xyzzy01 + 0", AREA_MID, x21,x22,0); +-TESTINST2_hide2("xyzzy02: ldr x21, xyzzy02 + 8", AREA_MID, x21,x22,0); ++TESTINST2_hide2("nop; nop; nop; xyzzy00: ldr x21, xyzzy00 - 8; nop; nop; nop", AREA_MID, x21,x22,0); ++TESTINST2_hide2("nop; nop; nop; xyzzy01: ldr x21, xyzzy01 + 0; nop; nop; nop", AREA_MID, x21,x22,0); ++TESTINST2_hide2("nop; nop; nop; xyzzy02: ldr x21, xyzzy02 + 8; nop; nop; nop", AREA_MID, x21,x22,0); + +-TESTINST2_hide2("xyzzy03: ldr x21, xyzzy03 - 4", AREA_MID, x21,x22,0); +-TESTINST2_hide2("xyzzy04: ldr x21, xyzzy04 + 0", AREA_MID, x21,x22,0); +-TESTINST2_hide2("xyzzy05: ldr x21, xyzzy05 + 4", AREA_MID, x21,x22,0); ++TESTINST2_hide2("nop; nop; nop; xyzzy03: ldr x21, xyzzy03 - 4; nop; nop; nop", AREA_MID, x21,x22,0); ++TESTINST2_hide2("nop; nop; nop; xyzzy04: ldr x21, xyzzy04 + 0; nop; nop; nop", AREA_MID, x21,x22,0); ++TESTINST2_hide2("nop; nop; nop; xyzzy05: ldr x21, xyzzy05 + 4; nop; nop; nop", AREA_MID, x21,x22,0); + + //////////////////////////////////////////////////////////////// + printf("{LD,ST}R (integer register) (entirely MISSING)\n"); +Index: valgrind/none/tests/arm64/memory.stdout.exp +=================================================================== +--- valgrind/none/tests/arm64/memory.stdout.exp (revision 15827) ++++ valgrind/none/tests/arm64/memory.stdout.exp (working copy) +@@ -21,12 +21,12 @@ + ldp w21, w28, [x22, #-40] ; add x21,x21,x28 :: rd 000000019b999794 rn (hidden), cin 0, nzcv 00000000 + ldp w21, w28, [x22, #-40] ; eor x21,x21,x28 :: rd 0000000004040404 rn (hidden), cin 0, nzcv 00000000 + LDR (literal, int reg) +-xyzzy00: ldr x21, xyzzy00 - 8 :: rd aa0003f6d51b4203 rn (hidden), cin 0, nzcv 00000000 +-xyzzy01: ldr x21, xyzzy01 + 0 :: rd aa1503e258000015 rn (hidden), cin 0, nzcv 00000000 +-xyzzy02: ldr x21, xyzzy02 + 8 :: rd 911e43a0d53b4201 rn (hidden), cin 0, nzcv 00000000 +-xyzzy03: ldr x21, xyzzy03 - 4 :: rd 58fffff5aa0003f6 rn (hidden), cin 0, nzcv 00000000 +-xyzzy04: ldr x21, xyzzy04 + 0 :: rd aa1503e258000015 rn (hidden), cin 0, nzcv 00000000 +-xyzzy05: ldr x21, xyzzy05 + 4 :: rd d53b4201aa1503e2 rn (hidden), cin 0, nzcv 00000000 ++nop; nop; nop; xyzzy00: ldr x21, xyzzy00 - 8; nop; nop; nop :: rd d503201fd503201f rn (hidden), cin 0, nzcv 00000000 ++nop; nop; nop; xyzzy01: ldr x21, xyzzy01 + 0; nop; nop; nop :: rd d503201f58000015 rn (hidden), cin 0, nzcv 00000000 ++nop; nop; nop; xyzzy02: ldr x21, xyzzy02 + 8; nop; nop; nop :: rd d503201fd503201f rn (hidden), cin 0, nzcv 00000000 ++nop; nop; nop; xyzzy03: ldr x21, xyzzy03 - 4; nop; nop; nop :: rd 58fffff5d503201f rn (hidden), cin 0, nzcv 00000000 ++nop; nop; nop; xyzzy04: ldr x21, xyzzy04 + 0; nop; nop; nop :: rd d503201f58000015 rn (hidden), cin 0, nzcv 00000000 ++nop; nop; nop; xyzzy05: ldr x21, xyzzy05 + 4; nop; nop; nop :: rd d503201fd503201f rn (hidden), cin 0, nzcv 00000000 + {LD,ST}R (integer register) (entirely MISSING) + LDRS{B,H,W} (uimm12) + ldrsw x21, [x22, #24] :: rd ffffffff8b8a8988 rn (hidden), cin 0, nzcv 00000000 diff --git a/SOURCES/valgrind-3.11.0-arm64-more-syscalls.patch b/SOURCES/valgrind-3.11.0-arm64-more-syscalls.patch new file mode 100644 index 0000000..0d07fcd --- /dev/null +++ b/SOURCES/valgrind-3.11.0-arm64-more-syscalls.patch @@ -0,0 +1,5823 @@ +From fe31b9a6fe9aad1a83c996032717f4757ff21f75 Mon Sep 17 00:00:00 2001 +From: mjw +Date: Wed, 9 Mar 2016 16:18:34 +0000 +Subject: [PATCH 1/3] Use correct syscall numbers on arm64. Fix rename, dup2 + and getpgrp. + +We were using some wrong syscall numbers in vki-scnums-arm64-linux.h +arm64 doesn't implement a couple of old deprecated system calls like +rename, dup2, getpgrp and fork. Adjust m_libcfile.c rename and dup2 +functions to use renameat (also on tilegx) and dup3 (with fcntl fallback +for bad oldfd). And in m_libcproc.c implement getpgrp as getpgid(0). +Also don't compile the fork syswrap on arm64 (it only supports clone). + +In practice this only affected callgrind which was unable to rename +dump files in some cases and ELF core dumps might have contained some +bogus prstatus fields. + +Related to bug #359503 - Add missing syscalls for aarch64 (arm64) +Reported by Marcin Juszkiewicz who also posted a nice overview +of system calls on different linux architectures: +https://marcin.juszkiewicz.com.pl/2016/03/05/from-a-diary-of-aarch64-porter-system-calls/ + +git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15824 a5019735-40e9-0310-863c-91ae7b9d1cf9 +--- + coregrind/m_libcfile.c | 23 ++++++++++++++------- + coregrind/m_libcproc.c | 4 +++- + coregrind/m_syswrap/syswrap-generic.c | 4 ++-- + include/vki/vki-scnums-arm64-linux.h | 38 +++++++++++++++++------------------ + 4 files changed, 40 insertions(+), 29 deletions(-) + +diff --git a/coregrind/m_libcfile.c b/coregrind/m_libcfile.c +index 7e94ce3..c413db1 100644 +--- a/coregrind/m_libcfile.c ++++ b/coregrind/m_libcfile.c +@@ -480,7 +480,18 @@ SysRes VG_(dup) ( Int oldfd ) + + SysRes VG_(dup2) ( Int oldfd, Int newfd ) + { +-# if defined(VGO_linux) || defined(VGO_darwin) ++# if defined(VGP_arm64_linux) ++ /* We only have dup3, that means we have to mimic dup2. ++ The only real difference is when oldfd == newfd. ++ dup3 always returns an error, but dup2 returns only an ++ error if the fd is invalid, otherwise it returns newfd. */ ++ if (oldfd == newfd) { ++ if (VG_(fcntl)(oldfd, VKI_F_GETFL, 0) == -1) ++ return VG_(mk_SysRes_Error)(VKI_EBADF); ++ return VG_(mk_SysRes_Success)(newfd); ++ } ++ return VG_(do_syscall3)(__NR_dup3, oldfd, newfd, 0); ++# elif defined(VGO_linux) || defined(VGO_darwin) + return VG_(do_syscall2)(__NR_dup2, oldfd, newfd); + # elif defined(VGO_solaris) + return VG_(do_syscall3)(__NR_fcntl, oldfd, F_DUP2FD, newfd); +@@ -504,14 +515,12 @@ Int VG_(fcntl) ( Int fd, Int cmd, Addr arg ) + + Int VG_(rename) ( const HChar* old_name, const HChar* new_name ) + { +-# if defined(VGP_tilegx_linux) +- SysRes res = VG_(do_syscall3)(__NR_renameat, VKI_AT_FDCWD, +- (UWord)old_name, (UWord)new_name); +-# elif defined(VGO_linux) || defined(VGO_darwin) +- SysRes res = VG_(do_syscall2)(__NR_rename, (UWord)old_name, (UWord)new_name); +-# elif defined(VGO_solaris) ++# if defined(VGO_solaris) \ ++ || defined(VGP_arm64_linux) || defined(VGP_tilegx_linux) + SysRes res = VG_(do_syscall4)(__NR_renameat, VKI_AT_FDCWD, (UWord)old_name, + VKI_AT_FDCWD, (UWord)new_name); ++# elif defined(VGO_linux) || defined(VGO_darwin) ++ SysRes res = VG_(do_syscall2)(__NR_rename, (UWord)old_name, (UWord)new_name); + # else + # error "Unknown OS" + # endif +diff --git a/coregrind/m_libcproc.c b/coregrind/m_libcproc.c +index a30f7dc..eb911be 100644 +--- a/coregrind/m_libcproc.c ++++ b/coregrind/m_libcproc.c +@@ -708,7 +708,9 @@ Int VG_(getpid) ( void ) + Int VG_(getpgrp) ( void ) + { + /* ASSUMES SYSCALL ALWAYS SUCCEEDS */ +-# if defined(VGO_linux) || defined(VGO_darwin) ++# if defined(VGP_arm64_linux) ++ return sr_Res( VG_(do_syscall1)(__NR_getpgid, 0) ); ++# elif defined(VGO_linux) || defined(VGO_darwin) + return sr_Res( VG_(do_syscall0)(__NR_getpgrp) ); + # elif defined(VGO_solaris) + /* Uses the shared pgrpsys syscall, 0 for the getpgrp variant. */ +diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c +index 2eaf505..dd1da9c 100644 +--- a/coregrind/m_syswrap/syswrap-generic.c ++++ b/coregrind/m_syswrap/syswrap-generic.c +@@ -3264,7 +3264,7 @@ POST(sys_newfstat) + POST_MEM_WRITE( ARG2, sizeof(struct vki_stat) ); + } + +-#if !defined(VGO_solaris) ++#if !defined(VGO_solaris) && !defined(VGP_arm64_linux) + static vki_sigset_t fork_saved_mask; + + // In Linux, the sys_fork() function varies across architectures, but we +@@ -3327,7 +3327,7 @@ PRE(sys_fork) + VG_(sigprocmask)(VKI_SIG_SETMASK, &fork_saved_mask, NULL); + } + } +-#endif // !defined(VGO_solaris) ++#endif // !defined(VGO_solaris) && !defined(VGP_arm64_linux) + + PRE(sys_ftruncate) + { +diff --git a/include/vki/vki-scnums-arm64-linux.h b/include/vki/vki-scnums-arm64-linux.h +index f70a2ed..e963c45 100644 +--- a/include/vki/vki-scnums-arm64-linux.h ++++ b/include/vki/vki-scnums-arm64-linux.h +@@ -331,7 +331,7 @@ + //#define __NR_link 1025 + //__SYSCALL(__NR_link, sys_link) + //#define __NR_unlink 1026 +-#define __NR_mknod 1027 ++//#define __NR_mknod 1027 + //#define __NR_chmod 1028 + //__SYSCALL(__NR_chmod, sys_chmod) + //#define __NR_chown 1029 +@@ -342,8 +342,8 @@ + //__SYSCALL(__NR_rmdir, sys_rmdir) + //#define __NR_lchown 1032 + //__SYSCALL(__NR_lchown, sys_lchown) +-#define __NR_access 1033 +-#define __NR_rename 1034 ++//#define __NR_access 1033 ++//#define __NR_rename 1034 + //#define __NR_readlink 1035 + //#define __NR_symlink 1036 + //__SYSCALL(__NR_symlink, sys_symlink) +@@ -359,8 +359,8 @@ + //#endif /* __ARCH_WANT_SYSCALL_NO_AT */ + // + //#ifdef __ARCH_WANT_SYSCALL_NO_FLAGS +-#define __NR_pipe 1040 +-#define __NR_dup2 1041 ++//#define __NR_pipe 1040 ++//#define __NR_dup2 1041 + //#define __NR_epoll_create 1042 + //__SYSCALL(__NR_epoll_create, sys_epoll_create) + //#define __NR_inotify_init 1043 +@@ -383,7 +383,7 @@ + //__SYSCALL(__NR_ftruncate, sys_ftruncate) + //#define __NR_truncate 1048 + //__SYSCALL(__NR_truncate, sys_truncate) +-#define __NR_stat 1049 ++//#define __NR_stat 1049 + //#define __NR_lstat 1050 + //__SYSCALL(__NR_lstat, sys_newlstat) + //ZZ#define __NR_fstat 1051 +@@ -399,7 +399,7 @@ + //#define __NR_statfs 1056 + //__SYSCALL(__NR_statfs, sys_statfs) + //#define __NR_lseek 1057 +-#define __NR_mmap 1058 ++//#define __NR_mmap 1058 + // + //#undef __NR_syscalls + //#define __NR_syscalls (__NR_mmap+1) +@@ -409,7 +409,7 @@ + //#define __NR_alarm 1059 + //#define __ARCH_WANT_SYS_ALARM + //__SYSCALL(__NR_alarm, sys_alarm) +-#define __NR_getpgrp 1060 ++//#define __NR_getpgrp 1060 + //#define __ARCH_WANT_SYS_GETPGRP + //__SYSCALL(__NR_getpgrp, sys_getpgrp) + //#define __NR_pause 1061 +@@ -425,13 +425,13 @@ + // + //#define __NR_creat 1064 + //__SYSCALL(__NR_creat, sys_creat) +-#define __NR_getdents 1065 ++//#define __NR_getdents 1065 + //#define __NR_futimesat 1066 + //__SYSCALL(__NR_futimesat, sys_futimesat) + //#define __NR_select 1067 + //#define __ARCH_WANT_SYS_SELECT + //__SYSCALL(__NR_select, sys_select) +-#define __NR_poll 1068 ++//#define __NR_poll 1068 + //#define __NR_epoll_wait 1069 + //__SYSCALL(__NR_epoll_wait, sys_epoll_wait) + //#define __NR_ustat 1070 +@@ -454,7 +454,7 @@ + //#define __NR__sysctl 1078 + //__SYSCALL(__NR__sysctl, sys_sysctl) + // +-#define __NR_fork 1079 ++//#define __NR_fork 1079 + //#ifdef CONFIG_MMU + //__SYSCALL(__NR_fork, sys_fork) + //#else +@@ -478,16 +478,16 @@ + // */ + //#if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT) + #define __NR_fcntl __NR3264_fcntl +-//#define __NR_statfs __NR3264_statfs +-//#define __NR_fstatfs __NR3264_fstatfs +-//#define __NR_truncate __NR3264_truncate +-//#define __NR_ftruncate __NR3264_ftruncate ++#define __NR_statfs __NR3264_statfs ++#define __NR_fstatfs __NR3264_fstatfs ++#define __NR_truncate __NR3264_truncate ++#define __NR_ftruncate __NR3264_ftruncate + #define __NR_lseek __NR3264_lseek +-//#define __NR_sendfile __NR3264_sendfile +-//#define __NR_newfstatat __NR3264_fstatat ++#define __NR_sendfile __NR3264_sendfile ++#define __NR_newfstatat __NR3264_fstatat + #define __NR_fstat __NR3264_fstat +-//#define __NR_mmap __NR3264_mmap +-//#define __NR_fadvise64 __NR3264_fadvise64 ++#define __NR_mmap __NR3264_mmap ++#define __NR_fadvise64 __NR3264_fadvise64 + //#ifdef __NR3264_stat + //#define __NR_stat __NR3264_stat + //#define __NR_lstat __NR3264_lstat +-- +2.5.0 + +From a4070ecdf2b2ade10ccf77518e97cc8a8280fd34 Mon Sep 17 00:00:00 2001 +From: mjw +Date: Wed, 9 Mar 2016 16:18:36 +0000 +Subject: [PATCH 2/3] Add arm64 scalar test. Enable tested syscalls. + +The new memcheck/tests/arm64-linux/scalar test is based on the +memcheck/tests/x86-linux/scalar test and contains all syscalls +that are also available on arm64. To make comparison of exp results +easier the order of the tested syscalls is the same as on x86. +This enables a couple extra arm64 syscalls. Part of the fix for +bug #359503 - Add missing syscalls for aarch64 (arm64). + +git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15825 a5019735-40e9-0310-863c-91ae7b9d1cf9 +--- + configure.ac | 1 + + coregrind/m_syswrap/syswrap-arm64-linux.c | 127 +- + coregrind/m_syswrap/syswrap-linux.c | 2 +- + memcheck/tests/Makefile.am | 6 +- + memcheck/tests/arm64-linux/Makefile.am | 19 + + memcheck/tests/arm64-linux/filter_stderr | 3 + + memcheck/tests/arm64-linux/scalar.c | 1278 +++++++++++++ + memcheck/tests/arm64-linux/scalar.h | 62 + + memcheck/tests/arm64-linux/scalar.stderr.exp | 2598 ++++++++++++++++++++++++++ + memcheck/tests/arm64-linux/scalar.vgtest | 3 + + 10 files changed, 4033 insertions(+), 66 deletions(-) + create mode 100644 memcheck/tests/arm64-linux/Makefile.am + create mode 100755 memcheck/tests/arm64-linux/filter_stderr + create mode 100644 memcheck/tests/arm64-linux/scalar.c + create mode 100644 memcheck/tests/arm64-linux/scalar.h + create mode 100644 memcheck/tests/arm64-linux/scalar.stderr.exp + create mode 100644 memcheck/tests/arm64-linux/scalar.vgtest + +diff --git a/configure.ac b/configure.ac +index ea08341..888a308 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4134,6 +4134,7 @@ AC_CONFIG_FILES([ + memcheck/tests/darwin/Makefile + memcheck/tests/solaris/Makefile + memcheck/tests/amd64-linux/Makefile ++ memcheck/tests/arm64-linux/Makefile + memcheck/tests/x86-linux/Makefile + memcheck/tests/amd64-solaris/Makefile + memcheck/tests/x86-solaris/Makefile +diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c +index abddff1..8f4efa6 100644 +--- a/coregrind/m_syswrap/syswrap-arm64-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm64-linux.c +@@ -855,6 +855,11 @@ PRE(sys_rt_sigreturn) + // (unknown). + + static SyscallTableEntry syscall_main_table[] = { ++ LINXY(__NR_io_setup, sys_io_setup), // 0 ++ LINX_(__NR_io_destroy, sys_io_destroy), // 1 ++ LINX_(__NR_io_submit, sys_io_submit), // 2 ++ LINXY(__NR_io_cancel, sys_io_cancel), // 3 ++ LINXY(__NR_io_getevents, sys_io_getevents), // 4 + LINX_(__NR_setxattr, sys_setxattr), // 5 + LINX_(__NR_lsetxattr, sys_lsetxattr), // 6 + LINX_(__NR_fsetxattr, sys_fsetxattr), // 7 +@@ -868,20 +873,19 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_(__NR_lremovexattr, sys_lremovexattr), // 15 + LINX_(__NR_fremovexattr, sys_fremovexattr), // 16 + GENXY(__NR_getcwd, sys_getcwd), // 17 ++ LINXY(__NR_lookup_dcookie, sys_lookup_dcookie), // 18 + LINXY(__NR_eventfd2, sys_eventfd2), // 19 + LINXY(__NR_epoll_create1, sys_epoll_create1), // 20 + LINX_(__NR_epoll_ctl, sys_epoll_ctl), // 21 + LINXY(__NR_epoll_pwait, sys_epoll_pwait), // 22 + GENXY(__NR_dup, sys_dup), // 23 + LINXY(__NR_dup3, sys_dup3), // 24 +- +- // FIXME IS THIS CORRECT? +- LINXY(__NR3264_fcntl, sys_fcntl), // 25 +- ++ LINXY(__NR_fcntl, sys_fcntl), // 25 + LINXY(__NR_inotify_init1, sys_inotify_init1), // 26 + LINX_(__NR_inotify_add_watch, sys_inotify_add_watch), // 27 + LINX_(__NR_inotify_rm_watch, sys_inotify_rm_watch), // 28 + LINXY(__NR_ioctl, sys_ioctl), // 29 ++ + GENX_(__NR_flock, sys_flock), // 32 + LINX_(__NR_mknodat, sys_mknodat), // 33 + LINX_(__NR_mkdirat, sys_mkdirat), // 34 +@@ -889,17 +893,13 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_(__NR_symlinkat, sys_symlinkat), // 36 + LINX_(__NR_linkat, sys_linkat), // 37 + LINX_(__NR_renameat, sys_renameat), // 38 ++ LINX_(__NR_umount2, sys_umount), // 39 ++ LINX_(__NR_mount, sys_mount), // 40 + +- LINX_(__NR_umount2, sys_umount), // 39 +- LINX_(__NR_mount, sys_mount), // 40 +- +- // FIXME IS THIS CORRECT? it may well not be. +- GENXY(__NR3264_statfs, sys_statfs), // 43 +- GENXY(__NR3264_fstatfs, sys_fstatfs), // 44 +- +- // FIXME IS THIS CORRECT? it may well not be. +- GENX_(__NR3264_ftruncate, sys_ftruncate), // 46 +- ++ GENXY(__NR_statfs, sys_statfs), // 43 ++ GENXY(__NR_fstatfs, sys_fstatfs), // 44 ++ GENX_(__NR_truncate, sys_truncate), // 45 ++ GENX_(__NR_ftruncate, sys_ftruncate), // 46 + LINX_(__NR_fallocate, sys_fallocate), // 47 + LINX_(__NR_faccessat, sys_faccessat), // 48 + GENX_(__NR_chdir, sys_chdir), // 49 +@@ -911,49 +911,75 @@ static SyscallTableEntry syscall_main_table[] = { + GENX_(__NR_fchown, sys_fchown), // 55 + LINXY(__NR_openat, sys_openat), // 56 + GENXY(__NR_close, sys_close), // 57 ++ LINX_(__NR_vhangup, sys_vhangup), // 58 + LINXY(__NR_pipe2, sys_pipe2), // 59 + LINX_(__NR_quotactl, sys_quotactl), // 60 + GENXY(__NR_getdents64, sys_getdents64), // 61 +- +- // FIXME IS THIS CORRECT? +- LINX_(__NR3264_lseek, sys_lseek), // 62 +- ++ LINX_(__NR_lseek, sys_lseek), // 62 + GENXY(__NR_read, sys_read), // 63 + GENX_(__NR_write, sys_write), // 64 + GENXY(__NR_readv, sys_readv), // 65 + GENX_(__NR_writev, sys_writev), // 66 + GENXY(__NR_pread64, sys_pread64), // 67 + GENX_(__NR_pwrite64, sys_pwrite64), // 68 ++ ++ LINXY(__NR_sendfile, sys_sendfile), // 71 + LINXY(__NR_pselect6, sys_pselect6), // 72 + LINXY(__NR_ppoll, sys_ppoll), // 73 + LINXY(__NR_signalfd4, sys_signalfd4), // 74 +- LINX_(__NR_readlinkat, sys_readlinkat), // 78 + +- // FIXME IS THIS CORRECT? +- LINXY(__NR3264_fstatat, sys_newfstatat), // 79 +- GENXY(__NR3264_fstat, sys_newfstat), // 80 +- +- LINX_(__NR_utimensat, sys_utimensat), // 88 ++ LINX_(__NR_readlinkat, sys_readlinkat), // 78 ++ LINXY(__NR_newfstatat, sys_newfstatat), // 79 ++ GENXY(__NR_fstat, sys_newfstat), // 80 ++ GENX_(__NR_sync, sys_sync), // 81 + GENX_(__NR_fsync, sys_fsync), // 82 + GENX_(__NR_fdatasync, sys_fdatasync), // 83 ++ + LINXY(__NR_timerfd_create, sys_timerfd_create), // 85 + LINXY(__NR_timerfd_settime, sys_timerfd_settime), // 86 + LINXY(__NR_timerfd_gettime, sys_timerfd_gettime), // 87 ++ LINX_(__NR_utimensat, sys_utimensat), // 88 ++ GENX_(__NR_acct, sys_acct), // 89 + LINXY(__NR_capget, sys_capget), // 90 ++ LINX_(__NR_capset, sys_capset), // 91 ++ LINX_(__NR_personality, sys_personality), // 92 + GENX_(__NR_exit, sys_exit), // 93 + LINX_(__NR_exit_group, sys_exit_group), // 94 ++ + LINX_(__NR_set_tid_address, sys_set_tid_address), // 96 ++ + LINXY(__NR_futex, sys_futex), // 98 + LINX_(__NR_set_robust_list, sys_set_robust_list), // 99 ++ + GENXY(__NR_nanosleep, sys_nanosleep), // 101 ++ GENXY(__NR_getitimer, sys_getitimer), // 102 + GENXY(__NR_setitimer, sys_setitimer), // 103 ++ GENX_(__NR_kexec_load, sys_ni_syscall), // 104 ++ LINX_(__NR_init_module, sys_init_module), // 105 ++ ++ LINXY(__NR_timer_create, sys_timer_create), // 107 ++ LINXY(__NR_timer_settime, sys_timer_settime), // 108 ++ LINXY(__NR_timer_gettime, sys_timer_gettime), // 109 ++ LINX_(__NR_timer_getoverrun, sys_timer_getoverrun), // 110 ++ LINX_(__NR_timer_delete, sys_timer_delete), // 111 ++ LINX_(__NR_clock_settime, sys_clock_settime), // 112 + LINXY(__NR_clock_gettime, sys_clock_gettime), // 113 + LINXY(__NR_clock_getres, sys_clock_getres), // 114 ++ + LINXY(__NR_syslog, sys_syslog), // 116 ++ ++ LINXY(__NR_sched_setparam, sys_sched_setparam), // 118 ++ LINX_(__NR_sched_setscheduler,sys_sched_setscheduler),// 119 ++ LINX_(__NR_sched_getscheduler,sys_sched_getscheduler),// 120 ++ LINXY(__NR_sched_getparam, sys_sched_getparam), // 121 + LINX_(__NR_sched_setaffinity, sys_sched_setaffinity), // 122 + LINXY(__NR_sched_getaffinity, sys_sched_getaffinity), // 123 + LINX_(__NR_sched_yield, sys_sched_yield), // 124 ++ LINX_(__NR_sched_get_priority_max, sys_sched_get_priority_max),// 125 ++ LINX_(__NR_sched_get_priority_min, sys_sched_get_priority_min),// 126 ++ + GENX_(__NR_kill, sys_kill), // 129 ++ + LINX_(__NR_tgkill, sys_tgkill), // 131 + GENXY(__NR_sigaltstack, sys_sigaltstack), // 132 + LINX_(__NR_rt_sigsuspend, sys_rt_sigsuspend), // 133 +@@ -965,6 +991,7 @@ static SyscallTableEntry syscall_main_table[] = { + PLAX_(__NR_rt_sigreturn, sys_rt_sigreturn), // 139 + GENX_(__NR_setpriority, sys_setpriority), // 140 + GENX_(__NR_getpriority, sys_getpriority), // 141 ++ + GENX_(__NR_setregid, sys_setregid), // 143 + GENX_(__NR_setgid, sys_setgid), // 144 + GENX_(__NR_setreuid, sys_setreuid), // 145 +@@ -973,6 +1000,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY(__NR_getresuid, sys_getresuid), // 148 + LINX_(__NR_setresgid, sys_setresgid), // 149 + LINXY(__NR_getresgid, sys_getresgid), // 150 ++ LINX_(__NR_setfsuid, sys_setfsuid), // 151 ++ LINX_(__NR_setfsgid, sys_setfsgid), // 152 + GENXY(__NR_times, sys_times), // 153 + GENX_(__NR_setpgid, sys_setpgid), // 154 + GENX_(__NR_getpgid, sys_getpgid), // 155 +@@ -981,12 +1010,16 @@ static SyscallTableEntry syscall_main_table[] = { + GENXY(__NR_getgroups, sys_getgroups), // 158 + GENX_(__NR_setgroups, sys_setgroups), // 159 + GENXY(__NR_uname, sys_newuname), // 160 ++ + GENXY(__NR_getrlimit, sys_old_getrlimit), // 163 + GENX_(__NR_setrlimit, sys_setrlimit), // 164 + GENXY(__NR_getrusage, sys_getrusage), // 165 + GENX_(__NR_umask, sys_umask), // 166 + LINXY(__NR_prctl, sys_prctl), // 167 ++ + GENXY(__NR_gettimeofday, sys_gettimeofday), // 169 ++ GENX_(__NR_settimeofday, sys_settimeofday), // 170 ++ + GENX_(__NR_getpid, sys_getpid), // 172 + GENX_(__NR_getppid, sys_getppid), // 173 + GENX_(__NR_getuid, sys_getuid), // 174 +@@ -1033,18 +1066,20 @@ static SyscallTableEntry syscall_main_table[] = { + GENXY(__NR_munmap, sys_munmap), // 215 + GENX_(__NR_mremap, sys_mremap), // 216 + LINX_(__NR_add_key, sys_add_key), // 217 ++ + LINXY(__NR_keyctl, sys_keyctl), // 219 + PLAX_(__NR_clone, sys_clone), // 220 + GENX_(__NR_execve, sys_execve), // 221 +- +- // FIXME IS THIS CORRECT? +- PLAX_(__NR3264_mmap, sys_mmap), // 222 +- PLAX_(__NR3264_fadvise64, sys_fadvise64), // 223 ++ PLAX_(__NR_mmap, sys_mmap), // 222 ++ PLAX_(__NR_fadvise64, sys_fadvise64), // 223 + + GENXY(__NR_mprotect, sys_mprotect), // 226 + GENX_(__NR_msync, sys_msync), // 227 + GENX_(__NR_mlock, sys_mlock), // 228 ++ GENX_(__NR_munlock, sys_munlock), // 229 + GENX_(__NR_mlockall, sys_mlockall), // 230 ++ LINX_(__NR_munlockall, sys_munlockall), // 231 ++ GENXY(__NR_mincore, sys_mincore), // 232 + GENX_(__NR_madvise, sys_madvise), // 233 + LINX_(__NR_mbind, sys_mbind), // 235 + LINXY(__NR_get_mempolicy, sys_get_mempolicy), // 236 +@@ -1103,7 +1138,6 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ GENX_(__NR_nice, sys_nice), // 34 + //ZZ + //ZZ // GENX_(__NR_ftime, sys_ni_syscall), // 35 +-//ZZ GENX_(__NR_sync, sys_sync), // 36 + //ZZ GENX_(__NR_rename, sys_rename), // 38 + //ZZ GENX_(__NR_mkdir, sys_mkdir), // 39 + //ZZ +@@ -1116,7 +1150,6 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ LINX_(__NR_geteuid, sys_geteuid16), // 49 + //ZZ + //ZZ LINX_(__NR_getegid, sys_getegid16), // 50 +-//ZZ GENX_(__NR_acct, sys_acct), // 51 + //ZZ // GENX_(__NR_lock, sys_ni_syscall), // 53 + //ZZ + //ZZ LINXY(__NR_fcntl, sys_fcntl), // 55 +@@ -1138,7 +1171,6 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ //zz // (__NR_sethostname, sys_sethostname), // 74 */* + //ZZ //zz + //ZZ GENXY(__NR_getrlimit, sys_old_getrlimit), // 76 +-//ZZ GENX_(__NR_settimeofday, sys_settimeofday), // 79 + //ZZ + //ZZ LINXY(__NR_getgroups, sys_getgroups16), // 80 + //ZZ LINX_(__NR_setgroups, sys_setgroups16), // 81 +@@ -1165,14 +1197,12 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ // LINX_(__NR_ioperm, sys_ioperm), // 101 + //ZZ LINXY(__NR_socketcall, sys_socketcall), // 102 + //ZZ +-//ZZ GENXY(__NR_getitimer, sys_getitimer), // 105 + //ZZ GENXY(__NR_stat, sys_newstat), // 106 + //ZZ GENXY(__NR_lstat, sys_newlstat), // 107 + //ZZ GENXY(__NR_fstat, sys_newfstat), // 108 + //ZZ //zz // (__NR_olduname, sys_uname), // 109 -- obsolete + //ZZ //zz + //ZZ // GENX_(__NR_iopl, sys_iopl), // 110 +-//ZZ LINX_(__NR_vhangup, sys_vhangup), // 111 + //ZZ // GENX_(__NR_idle, sys_ni_syscall), // 112 + //ZZ // PLAXY(__NR_vm86old, sys_vm86old), // 113 __NR_syscall... weird + //ZZ //zz +@@ -1188,7 +1218,6 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ LINXY(__NR_sigprocmask, sys_sigprocmask), // 126 + //ZZ //zz // Nb: create_module() was removed 2.4-->2.6 + //ZZ // GENX_(__NR_create_module, sys_ni_syscall), // 127 +-//ZZ LINX_(__NR_init_module, sys_init_module), // 128 + //ZZ LINX_(__NR_delete_module, sys_delete_module), // 129 + //ZZ //zz + //ZZ //zz // Nb: get_kernel_syms() was removed 2.4-->2.6 +@@ -1197,10 +1226,7 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ //zz // (__NR_bdflush, sys_bdflush), // 134 */Linux + //ZZ //zz + //ZZ //zz // (__NR_sysfs, sys_sysfs), // 135 SVr4 +-//ZZ LINX_(__NR_personality, sys_personality), // 136 + //ZZ // GENX_(__NR_afs_syscall, sys_ni_syscall), // 137 +-//ZZ LINX_(__NR_setfsuid, sys_setfsuid16), // 138 +-//ZZ LINX_(__NR_setfsgid, sys_setfsgid16), // 139 + //ZZ + //ZZ LINXY(__NR__llseek, sys_llseek), // 140 + //ZZ GENXY(__NR_getdents, sys_getdents), // 141 +@@ -1208,16 +1234,6 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ + //ZZ LINXY(__NR__sysctl, sys_sysctl), // 149 + //ZZ +-//ZZ GENX_(__NR_munlock, sys_munlock), // 151 +-//ZZ LINX_(__NR_munlockall, sys_munlockall), // 153 +-//ZZ LINXY(__NR_sched_setparam, sys_sched_setparam), // 154 +-//ZZ +-//ZZ LINXY(__NR_sched_getparam, sys_sched_getparam), // 155 +-//ZZ LINX_(__NR_sched_setscheduler, sys_sched_setscheduler), // 156 +-//ZZ LINX_(__NR_sched_getscheduler, sys_sched_getscheduler), // 157 +-//ZZ LINX_(__NR_sched_get_priority_max, sys_sched_get_priority_max),// 159 +-//ZZ +-//ZZ LINX_(__NR_sched_get_priority_min, sys_sched_get_priority_min),// 160 + //ZZ //zz //LINX?(__NR_sched_rr_get_interval, sys_sched_rr_get_interval), // 161 */* + //ZZ LINX_(__NR_setresuid, sys_setresuid16), // 164 + //ZZ +@@ -1236,7 +1252,6 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ + //ZZ LINX_(__NR_chown, sys_chown16), // 182 + //ZZ +-//ZZ LINX_(__NR_capset, sys_capset), // 185 + //ZZ LINXY(__NR_sendfile, sys_sendfile), // 187 + //ZZ // GENXY(__NR_getpmsg, sys_getpmsg), // 188 + //ZZ // GENX_(__NR_putpmsg, sys_putpmsg), // 189 +@@ -1271,42 +1286,26 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ LINX_(__NR_setfsuid32, sys_setfsuid), // 215 + //ZZ LINX_(__NR_setfsgid32, sys_setfsgid), // 216 + //ZZ //zz // (__NR_pivot_root, sys_pivot_root), // 217 */Linux +-//ZZ GENXY(__NR_mincore, sys_mincore), // 218 + //ZZ + //ZZ LINXY(__NR_fcntl64, sys_fcntl64), // 221 + //ZZ // GENX_(222, sys_ni_syscall), // 222 + //ZZ // PLAXY(223, sys_syscall223), // 223 // sys_bproc? + //ZZ + //ZZ LINXY(__NR_tkill, sys_tkill), // 238 */Linux +-//ZZ LINXY(__NR_sendfile64, sys_sendfile64), // 239 + //ZZ + //ZZ LINXY(__NR_futex, sys_futex), // 240 + //ZZ LINXY(__NR_sched_getaffinity, sys_sched_getaffinity), // 242 + //ZZ // PLAX_(__NR_set_thread_area, sys_set_thread_area), // 243 + //ZZ // PLAX_(__NR_get_thread_area, sys_get_thread_area), // 244 + //ZZ +-//ZZ LINXY(__NR_io_setup, sys_io_setup), // 245 +-//ZZ LINX_(__NR_io_destroy, sys_io_destroy), // 246 +-//ZZ LINXY(__NR_io_getevents, sys_io_getevents), // 247 +-//ZZ LINX_(__NR_io_submit, sys_io_submit), // 248 +-//ZZ LINXY(__NR_io_cancel, sys_io_cancel), // 249 +-//ZZ + //ZZ // LINX_(__NR_fadvise64, sys_fadvise64), // 250 */(Linux?) + //ZZ GENX_(251, sys_ni_syscall), // 251 +-//ZZ // GENXY(__NR_lookup_dcookie, sys_lookup_dcookie), // 253 + //ZZ LINXY(__NR_epoll_create, sys_epoll_create), // 254 + //ZZ + //ZZ LINX_(__NR_epoll_ctl, sys_epoll_ctl), // 255 + //ZZ LINXY(__NR_epoll_wait, sys_epoll_wait), // 256 + //ZZ //zz // (__NR_remap_file_pages, sys_remap_file_pages), // 257 */Linux + //ZZ LINX_(__NR_set_tid_address, sys_set_tid_address), // 258 +-//ZZ LINXY(__NR_timer_create, sys_timer_create), // 259 +-//ZZ +-//ZZ LINXY(__NR_timer_settime, sys_timer_settime), // (timer_create+1) +-//ZZ LINXY(__NR_timer_gettime, sys_timer_gettime), // (timer_create+2) +-//ZZ LINX_(__NR_timer_getoverrun, sys_timer_getoverrun),//(timer_create+3) +-//ZZ LINX_(__NR_timer_delete, sys_timer_delete), // (timer_create+4) +-//ZZ LINX_(__NR_clock_settime, sys_clock_settime), // (timer_create+5) + //ZZ + //ZZ LINXY(__NR_clock_getres, sys_clock_getres), // (timer_create+7) + //ZZ LINXY(__NR_clock_nanosleep, sys_clock_nanosleep),// (timer_create+8) */* +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index 6fdacda..fa7f89e 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -5325,7 +5325,7 @@ POST(sys_lookup_dcookie) + #endif + + #if defined(VGP_amd64_linux) || defined(VGP_s390x_linux) \ +- || defined(VGP_tilegx_linux) ++ || defined(VGP_tilegx_linux) || defined(VGP_arm64_linux) + PRE(sys_lookup_dcookie) + { + *flags |= SfMayBlock; +diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am +index 368239f..8557a19 100644 +--- a/memcheck/tests/Makefile.am ++++ b/memcheck/tests/Makefile.am +@@ -38,6 +38,9 @@ endif + if VGCONF_PLATFORMS_INCLUDE_AMD64_LINUX + SUBDIRS += amd64-linux + endif ++if VGCONF_PLATFORMS_INCLUDE_ARM64_LINUX ++SUBDIRS += arm64-linux ++endif + if VGCONF_PLATFORMS_INCLUDE_X86_SOLARIS + SUBDIRS += x86-solaris + endif +@@ -46,7 +49,8 @@ SUBDIRS += amd64-solaris + endif + + DIST_SUBDIRS = x86 amd64 ppc32 ppc64 s390x linux \ +- darwin solaris x86-linux amd64-linux x86-solaris amd64-solaris \ ++ darwin solaris x86-linux amd64-linux arm64-linux \ ++ x86-solaris amd64-solaris \ + common . + + dist_noinst_SCRIPTS = \ +diff --git a/memcheck/tests/arm64-linux/Makefile.am b/memcheck/tests/arm64-linux/Makefile.am +new file mode 100644 +index 0000000..284d83f +--- /dev/null ++++ b/memcheck/tests/arm64-linux/Makefile.am +@@ -0,0 +1,19 @@ ++ ++include $(top_srcdir)/Makefile.tool-tests.am ++ ++dist_noinst_SCRIPTS = \ ++ filter_stderr ++ ++noinst_HEADERS = scalar.h ++ ++EXTRA_DIST = \ ++ scalar.stderr.exp scalar.vgtest ++ ++check_PROGRAMS = \ ++ scalar ++ ++ ++AM_CFLAGS += @FLAG_M64@ ++AM_CXXFLAGS += @FLAG_M64@ ++AM_CCASFLAGS += @FLAG_M64@ ++ +diff --git a/memcheck/tests/arm64-linux/filter_stderr b/memcheck/tests/arm64-linux/filter_stderr +new file mode 100755 +index 0000000..a778e97 +--- /dev/null ++++ b/memcheck/tests/arm64-linux/filter_stderr +@@ -0,0 +1,3 @@ ++#! /bin/sh ++ ++../filter_stderr "$@" +diff --git a/memcheck/tests/arm64-linux/scalar.c b/memcheck/tests/arm64-linux/scalar.c +new file mode 100644 +index 0000000..e8f2e43 +--- /dev/null ++++ b/memcheck/tests/arm64-linux/scalar.c +@@ -0,0 +1,1278 @@ ++/* This is the arm64 variant of memcheck/tests/x86-linux/scalar.c ++ syscalls are in x86 number order to make exp comparison easier. */ ++#define _GNU_SOURCE ++#include "../../memcheck.h" ++#include "scalar.h" ++#include ++#include ++#include ++#include // MREMAP_FIXED ++ ++// Here we are trying to trigger every syscall error (scalar errors and ++// memory errors) for every syscall. We do this by passing a lot of bogus ++// arguments, mostly 0 and 1 (often it's 1 because NULL ptr args often aren't ++// checked for memory errors, or in order to have a non-zero length used ++// with some buffer). So most of the syscalls don't actually succeed and do ++// anything. ++// ++// Occasionally we have to be careful not to cause Valgrind to seg fault in ++// its pre-syscall wrappers; it does so because it can't know in general ++// when memory is unaddressable, and so tries to dereference it when doing ++// PRE_MEM_READ/PRE_MEM_WRITE calls. (Note that Memcheck will ++// always issue an error message immediately before these seg faults occur). ++// ++// The output has numbers like "3s 2m" for each syscall. "s" is short for ++// "scalar", ie. the argument itself is undefined. "m" is short for "memory", ++// ie. the argument points to memory which is unaddressable. ++int main(void) ++{ ++ // uninitialised, but we know px[0] is 0x0 ++ long* px = malloc(sizeof(long)); ++ long x0 = px[0]; ++ long res; ++ ++ // All __NR_xxx numbers are taken from x86 ++ ++ // __NR_restart_syscall 0 // XXX: not yet handled, perhaps should be... ++ GO(__NR_restart_syscall, "n/a"); ++ //SY(__NR_restart_syscall); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_exit 1 ++ GO(__NR_exit, "below"); ++ // (see below) ++ ++ // __NR_fork arm64 only has clone ++ //GO(__NR_fork, "other"); ++ // (sse scalar_fork.c) ++ ++ // __NR_read 3 ++ // Nb: here we are also getting an error from the syscall arg itself. ++ GO(__NR_read, "1+3s 1m"); ++ SY(__NR_read+x0, x0, x0, x0+1); FAILx(EFAULT); ++ ++ // __NR_write 4 ++ GO(__NR_write, "3s 1m"); ++ SY(__NR_write, x0, x0, x0+1); FAIL; ++ ++ // __NR_open arm64 only as openat. ++ //GO(__NR_open, "(2-args) 2s 1m"); ++ //SY(__NR_open, x0, x0); FAIL; ++ ++ // Only 1s 0m errors -- the other 2s 1m have been checked in the previous ++ // open test, and if we test them they may be commoned up but they also ++ // may not. arm64 only has openat. ++ //GO(__NR_open, "(3-args) 1s 0m"); ++ //SY(__NR_open, "scalar.c", O_CREAT|O_EXCL, x0); FAIL; ++ ++ // __NR_close 6 ++ GO(__NR_close, "1s 0m"); ++ SY(__NR_close, x0-1); FAIL; ++ ++ // __NR_waitpid arm64 only has waitid. ++ //GO(__NR_waitpid, "3s 1m"); ++ //SY(__NR_waitpid, x0, x0+1, x0); FAIL; ++ ++ // __NR_creat arm64 only has openat ++ //GO(__NR_creat, "2s 1m"); ++ //SY(__NR_creat, x0, x0); FAIL; ++ ++ // __NR_link arm64 only has linkat ++ //GO(__NR_link, "2s 2m"); ++ //SY(__NR_link, x0, x0); FAIL; ++ ++ // __NR_unlink arm64 only has unlinkat ++ //GO(__NR_unlink, "1s 1m"); ++ //SY(__NR_unlink, x0); FAIL; ++ ++ // __NR_execve 11 ++ // Nb: could have 3 memory errors if we pass x0+1 as the 2nd and 3rd ++ // args, except for bug #93174. ++ GO(__NR_execve, "3s 1m"); ++ SY(__NR_execve, x0, x0, x0); FAIL; ++ ++ // __NR_chdir 12 ++ GO(__NR_chdir, "1s 1m"); ++ SY(__NR_chdir, x0); FAIL; ++ ++ // __NR_time on arm64 time is provided in the vdso ++ //GO(__NR_time, "1s 1m"); ++ //SY(__NR_time, x0+1); FAIL; ++ ++ // __NR_mknod arm64 only has mknodat ++ //GO(__NR_mknod, "3s 1m"); ++ //SY(__NR_mknod, x0, x0, x0); FAIL; ++ ++ // __NR_chmod arm64 only has chmodat ++ //GO(__NR_chmod, "2s 1m"); ++ //SY(__NR_chmod, x0, x0); FAIL; ++ ++ // __NR_lchown arm64 only has lchownat ++ //GO(__NR_lchown, "n/a"); ++ //SY(__NR_lchown); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_break arm64 has no break ++ //GO(__NR_break, "ni"); ++ //SY(__NR_break); FAIL; ++ ++ // __NR_oldstat arm64 has no oldstat ++ //GO(__NR_oldstat, "n/a"); ++ // (obsolete, not handled by Valgrind) ++ ++ // __NR_lseek 19 ++ GO(__NR_lseek, "3s 0m"); ++ SY(__NR_lseek, x0-1, x0, x0); FAILx(EBADF); ++ ++ // __NR_getpid 20 ++ GO(__NR_getpid, "0s 0m"); ++ SY(__NR_getpid); SUCC; ++ ++ // __NR_mount 21 ++ GO(__NR_mount, "5s 3m"); ++ SY(__NR_mount, x0, x0, x0, x0, x0); FAIL; ++ ++ // __NR_umount arm64 only has umount2 ++ //GO(__NR_umount, "1s 1m"); ++ //SY(__NR_umount, x0); FAIL; ++ ++ // __NR_setuid 23 ++ GO(__NR_setuid, "1s 0m"); ++ SY(__NR_setuid, x0); FAIL; ++ ++ // __NR_getuid 24 ++ GO(__NR_getuid, "0s 0m"); ++ SY(__NR_getuid); SUCC; ++ ++ // __NR_stime arm64 does not have stime ++ //GO(__NR_stime, "n/a"); ++ //SY(__NR_stime); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_ptrace arm64 does not use PTRACE_GETREGS ++ // XXX: memory pointed to be arg3 goes unchecked... otherwise would be 2m ++ //GO(__NR_ptrace, "4s 1m"); ++ //SY(__NR_ptrace, x0+PTRACE_GETREGS, x0, x0, x0); FAIL; ++ ++ // __NR_alarm arm64 only has ualarm ++ //GO(__NR_alarm, "1s 0m"); ++ //SY(__NR_alarm, x0); SUCC; ++ ++ // __NR_oldfstat arm64 does not have oldfstat ++ //GO(__NR_oldfstat, "n/a"); ++ // (obsolete, not handled by Valgrind) ++ ++ // __NR_pause arm64 does not have pause ++ //GO(__NR_pause, "ignore"); ++ // (hard to test, and no args so not much to be gained -- don't bother) ++ ++ // __NR_utime arm64 only has utimes ++ //GO(__NR_utime, "2s 2m"); ++ //SY(__NR_utime, x0, x0+1); FAIL; ++ ++ // __NR_stty arm64 doesn't have stty. ++ //GO(__NR_stty, "ni"); ++ //SY(__NR_stty); FAIL; ++ ++ // __NR_gtty arm64 doesm't have gtty. ++ //GO(__NR_gtty, "ni"); ++ //SY(__NR_gtty); FAIL; ++ ++ // __NR_access arm64 only has fsaccessat ++ //GO(__NR_access, "2s 1m"); ++ //SY(__NR_access, x0, x0); FAIL; ++ ++ // __NR_nice arm64 only has setpriority ++ //GO(__NR_nice, "1s 0m"); ++ //SY(__NR_nice, x0); SUCC; ++ ++ // __NR_ftime arm64 doesn't implement ftime ++ //GO(__NR_ftime, "ni"); ++ //SY(__NR_ftime); FAIL; ++ ++ // __NR_sync 36 ++ GO(__NR_sync, "0s 0m"); ++ SY(__NR_sync); SUCC; ++ ++ // __NR_kill 37 ++ GO(__NR_kill, "2s 0m"); ++ SY(__NR_kill, x0, x0); SUCC; ++ ++ // __NR_rename arm64 only has renameat ++ //GO(__NR_rename, "2s 2m"); ++ //SY(__NR_rename, x0, x0); FAIL; ++ ++ // __NR_mkdir arm64 only has mkdirat ++ //GO(__NR_mkdir, "2s 1m"); ++ //SY(__NR_mkdir, x0, x0); FAIL; ++ ++ // __NR_rmdir arm64 only has rmdirat ++ //GO(__NR_rmdir, "1s 1m"); ++ //SY(__NR_rmdir, x0); FAIL; ++ ++ // __NR_dup 41 ++ GO(__NR_dup, "1s 0m"); ++ SY(__NR_dup, x0-1); FAIL; ++ ++ // __NR_pipe arm64 only has pipe2 ++ //GO(__NR_pipe, "1s 1m"); ++ //SY(__NR_pipe, x0); FAIL; ++ ++ // __NR_times 43 ++ GO(__NR_times, "1s 1m"); ++ SY(__NR_times, x0+1); FAIL; ++ ++ // __NR_prof arm64 doesn't implement prof ++ //GO(__NR_prof, "ni"); ++ //SY(__NR_prof); FAIL; ++ ++ // __NR_brk 45 ++ GO(__NR_brk, "1s 0m"); ++ SY(__NR_brk, x0); SUCC; ++ ++ // __NR_setgid 46 ++ GO(__NR_setgid, "1s 0m"); ++ SY(__NR_setgid, x0); FAIL; ++ ++ // __NR_getgid 47 ++ GO(__NR_getgid, "0s 0m"); ++ SY(__NR_getgid); SUCC; ++ ++ // __NR_signal arm64 only has rt_sigaction ++ //GO(__NR_signal, "n/a"); ++ //SY(__NR_signal); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_geteuid 49 ++ GO(__NR_geteuid, "0s 0m"); ++ SY(__NR_geteuid); SUCC; ++ ++ // __NR_getegid 50 ++ GO(__NR_getegid, "0s 0m"); ++ SY(__NR_getegid); SUCC; ++ ++ // __NR_acct 51 ++ GO(__NR_acct, "1s 1m"); ++ SY(__NR_acct, x0); FAIL; ++ ++ // __NR_umount2 52 ++ GO(__NR_umount2, "2s 1m"); ++ SY(__NR_umount2, x0, x0); FAIL; ++ ++ // __NR_lock arm64 doesn't implement lock ++ //GO(__NR_lock, "ni"); ++ //SY(__NR_lock); FAIL; ++ ++ // __NR_ioctl 54 ++ #include ++ GO(__NR_ioctl, "3s 1m"); ++ SY(__NR_ioctl, x0, x0+TCSETS, x0); FAIL; ++ ++ // __NR_fcntl 55 ++ // As with sys_open(), the 'fd' error is suppressed for the later ones. ++ // For F_GETFD the 3rd arg is ignored ++ GO(__NR_fcntl, "(GETFD) 2s 0m"); ++ SY(__NR_fcntl, x0-1, x0+F_GETFD, x0); FAILx(EBADF); ++ ++ // For F_DUPFD the 3rd arg is 'arg'. We don't check the 1st two args ++ // because any errors may or may not be commoned up with the ones from ++ // the previous fcntl call. ++ GO(__NR_fcntl, "(DUPFD) 1s 0m"); ++ SY(__NR_fcntl, -1, F_DUPFD, x0); FAILx(EBADF); ++ ++ // For F_GETLK the 3rd arg is 'lock'. On x86, this fails w/EBADF. But ++ // on amd64 in 32-bit mode it fails w/EFAULT. We don't check the 1st two ++ // args for the reason given above. ++ GO(__NR_fcntl, "(GETLK) 1s 0m"); ++ SY(__NR_fcntl, -1, F_GETLK, x0); FAIL; //FAILx(EBADF); ++ ++ // __NR_mpx arm64 doesn't implement mpx ++ //GO(__NR_mpx, "ni"); ++ //SY(__NR_mpx); FAIL; ++ ++ // __NR_setpgid 57 ++ GO(__NR_setpgid, "2s 0m"); ++ SY(__NR_setpgid, x0, x0-1); FAIL; ++ ++ // __NR_ulimit arm64 doesn't implement ulimit ++ //GO(__NR_ulimit, "ni"); ++ //SY(__NR_ulimit); FAIL; ++ ++ // __NR_oldolduname arm64 doesn't implement oldolduname, ++ //GO(__NR_oldolduname, "n/a"); ++ // (obsolete, not handled by Valgrind) ++ ++ // __NR_umask 60 ++ GO(__NR_umask, "1s 0m"); ++ SY(__NR_umask, x0+022); SUCC; ++ ++ // __NR_chroot 61 ++ GO(__NR_chroot, "1s 1m"); ++ SY(__NR_chroot, x0); FAIL; ++ ++ // __NR_ustat arm64 only has statfs ++ //GO(__NR_ustat, "n/a"); ++ // (deprecated, not handled by Valgrind) ++ ++ // __NR_dup2 arm64 only has dup or dup3 ++ //GO(__NR_dup2, "2s 0m"); ++ //SY(__NR_dup2, x0-1, x0); FAIL; ++ ++ // __NR_getppid 64 ++ GO(__NR_getppid, "0s 0m"); ++ SY(__NR_getppid); SUCC; ++ ++ // __NR_getpgrp arm64 only has getpgid ++ //GO(__NR_getpgrp, "0s 0m"); ++ //SY(__NR_getpgrp); SUCC; ++ ++ // __NR_setsid 66 ++ GO(__NR_setsid, "0s 0m"); ++ SY(__NR_setsid); SUCC_OR_FAIL; ++ ++ // __NR_sigaction arm64 only has rt_sigaction ++ //GO(__NR_sigaction, "3s 4m"); ++ //SY(__NR_sigaction, x0, x0+&px[1], x0+&px[1]); FAIL; ++ ++ // __NR_sgetmask arm64 only has rt_sigprocmask ++ //GO(__NR_sgetmask, "n/a"); ++ //SY(__NR_sgetmask); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_ssetmask arm64 only has rt_sigprocmask ++ //GO(__NR_ssetmask, "n/a"); ++ //SY(__NR_ssetmask); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_setreuid 70 ++ GO(__NR_setreuid, "2s 0m"); ++ SY(__NR_setreuid, x0, x0); FAIL; ++ ++ // __NR_setregid 71 ++ GO(__NR_setregid, "2s 0m"); ++ SY(__NR_setregid, x0, x0); FAIL; ++ ++ // __NR_sigsuspend arm64 only has rt_sigsuspend ++ // XXX: how do you use this function? ++ //GO(__NR_sigsuspend, "ignore"); ++ // (I don't know how to test this...) ++ ++ // __NR_sigpending arm64 only has rt_sigpending ++ //GO(__NR_sigpending, "1s 1m"); ++ //SY(__NR_sigpending, x0); FAIL; ++ ++ // __NR_sethostname 74 ++ GO(__NR_sethostname, "n/a"); ++ //SY(__NR_sethostname); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_setrlimit 75 ++ GO(__NR_setrlimit, "2s 1m"); ++ SY(__NR_setrlimit, x0, x0); FAIL; ++ ++ // __NR_getrlimit 76 ++ GO(__NR_getrlimit, "2s 1m"); ++ SY(__NR_getrlimit, x0, x0); FAIL; ++ ++ // __NR_getrusage 77 ++ GO(__NR_getrusage, "2s 1m"); ++ SY(__NR_getrusage, x0, x0); FAIL; ++ ++ // __NR_gettimeofday 78 ++ GO(__NR_gettimeofday, "2s 2m"); ++ SY(__NR_gettimeofday, x0+1, x0+1); FAIL; ++ ++ // __NR_settimeofday 79 ++ GO(__NR_settimeofday, "2s 2m"); ++ SY(__NR_settimeofday, x0+1, x0+1); FAIL; ++ ++ // __NR_getgroups 80 ++ GO(__NR_getgroups, "2s 1m"); ++ SY(__NR_getgroups, x0+1, x0+1); FAIL; ++ ++ // __NR_setgroups 81 ++ GO(__NR_setgroups, "2s 1m"); ++ SY(__NR_setgroups, x0+1, x0+1); FAIL; ++ ++ // __NR_select arm64 only has pselect6 ++ //{ ++ // long args[5] = { x0+8, x0+0xffffffee, x0+1, x0+1, x0+1 }; ++ // GO(__NR_select, "1s 5m"); ++ // SY(__NR_select, args+x0); FAIL; ++ //} ++ ++ // __NR_symlink arm64 only has symlinkat ++ //GO(__NR_symlink, "2s 2m"); ++ //SY(__NR_symlink, x0, x0); FAIL; ++ ++ // __NR_oldlstat arm64 doesn't implement oldlstat ++ //GO(__NR_oldlstat, "n/a"); ++ // (obsolete, not handled by Valgrind) ++ ++ // __NR_readlink arm64 only has readlinkat ++ //GO(__NR_readlink, "3s 2m"); ++ //SY(__NR_readlink, x0+1, x0+1, x0+1); FAIL; ++ ++ // __NR_uselib arm64 doesn't implement uselib ++ //GO(__NR_uselib, "n/a"); ++ //SY(__NR_uselib); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_swapon 87 ++ GO(__NR_swapon, "n/a"); ++ //SY(__NR_swapon); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_reboot 88 ++ GO(__NR_reboot, "n/a"); ++ //SY(__NR_reboot); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_readdir arm64 only implements getdents64 ++ //GO(__NR_readdir, "n/a"); ++ // (superseded, not handled by Valgrind) ++ ++ // __NR_mmap 90 ++ { ++ long args[6] = { x0, x0, x0, x0, x0-1, x0 }; ++ GO(__NR_mmap, "1s 1m"); ++ SY(__NR_mmap, args+x0); FAIL; ++ } ++ ++ // __NR_munmap 91 ++ GO(__NR_munmap, "2s 0m"); ++ SY(__NR_munmap, x0, x0); FAIL; ++ ++ // __NR_truncate 92 ++ GO(__NR_truncate, "2s 1m"); ++ SY(__NR_truncate, x0, x0); FAIL; ++ ++ // __NR_ftruncate 93 ++ GO(__NR_ftruncate, "2s 0m"); ++ SY(__NR_ftruncate, x0, x0); FAIL; ++ ++ // __NR_fchmod 94 ++ GO(__NR_fchmod, "2s 0m"); ++ SY(__NR_fchmod, x0-1, x0); FAIL; ++ ++ // __NR_fchown 95 ++ GO(__NR_fchown, "3s 0m"); ++ SY(__NR_fchown, x0, x0, x0); FAIL; ++ ++ // __NR_getpriority 96 ++ GO(__NR_getpriority, "2s 0m"); ++ SY(__NR_getpriority, x0-1, x0); FAIL; ++ ++ // __NR_setpriority 97 ++ GO(__NR_setpriority, "3s 0m"); ++ SY(__NR_setpriority, x0-1, x0, x0); FAIL; ++ ++ // __NR_profil arm64 doesn't implement profil. ++ //GO(__NR_profil, "ni"); ++ //SY(__NR_profil); FAIL; ++ ++ // __NR_statfs 99 ++ GO(__NR_statfs, "2s 2m"); ++ SY(__NR_statfs, x0, x0); FAIL; ++ ++ // __NR_fstatfs 100 ++ GO(__NR_fstatfs, "2s 1m"); ++ SY(__NR_fstatfs, x0, x0); FAIL; ++ ++ // __NR_ioperm arm64 doesn't implement ioperm ++ //GO(__NR_ioperm, "3s 0m"); ++ //SY(__NR_ioperm, x0, x0, x0); FAIL; ++ ++ // __NR_socketcall arm64 doesn't have socketcall. ++ //GO(__NR_socketcall, "XXX"); ++ // (XXX: need to do all sub-cases properly) ++ ++ // __NR_syslog 103 ++ GO(__NR_syslog, "3s 1m"); ++ SY(__NR_syslog, x0+2, x0, x0+1); FAIL; ++ ++ // __NR_setitimer 104 ++ GO(__NR_setitimer, "3s 2m"); ++ SY(__NR_setitimer, x0, x0+1, x0+1); FAIL; ++ ++ // __NR_getitimer 105 ++ GO(__NR_getitimer, "2s 1m"); ++ SY(__NR_getitimer, x0, x0, x0); FAIL; ++ ++ // __NR_stat arm64 doesn't implement stat ++ //GO(__NR_stat, "2s 2m"); ++ //SY(__NR_stat, x0, x0); FAIL; ++ ++ // __NR_lstat arm64 doesn't implement lstat ++ //GO(__NR_lstat, "2s 2m"); ++ //SY(__NR_lstat, x0, x0); FAIL; ++ ++ // __NR_fstat 108 ++ GO(__NR_fstat, "2s 1m"); ++ SY(__NR_fstat, x0, x0); FAIL; ++ ++ // __NR_olduname arm64 doesn't implement olduname ++ //GO(__NR_olduname, "n/a"); ++ // (obsolete, not handled by Valgrind) ++ ++ // __NR_iopl arm64 doesn't implement iopl ++ //GO(__NR_iopl, "1s 0m"); ++ //SY(__NR_iopl, x0+100); FAIL; ++ ++ // __NR_vhangup 111 ++ GO(__NR_vhangup, "0s 0m"); ++ SY(__NR_vhangup); SUCC_OR_FAIL; // Will succeed for superuser ++ ++ // __NR_idle arm64 doesn't implement idle. ++ //GO(__NR_idle, "ni"); ++ //SY(__NR_idle); FAIL; ++ ++ // __NR_vm86old arm64 doesn't implement vm86old ++ //GO(__NR_vm86old, "n/a"); ++ // (will probably never be handled by Valgrind) ++ ++ // __NR_wait4 114 ++ GO(__NR_wait4, "4s 2m"); ++ SY(__NR_wait4, x0, x0+1, x0, x0+1); FAIL; ++ ++ // __NR_swapoff 115 ++ GO(__NR_swapoff, "n/a"); ++ //SY(__NR_swapoff); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_sysinfo 116 ++ GO(__NR_sysinfo, "1s 1m"); ++ SY(__NR_sysinfo, x0); FAIL; ++ ++ // __NR_ipc arm64 has separate msgctl semctl shmctl system calls ++ // XXX: This is simplistic -- need to do all the sub-cases properly. ++ // XXX: Also, should be 6 scalar errors, except glibc's syscall() doesn't ++ // use the 6th one! ++ //GO(__NR_ipc, "5s 0m"); ++ //SY(__NR_ipc, x0+4, x0, x0, x0, x0, x0); FAIL; ++ ++ // __NR_fsync 118 ++ GO(__NR_fsync, "1s 0m"); ++ SY(__NR_fsync, x0-1); FAIL; ++ ++ // __NR_sigreturn arm64 only has rt_sigreturn ++ //GO(__NR_sigreturn, "n/a"); ++ //SY(__NR_sigreturn); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_clone 120 ++#ifndef CLONE_PARENT_SETTID ++#define CLONE_PARENT_SETTID 0x00100000 ++#endif ++ GO(__NR_clone, "5s 3m"); ++ SY(__NR_clone, x0|CLONE_PARENT_SETTID|CLONE_SETTLS|CLONE_CHILD_SETTID|SIGCHLD, x0, x0, x0, x0); FAIL; ++ if (0 == res) { ++ SY(__NR_exit, 0); FAIL; ++ } ++ ++ // __NR_setdomainname 121 ++ GO(__NR_setdomainname, "n/a"); ++ //SY(__NR_setdomainname); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_uname 122 ++ GO(__NR_uname, "1s 1m"); ++ SY(__NR_uname, x0); FAIL; ++ ++ // __NR_modify_ldt arm64 doesn't implement modify_ldt ++ //GO(__NR_modify_ldt, "3s 1m"); ++ //SY(__NR_modify_ldt, x0+1, x0, x0+1); FAILx(EINVAL); ++ ++ // __NR_adjtimex 124 ++ // XXX: need to do properly, but deref'ing NULL causing Valgrind to crash... ++ GO(__NR_adjtimex, "XXX"); ++// SY(__NR_adjtimex, x0); FAIL; ++ ++ // __NR_mprotect 125 ++ GO(__NR_mprotect, "3s 0m"); ++ SY(__NR_mprotect, x0+1, x0, x0); FAILx(EINVAL); ++ ++ // __NR_sigprocmask arm64 has rt_sigprocmask ++ //GO(__NR_sigprocmask, "3s 2m"); ++ //SY(__NR_sigprocmask, x0, x0+&px[1], x0+&px[1]); SUCC; ++ ++ // __NR_create_module arm64 doesn't implement create_module. ++ //GO(__NR_create_module, "ni"); ++ //SY(__NR_create_module); FAIL; ++ ++ // __NR_init_module 128 ++ GO(__NR_init_module, "3s 2m"); ++ SY(__NR_init_module, x0, x0+1, x0); FAIL; ++ ++ // __NR_delete_module 129 ++ GO(__NR_delete_module, "n/a"); ++ //SY(__NR_delete_module); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_get_kernel_syms arm64 doesn't implement get_kernel_syms ++ //GO(__NR_get_kernel_syms, "ni"); ++ //SY(__NR_get_kernel_syms); FAIL; ++ ++ // __NR_quotactl 131 ++ GO(__NR_quotactl, "4s 1m"); ++ SY(__NR_quotactl, x0, x0, x0, x0); FAIL; ++ ++ // __NR_getpgid 132 ++ GO(__NR_getpgid, "1s 0m"); ++ SY(__NR_getpgid, x0-1); FAIL; ++ ++ // __NR_fchdir 133 ++ GO(__NR_fchdir, "1s 0m"); ++ SY(__NR_fchdir, x0-1); FAIL; ++ ++ // __NR_bdflush arm64 doesn't implement bdflush ++ //GO(__NR_bdflush, "n/a"); ++ //SY(__NR_bdflush); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_sysfs arm64 doesn't handle sysfs, use proc. ++ //GO(__NR_sysfs, "n/a"); ++ //SY(__NR_sysfs); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_personality 136 ++ GO(__NR_personality, "1s 0m"); ++ SY(__NR_personality, x0+0xffffffff); SUCC; ++ ++ // __NR_afs_syscall arm64 doesn't implement afs_syscall ++ //GO(__NR_afs_syscall, "ni"); ++ //SY(__NR_afs_syscall); FAIL; ++ ++ // __NR_setfsuid 138 ++ GO(__NR_setfsuid, "1s 0m"); ++ SY(__NR_setfsuid, x0); SUCC; // This syscall has a stupid return value ++ ++ // __NR_setfsgid 139 ++ GO(__NR_setfsgid, "1s 0m"); ++ SY(__NR_setfsgid, x0); SUCC; // This syscall has a stupid return value ++ ++ // __NR__llseek arm64 doesn't implement _llseek ++ //GO(__NR__llseek, "5s 1m"); ++ //SY(__NR__llseek, x0, x0, x0, x0, x0); FAIL; ++ ++ // __NR_getdents arm64 only has getdents64 ++ //GO(__NR_getdents, "3s 1m"); ++ //SY(__NR_getdents, x0, x0, x0+1); FAIL; ++ ++ // __NR__newselect arm64 doesn't implement _newselect ++ //GO(__NR__newselect, "5s 4m"); ++ //SY(__NR__newselect, x0+8, x0+0xffffffff, x0+1, x0+1, x0+1); FAIL; ++ ++ // __NR_flock 143 ++ GO(__NR_flock, "2s 0m"); ++ SY(__NR_flock, x0, x0); FAIL; ++ ++ // __NR_msync 144 ++ GO(__NR_msync, "3s 1m"); ++ SY(__NR_msync, x0, x0+1, x0); FAIL; ++ ++ // __NR_readv 145 ++ GO(__NR_readv, "3s 1m"); ++ SY(__NR_readv, x0, x0, x0+1); FAIL; ++ ++ // __NR_writev 146 ++ GO(__NR_writev, "3s 1m"); ++ SY(__NR_writev, x0, x0, x0+1); FAIL; ++ ++ // __NR_getsid 147 ++ GO(__NR_getsid, "1s 0m"); ++ SY(__NR_getsid, x0-1); FAIL; ++ ++ // __NR_fdatasync 148 ++ GO(__NR_fdatasync, "1s 0m"); ++ SY(__NR_fdatasync, x0-1); FAIL; ++ ++ // __NR__sysctl arm64 doesn't implement sysctl, use /proc ++ //GO(__NR__sysctl, "1s 1m"); ++ //SY(__NR__sysctl, x0); FAIL; ++ ++ // __NR_mlock 150 ++ GO(__NR_mlock, "2s 0m"); ++ SY(__NR_mlock, x0, x0+1); FAIL; ++ ++ // __NR_munlock 151 ++ GO(__NR_munlock, "2s 0m"); ++ SY(__NR_munlock, x0, x0+1); FAIL; ++ ++ // __NR_mlockall 152 ++ GO(__NR_mlockall, "1s 0m"); ++ SY(__NR_mlockall, x0-1); FAIL; ++ ++ // __NR_munlockall 153 ++ GO(__NR_munlockall, "0s 0m"); ++ SY(__NR_munlockall); SUCC_OR_FAILx(EPERM); ++ ++ // __NR_sched_setparam 154 ++ GO(__NR_sched_setparam, "2s 1m"); ++ SY(__NR_sched_setparam, x0, x0); FAIL; ++ ++ // __NR_sched_getparam 155 ++ GO(__NR_sched_getparam, "2s 1m"); ++ SY(__NR_sched_getparam, x0, x0); FAIL; ++ ++ // __NR_sched_setscheduler 156 ++ GO(__NR_sched_setscheduler, "3s 1m"); ++ SY(__NR_sched_setscheduler, x0-1, x0, x0+1); FAIL; ++ ++ // __NR_sched_getscheduler 157 ++ GO(__NR_sched_getscheduler, "1s 0m"); ++ SY(__NR_sched_getscheduler, x0-1); FAIL; ++ ++ // __NR_sched_yield 158 ++ GO(__NR_sched_yield, "0s 0m"); ++ SY(__NR_sched_yield); SUCC; ++ ++ // __NR_sched_get_priority_max 159 ++ GO(__NR_sched_get_priority_max, "1s 0m"); ++ SY(__NR_sched_get_priority_max, x0-1); FAIL; ++ ++ // __NR_sched_get_priority_min 160 ++ GO(__NR_sched_get_priority_min, "1s 0m"); ++ SY(__NR_sched_get_priority_min, x0-1); FAIL; ++ ++ // __NR_sched_rr_get_interval 161 ++ GO(__NR_sched_rr_get_interval, "n/a"); ++ //SY(__NR_sched_rr_get_interval); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_nanosleep 162 ++ GO(__NR_nanosleep, "2s 2m"); ++ SY(__NR_nanosleep, x0, x0+1); FAIL; ++ ++ // __NR_mremap 163 ++ GO(__NR_mremap, "5s 0m"); ++ SY(__NR_mremap, x0+1, x0, x0, x0+MREMAP_FIXED, x0); FAILx(EINVAL); ++ ++ // __NR_setresuid 164 ++ GO(__NR_setresuid, "3s 0m"); ++ SY(__NR_setresuid, x0, x0, x0); FAIL; ++ ++ // __NR_getresuid 165 ++ GO(__NR_getresuid, "3s 3m"); ++ SY(__NR_getresuid, x0, x0, x0); FAIL; ++ ++ // __NR_vm86 arm64 doesn't implement vm86 ++ //GO(__NR_vm86, "n/a"); ++ // (will probably never be handled by Valgrind) ++ ++ // __NR_query_module arm64 doesn't implement query_module ++ //GO(__NR_query_module, "ni"); ++ //SY(__NR_query_module); FAIL; ++ ++ // __NR_poll arm64 only has ppoll ++ //GO(__NR_poll, "3s 1m"); ++ //SY(__NR_poll, x0, x0+1, x0); FAIL; ++ ++ // __NR_nfsservctl 169 ++ GO(__NR_nfsservctl, "n/a"); ++ //SY(__NR_nfsservctl); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_setresgid 170 ++ GO(__NR_setresgid, "3s 0m"); ++ SY(__NR_setresgid, x0, x0, x0); FAIL; ++ ++ // __NR_getresgid 171 ++ GO(__NR_getresgid, "3s 3m"); ++ SY(__NR_getresgid, x0, x0, x0); FAIL; ++ ++ // __NR_prctl 172 ++ GO(__NR_prctl, "5s 0m"); ++ SY(__NR_prctl, x0, x0, x0, x0, x0); FAIL; ++ ++ // __NR_rt_sigreturn 173 ++ GO(__NR_rt_sigreturn, "n/a"); ++ //SY(__NR_rt_sigreturn); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_rt_sigaction 174 ++ GO(__NR_rt_sigaction, "4s 4m"); ++ SY(__NR_rt_sigaction, x0, x0+&px[2], x0+&px[2], x0); FAIL; ++ ++ // __NR_rt_sigprocmask 175 ++ GO(__NR_rt_sigprocmask, "4s 2m"); ++ SY(__NR_rt_sigprocmask, x0, x0+1, x0+1, x0); FAIL; ++ ++ // __NR_rt_sigpending 176 ++ GO(__NR_rt_sigpending, "2s 1m"); ++ SY(__NR_rt_sigpending, x0, x0+1); FAIL; ++ ++ // __NR_rt_sigtimedwait 177 ++ GO(__NR_rt_sigtimedwait, "4s 3m"); ++ SY(__NR_rt_sigtimedwait, x0+1, x0+1, x0+1, x0); FAIL; ++ ++ // __NR_rt_sigqueueinfo 178 ++ GO(__NR_rt_sigqueueinfo, "3s 1m"); ++ SY(__NR_rt_sigqueueinfo, x0, x0+1, x0); FAIL; ++ ++ // __NR_rt_sigsuspend 179 ++ GO(__NR_rt_sigsuspend, "ignore"); ++ // (I don't know how to test this...) ++ ++ // __NR_pread64 180 ++ GO(__NR_pread64, "5s 1m"); ++ SY(__NR_pread64, x0, x0, x0+1, x0, x0); FAIL; ++ ++ // __NR_pwrite64 181 ++ GO(__NR_pwrite64, "5s 1m"); ++ SY(__NR_pwrite64, x0, x0, x0+1, x0, x0); FAIL; ++ ++ // __NR_chown arm64 only has chownat ++ //GO(__NR_chown, "3s 1m"); ++ //SY(__NR_chown, x0, x0, x0); FAIL; ++ ++ // __NR_getcwd 183 ++ GO(__NR_getcwd, "2s 1m"); ++ SY(__NR_getcwd, x0, x0+1); FAIL; ++ ++ // __NR_capget 184 ++ GO(__NR_capget, "2s 2m"); ++ SY(__NR_capget, x0, x0+1); FAIL; ++ ++ // __NR_capset 185 ++ GO(__NR_capset, "2s 2m"); ++ SY(__NR_capset, x0, x0); FAIL; ++ ++ // __NR_sigaltstack 186 ++ { ++ struct our_sigaltstack { ++ void *ss_sp; ++ int ss_flags; ++ size_t ss_size; ++ } ss; ++ ss.ss_sp = NULL; ++ ss.ss_flags = 0; ++ ss.ss_size = 0; ++ VALGRIND_MAKE_MEM_NOACCESS(& ss, sizeof(struct our_sigaltstack)); ++ GO(__NR_sigaltstack, "2s 2m"); ++ SY(__NR_sigaltstack, x0+&ss, x0+&ss); SUCC; ++ } ++ ++ // __NR_sendfile 187 ++ GO(__NR_sendfile, "4s 1m"); ++ SY(__NR_sendfile, x0, x0, x0+1, x0); FAIL; ++ ++ // __NR_getpmsg arm64 doesn't implement getpmsg ++ // Could do 5s 4m with more effort, but I can't be bothered for this ++ // crappy non-standard syscall. ++ //GO(__NR_getpmsg, "5s 0m"); ++ //SY(__NR_getpmsg, x0, x0, x0, x0); FAIL; ++ ++ // __NR_putpmsg arm64 doesn't implement putpmsg ++ // Could do 5s 2m with more effort, but I can't be bothered for this ++ // crappy non-standard syscall. ++ //GO(__NR_putpmsg, "5s 0m"); ++ //SY(__NR_putpmsg, x0, x0, x0, x0, x0); FAIL; ++ ++ // __NR_vfork arm64 only has clone ++ //GO(__NR_vfork, "other"); ++ // (sse scalar_vfork.c) ++ ++ // __NR_ugetrlimit arm64 only has getrlimit and prlimit64 ++ //GO(__NR_ugetrlimit, "2s 1m"); ++ //SY(__NR_ugetrlimit, x0, x0); FAIL; ++ ++ // __NR_mmap2 arm64 doesn't implement mmap2 ++ //GO(__NR_mmap2, "6s 0m"); ++ //SY(__NR_mmap2, x0, x0, x0, x0, x0-1, x0); FAIL; ++ ++ // __NR_truncate64 arm64 just has truncate ++ //GO(__NR_truncate64, "3s 1m"); ++ //SY(__NR_truncate64, x0, x0, x0); FAIL; ++ ++ // __NR_ftruncate64 arm64 just has ftruncate ++ //GO(__NR_ftruncate64, "3s 0m"); ++ //SY(__NR_ftruncate64, x0, x0, x0); FAIL; ++ ++ // __NR_stat64 arm64 doesn't implement stat64 ++ //GO(__NR_stat64, "2s 2m"); ++ //SY(__NR_stat64, x0, x0); FAIL; ++ ++ // __NR_lstat64 196 ++ //GO(__NR_lstat64, "2s 2m"); ++ //SY(__NR_lstat64, x0, x0); FAIL; ++ ++ // __NR_fstat64 197 ++ //GO(__NR_fstat64, "2s 1m"); ++ //SY(__NR_fstat64, x0, x0); FAIL; ++ ++ // __NR_lchown32 198 ++ //GO(__NR_lchown32, "3s 1m"); ++ //SY(__NR_lchown32, x0, x0, x0); FAIL; ++ ++ // __NR_getuid32 199 ++ //GO(__NR_getuid32, "0s 0m"); ++ //SY(__NR_getuid32); SUCC; ++ ++ // __NR_getgid32 200 ++ //GO(__NR_getgid32, "0s 0m"); ++ //SY(__NR_getgid32); SUCC; ++ ++ // __NR_geteuid32 201 ++ //GO(__NR_geteuid32, "0s 0m"); ++ //SY(__NR_geteuid32); SUCC; ++ ++ // __NR_getegid32 202 ++ //GO(__NR_getegid32, "0s 0m"); ++ //SY(__NR_getegid32); SUCC; ++ ++ // __NR_setreuid32 203 ++ //GO(__NR_setreuid32, "2s 0m"); ++ //SY(__NR_setreuid32, x0, x0); FAIL; ++ ++ // __NR_setregid32 204 ++ //GO(__NR_setregid32, "2s 0m"); ++ //SY(__NR_setregid32, x0, x0); FAIL; ++ ++ // __NR_getgroups32 205 ++ //GO(__NR_getgroups32, "2s 1m"); ++ //SY(__NR_getgroups32, x0+1, x0+1); FAIL; ++ ++ // __NR_setgroups32 206 ++ //GO(__NR_setgroups32, "2s 1m"); ++ //SY(__NR_setgroups32, x0+1, x0+1); FAIL; ++ ++ // __NR_fchown32 207 ++ //GO(__NR_fchown32, "3s 0m"); ++ //SY(__NR_fchown32, x0, x0, x0); FAIL; ++ ++ // __NR_setresuid32 208 ++ //GO(__NR_setresuid32, "3s 0m"); ++ //SY(__NR_setresuid32, x0, x0, x0); FAIL; ++ ++ // __NR_getresuid32 209 ++ //GO(__NR_getresuid32, "3s 3m"); ++ //SY(__NR_getresuid32, x0, x0, x0); FAIL; ++ ++ // __NR_setresgid32 210 ++ //GO(__NR_setresgid32, "3s 0m"); ++ //SY(__NR_setresgid32, x0, x0, x0); FAIL; ++ ++ // __NR_getresgid32 211 ++ //GO(__NR_getresgid32, "3s 3m"); ++ //SY(__NR_getresgid32, x0, x0, x0); FAIL; ++ ++ // __NR_chown32 212 ++ //GO(__NR_chown32, "3s 1m"); ++ //SY(__NR_chown32, x0, x0, x0); FAIL; ++ ++ // __NR_setuid32 213 ++ //GO(__NR_setuid32, "1s 0m"); ++ //SY(__NR_setuid32, x0); FAIL; ++ ++ // __NR_setgid32 214 ++ //GO(__NR_setgid32, "1s 0m"); ++ //SY(__NR_setgid32, x0); FAIL; ++ ++ // __NR_setfsuid32 215 ++ //GO(__NR_setfsuid32, "1s 0m"); ++ //SY(__NR_setfsuid32, x0); SUCC; // This syscall has a stupid return value ++ ++ // __NR_setfsgid32 216 ++ //GO(__NR_setfsgid32, "1s 0m"); ++ //SY(__NR_setfsgid32, x0); SUCC; // This syscall has a stupid return value ++ ++ // __NR_pivot_root 217 ++ GO(__NR_pivot_root, "n/a"); ++ //SY(__NR_pivot_root); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_mincore 218 ++ GO(__NR_mincore, "3s 1m"); ++ SY(__NR_mincore, x0, x0+40960, x0); FAIL; ++ ++ // __NR_madvise 219 ++ GO(__NR_madvise, "3s 0m"); ++ SY(__NR_madvise, x0, x0+1, x0); FAILx(ENOMEM); ++ ++ // __NR_getdents64 220 ++ GO(__NR_getdents64, "3s 1m"); ++ SY(__NR_getdents64, x0, x0, x0+1); FAIL; ++ ++ // __NR_fcntl64 221 ++ // As with sys_open(), we don't trigger errors for the 1st two args for ++ // the later ones. ++ // For F_GETFD the 3rd arg is ignored. ++ //GO(__NR_fcntl64, "(GETFD) 2s 0m"); ++ //SY(__NR_fcntl64, x0-1, x0+F_GETFD, x0); FAILx(EBADF); ++ ++ // For F_DUPFD the 3rd arg is 'arg' ++ //GO(__NR_fcntl64, "(DUPFD) 1s 0m"); ++ //SY(__NR_fcntl64, -1, F_DUPFD, x0); FAILx(EBADF); ++ ++ // For F_GETLK the 3rd arg is 'lock'. ++ // On x86, this fails w/EBADF. But on amd64 in 32-bit mode it fails ++ // w/EFAULT. ++ //GO(__NR_fcntl64, "(GETLK) 1s 0m"); ++ //SY(__NR_fcntl64, -1, +F_GETLK, x0); FAIL; //FAILx(EBADF); ++ ++ // 222 ++ //GO(222, "ni"); ++ //SY(222); FAIL; ++ ++ // 223 ++ //GO(223, "ni"); ++ //SY(223); FAIL; ++ ++ // __NR_gettid 224 ++ GO(__NR_gettid, "n/a"); ++ //SY(__NR_gettid); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_readahead 225 ++ GO(__NR_readahead, "n/a"); ++ //SY(__NR_readahead); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_setxattr 226 ++ GO(__NR_setxattr, "5s 3m"); ++ SY(__NR_setxattr, x0, x0, x0, x0+1, x0); FAIL; ++ ++ // __NR_lsetxattr 227 ++ GO(__NR_lsetxattr, "5s 3m"); ++ SY(__NR_lsetxattr, x0, x0, x0, x0+1, x0); FAIL; ++ ++ // __NR_fsetxattr 228 ++ GO(__NR_fsetxattr, "5s 2m"); ++ SY(__NR_fsetxattr, x0, x0, x0, x0+1, x0); FAIL; ++ ++ // __NR_getxattr 229 ++ GO(__NR_getxattr, "4s 3m"); ++ SY(__NR_getxattr, x0, x0, x0, x0+1); FAIL; ++ ++ // __NR_lgetxattr 230 ++ GO(__NR_lgetxattr, "4s 3m"); ++ SY(__NR_lgetxattr, x0, x0, x0, x0+1); FAIL; ++ ++ // __NR_fgetxattr 231 ++ GO(__NR_fgetxattr, "4s 2m"); ++ SY(__NR_fgetxattr, x0, x0, x0, x0+1); FAIL; ++ ++ // __NR_listxattr 232 ++ GO(__NR_listxattr, "3s 2m"); ++ SY(__NR_listxattr, x0, x0, x0+1); FAIL; ++ ++ // __NR_llistxattr 233 ++ GO(__NR_llistxattr, "3s 2m"); ++ SY(__NR_llistxattr, x0, x0, x0+1); FAIL; ++ ++ // __NR_flistxattr 234 ++ GO(__NR_flistxattr, "3s 1m"); ++ SY(__NR_flistxattr, x0-1, x0, x0+1); FAIL; /* kernel returns EBADF, but both seem correct */ ++ ++ // __NR_removexattr 235 ++ GO(__NR_removexattr, "2s 2m"); ++ SY(__NR_removexattr, x0, x0); FAIL; ++ ++ // __NR_lremovexattr 236 ++ GO(__NR_lremovexattr, "2s 2m"); ++ SY(__NR_lremovexattr, x0, x0); FAIL; ++ ++ // __NR_fremovexattr 237 ++ GO(__NR_fremovexattr, "2s 1m"); ++ SY(__NR_fremovexattr, x0, x0); FAIL; ++ ++ // __NR_tkill 238 ++ GO(__NR_tkill, "n/a"); ++ //SY(__NR_tkill); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_sendfile64 239 ++ //GO(__NR_sendfile64, "4s 1m"); ++ //SY(__NR_sendfile64, x0, x0, x0+1, x0); FAIL; ++ ++ // __NR_futex 240 ++ #ifndef FUTEX_WAIT ++ #define FUTEX_WAIT 0 ++ #endif ++ // XXX: again, glibc not doing 6th arg means we have only 5s errors ++ GO(__NR_futex, "5s 2m"); ++ SY(__NR_futex, x0+FUTEX_WAIT, x0, x0, x0+1, x0, x0); FAIL; ++ ++ // __NR_sched_setaffinity 241 ++ GO(__NR_sched_setaffinity, "3s 1m"); ++ SY(__NR_sched_setaffinity, x0, x0+1, x0); FAIL; ++ ++ // __NR_sched_getaffinity 242 ++ GO(__NR_sched_getaffinity, "3s 1m"); ++ SY(__NR_sched_getaffinity, x0, x0+1, x0); FAIL; ++ ++ // __NR_set_thread_area 243 ++ //GO(__NR_set_thread_area, "1s 1m"); ++ //SY(__NR_set_thread_area, x0); FAILx(EFAULT); ++ ++ // __NR_get_thread_area 244 ++ //GO(__NR_get_thread_area, "1s 1m"); ++ //SY(__NR_get_thread_area, x0); FAILx(EFAULT); ++ ++ // __NR_io_setup 245 ++ GO(__NR_io_setup, "2s 1m"); ++ SY(__NR_io_setup, x0, x0); FAIL; ++ ++ // __NR_io_destroy 246 ++ { ++ // jump through hoops to prevent the PRE(io_destroy) wrapper crashing. ++ struct fake_aio_ring { ++ unsigned id; /* kernel internal index number */ ++ unsigned nr; /* number of io_events */ ++ // There are more fields in the real aio_ring, but the 'nr' field is ++ // the only one used by the PRE() wrapper. ++ } ring = { 0, 0 }; ++ struct fake_aio_ring* ringptr = ˚ ++ GO(__NR_io_destroy, "1s 0m"); ++ SY(__NR_io_destroy, x0+&ringptr); FAIL; ++ } ++ ++ // __NR_io_getevents 247 ++ GO(__NR_io_getevents, "5s 2m"); ++ SY(__NR_io_getevents, x0, x0, x0+1, x0, x0+1); FAIL; ++ ++ // __NR_io_submit 248 ++ GO(__NR_io_submit, "3s 1m"); ++ SY(__NR_io_submit, x0, x0+1, x0); FAIL; ++ ++ // __NR_io_cancel 249 ++ GO(__NR_io_cancel, "3s 2m"); ++ SY(__NR_io_cancel, x0, x0, x0); FAIL; ++ ++ // __NR_fadvise64 250 ++ GO(__NR_fadvise64, "n/a"); ++ //SY(__NR_fadvise64); // (Not yet handled by Valgrind) FAIL; ++ ++ // 251 ++ //GO(251, "ni"); ++ //SY(251); FAIL; ++ ++ // __NR_exit_group 252 ++ GO(__NR_exit_group, "other"); ++ // (see scalar_exit_group.c) ++ ++ // __NR_lookup_dcookie 253 ++ GO(__NR_lookup_dcookie, "4s 1m"); ++ SY(__NR_lookup_dcookie, x0, x0, x0, x0+1); FAIL; ++ ++ // __NR_epoll_create arm64 only has epoll_create1 ++ //GO(__NR_epoll_create, "1s 0m"); ++ //SY(__NR_epoll_create, x0); SUCC_OR_FAIL; ++ ++ // __NR_epoll_ctl 255 ++ GO(__NR_epoll_ctl, "4s 1m"); ++ SY(__NR_epoll_ctl, x0, x0, x0, x0); FAIL; ++ ++ // __NR_epoll_wait arm64 only has epoll_pwait ++ //GO(__NR_epoll_wait, "4s 1m"); ++ //SY(__NR_epoll_wait, x0, x0, x0+1, x0); FAIL; ++ ++ // __NR_remap_file_pages 257 ++ GO(__NR_remap_file_pages, "n/a"); ++ //SY(__NR_remap_file_pages); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_set_tid_address 258 ++ GO(__NR_set_tid_address, "1s 0m"); ++ SY(__NR_set_tid_address, x0); SUCC_OR_FAILx(ENOSYS); ++ ++ // __NR_timer_create 259 ++ GO(__NR_timer_create, "3s 2m"); ++ SY(__NR_timer_create, x0, x0+1, x0); FAIL; ++ ++ // __NR_timer_settime (__NR_timer_create+1) ++ GO(__NR_timer_settime, "4s 2m"); ++ SY(__NR_timer_settime, x0, x0, x0, x0+1); FAIL; ++ ++ // __NR_timer_gettime (__NR_timer_create+2) ++ GO(__NR_timer_gettime, "2s 1m"); ++ SY(__NR_timer_gettime, x0, x0); FAIL; ++ ++ // __NR_timer_getoverrun (__NR_timer_create+3) ++ GO(__NR_timer_getoverrun, "1s 0m"); ++ SY(__NR_timer_getoverrun, x0); FAIL; ++ ++ // __NR_timer_delete (__NR_timer_create+4) ++ GO(__NR_timer_delete, "1s 0m"); ++ SY(__NR_timer_delete, x0); FAIL; ++ ++ // __NR_clock_settime (__NR_timer_create+5) ++ GO(__NR_clock_settime, "2s 1m"); ++ SY(__NR_clock_settime, x0, x0); FAIL; FAIL; ++ ++ // __NR_clock_gettime (__NR_timer_create+6) ++ GO(__NR_clock_gettime, "2s 1m"); ++ SY(__NR_clock_gettime, x0, x0); FAIL; ++ ++ // __NR_clock_getres (__NR_timer_create+7) ++ GO(__NR_clock_getres, "2s 1m"); ++ SY(__NR_clock_getres, x0+1, x0+1); FAIL; FAIL; ++ ++ // __NR_clock_nanosleep (__NR_timer_create+8) ++ GO(__NR_clock_nanosleep, "n/a"); ++ //SY(__NR_clock_nanosleep); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_statfs64 268 ++ //GO(__NR_statfs64, "3s 2m"); ++ //SY(__NR_statfs64, x0, x0+1, x0); FAIL; ++ ++ // __NR_fstatfs64 269 ++ //GO(__NR_fstatfs64, "3s 1m"); ++ //SY(__NR_fstatfs64, x0, x0+1, x0); FAIL; ++ ++ // __NR_tgkill 270 ++ GO(__NR_tgkill, "n/a"); ++ //SY(__NR_tgkill); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_utimes arm64 only has utimensat ++ //GO(__NR_utimes, "2s 2m"); ++ //SY(__NR_utimes, x0, x0+1); FAIL; ++ ++ // __NR_fadvise64_64 272 ++ //GO(__NR_fadvise64_64, "n/a"); ++ //SY(__NR_fadvise64_64); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_vserver 273 ++ //GO(__NR_vserver, "ni"); ++ //SY(__NR_vserver); FAIL; ++ ++ // __NR_mbind 274 ++ GO(__NR_mbind, "n/a"); ++ //SY(__NR_mbind); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_get_mempolicy 275 ++ GO(__NR_get_mempolicy, "n/a"); ++ //SY(__NR_get_mempolicy); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_set_mempolicy 276 ++ GO(__NR_set_mempolicy, "n/a"); ++ //SY(__NR_set_mempolicy); // (Not yet handled by Valgrind) FAIL; ++ ++ // __NR_mq_open 277 ++ GO(__NR_mq_open, "4s 3m"); ++ SY(__NR_mq_open, x0, x0+O_CREAT, x0, x0+1); FAIL; ++ ++ // __NR_mq_unlink (__NR_mq_open+1) ++ GO(__NR_mq_unlink, "1s 1m"); ++ SY(__NR_mq_unlink, x0); FAIL; ++ ++ // __NR_mq_timedsend (__NR_mq_open+2) ++ GO(__NR_mq_timedsend, "5s 2m"); ++ SY(__NR_mq_timedsend, x0, x0, x0+1, x0, x0+1); FAIL; ++ ++ // __NR_mq_timedreceive (__NR_mq_open+3) ++ GO(__NR_mq_timedreceive, "5s 3m"); ++ SY(__NR_mq_timedreceive, x0, x0, x0+1, x0+1, x0+1); FAIL; ++ ++ // __NR_mq_notify (__NR_mq_open+4) ++ GO(__NR_mq_notify, "2s 1m"); ++ SY(__NR_mq_notify, x0, x0+1); FAIL; ++ ++ // __NR_mq_getsetattr (__NR_mq_open+5) ++ GO(__NR_mq_getsetattr, "3s 2m"); ++ SY(__NR_mq_getsetattr, x0, x0+1, x0+1); FAIL; ++ ++ // __NR_kexec_load 283 ++ GO(__NR_kexec_load, "ni"); ++ SY(__NR_kexec_load); FAIL; ++ ++ // __NR_epoll_create1 329 ++ GO(__NR_epoll_create1, "1s 0m"); ++ SY(__NR_epoll_create1, x0); SUCC_OR_FAIL; ++ ++ // __NR_process_vm_readv 347 ++ GO(__NR_process_vm_readv, "6s 2m"); ++ SY(__NR_process_vm_readv, x0, x0, x0+1, x0, x0+1, x0); FAIL; ++ ++ // __NR_process_vm_writev 348 ++ GO(__NR_process_vm_writev, "6s 2m"); ++ SY(__NR_process_vm_writev, x0, x0, x0+1, x0, x0+1, x0); FAIL; ++ ++ // no such syscall... ++ GO(9999, "1e"); ++ SY(9999); FAIL; ++ ++ // __NR_exit 1 ++ GO(__NR_exit, "1s 0m"); ++ SY(__NR_exit, x0); FAIL; ++ ++ assert(0); ++} ++ +diff --git a/memcheck/tests/arm64-linux/scalar.h b/memcheck/tests/arm64-linux/scalar.h +new file mode 100644 +index 0000000..9008816 +--- /dev/null ++++ b/memcheck/tests/arm64-linux/scalar.h +@@ -0,0 +1,62 @@ ++/* This is the arm64 variant of memcheck/tests/x86-linux/scalar.h */ ++#include "../../../include/vki/vki-scnums-arm64-linux.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++// Since we use vki_unistd.h, we can't include . So we have to ++// declare this ourselves. ++extern long int syscall (long int __sysno, ...) __THROW; ++ ++// Thorough syscall scalar arg checking. Also serves as thorough checking ++// for (very) basic syscall use. Generally not trying to do anything ++// meaningful with the syscalls. ++ ++#define GO(__NR_xxx, s) \ ++ fprintf(stderr, "-----------------------------------------------------\n" \ ++ "%3d:%20s %s\n" \ ++ "-----------------------------------------------------\n", \ ++ __NR_xxx, #__NR_xxx, s); ++ ++#define SY res = syscall ++ ++#define FAIL assert(-1 == res); ++#define SUCC assert(-1 != res); ++#define SUCC_OR_FAIL /* no test */ ++ ++#define FAILx(E) \ ++ do { \ ++ int myerrno = errno; \ ++ if (-1 == res) { \ ++ if (E == myerrno) { \ ++ /* as expected */ \ ++ } else { \ ++ fprintf(stderr, "Expected error %s (%d), got %d\n", #E, E, myerrno); \ ++ exit(1); \ ++ } \ ++ } else { \ ++ fprintf(stderr, "Expected error %s (%d), got success\n", #E, E); \ ++ exit(1); \ ++ } \ ++ } while (0); ++ ++#define SUCC_OR_FAILx(E) \ ++ do { \ ++ int myerrno = errno; \ ++ if (-1 == res) { \ ++ if (E == myerrno) { \ ++ /* as expected */ \ ++ } else { \ ++ fprintf(stderr, "Expected error %s (%d), got %d\n", #E, E, myerrno); \ ++ exit(1); \ ++ } \ ++ } \ ++ } while (0); +diff --git a/memcheck/tests/arm64-linux/scalar.stderr.exp b/memcheck/tests/arm64-linux/scalar.stderr.exp +new file mode 100644 +index 0000000..1dc2035 +--- /dev/null ++++ b/memcheck/tests/arm64-linux/scalar.stderr.exp +@@ -0,0 +1,2598 @@ ++----------------------------------------------------- ++128:__NR_restart_syscall n/a ++----------------------------------------------------- ++----------------------------------------------------- ++ 93: __NR_exit below ++----------------------------------------------------- ++----------------------------------------------------- ++ 63: __NR_read 1+3s 1m ++----------------------------------------------------- ++Syscall param (syscallno) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:51) ++ ++Syscall param read(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:51) ++ ++Syscall param read(buf) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:51) ++ ++Syscall param read(count) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:51) ++ ++Syscall param read(buf) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:51) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 64: __NR_write 3s 1m ++----------------------------------------------------- ++Syscall param write(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:55) ++ ++Syscall param write(buf) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:55) ++ ++Syscall param write(count) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:55) ++ ++Syscall param write(buf) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:55) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 57: __NR_close 1s 0m ++----------------------------------------------------- ++Syscall param close(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:69) ++ ++----------------------------------------------------- ++221: __NR_execve 3s 1m ++----------------------------------------------------- ++Syscall param execve(filename) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:91) ++ ++Syscall param execve(argv) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:91) ++ ++Syscall param execve(envp) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:91) ++ ++Syscall param execve(filename) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:91) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 49: __NR_chdir 1s 1m ++----------------------------------------------------- ++Syscall param chdir(path) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:95) ++ ++Syscall param chdir(path) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:95) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 62: __NR_lseek 3s 0m ++----------------------------------------------------- ++Syscall param lseek(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:123) ++ ++Syscall param lseek(offset) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:123) ++ ++Syscall param lseek(whence) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:123) ++ ++----------------------------------------------------- ++172: __NR_getpid 0s 0m ++----------------------------------------------------- ++----------------------------------------------------- ++ 40: __NR_mount 5s 3m ++----------------------------------------------------- ++Syscall param mount(source) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:131) ++ ++Syscall param mount(target) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:131) ++ ++Syscall param mount(type) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:131) ++ ++Syscall param mount(flags) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:131) ++ ++Syscall param mount(data) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:131) ++ ++Syscall param mount(target) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:131) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param mount(type) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:131) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++146: __NR_setuid 1s 0m ++----------------------------------------------------- ++Syscall param setuid(uid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:139) ++ ++----------------------------------------------------- ++174: __NR_getuid 0s 0m ++----------------------------------------------------- ++----------------------------------------------------- ++ 81: __NR_sync 0s 0m ++----------------------------------------------------- ++----------------------------------------------------- ++129: __NR_kill 2s 0m ++----------------------------------------------------- ++Syscall param kill(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:196) ++ ++Syscall param kill(signal) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:196) ++ ++----------------------------------------------------- ++ 23: __NR_dup 1s 0m ++----------------------------------------------------- ++Syscall param dup(oldfd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:212) ++ ++----------------------------------------------------- ++153: __NR_times 1s 1m ++----------------------------------------------------- ++Syscall param times(buf) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:220) ++ ++Syscall param times(buf) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:220) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++214: __NR_brk 1s 0m ++----------------------------------------------------- ++Syscall param brk(end_data_segment) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:228) ++ ++----------------------------------------------------- ++144: __NR_setgid 1s 0m ++----------------------------------------------------- ++Syscall param setgid(gid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:232) ++ ++----------------------------------------------------- ++176: __NR_getgid 0s 0m ++----------------------------------------------------- ++----------------------------------------------------- ++175: __NR_geteuid 0s 0m ++----------------------------------------------------- ++----------------------------------------------------- ++177: __NR_getegid 0s 0m ++----------------------------------------------------- ++----------------------------------------------------- ++ 89: __NR_acct 1s 1m ++----------------------------------------------------- ++Syscall param acct(filename) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:252) ++ ++Syscall param acct(filename) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:252) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 39: __NR_umount2 2s 1m ++----------------------------------------------------- ++Syscall param umount2(path) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:256) ++ ++Syscall param umount2(flags) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:256) ++ ++Syscall param umount2(path) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:256) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 29: __NR_ioctl 3s 1m ++----------------------------------------------------- ++Syscall param ioctl(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:265) ++ ++Syscall param ioctl(request) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:265) ++ ++Syscall param ioctl(arg) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:265) ++ ++Syscall param ioctl(TCSET{S,SW,SF}) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:265) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 25: __NR_fcntl (GETFD) 2s 0m ++----------------------------------------------------- ++Syscall param fcntl(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:271) ++ ++Syscall param fcntl(cmd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:271) ++ ++----------------------------------------------------- ++ 25: __NR_fcntl (DUPFD) 1s 0m ++----------------------------------------------------- ++Syscall param fcntl(arg) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:277) ++ ++----------------------------------------------------- ++ 25: __NR_fcntl (GETLK) 1s 0m ++----------------------------------------------------- ++Syscall param fcntl(lock) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:283) ++ ++----------------------------------------------------- ++154: __NR_setpgid 2s 0m ++----------------------------------------------------- ++Syscall param setpgid(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:291) ++ ++Syscall param setpgid(pgid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:291) ++ ++----------------------------------------------------- ++166: __NR_umask 1s 0m ++----------------------------------------------------- ++Syscall param umask(mask) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:303) ++ ++----------------------------------------------------- ++ 51: __NR_chroot 1s 1m ++----------------------------------------------------- ++Syscall param chroot(path) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:307) ++ ++Syscall param chroot(path) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:307) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++173: __NR_getppid 0s 0m ++----------------------------------------------------- ++----------------------------------------------------- ++157: __NR_setsid 0s 0m ++----------------------------------------------------- ++----------------------------------------------------- ++145: __NR_setreuid 2s 0m ++----------------------------------------------------- ++Syscall param setreuid(ruid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:343) ++ ++Syscall param setreuid(euid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:343) ++ ++----------------------------------------------------- ++143: __NR_setregid 2s 0m ++----------------------------------------------------- ++Syscall param setregid(rgid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:347) ++ ++Syscall param setregid(egid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:347) ++ ++----------------------------------------------------- ++161: __NR_sethostname n/a ++----------------------------------------------------- ++----------------------------------------------------- ++164: __NR_setrlimit 2s 1m ++----------------------------------------------------- ++Syscall param setrlimit(resource) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:364) ++ ++Syscall param setrlimit(rlim) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:364) ++ ++Syscall param setrlimit(rlim) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:364) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++163: __NR_getrlimit 2s 1m ++----------------------------------------------------- ++Syscall param old_getrlimit(resource) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:368) ++ ++Syscall param old_getrlimit(rlim) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:368) ++ ++Syscall param old_getrlimit(rlim) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:368) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++165: __NR_getrusage 2s 1m ++----------------------------------------------------- ++Syscall param getrusage(who) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:372) ++ ++Syscall param getrusage(usage) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:372) ++ ++Syscall param getrusage(usage) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:372) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++169: __NR_gettimeofday 2s 2m ++----------------------------------------------------- ++Syscall param gettimeofday(tv) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:376) ++ ++Syscall param gettimeofday(tz) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:376) ++ ++Syscall param gettimeofday(tv) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:376) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param gettimeofday(tz) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:376) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++170: __NR_settimeofday 2s 2m ++----------------------------------------------------- ++Syscall param settimeofday(tv) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:380) ++ ++Syscall param settimeofday(tz) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:380) ++ ++Syscall param settimeofday(tv) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:380) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param settimeofday(tz) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:380) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++158: __NR_getgroups 2s 1m ++----------------------------------------------------- ++Syscall param getgroups(size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:384) ++ ++Syscall param getgroups(list) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:384) ++ ++Syscall param getgroups(list) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:384) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++159: __NR_setgroups 2s 1m ++----------------------------------------------------- ++Syscall param setgroups(size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:388) ++ ++Syscall param setgroups(list) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:388) ++ ++Syscall param setgroups(list) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:388) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++224: __NR_swapon n/a ++----------------------------------------------------- ++----------------------------------------------------- ++142: __NR_reboot n/a ++----------------------------------------------------- ++----------------------------------------------------- ++222: __NR_mmap 1s 1m ++----------------------------------------------------- ++Syscall param mmap(start) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:429) ++ ++----------------------------------------------------- ++215: __NR_munmap 2s 0m ++----------------------------------------------------- ++Syscall param munmap(start) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:434) ++ ++Syscall param munmap(length) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:434) ++ ++----------------------------------------------------- ++ 45: __NR_truncate 2s 1m ++----------------------------------------------------- ++Syscall param truncate(path) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:438) ++ ++Syscall param truncate(length) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:438) ++ ++Syscall param truncate(path) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:438) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 46: __NR_ftruncate 2s 0m ++----------------------------------------------------- ++Syscall param ftruncate(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:442) ++ ++Syscall param ftruncate(length) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:442) ++ ++----------------------------------------------------- ++ 52: __NR_fchmod 2s 0m ++----------------------------------------------------- ++Syscall param fchmod(fildes) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:446) ++ ++Syscall param fchmod(mode) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:446) ++ ++----------------------------------------------------- ++ 55: __NR_fchown 3s 0m ++----------------------------------------------------- ++Syscall param fchown(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:450) ++ ++Syscall param fchown(owner) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:450) ++ ++Syscall param fchown(group) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:450) ++ ++----------------------------------------------------- ++141: __NR_getpriority 2s 0m ++----------------------------------------------------- ++Syscall param getpriority(which) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:454) ++ ++Syscall param getpriority(who) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:454) ++ ++----------------------------------------------------- ++140: __NR_setpriority 3s 0m ++----------------------------------------------------- ++Syscall param setpriority(which) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:458) ++ ++Syscall param setpriority(who) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:458) ++ ++Syscall param setpriority(prio) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:458) ++ ++----------------------------------------------------- ++ 43: __NR_statfs 2s 2m ++----------------------------------------------------- ++Syscall param statfs(path) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:466) ++ ++Syscall param statfs(buf) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:466) ++ ++Syscall param statfs(path) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:466) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++ ++More than 100 errors detected. Subsequent errors ++will still be recorded, but in less detail than before. ++Syscall param statfs(buf) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:466) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 44: __NR_fstatfs 2s 1m ++----------------------------------------------------- ++Syscall param fstatfs(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:470) ++ ++Syscall param fstatfs(buf) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:470) ++ ++Syscall param fstatfs(buf) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:470) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++116: __NR_syslog 3s 1m ++----------------------------------------------------- ++Syscall param syslog(type) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:482) ++ ++Syscall param syslog(bufp) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:482) ++ ++Syscall param syslog(len) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:482) ++ ++Syscall param syslog(bufp) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:482) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++103: __NR_setitimer 3s 2m ++----------------------------------------------------- ++Syscall param setitimer(which) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:486) ++ ++Syscall param setitimer(value) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:486) ++ ++Syscall param setitimer(ovalue) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:486) ++ ++Syscall param setitimer(&value->it_interval) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:486) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param setitimer(&value->it_value) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:486) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param setitimer(&ovalue->it_interval) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:486) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param setitimer(&ovalue->it_value) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:486) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++102: __NR_getitimer 2s 1m ++----------------------------------------------------- ++Syscall param getitimer(which) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:490) ++ ++Syscall param getitimer(value) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:490) ++ ++Syscall param getitimer(&value->it_interval) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:490) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param getitimer(&value->it_value) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:490) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 80: __NR_fstat 2s 1m ++----------------------------------------------------- ++Syscall param fstat(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:502) ++ ++Syscall param fstat(buf) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:502) ++ ++Syscall param fstat(buf) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:502) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 58: __NR_vhangup 0s 0m ++----------------------------------------------------- ++----------------------------------------------------- ++260: __NR_wait4 4s 2m ++----------------------------------------------------- ++Syscall param wait4(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:526) ++ ++Syscall param wait4(status) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:526) ++ ++Syscall param wait4(options) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:526) ++ ++Syscall param wait4(rusage) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:526) ++ ++Syscall param wait4(status) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:526) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param wait4(rusage) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:526) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++225: __NR_swapoff n/a ++----------------------------------------------------- ++----------------------------------------------------- ++179: __NR_sysinfo 1s 1m ++----------------------------------------------------- ++Syscall param sysinfo(info) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:534) ++ ++Syscall param sysinfo(info) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:534) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 82: __NR_fsync 1s 0m ++----------------------------------------------------- ++Syscall param fsync(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:545) ++ ++----------------------------------------------------- ++220: __NR_clone 5s 3m ++----------------------------------------------------- ++Syscall param clone(flags) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:556) ++ ++Syscall param clone(child_stack) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:556) ++ ++Syscall param clone(parent_tidptr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:556) ++ ++Syscall param clone(child_tls) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:556) ++ ++Syscall param clone(child_tidptr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:556) ++ ++Syscall param clone(parent_tidptr) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:556) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++162: __NR_setdomainname n/a ++----------------------------------------------------- ++----------------------------------------------------- ++160: __NR_uname 1s 1m ++----------------------------------------------------- ++Syscall param uname(buf) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:567) ++ ++Syscall param uname(buf) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:567) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++171: __NR_adjtimex XXX ++----------------------------------------------------- ++----------------------------------------------------- ++226: __NR_mprotect 3s 0m ++----------------------------------------------------- ++Syscall param mprotect(addr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:580) ++ ++Syscall param mprotect(len) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:580) ++ ++Syscall param mprotect(prot) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:580) ++ ++----------------------------------------------------- ++105: __NR_init_module 3s 2m ++----------------------------------------------------- ++Syscall param init_module(umod) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:592) ++ ++Syscall param init_module(len) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:592) ++ ++Syscall param init_module(uargs) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:592) ++ ++Syscall param init_module(umod) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:592) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param init_module(uargs) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:592) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++106: __NR_delete_module n/a ++----------------------------------------------------- ++----------------------------------------------------- ++ 60: __NR_quotactl 4s 1m ++----------------------------------------------------- ++Syscall param quotactl(cmd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:604) ++ ++Syscall param quotactl(special) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:604) ++ ++Syscall param quotactl(id) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:604) ++ ++Syscall param quotactl(addr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:604) ++ ++Syscall param quotactl(special) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:604) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++155: __NR_getpgid 1s 0m ++----------------------------------------------------- ++Syscall param getpgid(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:608) ++ ++----------------------------------------------------- ++ 50: __NR_fchdir 1s 0m ++----------------------------------------------------- ++Syscall param fchdir(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:612) ++ ++----------------------------------------------------- ++ 92: __NR_personality 1s 0m ++----------------------------------------------------- ++Syscall param personality(persona) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:624) ++ ++----------------------------------------------------- ++151: __NR_setfsuid 1s 0m ++----------------------------------------------------- ++Syscall param setfsuid(uid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:632) ++ ++----------------------------------------------------- ++152: __NR_setfsgid 1s 0m ++----------------------------------------------------- ++Syscall param setfsgid(gid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:636) ++ ++----------------------------------------------------- ++ 32: __NR_flock 2s 0m ++----------------------------------------------------- ++Syscall param flock(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:652) ++ ++Syscall param flock(operation) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:652) ++ ++----------------------------------------------------- ++227: __NR_msync 3s 1m ++----------------------------------------------------- ++Syscall param msync(start) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:656) ++ ++Syscall param msync(length) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:656) ++ ++Syscall param msync(flags) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:656) ++ ++Syscall param msync(start) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:656) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 65: __NR_readv 3s 1m ++----------------------------------------------------- ++Syscall param readv(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:660) ++ ++Syscall param readv(vector) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:660) ++ ++Syscall param readv(count) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:660) ++ ++Syscall param readv(vector) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:660) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 66: __NR_writev 3s 1m ++----------------------------------------------------- ++Syscall param writev(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:664) ++ ++Syscall param writev(vector) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:664) ++ ++Syscall param writev(count) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:664) ++ ++Syscall param writev(vector) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:664) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++156: __NR_getsid 1s 0m ++----------------------------------------------------- ++Syscall param getsid(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:668) ++ ++----------------------------------------------------- ++ 83: __NR_fdatasync 1s 0m ++----------------------------------------------------- ++Syscall param fdatasync(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:672) ++ ++----------------------------------------------------- ++228: __NR_mlock 2s 0m ++----------------------------------------------------- ++Syscall param mlock(addr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:680) ++ ++Syscall param mlock(len) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:680) ++ ++----------------------------------------------------- ++229: __NR_munlock 2s 0m ++----------------------------------------------------- ++Syscall param munlock(addr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:684) ++ ++Syscall param munlock(len) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:684) ++ ++----------------------------------------------------- ++230: __NR_mlockall 1s 0m ++----------------------------------------------------- ++Syscall param mlockall(flags) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:688) ++ ++----------------------------------------------------- ++231: __NR_munlockall 0s 0m ++----------------------------------------------------- ++----------------------------------------------------- ++118: __NR_sched_setparam 2s 1m ++----------------------------------------------------- ++Syscall param sched_setparam(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:696) ++ ++Syscall param sched_setparam(p) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:696) ++ ++Syscall param sched_setparam(p) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:696) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++121: __NR_sched_getparam 2s 1m ++----------------------------------------------------- ++Syscall param sched_getparam(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:700) ++ ++Syscall param sched_getparam(p) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:700) ++ ++Syscall param sched_getparam(p) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:700) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++119:__NR_sched_setscheduler 3s 1m ++----------------------------------------------------- ++Syscall param sched_setscheduler(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:704) ++ ++Syscall param sched_setscheduler(policy) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:704) ++ ++Syscall param sched_setscheduler(p) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:704) ++ ++Syscall param sched_setscheduler(p) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:704) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++120:__NR_sched_getscheduler 1s 0m ++----------------------------------------------------- ++Syscall param sched_getscheduler(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:708) ++ ++----------------------------------------------------- ++124: __NR_sched_yield 0s 0m ++----------------------------------------------------- ++----------------------------------------------------- ++125:__NR_sched_get_priority_max 1s 0m ++----------------------------------------------------- ++Syscall param sched_get_priority_max(policy) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:716) ++ ++----------------------------------------------------- ++126:__NR_sched_get_priority_min 1s 0m ++----------------------------------------------------- ++Syscall param sched_get_priority_min(policy) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:720) ++ ++----------------------------------------------------- ++127:__NR_sched_rr_get_interval n/a ++----------------------------------------------------- ++----------------------------------------------------- ++101: __NR_nanosleep 2s 2m ++----------------------------------------------------- ++Syscall param nanosleep(req) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:728) ++ ++Syscall param nanosleep(rem) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:728) ++ ++Syscall param nanosleep(req) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:728) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param nanosleep(rem) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:728) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++216: __NR_mremap 5s 0m ++----------------------------------------------------- ++Syscall param mremap(old_addr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:732) ++ ++Syscall param mremap(old_size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:732) ++ ++Syscall param mremap(new_size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:732) ++ ++Syscall param mremap(flags) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:732) ++ ++Syscall param mremap(new_addr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:732) ++ ++----------------------------------------------------- ++147: __NR_setresuid 3s 0m ++----------------------------------------------------- ++Syscall param setresuid(ruid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:736) ++ ++Syscall param setresuid(euid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:736) ++ ++Syscall param setresuid(suid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:736) ++ ++----------------------------------------------------- ++148: __NR_getresuid 3s 3m ++----------------------------------------------------- ++Syscall param getresuid(ruid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:740) ++ ++Syscall param getresuid(euid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:740) ++ ++Syscall param getresuid(suid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:740) ++ ++Syscall param getresuid(ruid) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:740) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param getresuid(euid) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:740) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param getresuid(suid) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:740) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 42: __NR_nfsservctl n/a ++----------------------------------------------------- ++----------------------------------------------------- ++149: __NR_setresgid 3s 0m ++----------------------------------------------------- ++Syscall param setresgid(rgid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:760) ++ ++Syscall param setresgid(egid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:760) ++ ++Syscall param setresgid(sgid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:760) ++ ++----------------------------------------------------- ++150: __NR_getresgid 3s 3m ++----------------------------------------------------- ++Syscall param getresgid(rgid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:764) ++ ++Syscall param getresgid(egid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:764) ++ ++Syscall param getresgid(sgid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:764) ++ ++Syscall param getresgid(rgid) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:764) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param getresgid(egid) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:764) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param getresgid(sgid) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:764) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++167: __NR_prctl 5s 0m ++----------------------------------------------------- ++Syscall param prctl(option) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:768) ++ ++Syscall param prctl(arg2) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:768) ++ ++Syscall param prctl(arg3) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:768) ++ ++Syscall param prctl(arg4) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:768) ++ ++Syscall param prctl(arg5) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:768) ++ ++----------------------------------------------------- ++139: __NR_rt_sigreturn n/a ++----------------------------------------------------- ++----------------------------------------------------- ++134: __NR_rt_sigaction 4s 4m ++----------------------------------------------------- ++Syscall param rt_sigaction(signum) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:776) ++ ++Syscall param rt_sigaction(act) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:776) ++ ++Syscall param rt_sigaction(oldact) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:776) ++ ++Syscall param rt_sigaction(sigsetsize) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:776) ++ ++Syscall param rt_sigaction(act->sa_handler) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:776) ++ Address 0x........ is 8 bytes after a block of size 8 alloc'd ++ at 0x........: malloc (vg_replace_malloc.c:...) ++ by 0x........: main (scalar.c:30) ++ ++Syscall param rt_sigaction(act->sa_mask) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:776) ++ Address 0x........ is 24 bytes after a block of size 16 in arena "client" ++ ++Syscall param rt_sigaction(act->sa_flags) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:776) ++ Address 0x........ is 16 bytes after a block of size 8 alloc'd ++ at 0x........: malloc (vg_replace_malloc.c:...) ++ by 0x........: main (scalar.c:30) ++ ++Syscall param rt_sigaction(oldact) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:776) ++ Address 0x........ is 8 bytes after a block of size 8 alloc'd ++ at 0x........: malloc (vg_replace_malloc.c:...) ++ by 0x........: main (scalar.c:30) ++ ++----------------------------------------------------- ++135: __NR_rt_sigprocmask 4s 2m ++----------------------------------------------------- ++Syscall param rt_sigprocmask(how) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:780) ++ ++Syscall param rt_sigprocmask(set) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:780) ++ ++Syscall param rt_sigprocmask(oldset) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:780) ++ ++Syscall param rt_sigprocmask(sigsetsize) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:780) ++ ++Syscall param rt_sigprocmask(set) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:780) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param rt_sigprocmask(oldset) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:780) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++136: __NR_rt_sigpending 2s 1m ++----------------------------------------------------- ++Syscall param rt_sigpending(set) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:784) ++ ++Syscall param rt_sigpending(sigsetsize) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:784) ++ ++Syscall param rt_sigpending(set) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:784) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++137:__NR_rt_sigtimedwait 4s 3m ++----------------------------------------------------- ++Syscall param rt_sigtimedwait(set) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:788) ++ ++Syscall param rt_sigtimedwait(info) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:788) ++ ++Syscall param rt_sigtimedwait(timeout) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:788) ++ ++Syscall param rt_sigtimedwait(sigsetsize) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:788) ++ ++Syscall param rt_sigtimedwait(set) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:788) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param rt_sigtimedwait(info) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:788) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param rt_sigtimedwait(timeout) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:788) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++138:__NR_rt_sigqueueinfo 3s 1m ++----------------------------------------------------- ++Syscall param rt_sigqueueinfo(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:792) ++ ++Syscall param rt_sigqueueinfo(sig) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:792) ++ ++Syscall param rt_sigqueueinfo(uinfo) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:792) ++ ++Syscall param rt_sigqueueinfo(uinfo) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:792) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++133: __NR_rt_sigsuspend ignore ++----------------------------------------------------- ++----------------------------------------------------- ++ 67: __NR_pread64 5s 1m ++----------------------------------------------------- ++Syscall param pread64(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:800) ++ ++Syscall param pread64(buf) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:800) ++ ++Syscall param pread64(count) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:800) ++ ++Syscall param pread64(offset) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:800) ++ ++Syscall param pread64(buf) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:800) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 68: __NR_pwrite64 5s 1m ++----------------------------------------------------- ++Syscall param pwrite64(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:804) ++ ++Syscall param pwrite64(buf) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:804) ++ ++Syscall param pwrite64(count) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:804) ++ ++Syscall param pwrite64(offset) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:804) ++ ++Syscall param pwrite64(buf) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:804) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 17: __NR_getcwd 2s 1m ++----------------------------------------------------- ++Syscall param getcwd(buf) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:812) ++ ++Syscall param getcwd(size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:812) ++ ++Syscall param getcwd(buf) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:812) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 90: __NR_capget 2s 2m ++----------------------------------------------------- ++Syscall param capget(header) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:816) ++ ++Syscall param capget(data) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:816) ++ ++Syscall param capget(header) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:816) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param capget(data) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:816) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 91: __NR_capset 2s 2m ++----------------------------------------------------- ++Syscall param capset(header) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:820) ++ ++Syscall param capset(data) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:820) ++ ++Syscall param capset(header) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:820) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param capset(data) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:820) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++132: __NR_sigaltstack 2s 2m ++----------------------------------------------------- ++Syscall param sigaltstack(ss) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:834) ++ ++Syscall param sigaltstack(oss) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:834) ++ ++Syscall param sigaltstack(ss) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:834) ++ Address 0x........ is on thread 1's stack ++ in frame #1, created by main (scalar.c:28) ++ ++Syscall param sigaltstack(oss) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:834) ++ Address 0x........ is on thread 1's stack ++ in frame #1, created by main (scalar.c:28) ++ ++----------------------------------------------------- ++ 71: __NR_sendfile 4s 1m ++----------------------------------------------------- ++Syscall param sendfile(out_fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:839) ++ ++Syscall param sendfile(in_fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:839) ++ ++Syscall param sendfile(offset) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:839) ++ ++Syscall param sendfile(count) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:839) ++ ++Syscall param sendfile(offset) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:839) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 41: __NR_pivot_root n/a ++----------------------------------------------------- ++----------------------------------------------------- ++232: __NR_mincore 3s 1m ++----------------------------------------------------- ++Syscall param mincore(start) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:967) ++ ++Syscall param mincore(length) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:967) ++ ++Syscall param mincore(vec) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:967) ++ ++Syscall param mincore(vec) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:967) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++233: __NR_madvise 3s 0m ++----------------------------------------------------- ++Syscall param madvise(start) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:971) ++ ++Syscall param madvise(length) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:971) ++ ++Syscall param madvise(advice) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:971) ++ ++----------------------------------------------------- ++ 61: __NR_getdents64 3s 1m ++----------------------------------------------------- ++Syscall param getdents64(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:975) ++ ++Syscall param getdents64(dirp) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:975) ++ ++Syscall param getdents64(count) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:975) ++ ++Syscall param getdents64(dirp) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:975) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++178: __NR_gettid n/a ++----------------------------------------------------- ++----------------------------------------------------- ++213: __NR_readahead n/a ++----------------------------------------------------- ++----------------------------------------------------- ++ 5: __NR_setxattr 5s 3m ++----------------------------------------------------- ++Syscall param setxattr(path) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1012) ++ ++Syscall param setxattr(name) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1012) ++ ++Syscall param setxattr(value) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1012) ++ ++Syscall param setxattr(size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1012) ++ ++Syscall param setxattr(flags) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1012) ++ ++Syscall param setxattr(path) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1012) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param setxattr(name) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1012) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param setxattr(value) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1012) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 6: __NR_lsetxattr 5s 3m ++----------------------------------------------------- ++Syscall param lsetxattr(path) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1016) ++ ++Syscall param lsetxattr(name) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1016) ++ ++Syscall param lsetxattr(value) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1016) ++ ++Syscall param lsetxattr(size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1016) ++ ++Syscall param lsetxattr(flags) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1016) ++ ++Syscall param lsetxattr(path) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1016) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param lsetxattr(name) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1016) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param lsetxattr(value) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1016) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 7: __NR_fsetxattr 5s 2m ++----------------------------------------------------- ++Syscall param fsetxattr(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1020) ++ ++Syscall param fsetxattr(name) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1020) ++ ++Syscall param fsetxattr(value) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1020) ++ ++Syscall param fsetxattr(size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1020) ++ ++Syscall param fsetxattr(flags) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1020) ++ ++Syscall param fsetxattr(name) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1020) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param fsetxattr(value) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1020) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 8: __NR_getxattr 4s 3m ++----------------------------------------------------- ++Syscall param getxattr(path) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1024) ++ ++Syscall param getxattr(name) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1024) ++ ++Syscall param getxattr(value) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1024) ++ ++Syscall param getxattr(size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1024) ++ ++Syscall param getxattr(path) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1024) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param getxattr(name) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1024) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param getxattr(value) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1024) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 9: __NR_lgetxattr 4s 3m ++----------------------------------------------------- ++Syscall param lgetxattr(path) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1028) ++ ++Syscall param lgetxattr(name) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1028) ++ ++Syscall param lgetxattr(value) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1028) ++ ++Syscall param lgetxattr(size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1028) ++ ++Syscall param lgetxattr(path) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1028) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param lgetxattr(name) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1028) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param lgetxattr(value) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1028) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 10: __NR_fgetxattr 4s 2m ++----------------------------------------------------- ++Syscall param fgetxattr(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1032) ++ ++Syscall param fgetxattr(name) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1032) ++ ++Syscall param fgetxattr(value) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1032) ++ ++Syscall param fgetxattr(size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1032) ++ ++Syscall param fgetxattr(name) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1032) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param fgetxattr(value) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1032) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 11: __NR_listxattr 3s 2m ++----------------------------------------------------- ++Syscall param listxattr(path) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1036) ++ ++Syscall param listxattr(list) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1036) ++ ++Syscall param listxattr(size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1036) ++ ++Syscall param listxattr(path) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1036) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param listxattr(list) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1036) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 12: __NR_llistxattr 3s 2m ++----------------------------------------------------- ++Syscall param llistxattr(path) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1040) ++ ++Syscall param llistxattr(list) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1040) ++ ++Syscall param llistxattr(size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1040) ++ ++Syscall param llistxattr(path) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1040) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param llistxattr(list) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1040) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 13: __NR_flistxattr 3s 1m ++----------------------------------------------------- ++Syscall param flistxattr(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1044) ++ ++Syscall param flistxattr(list) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1044) ++ ++Syscall param flistxattr(size) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1044) ++ ++Syscall param flistxattr(list) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1044) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 14: __NR_removexattr 2s 2m ++----------------------------------------------------- ++Syscall param removexattr(path) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1048) ++ ++Syscall param removexattr(name) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1048) ++ ++Syscall param removexattr(path) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1048) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param removexattr(name) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1048) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 15: __NR_lremovexattr 2s 2m ++----------------------------------------------------- ++Syscall param lremovexattr(path) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1052) ++ ++Syscall param lremovexattr(name) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1052) ++ ++Syscall param lremovexattr(path) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1052) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param lremovexattr(name) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1052) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 16: __NR_fremovexattr 2s 1m ++----------------------------------------------------- ++Syscall param fremovexattr(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1056) ++ ++Syscall param fremovexattr(name) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1056) ++ ++Syscall param fremovexattr(name) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1056) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++130: __NR_tkill n/a ++----------------------------------------------------- ++----------------------------------------------------- ++ 98: __NR_futex 5s 2m ++----------------------------------------------------- ++Syscall param futex(futex) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1072) ++ ++Syscall param futex(op) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1072) ++ ++Syscall param futex(val) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1072) ++ ++Syscall param futex(utime) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1072) ++ ++Syscall param futex(futex) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1072) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param futex(timeout) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1072) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++122:__NR_sched_setaffinity 3s 1m ++----------------------------------------------------- ++Syscall param sched_setaffinity(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1076) ++ ++Syscall param sched_setaffinity(len) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1076) ++ ++Syscall param sched_setaffinity(mask) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1076) ++ ++Syscall param sched_setaffinity(mask) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1076) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++123:__NR_sched_getaffinity 3s 1m ++----------------------------------------------------- ++Syscall param sched_getaffinity(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1080) ++ ++Syscall param sched_getaffinity(len) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1080) ++ ++Syscall param sched_getaffinity(mask) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1080) ++ ++Syscall param sched_getaffinity(mask) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1080) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 0: __NR_io_setup 2s 1m ++----------------------------------------------------- ++Syscall param io_setup(nr_events) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1092) ++ ++Syscall param io_setup(ctxp) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1092) ++ ++Syscall param io_setup(ctxp) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1092) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 1: __NR_io_destroy 1s 0m ++----------------------------------------------------- ++Syscall param io_destroy(ctx) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1105) ++ ++----------------------------------------------------- ++ 4: __NR_io_getevents 5s 2m ++----------------------------------------------------- ++Syscall param io_getevents(ctx_id) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1110) ++ ++Syscall param io_getevents(min_nr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1110) ++ ++Syscall param io_getevents(nr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1110) ++ ++Syscall param io_getevents(events) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1110) ++ ++Syscall param io_getevents(timeout) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1110) ++ ++Syscall param io_getevents(events) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1110) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param io_getevents(timeout) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1110) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 2: __NR_io_submit 3s 1m ++----------------------------------------------------- ++Syscall param io_submit(ctx_id) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1114) ++ ++Syscall param io_submit(nr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1114) ++ ++Syscall param io_submit(iocbpp) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1114) ++ ++Syscall param io_submit(iocbpp) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1114) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++ 3: __NR_io_cancel 3s 2m ++----------------------------------------------------- ++Syscall param io_cancel(ctx_id) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1118) ++ ++Syscall param io_cancel(iocb) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1118) ++ ++Syscall param io_cancel(result) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1118) ++ ++Syscall param io_cancel(iocb) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1118) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param io_cancel(result) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1118) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++223: __NR_fadvise64 n/a ++----------------------------------------------------- ++----------------------------------------------------- ++ 94: __NR_exit_group other ++----------------------------------------------------- ++----------------------------------------------------- ++ 18: __NR_lookup_dcookie 4s 1m ++----------------------------------------------------- ++Syscall param lookup_dcookie(cookie) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1134) ++ ++Syscall param lookup_dcookie(buf) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1134) ++ ++Syscall param lookup_dcookie(len) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1134) ++ ++----------------------------------------------------- ++ 21: __NR_epoll_ctl 4s 1m ++----------------------------------------------------- ++Syscall param epoll_ctl(epfd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1142) ++ ++Syscall param epoll_ctl(op) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1142) ++ ++Syscall param epoll_ctl(fd) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1142) ++ ++Syscall param epoll_ctl(event) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1142) ++ ++Syscall param epoll_ctl(event) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1142) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++234:__NR_remap_file_pages n/a ++----------------------------------------------------- ++----------------------------------------------------- ++ 96:__NR_set_tid_address 1s 0m ++----------------------------------------------------- ++Syscall param set_tid_address(tidptr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1154) ++ ++----------------------------------------------------- ++107: __NR_timer_create 3s 2m ++----------------------------------------------------- ++Syscall param timer_create(clockid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1158) ++ ++Syscall param timer_create(evp) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1158) ++ ++Syscall param timer_create(timerid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1158) ++ ++Syscall param timer_create(evp.sigev_value) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1158) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param timer_create(evp.sigev_signo) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1158) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param timer_create(evp.sigev_notify) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1158) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param timer_create(timerid) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1158) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++110: __NR_timer_settime 4s 2m ++----------------------------------------------------- ++Syscall param timer_settime(timerid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1162) ++ ++Syscall param timer_settime(flags) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1162) ++ ++Syscall param timer_settime(value) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1162) ++ ++Syscall param timer_settime(ovalue) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1162) ++ ++Syscall param timer_settime(value) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1162) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param timer_settime(ovalue) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1162) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++108: __NR_timer_gettime 2s 1m ++----------------------------------------------------- ++Syscall param timer_gettime(timerid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1166) ++ ++Syscall param timer_gettime(value) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1166) ++ ++Syscall param timer_gettime(value) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1166) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++109:__NR_timer_getoverrun 1s 0m ++----------------------------------------------------- ++Syscall param timer_getoverrun(timerid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1170) ++ ++----------------------------------------------------- ++111: __NR_timer_delete 1s 0m ++----------------------------------------------------- ++Syscall param timer_delete(timerid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1174) ++ ++----------------------------------------------------- ++112: __NR_clock_settime 2s 1m ++----------------------------------------------------- ++Syscall param clock_settime(clk_id) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1178) ++ ++Syscall param clock_settime(tp) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1178) ++ ++Syscall param clock_settime(tp) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1178) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++113: __NR_clock_gettime 2s 1m ++----------------------------------------------------- ++Syscall param clock_gettime(clk_id) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1182) ++ ++Syscall param clock_gettime(tp) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1182) ++ ++Syscall param clock_gettime(tp) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1182) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++114: __NR_clock_getres 2s 1m ++----------------------------------------------------- ++Syscall param clock_getres(clk_id) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1186) ++ ++Syscall param clock_getres(res) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1186) ++ ++Syscall param clock_getres(res) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1186) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++115:__NR_clock_nanosleep n/a ++----------------------------------------------------- ++----------------------------------------------------- ++131: __NR_tgkill n/a ++----------------------------------------------------- ++----------------------------------------------------- ++235: __NR_mbind n/a ++----------------------------------------------------- ++----------------------------------------------------- ++236: __NR_get_mempolicy n/a ++----------------------------------------------------- ++----------------------------------------------------- ++237: __NR_set_mempolicy n/a ++----------------------------------------------------- ++----------------------------------------------------- ++180: __NR_mq_open 4s 3m ++----------------------------------------------------- ++Syscall param mq_open(name) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1230) ++ ++Syscall param mq_open(oflag) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1230) ++ ++Syscall param mq_open(mode) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1230) ++ ++Syscall param mq_open(attr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1230) ++ ++Syscall param mq_open(name) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1230) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param mq_open(attr->mq_maxmsg) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1230) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param mq_open(attr->mq_msgsize) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1230) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++181: __NR_mq_unlink 1s 1m ++----------------------------------------------------- ++Syscall param mq_unlink(name) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1234) ++ ++Syscall param mq_unlink(name) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1234) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++182: __NR_mq_timedsend 5s 2m ++----------------------------------------------------- ++Syscall param mq_timedsend(mqdes) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1238) ++ ++Syscall param mq_timedsend(msg_ptr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1238) ++ ++Syscall param mq_timedsend(msg_len) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1238) ++ ++Syscall param mq_timedsend(msg_prio) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1238) ++ ++Syscall param mq_timedsend(abs_timeout) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1238) ++ ++Syscall param mq_timedsend(msg_ptr) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1238) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param mq_timedsend(abs_timeout) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1238) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++183:__NR_mq_timedreceive 5s 3m ++----------------------------------------------------- ++Syscall param mq_timedreceive(mqdes) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1242) ++ ++Syscall param mq_timedreceive(msg_ptr) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1242) ++ ++Syscall param mq_timedreceive(msg_len) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1242) ++ ++Syscall param mq_timedreceive(msg_prio) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1242) ++ ++Syscall param mq_timedreceive(abs_timeout) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1242) ++ ++Syscall param mq_timedreceive(msg_ptr) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1242) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param mq_timedreceive(msg_prio) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1242) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param mq_timedreceive(abs_timeout) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1242) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++184: __NR_mq_notify 2s 1m ++----------------------------------------------------- ++Syscall param mq_notify(mqdes) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1246) ++ ++Syscall param mq_notify(notification) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1246) ++ ++Syscall param mq_notify(notification) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1246) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++185: __NR_mq_getsetattr 3s 2m ++----------------------------------------------------- ++Syscall param mq_getsetattr(mqdes) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1250) ++ ++Syscall param mq_getsetattr(mqstat) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1250) ++ ++Syscall param mq_getsetattr(omqstat) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1250) ++ ++Syscall param mq_getsetattr(mqstat->mq_flags) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1250) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param mq_getsetattr(omqstat) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1250) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++104: __NR_kexec_load ni ++----------------------------------------------------- ++----------------------------------------------------- ++ 20: __NR_epoll_create1 1s 0m ++----------------------------------------------------- ++Syscall param epoll_create1(flags) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1258) ++ ++----------------------------------------------------- ++270:__NR_process_vm_readv 6s 2m ++----------------------------------------------------- ++Syscall param process_vm_readv(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1262) ++ ++Syscall param process_vm_readv(lvec) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1262) ++ ++Syscall param process_vm_readv(liovcnt) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1262) ++ ++Syscall param process_vm_readv(rvec) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1262) ++ ++Syscall param process_vm_readv(riovcnt) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1262) ++ ++Syscall param process_vm_readv(flags) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1262) ++ ++Syscall param process_vm_readv(lvec) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1262) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param process_vm_readv(rvec) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1262) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++271:__NR_process_vm_writev 6s 2m ++----------------------------------------------------- ++Syscall param process_vm_writev(pid) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1266) ++ ++Syscall param process_vm_writev(lvec) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1266) ++ ++Syscall param process_vm_writev(liovcnt) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1266) ++ ++Syscall param process_vm_writev(rvec) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1266) ++ ++Syscall param process_vm_writev(riovcnt) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1266) ++ ++Syscall param process_vm_writev(flags) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1266) ++ ++Syscall param process_vm_writev(lvec) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1266) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++Syscall param process_vm_writev(rvec) points to unaddressable byte(s) ++ ... ++ by 0x........: main (scalar.c:1266) ++ Address 0x........ is not stack'd, malloc'd or (recently) free'd ++ ++----------------------------------------------------- ++9999: 9999 1e ++----------------------------------------------------- ++WARNING: unhandled arm64-linux syscall: 9999 ++You may be able to write your own handler. ++Read the file README_MISSING_SYSCALL_OR_IOCTL. ++Nevertheless we consider this a bug. Please report ++it at http://valgrind.org/support/bug_reports.html. ++----------------------------------------------------- ++ 93: __NR_exit 1s 0m ++----------------------------------------------------- ++Syscall param exit(status) contains uninitialised byte(s) ++ ... ++ by 0x........: main (scalar.c:1274) ++ +diff --git a/memcheck/tests/arm64-linux/scalar.vgtest b/memcheck/tests/arm64-linux/scalar.vgtest +new file mode 100644 +index 0000000..897d9e7 +--- /dev/null ++++ b/memcheck/tests/arm64-linux/scalar.vgtest +@@ -0,0 +1,3 @@ ++prog: scalar ++vgopts: -q --error-limit=no ++args: < scalar.c +-- +2.5.0 + +From 4d8495affad088be6e8af0a5aa9c55ca7dfe3579 Mon Sep 17 00:00:00 2001 +From: mjw +Date: Wed, 9 Mar 2016 16:18:37 +0000 +Subject: [PATCH 3/3] Bug 359503 - Add missing syscalls for aarch64 (arm64) + +Enable more arm64 syscalls. ioprio_set, ioprio_get, preadv, pwritev, +vmsplice, splice, tee, waitid, clock_nanosleep and perf_event_open. +Reported and patch (mostly) by Marcin Juszkiewicz. + +git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15826 a5019735-40e9-0310-863c-91ae7b9d1cf9 +--- + NEWS | 1 + + coregrind/m_syswrap/syswrap-arm64-linux.c | 31 +++++++++++++------------------ + 2 files changed, 14 insertions(+), 18 deletions(-) + +diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c +index 8f4efa6..0b78f20 100644 +--- a/coregrind/m_syswrap/syswrap-arm64-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm64-linux.c +@@ -885,7 +885,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_(__NR_inotify_add_watch, sys_inotify_add_watch), // 27 + LINX_(__NR_inotify_rm_watch, sys_inotify_rm_watch), // 28 + LINXY(__NR_ioctl, sys_ioctl), // 29 +- ++ LINX_(__NR_ioprio_set, sys_ioprio_set), // 30 ++ LINX_(__NR_ioprio_get, sys_ioprio_get), // 31 + GENX_(__NR_flock, sys_flock), // 32 + LINX_(__NR_mknodat, sys_mknodat), // 33 + LINX_(__NR_mkdirat, sys_mkdirat), // 34 +@@ -922,12 +923,15 @@ static SyscallTableEntry syscall_main_table[] = { + GENX_(__NR_writev, sys_writev), // 66 + GENXY(__NR_pread64, sys_pread64), // 67 + GENX_(__NR_pwrite64, sys_pwrite64), // 68 +- ++ LINXY(__NR_preadv, sys_preadv), // 69 ++ LINX_(__NR_pwritev, sys_pwritev), // 70 + LINXY(__NR_sendfile, sys_sendfile), // 71 + LINXY(__NR_pselect6, sys_pselect6), // 72 + LINXY(__NR_ppoll, sys_ppoll), // 73 + LINXY(__NR_signalfd4, sys_signalfd4), // 74 +- ++ LINX_(__NR_vmsplice, sys_vmsplice), // 75 ++ LINX_(__NR_splice, sys_splice), // 76 ++ LINX_(__NR_tee, sys_tee), // 77 + LINX_(__NR_readlinkat, sys_readlinkat), // 78 + LINXY(__NR_newfstatat, sys_newfstatat), // 79 + GENXY(__NR_fstat, sys_newfstat), // 80 +@@ -945,7 +949,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_(__NR_personality, sys_personality), // 92 + GENX_(__NR_exit, sys_exit), // 93 + LINX_(__NR_exit_group, sys_exit_group), // 94 +- ++ LINXY(__NR_waitid, sys_waitid), // 95 + LINX_(__NR_set_tid_address, sys_set_tid_address), // 96 + + LINXY(__NR_futex, sys_futex), // 98 +@@ -965,7 +969,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_(__NR_clock_settime, sys_clock_settime), // 112 + LINXY(__NR_clock_gettime, sys_clock_gettime), // 113 + LINXY(__NR_clock_getres, sys_clock_getres), // 114 +- ++ LINXY(__NR_clock_nanosleep, sys_clock_nanosleep), // 115 + LINXY(__NR_syslog, sys_syslog), // 116 + + LINXY(__NR_sched_setparam, sys_sched_setparam), // 118 +@@ -1081,12 +1085,14 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_(__NR_munlockall, sys_munlockall), // 231 + GENXY(__NR_mincore, sys_mincore), // 232 + GENX_(__NR_madvise, sys_madvise), // 233 ++ + LINX_(__NR_mbind, sys_mbind), // 235 + LINXY(__NR_get_mempolicy, sys_get_mempolicy), // 236 + LINX_(__NR_set_mempolicy, sys_set_mempolicy), // 237 + +- LINXY(__NR_recvmmsg, sys_recvmmsg), // 243 ++ LINXY(__NR_perf_event_open, sys_perf_event_open), // 241 + LINXY(__NR_accept4, sys_accept4), // 242 ++ LINXY(__NR_recvmmsg, sys_recvmmsg), // 243 + + GENXY(__NR_wait4, sys_wait4), // 260 + +@@ -1095,6 +1101,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY(__NR_sendmmsg, sys_sendmmsg), // 269 + LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 270 + LINX_(__NR_process_vm_writev, sys_process_vm_writev), // 271 ++ + LINXY(__NR_getrandom, sys_getrandom), // 278 + LINXY(__NR_memfd_create, sys_memfd_create), // 279 + +@@ -1308,7 +1315,6 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ LINX_(__NR_set_tid_address, sys_set_tid_address), // 258 + //ZZ + //ZZ LINXY(__NR_clock_getres, sys_clock_getres), // (timer_create+7) +-//ZZ LINXY(__NR_clock_nanosleep, sys_clock_nanosleep),// (timer_create+8) */* + //ZZ GENXY(__NR_statfs64, sys_statfs64), // 268 + //ZZ GENXY(__NR_fstatfs64, sys_fstatfs64), // 269 + //ZZ +@@ -1320,8 +1326,6 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ LINXY(__NR_get_mempolicy, sys_get_mempolicy), // 275 ?/? + //ZZ LINX_(__NR_set_mempolicy, sys_set_mempolicy), // 276 ?/? + //ZZ +-//ZZ LINXY(__NR_waitid, sys_waitid), // 280 +-//ZZ + //ZZ LINX_(__NR_send, sys_send), + //ZZ LINXY(__NR_recv, sys_recv), + //ZZ LINXY(__NR_recvfrom, sys_recvfrom), // 292 +@@ -1329,9 +1333,6 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ LINXY(__NR_semctl, sys_semctl), // 300 + //ZZ + //ZZ LINX_(__NR_request_key, sys_request_key), // 287 +-//ZZ // LINX_(__NR_ioprio_set, sys_ioprio_set), // 289 +-//ZZ +-//ZZ // LINX_(__NR_ioprio_get, sys_ioprio_get), // 290 + //ZZ LINX_(__NR_inotify_init, sys_inotify_init), // 291 + //ZZ // LINX_(__NR_migrate_pages, sys_migrate_pages), // 294 + //ZZ +@@ -1347,11 +1348,8 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ // LINX_(__NR_unshare, sys_unshare), // 310 + //ZZ LINX_(__NR_set_robust_list, sys_set_robust_list), // 311 + //ZZ LINXY(__NR_get_robust_list, sys_get_robust_list), // 312 +-//ZZ // LINX_(__NR_splice, sys_ni_syscall), // 313 + //ZZ // LINX_(__NR_sync_file_range, sys_sync_file_range), // 314 + //ZZ +-//ZZ // LINX_(__NR_tee, sys_ni_syscall), // 315 +-//ZZ // LINX_(__NR_vmsplice, sys_ni_syscall), // 316 + //ZZ LINXY(__NR_move_pages, sys_move_pages), // 317 + //ZZ // LINX_(__NR_getcpu, sys_ni_syscall), // 318 + //ZZ +@@ -1374,10 +1372,7 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ + //ZZ LINXY(__NR_eventfd2, sys_eventfd2), // 356 + //ZZ LINXY(__NR_epoll_create1, sys_epoll_create1), // 357 +-//ZZ LINXY(__NR_preadv, sys_preadv), // 361 +-//ZZ LINX_(__NR_pwritev, sys_pwritev), // 362 + //ZZ LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 363 +-//ZZ LINXY(__NR_perf_event_open, sys_perf_event_open), // 364 + //ZZ + //ZZ LINXY(__NR_name_to_handle_at, sys_name_to_handle_at),// 370 + //ZZ LINXY(__NR_open_by_handle_at, sys_open_by_handle_at),// 371 +-- +2.5.0 + +diff -rNu valgrind-3.11.0.orig/configure valgrind-3.11.0/configure +--- valgrind-3.11.0.orig/configure 2016-03-09 20:26:02.075924599 +0100 ++++ valgrind-3.11.0/configure 2016-03-09 20:49:09.846378502 +0100 +@@ -14095,7 +14095,7 @@ + #---------------------------------------------------------------------------- + + # Nb: VEX/Makefile is generated from Makefile.vex.in. +-ac_config_files="$ac_config_files Makefile VEX/Makefile:Makefile.vex.in valgrind.spec valgrind.pc glibc-2.X.supp docs/Makefile tests/Makefile tests/vg_regtest perf/Makefile perf/vg_perf gdbserver_tests/Makefile gdbserver_tests/solaris/Makefile include/Makefile auxprogs/Makefile mpi/Makefile coregrind/Makefile memcheck/Makefile memcheck/tests/Makefile memcheck/tests/common/Makefile memcheck/tests/amd64/Makefile memcheck/tests/x86/Makefile memcheck/tests/linux/Makefile memcheck/tests/darwin/Makefile memcheck/tests/solaris/Makefile memcheck/tests/amd64-linux/Makefile memcheck/tests/x86-linux/Makefile memcheck/tests/amd64-solaris/Makefile memcheck/tests/x86-solaris/Makefile memcheck/tests/ppc32/Makefile memcheck/tests/ppc64/Makefile memcheck/tests/s390x/Makefile memcheck/tests/vbit-test/Makefile cachegrind/Makefile cachegrind/tests/Makefile cachegrind/tests/x86/Makefile cachegrind/cg_annotate cachegrind/cg_diff callgrind/Makefile callgrind/callgrind_annotate callgrind/callgrind_control callgrind/tests/Makefile helgrind/Makefile helgrind/tests/Makefile massif/Makefile massif/tests/Makefile massif/ms_print lackey/Makefile lackey/tests/Makefile none/Makefile none/tests/Makefile none/tests/scripts/Makefile none/tests/amd64/Makefile none/tests/ppc32/Makefile none/tests/ppc64/Makefile none/tests/x86/Makefile none/tests/arm/Makefile none/tests/arm64/Makefile none/tests/s390x/Makefile none/tests/mips32/Makefile none/tests/mips64/Makefile none/tests/tilegx/Makefile none/tests/linux/Makefile none/tests/darwin/Makefile none/tests/solaris/Makefile none/tests/amd64-linux/Makefile none/tests/x86-linux/Makefile none/tests/amd64-darwin/Makefile none/tests/x86-darwin/Makefile none/tests/amd64-solaris/Makefile none/tests/x86-solaris/Makefile exp-sgcheck/Makefile exp-sgcheck/tests/Makefile drd/Makefile drd/scripts/download-and-build-splash2 drd/tests/Makefile exp-bbv/Makefile exp-bbv/tests/Makefile exp-bbv/tests/x86/Makefile exp-bbv/tests/x86-linux/Makefile exp-bbv/tests/amd64-linux/Makefile exp-bbv/tests/ppc32-linux/Makefile exp-bbv/tests/arm-linux/Makefile exp-dhat/Makefile exp-dhat/tests/Makefile shared/Makefile solaris/Makefile" ++ac_config_files="$ac_config_files Makefile VEX/Makefile:Makefile.vex.in valgrind.spec valgrind.pc glibc-2.X.supp docs/Makefile tests/Makefile tests/vg_regtest perf/Makefile perf/vg_perf gdbserver_tests/Makefile gdbserver_tests/solaris/Makefile include/Makefile auxprogs/Makefile mpi/Makefile coregrind/Makefile memcheck/Makefile memcheck/tests/Makefile memcheck/tests/common/Makefile memcheck/tests/amd64/Makefile memcheck/tests/x86/Makefile memcheck/tests/linux/Makefile memcheck/tests/darwin/Makefile memcheck/tests/solaris/Makefile memcheck/tests/amd64-linux/Makefile memcheck/tests/arm64-linux/Makefile memcheck/tests/x86-linux/Makefile memcheck/tests/amd64-solaris/Makefile memcheck/tests/x86-solaris/Makefile memcheck/tests/ppc32/Makefile memcheck/tests/ppc64/Makefile memcheck/tests/s390x/Makefile memcheck/tests/vbit-test/Makefile cachegrind/Makefile cachegrind/tests/Makefile cachegrind/tests/x86/Makefile cachegrind/cg_annotate cachegrind/cg_diff callgrind/Makefile callgrind/callgrind_annotate callgrind/callgrind_control callgrind/tests/Makefile helgrind/Makefile helgrind/tests/Makefile massif/Makefile massif/tests/Makefile massif/ms_print lackey/Makefile lackey/tests/Makefile none/Makefile none/tests/Makefile none/tests/scripts/Makefile none/tests/amd64/Makefile none/tests/ppc32/Makefile none/tests/ppc64/Makefile none/tests/x86/Makefile none/tests/arm/Makefile none/tests/arm64/Makefile none/tests/s390x/Makefile none/tests/mips32/Makefile none/tests/mips64/Makefile none/tests/tilegx/Makefile none/tests/linux/Makefile none/tests/darwin/Makefile none/tests/solaris/Makefile none/tests/amd64-linux/Makefile none/tests/x86-linux/Makefile none/tests/amd64-darwin/Makefile none/tests/x86-darwin/Makefile none/tests/amd64-solaris/Makefile none/tests/x86-solaris/Makefile exp-sgcheck/Makefile exp-sgcheck/tests/Makefile drd/Makefile drd/scripts/download-and-build-splash2 drd/tests/Makefile exp-bbv/Makefile exp-bbv/tests/Makefile exp-bbv/tests/x86/Makefile exp-bbv/tests/x86-linux/Makefile exp-bbv/tests/amd64-linux/Makefile exp-bbv/tests/ppc32-linux/Makefile exp-bbv/tests/arm-linux/Makefile exp-dhat/Makefile exp-dhat/tests/Makefile shared/Makefile solaris/Makefile" + + ac_config_files="$ac_config_files coregrind/link_tool_exe_linux" + +@@ -15379,6 +15379,7 @@ + "memcheck/tests/darwin/Makefile") CONFIG_FILES="$CONFIG_FILES memcheck/tests/darwin/Makefile" ;; + "memcheck/tests/solaris/Makefile") CONFIG_FILES="$CONFIG_FILES memcheck/tests/solaris/Makefile" ;; + "memcheck/tests/amd64-linux/Makefile") CONFIG_FILES="$CONFIG_FILES memcheck/tests/amd64-linux/Makefile" ;; ++ "memcheck/tests/arm64-linux/Makefile") CONFIG_FILES="$CONFIG_FILES memcheck/tests/arm64-linux/Makefile" ;; + "memcheck/tests/x86-linux/Makefile") CONFIG_FILES="$CONFIG_FILES memcheck/tests/x86-linux/Makefile" ;; + "memcheck/tests/amd64-solaris/Makefile") CONFIG_FILES="$CONFIG_FILES memcheck/tests/amd64-solaris/Makefile" ;; + "memcheck/tests/x86-solaris/Makefile") CONFIG_FILES="$CONFIG_FILES memcheck/tests/x86-solaris/Makefile" ;; +diff -rNu valgrind-3.11.0.orig/memcheck/tests/arm64-linux/Makefile.in valgrind-3.11.0/memcheck/tests/arm64-linux/Makefile.in +--- valgrind-3.11.0.orig/memcheck/tests/arm64-linux/Makefile.in 1970-01-01 01:00:00.000000000 +0100 ++++ valgrind-3.11.0/memcheck/tests/arm64-linux/Makefile.in 2016-03-09 20:49:07.190390855 +0100 +@@ -0,0 +1,912 @@ ++# Makefile.in generated by automake 1.14.1 from Makefile.am. ++# @configure_input@ ++ ++# Copyright (C) 1994-2013 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++@SET_MAKE@ ++ ++# This file is used for tool tests, and also in perf/Makefile.am. ++ ++# This file should be included (directly or indirectly) by every ++# Makefile.am that builds programs. And also the top-level Makefile.am. ++ ++#---------------------------------------------------------------------------- ++# Global stuff ++#---------------------------------------------------------------------------- ++ ++ ++VPATH = @srcdir@ ++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/@PACKAGE@ ++pkgincludedir = $(includedir)/@PACKAGE@ ++pkglibdir = $(libdir)/@PACKAGE@ ++pkglibexecdir = $(libexecdir)/@PACKAGE@ ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = @build@ ++host_triplet = @host@ ++DIST_COMMON = $(top_srcdir)/Makefile.tool-tests.am \ ++ $(top_srcdir)/Makefile.all.am $(srcdir)/Makefile.in \ ++ $(srcdir)/Makefile.am $(dist_noinst_SCRIPTS) \ ++ $(top_srcdir)/depcomp $(noinst_HEADERS) ++@COMPILER_IS_CLANG_TRUE@am__append_1 = -Wno-cast-align -Wno-self-assign \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-tautological-compare ++ ++@SOLARIS_XPG_SYMBOLS_PRESENT_TRUE@am__append_2 = -Wl,-M,$(top_srcdir)/solaris/vgpreload-solaris.mapfile ++ ++# The Android toolchain includes all kinds of stdlib helpers present in ++# bionic which is bad because we are not linking with it and the Android ++# linker will panic. ++@VGCONF_PLATVARIANT_IS_ANDROID_TRUE@am__append_3 = -nostdlib ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@am__append_4 = -DVGA_SEC_@VGCONF_ARCH_SEC@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGP_SEC_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1 ++ ++ ++# Make sure that all test programs have threaded errno. ++@VGCONF_OS_IS_SOLARIS_TRUE@am__append_5 = -D_REENTRANT ++@COMPILER_IS_CLANG_TRUE@am__append_6 = -Wno-format-extra-args \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-literal-range \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-tautological-constant-out-of-range-compare \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-self-assign -Wno-string-plus-int \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-uninitialized -Wno-unused-value # \ ++@COMPILER_IS_CLANG_TRUE@ clang 3.0.0 ++@COMPILER_IS_CLANG_TRUE@am__append_7 = -Wno-unused-private-field # drd/tests/tsan_unittest.cpp ++check_PROGRAMS = scalar$(EXEEXT) ++subdir = memcheck/tests/arm64-linux ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++scalar_SOURCES = scalar.c ++scalar_OBJECTS = scalar.$(OBJEXT) ++scalar_LDADD = $(LDADD) ++SCRIPTS = $(dist_noinst_SCRIPTS) ++AM_V_P = $(am__v_P_@AM_V@) ++am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_@AM_V@) ++am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_@AM_V@) ++am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) ++am__v_at_0 = @ ++am__v_at_1 = ++DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) ++depcomp = $(SHELL) $(top_srcdir)/depcomp ++am__depfiles_maybe = depfiles ++am__mv = mv -f ++COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ ++ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) ++AM_V_CC = $(am__v_CC_@AM_V@) ++am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) ++am__v_CC_0 = @echo " CC " $@; ++am__v_CC_1 = ++CCLD = $(CC) ++LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ ++AM_V_CCLD = $(am__v_CCLD_@AM_V@) ++am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) ++am__v_CCLD_0 = @echo " CCLD " $@; ++am__v_CCLD_1 = ++SOURCES = scalar.c ++DIST_SOURCES = scalar.c ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++HEADERS = $(noinst_HEADERS) ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++ETAGS = etags ++CTAGS = ctags ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++ACLOCAL = @ACLOCAL@ ++AMTAR = @AMTAR@ ++AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ++AR = @AR@ ++AUTOCONF = @AUTOCONF@ ++AUTOHEADER = @AUTOHEADER@ ++AUTOMAKE = @AUTOMAKE@ ++AWK = @AWK@ ++BOOST_CFLAGS = @BOOST_CFLAGS@ ++BOOST_LIBS = @BOOST_LIBS@ ++CC = @CC@ ++CCAS = @CCAS@ ++CCASDEPMODE = @CCASDEPMODE@ ++CCASFLAGS = @CCASFLAGS@ ++CCDEPMODE = @CCDEPMODE@ ++CFLAGS = @CFLAGS@ ++CFLAGS_MPI = @CFLAGS_MPI@ ++CPP = @CPP@ ++CPPFLAGS = @CPPFLAGS@ ++CXX = @CXX@ ++CXXDEPMODE = @CXXDEPMODE@ ++CXXFLAGS = @CXXFLAGS@ ++CYGPATH_W = @CYGPATH_W@ ++DEFAULT_SUPP = @DEFAULT_SUPP@ ++DEFS = @DEFS@ ++DEPDIR = @DEPDIR@ ++DIFF = @DIFF@ ++DIS_PATH = @DIS_PATH@ ++ECHO_C = @ECHO_C@ ++ECHO_N = @ECHO_N@ ++ECHO_T = @ECHO_T@ ++EGREP = @EGREP@ ++EXEEXT = @EXEEXT@ ++FLAG_FNO_IPA_ICF = @FLAG_FNO_IPA_ICF@ ++FLAG_FNO_STACK_PROTECTOR = @FLAG_FNO_STACK_PROTECTOR@ ++FLAG_FSANITIZE = @FLAG_FSANITIZE@ ++FLAG_M32 = @FLAG_M32@ ++FLAG_M64 = @FLAG_M64@ ++FLAG_MIPS32 = @FLAG_MIPS32@ ++FLAG_MIPS64 = @FLAG_MIPS64@ ++FLAG_MLONG_DOUBLE_128 = @FLAG_MLONG_DOUBLE_128@ ++FLAG_MMMX = @FLAG_MMMX@ ++FLAG_MSSE = @FLAG_MSSE@ ++FLAG_NO_BUILD_ID = @FLAG_NO_BUILD_ID@ ++FLAG_OCTEON = @FLAG_OCTEON@ ++FLAG_OCTEON2 = @FLAG_OCTEON2@ ++FLAG_T_TEXT = @FLAG_T_TEXT@ ++FLAG_UNLIMITED_INLINE_UNIT_GROWTH = @FLAG_UNLIMITED_INLINE_UNIT_GROWTH@ ++FLAG_W_CAST_ALIGN = @FLAG_W_CAST_ALIGN@ ++FLAG_W_CAST_QUAL = @FLAG_W_CAST_QUAL@ ++FLAG_W_EMPTY_BODY = @FLAG_W_EMPTY_BODY@ ++FLAG_W_EXTRA = @FLAG_W_EXTRA@ ++FLAG_W_FORMAT = @FLAG_W_FORMAT@ ++FLAG_W_FORMAT_SECURITY = @FLAG_W_FORMAT_SECURITY@ ++FLAG_W_FORMAT_SIGNEDNESS = @FLAG_W_FORMAT_SIGNEDNESS@ ++FLAG_W_IGNORED_QUALIFIERS = @FLAG_W_IGNORED_QUALIFIERS@ ++FLAG_W_MISSING_PARAMETER_TYPE = @FLAG_W_MISSING_PARAMETER_TYPE@ ++FLAG_W_NO_INFINITE_RECURSION = @FLAG_W_NO_INFINITE_RECURSION@ ++FLAG_W_NO_MEMSET_TRANSPOSED_ARGS = @FLAG_W_NO_MEMSET_TRANSPOSED_ARGS@ ++FLAG_W_NO_MISMATCHED_NEW_DELETE = @FLAG_W_NO_MISMATCHED_NEW_DELETE@ ++FLAG_W_NO_NONNULL = @FLAG_W_NO_NONNULL@ ++FLAG_W_NO_OVERFLOW = @FLAG_W_NO_OVERFLOW@ ++FLAG_W_NO_POINTER_SIGN = @FLAG_W_NO_POINTER_SIGN@ ++FLAG_W_NO_STATIC_LOCAL_IN_INLINE = @FLAG_W_NO_STATIC_LOCAL_IN_INLINE@ ++FLAG_W_NO_UNINITIALIZED = @FLAG_W_NO_UNINITIALIZED@ ++FLAG_W_NO_UNUSED_FUNCTION = @FLAG_W_NO_UNUSED_FUNCTION@ ++FLAG_W_OLD_STYLE_DECLARATION = @FLAG_W_OLD_STYLE_DECLARATION@ ++FLAG_W_WRITE_STRINGS = @FLAG_W_WRITE_STRINGS@ ++GDB = @GDB@ ++GLIBC_VERSION = @GLIBC_VERSION@ ++GREP = @GREP@ ++HWCAP_HAS_ALTIVEC = @HWCAP_HAS_ALTIVEC@ ++HWCAP_HAS_DFP = @HWCAP_HAS_DFP@ ++HWCAP_HAS_HTM = @HWCAP_HAS_HTM@ ++HWCAP_HAS_ISA_2_05 = @HWCAP_HAS_ISA_2_05@ ++HWCAP_HAS_ISA_2_06 = @HWCAP_HAS_ISA_2_06@ ++HWCAP_HAS_ISA_2_07 = @HWCAP_HAS_ISA_2_07@ ++HWCAP_HAS_VSX = @HWCAP_HAS_VSX@ ++INSTALL = @INSTALL@ ++INSTALL_DATA = @INSTALL_DATA@ ++INSTALL_PROGRAM = @INSTALL_PROGRAM@ ++INSTALL_SCRIPT = @INSTALL_SCRIPT@ ++INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ ++LDFLAGS = @LDFLAGS@ ++LDFLAGS_MPI = @LDFLAGS_MPI@ ++LIBOBJS = @LIBOBJS@ ++LIBS = @LIBS@ ++LIB_UBSAN = @LIB_UBSAN@ ++LN_S = @LN_S@ ++LTLIBOBJS = @LTLIBOBJS@ ++MAINT = @MAINT@ ++MAKEINFO = @MAKEINFO@ ++MKDIR_P = @MKDIR_P@ ++MPI_CC = @MPI_CC@ ++OBJEXT = @OBJEXT@ ++PACKAGE = @PACKAGE@ ++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ ++PACKAGE_NAME = @PACKAGE_NAME@ ++PACKAGE_STRING = @PACKAGE_STRING@ ++PACKAGE_TARNAME = @PACKAGE_TARNAME@ ++PACKAGE_URL = @PACKAGE_URL@ ++PACKAGE_VERSION = @PACKAGE_VERSION@ ++PATH_SEPARATOR = @PATH_SEPARATOR@ ++PERL = @PERL@ ++PREFERRED_STACK_BOUNDARY_2 = @PREFERRED_STACK_BOUNDARY_2@ ++RANLIB = @RANLIB@ ++SED = @SED@ ++SET_MAKE = @SET_MAKE@ ++SHELL = @SHELL@ ++STRIP = @STRIP@ ++VALT_LOAD_ADDRESS_PRI = @VALT_LOAD_ADDRESS_PRI@ ++VALT_LOAD_ADDRESS_SEC = @VALT_LOAD_ADDRESS_SEC@ ++VERSION = @VERSION@ ++VGCONF_ARCH_PRI = @VGCONF_ARCH_PRI@ ++VGCONF_ARCH_SEC = @VGCONF_ARCH_SEC@ ++VGCONF_OS = @VGCONF_OS@ ++VGCONF_PLATFORM_PRI_CAPS = @VGCONF_PLATFORM_PRI_CAPS@ ++VGCONF_PLATFORM_SEC_CAPS = @VGCONF_PLATFORM_SEC_CAPS@ ++VGCONF_PLATVARIANT = @VGCONF_PLATVARIANT@ ++VG_TMPDIR = @VG_TMPDIR@ ++abs_builddir = @abs_builddir@ ++abs_srcdir = @abs_srcdir@ ++abs_top_builddir = @abs_top_builddir@ ++abs_top_srcdir = @abs_top_srcdir@ ++ac_ct_CC = @ac_ct_CC@ ++ac_ct_CXX = @ac_ct_CXX@ ++am__include = @am__include@ ++am__leading_dot = @am__leading_dot@ ++am__quote = @am__quote@ ++am__tar = @am__tar@ ++am__untar = @am__untar@ ++bindir = @bindir@ ++build = @build@ ++build_alias = @build_alias@ ++build_cpu = @build_cpu@ ++build_os = @build_os@ ++build_vendor = @build_vendor@ ++builddir = @builddir@ ++datadir = @datadir@ ++datarootdir = @datarootdir@ ++docdir = @docdir@ ++dvidir = @dvidir@ ++exec_prefix = @exec_prefix@ ++host = @host@ ++host_alias = @host_alias@ ++host_cpu = @host_cpu@ ++host_os = @host_os@ ++host_vendor = @host_vendor@ ++htmldir = @htmldir@ ++includedir = @includedir@ ++infodir = @infodir@ ++install_sh = @install_sh@ ++libdir = @libdir@ ++libexecdir = @libexecdir@ ++localedir = @localedir@ ++localstatedir = @localstatedir@ ++mandir = @mandir@ ++mkdir_p = @mkdir_p@ ++oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ ++prefix = @prefix@ ++program_transform_name = @program_transform_name@ ++psdir = @psdir@ ++sbindir = @sbindir@ ++sharedstatedir = @sharedstatedir@ ++srcdir = @srcdir@ ++sysconfdir = @sysconfdir@ ++target_alias = @target_alias@ ++top_build_prefix = @top_build_prefix@ ++top_builddir = @top_builddir@ ++top_srcdir = @top_srcdir@ ++inplacedir = $(top_builddir)/.in_place ++ ++#---------------------------------------------------------------------------- ++# Flags ++#---------------------------------------------------------------------------- ++ ++# Baseline flags for all compilations. Aim here is to maximise ++# performance and get whatever useful warnings we can out of gcc. ++# -fno-builtin is important for defeating LLVM's idiom recognition ++# that somehow causes VG_(memset) to get into infinite recursion. ++AM_CFLAGS_BASE = -O2 -g -std=gnu99 -Wall -Wmissing-prototypes -Wshadow \ ++ -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations \ ++ @FLAG_W_CAST_ALIGN@ @FLAG_W_CAST_QUAL@ @FLAG_W_WRITE_STRINGS@ \ ++ @FLAG_W_EMPTY_BODY@ @FLAG_W_FORMAT@ @FLAG_W_FORMAT_SIGNEDNESS@ \ ++ @FLAG_W_FORMAT_SECURITY@ @FLAG_W_IGNORED_QUALIFIERS@ \ ++ @FLAG_W_MISSING_PARAMETER_TYPE@ @FLAG_W_OLD_STYLE_DECLARATION@ \ ++ @FLAG_FNO_STACK_PROTECTOR@ @FLAG_FSANITIZE@ \ ++ -fno-strict-aliasing -fno-builtin $(am__append_1) ++@VGCONF_OS_IS_DARWIN_FALSE@AM_CFLAGS_PSO_BASE = -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++@VGCONF_OS_IS_DARWIN_FALSE@ -fpic -fno-builtin @FLAG_FNO_IPA_ICF@ ++ ++ ++# These flags are used for building the preload shared objects (PSOs). ++# The aim is to give reasonable performance but also to have good ++# stack traces, since users often see stack traces extending ++# into (and through) the preloads. Also, we must use any ++# -mpreferred-stack-boundary flag to build the preload shared ++# objects, since that risks misaligning the client's stack and ++# results in segfaults like (eg) #324050. ++@VGCONF_OS_IS_DARWIN_TRUE@AM_CFLAGS_PSO_BASE = -dynamic \ ++@VGCONF_OS_IS_DARWIN_TRUE@ -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++@VGCONF_OS_IS_DARWIN_TRUE@ -fpic -fPIC -fno-builtin @FLAG_FNO_IPA_ICF@ ++ ++ ++# Flags for specific targets. ++# ++# Nb: the AM_CPPFLAGS_* values are suitable for building tools and auxprogs. ++# For building the core, coregrind/Makefile.am files add some extra things. ++AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@ = \ ++ -I$(top_srcdir) \ ++ -I$(top_srcdir)/include \ ++ -I$(top_srcdir)/VEX/pub \ ++ -I$(top_builddir)/VEX/pub \ ++ -DVGA_@VGCONF_ARCH_PRI@=1 \ ++ -DVGO_@VGCONF_OS@=1 \ ++ -DVGP_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1 \ ++ -DVGPV_@VGCONF_ARCH_PRI@_@VGCONF_OS@_@VGCONF_PLATVARIANT@=1 ++ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@ = \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_srcdir) \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_srcdir)/include \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_srcdir)/VEX/pub \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_builddir)/VEX/pub \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGA_@VGCONF_ARCH_SEC@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGO_@VGCONF_OS@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGP_@VGCONF_ARCH_SEC@_@VGCONF_OS@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGPV_@VGCONF_ARCH_SEC@_@VGCONF_OS@_@VGCONF_PLATVARIANT@=1 ++ ++AM_FLAG_M3264_X86_LINUX = @FLAG_M32@ ++AM_CFLAGS_X86_LINUX = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY_2@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_X86_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_LINUX = @FLAG_M32@ -g ++AM_FLAG_M3264_AMD64_LINUX = @FLAG_M64@ ++AM_CFLAGS_AMD64_LINUX = @FLAG_M64@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_PPC32_LINUX = @FLAG_M32@ ++AM_CFLAGS_PPC32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_PPC32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC32_LINUX = @FLAG_M32@ -g ++AM_FLAG_M3264_PPC64BE_LINUX = @FLAG_M64@ ++AM_CFLAGS_PPC64BE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_PPC64BE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC64BE_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_PPC64LE_LINUX = @FLAG_M64@ ++AM_CFLAGS_PPC64LE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_PPC64LE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC64LE_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_ARM_LINUX = @FLAG_M32@ ++AM_CFLAGS_ARM_LINUX = @FLAG_M32@ \ ++ $(AM_CFLAGS_BASE) -marm -mcpu=cortex-a8 ++ ++AM_CFLAGS_PSO_ARM_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) \ ++ -marm -mcpu=cortex-a8 $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_ARM_LINUX = @FLAG_M32@ \ ++ -marm -mcpu=cortex-a8 -g ++ ++AM_FLAG_M3264_ARM64_LINUX = @FLAG_M64@ ++AM_CFLAGS_ARM64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_ARM64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_ARM64_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_X86_DARWIN = -arch i386 ++AM_CFLAGS_X86_DARWIN = $(WERROR) -arch i386 $(AM_CFLAGS_BASE) \ ++ -mmacosx-version-min=10.5 \ ++ -fno-stack-protector -fno-pic -fno-PIC ++ ++AM_CFLAGS_PSO_X86_DARWIN = $(AM_CFLAGS_X86_DARWIN) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_DARWIN = -arch i386 -g ++AM_FLAG_M3264_AMD64_DARWIN = -arch x86_64 ++AM_CFLAGS_AMD64_DARWIN = $(WERROR) -arch x86_64 $(AM_CFLAGS_BASE) \ ++ -mmacosx-version-min=10.5 -fno-stack-protector ++ ++AM_CFLAGS_PSO_AMD64_DARWIN = $(AM_CFLAGS_AMD64_DARWIN) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_DARWIN = -arch x86_64 -g ++AM_FLAG_M3264_S390X_LINUX = @FLAG_M64@ ++AM_CFLAGS_S390X_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++AM_CFLAGS_PSO_S390X_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_S390X_LINUX = @FLAG_M64@ -g -mzarch -march=z900 ++AM_FLAG_M3264_MIPS32_LINUX = @FLAG_M32@ ++AM_CFLAGS_MIPS32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) @FLAG_MIPS32@ ++AM_CFLAGS_PSO_MIPS32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) @FLAG_MIPS32@ \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_MIPS32_LINUX = @FLAG_M32@ -g @FLAG_MIPS32@ ++AM_FLAG_M3264_MIPS64_LINUX = @FLAG_M64@ ++AM_CFLAGS_MIPS64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) @FLAG_MIPS64@ ++AM_CFLAGS_PSO_MIPS64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) @FLAG_MIPS64@ \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_MIPS64_LINUX = @FLAG_M64@ -g @FLAG_MIPS64@ ++AM_CFLAGS_TILEGX_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_TILEGX_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_FLAG_M3264_X86_SOLARIS = @FLAG_M32@ ++AM_CFLAGS_X86_SOLARIS = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY_2@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_X86_SOLARIS = @FLAG_M32@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_SOLARIS = @FLAG_M32@ -g -D_ASM ++AM_FLAG_M3264_AMD64_SOLARIS = @FLAG_M64@ ++AM_CFLAGS_AMD64_SOLARIS = @FLAG_M64@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_SOLARIS = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_SOLARIS = @FLAG_M64@ -g -D_ASM ++ ++# Flags for the primary target. These must be used to build the ++# regtests and performance tests. In fact, these must be used to ++# build anything which is built only once on a dual-arch build. ++# ++AM_FLAG_M3264_PRI = $(AM_FLAG_M3264_@VGCONF_PLATFORM_PRI_CAPS@) ++AM_CPPFLAGS_PRI = $(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) ++AM_CFLAGS_PRI = $(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) ++AM_CCASFLAGS_PRI = $(AM_CCASFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) ++@VGCONF_HAVE_PLATFORM_SEC_FALSE@AM_FLAG_M3264_SEC = ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@AM_FLAG_M3264_SEC = $(AM_FLAG_M3264_@VGCONF_PLATFORM_SEC_CAPS@) ++ ++# Baseline link flags for making vgpreload shared objects. ++# ++PRELOAD_LDFLAGS_COMMON_LINUX = -nodefaultlibs -shared \ ++ -Wl,-z,interpose,-z,initfirst $(am__append_3) ++PRELOAD_LDFLAGS_COMMON_DARWIN = -dynamic -dynamiclib -all_load ++PRELOAD_LDFLAGS_COMMON_SOLARIS = -nodefaultlibs -shared \ ++ -Wl,-z,interpose,-z,initfirst $(am__append_2) ++PRELOAD_LDFLAGS_X86_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_AMD64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_PPC32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_PPC64BE_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_PPC64LE_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_ARM_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_ARM64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_X86_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch i386 ++PRELOAD_LDFLAGS_AMD64_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch x86_64 ++PRELOAD_LDFLAGS_S390X_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_MIPS32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_MIPS64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_TILEGX_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_X86_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M32@ ++PRELOAD_LDFLAGS_AMD64_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M64@ ++AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/include \ ++ -I$(top_srcdir)/coregrind -I$(top_builddir)/include \ ++ -I$(top_srcdir)/VEX/pub -I$(top_builddir)/VEX/pub \ ++ -DVGA_@VGCONF_ARCH_PRI@=1 -DVGO_@VGCONF_OS@=1 \ ++ -DVGP_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1 \ ++ -DVGPV_@VGCONF_ARCH_PRI@_@VGCONF_OS@_@VGCONF_PLATVARIANT@=1 \ ++ $(am__append_4) ++ ++# Nb: Tools need to augment these flags with an arch-selection option, such ++# as $(AM_FLAG_M3264_PRI). ++AM_CFLAGS = -Winline -Wall -Wshadow -Wno-long-long -g \ ++ @FLAG_FNO_STACK_PROTECTOR@ $(am__append_5) $(am__append_6) \ ++ @FLAG_M64@ $(am__empty) ++AM_CXXFLAGS = -Winline -Wall -Wshadow -Wno-long-long -g \ ++ @FLAG_FNO_STACK_PROTECTOR@ $(am__append_7) @FLAG_M64@ ++# Include AM_CPPFLAGS in AM_CCASFLAGS to allow for older versions of ++# automake; see comments in Makefile.all.am for more detail. ++AM_CCASFLAGS = $(AM_CPPFLAGS) @FLAG_M64@ ++@VGCONF_OS_IS_DARWIN_TRUE@noinst_DSYMS = $(check_PROGRAMS) ++dist_noinst_SCRIPTS = \ ++ filter_stderr ++ ++noinst_HEADERS = scalar.h ++EXTRA_DIST = \ ++ scalar.stderr.exp scalar.vgtest ++ ++all: all-am ++ ++.SUFFIXES: ++.SUFFIXES: .c .o .obj ++$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.tool-tests.am $(top_srcdir)/Makefile.all.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign memcheck/tests/arm64-linux/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --foreign memcheck/tests/arm64-linux/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++$(top_srcdir)/Makefile.tool-tests.am $(top_srcdir)/Makefile.all.am: ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++ ++clean-checkPROGRAMS: ++ -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) ++ ++scalar$(EXEEXT): $(scalar_OBJECTS) $(scalar_DEPENDENCIES) $(EXTRA_scalar_DEPENDENCIES) ++ @rm -f scalar$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(scalar_OBJECTS) $(scalar_LDADD) $(LIBS) ++ ++mostlyclean-compile: ++ -rm -f *.$(OBJEXT) ++ ++distclean-compile: ++ -rm -f *.tab.c ++ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scalar.Po@am__quote@ ++ ++.c.o: ++@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ ++@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ ++@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< ++ ++.c.obj: ++@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ ++@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ ++@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-am ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-am ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-am ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) ++ $(MAKE) $(AM_MAKEFLAGS) check-local ++check: check-am ++all-am: Makefile $(SCRIPTS) $(HEADERS) ++installdirs: ++install: install-am ++install-exec: install-exec-am ++install-data: install-data-am ++uninstall: uninstall-am ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-am ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-am ++ ++clean-am: clean-checkPROGRAMS clean-generic clean-local mostlyclean-am ++ ++distclean: distclean-am ++ -rm -rf ./$(DEPDIR) ++ -rm -f Makefile ++distclean-am: clean-am distclean-compile distclean-generic \ ++ distclean-tags ++ ++dvi: dvi-am ++ ++dvi-am: ++ ++html: html-am ++ ++html-am: ++ ++info: info-am ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-am ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-am ++ ++install-html-am: ++ ++install-info: install-info-am ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-am ++ ++install-pdf-am: ++ ++install-ps: install-ps-am ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-am ++ -rm -rf ./$(DEPDIR) ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-am ++ ++mostlyclean-am: mostlyclean-compile mostlyclean-generic ++ ++pdf: pdf-am ++ ++pdf-am: ++ ++ps: ps-am ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: check-am install-am install-strip ++ ++.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \ ++ clean-checkPROGRAMS clean-generic clean-local cscopelist-am \ ++ ctags ctags-am distclean distclean-compile distclean-generic \ ++ distclean-tags distdir dvi dvi-am html html-am info info-am \ ++ install install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ maintainer-clean maintainer-clean-generic mostlyclean \ ++ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ ++ tags tags-am uninstall uninstall-am ++ ++ ++# This used to be required when Vex had a handwritten Makefile. It ++# shouldn't be needed any more, though. ++ ++#---------------------------------------------------------------------------- ++# noinst_PROGRAMS and noinst_DSYMS targets ++#---------------------------------------------------------------------------- ++ ++# On Darwin, for a program 'p', the DWARF debug info is stored in the ++# directory 'p.dSYM'. This must be generated after the executable is ++# created, with 'dsymutil p'. We could redefine LINK with a script that ++# executes 'dsymutil' after linking, but that's a pain. Instead we use this ++# hook so that every time "make check" is run, we subsequently invoke ++# 'dsymutil' on all the executables that lack a .dSYM directory, or that are ++# newer than their corresponding .dSYM directory. ++build-noinst_DSYMS: $(noinst_DSYMS) ++ for f in $(noinst_DSYMS); do \ ++ if [ ! -e $$f.dSYM -o $$f -nt $$f.dSYM ] ; then \ ++ echo "dsymutil $$f"; \ ++ dsymutil $$f; \ ++ fi; \ ++ done ++ ++# This is used by coregrind/Makefile.am and Makefile.tool.am for doing ++# "in-place" installs. It copies $(noinst_PROGRAMS) into $inplacedir. ++# It needs to be depended on by an 'all-local' rule. ++inplace-noinst_PROGRAMS: $(noinst_PROGRAMS) ++ mkdir -p $(inplacedir); \ ++ for f in $(noinst_PROGRAMS) ; do \ ++ rm -f $(inplacedir)/$$f; \ ++ ln -f -s ../$(subdir)/$$f $(inplacedir); \ ++ done ++ ++# Similar to inplace-noinst_PROGRAMS ++inplace-noinst_DSYMS: build-noinst_DSYMS ++ mkdir -p $(inplacedir); \ ++ for f in $(noinst_DSYMS); do \ ++ rm -f $(inplacedir)/$$f.dSYM; \ ++ ln -f -s ../$(subdir)/$$f.dSYM $(inplacedir); \ ++ done ++ ++# This is used by coregrind/Makefile.am and by /Makefile.am for doing ++# "make install". It copies $(noinst_PROGRAMS) into $prefix/lib/valgrind/. ++# It needs to be depended on by an 'install-exec-local' rule. ++install-noinst_PROGRAMS: $(noinst_PROGRAMS) ++ $(mkinstalldirs) $(DESTDIR)$(pkglibdir); \ ++ for f in $(noinst_PROGRAMS); do \ ++ $(INSTALL_PROGRAM) $$f $(DESTDIR)$(pkglibdir); \ ++ done ++ ++# This is used by coregrind/Makefile.am and by /Makefile.am for doing ++# "make uninstall". It removes $(noinst_PROGRAMS) from $prefix/lib/valgrind/. ++# It needs to be depended on by an 'uninstall-local' rule. ++uninstall-noinst_PROGRAMS: ++ for f in $(noinst_PROGRAMS); do \ ++ rm -f $(DESTDIR)$(pkglibdir)/$$f; \ ++ done ++ ++# Similar to install-noinst_PROGRAMS. ++# Nb: we don't use $(INSTALL_PROGRAM) here because it doesn't work with ++# directories. XXX: not sure whether the resulting permissions will be ++# correct when using 'cp -R'... ++install-noinst_DSYMS: build-noinst_DSYMS ++ $(mkinstalldirs) $(DESTDIR)$(pkglibdir); \ ++ for f in $(noinst_DSYMS); do \ ++ cp -R $$f.dSYM $(DESTDIR)$(pkglibdir); \ ++ done ++ ++# Similar to uninstall-noinst_PROGRAMS. ++uninstall-noinst_DSYMS: ++ for f in $(noinst_DSYMS); do \ ++ rm -f $(DESTDIR)$(pkglibdir)/$$f.dSYM; \ ++ done ++ ++# This needs to be depended on by a 'clean-local' rule. ++clean-noinst_DSYMS: ++ for f in $(noinst_DSYMS); do \ ++ rm -rf $$f.dSYM; \ ++ done ++ ++check-local: build-noinst_DSYMS ++ ++clean-local: clean-noinst_DSYMS ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +diff -rNu valgrind-3.11.0.orig/memcheck/tests/Makefile.in valgrind-3.11.0/memcheck/tests/Makefile.in +--- valgrind-3.11.0.orig/memcheck/tests/Makefile.in 2016-03-09 20:26:02.217923922 +0100 ++++ valgrind-3.11.0/memcheck/tests/Makefile.in 2016-03-09 20:49:06.995391762 +0100 +@@ -130,8 +130,9 @@ + # Platform-specific tests + @VGCONF_PLATFORMS_INCLUDE_X86_LINUX_TRUE@am__append_16 = x86-linux + @VGCONF_PLATFORMS_INCLUDE_AMD64_LINUX_TRUE@am__append_17 = amd64-linux +-@VGCONF_PLATFORMS_INCLUDE_X86_SOLARIS_TRUE@am__append_18 = x86-solaris +-@VGCONF_PLATFORMS_INCLUDE_AMD64_SOLARIS_TRUE@am__append_19 = amd64-solaris ++@VGCONF_PLATFORMS_INCLUDE_ARM64_LINUX_TRUE@am__append_18 = arm64-linux ++@VGCONF_PLATFORMS_INCLUDE_X86_SOLARIS_TRUE@am__append_19 = x86-solaris ++@VGCONF_PLATFORMS_INCLUDE_AMD64_SOLARIS_TRUE@am__append_20 = amd64-solaris + check_PROGRAMS = accounting$(EXEEXT) addressable$(EXEEXT) \ + atomic_incs$(EXEEXT) badaddrvalue$(EXEEXT) badfree$(EXEEXT) \ + badjump$(EXEEXT) badjump2$(EXEEXT) badloop$(EXEEXT) \ +@@ -191,14 +192,14 @@ + $(am__EXEEXT_5) + + # Sun Studio assembler fails on "IDENT too long" +-@SOLARIS_SUN_STUDIO_AS_FALSE@am__append_20 = long_namespace_xml +-@DWARF4_TRUE@am__append_21 = dw4 +-@HAVE_GNU_STPNCPY_TRUE@am__append_22 = stpncpy +-@HAVE_PTHREAD_SETNAME_NP_TRUE@am__append_23 = threadname +-@HAVE_PTHREAD_BARRIER_TRUE@am__append_24 = reach_thread_register +-@VGCONF_OS_IS_SOLARIS_TRUE@am__append_25 = -D_XOPEN_SOURCE=500 +-@VGCONF_OS_IS_SOLARIS_TRUE@am__append_26 = -std=c99 -D__EXTENSIONS__ +-@VGCONF_OS_IS_SOLARIS_TRUE@am__append_27 = -D_XOPEN_SOURCE=500 ++@SOLARIS_SUN_STUDIO_AS_FALSE@am__append_21 = long_namespace_xml ++@DWARF4_TRUE@am__append_22 = dw4 ++@HAVE_GNU_STPNCPY_TRUE@am__append_23 = stpncpy ++@HAVE_PTHREAD_SETNAME_NP_TRUE@am__append_24 = threadname ++@HAVE_PTHREAD_BARRIER_TRUE@am__append_25 = reach_thread_register ++@VGCONF_OS_IS_SOLARIS_TRUE@am__append_26 = -D_XOPEN_SOURCE=500 ++@VGCONF_OS_IS_SOLARIS_TRUE@am__append_27 = -std=c99 -D__EXTENSIONS__ ++@VGCONF_OS_IS_SOLARIS_TRUE@am__append_28 = -D_XOPEN_SOURCE=500 + subdir = memcheck/tests + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 + am__aclocal_m4_deps = $(top_srcdir)/configure.ac +@@ -1313,9 +1314,11 @@ + SUBDIRS = . $(am__append_8) $(am__append_9) $(am__append_10) \ + $(am__append_11) $(am__append_12) $(am__append_13) \ + $(am__append_14) $(am__append_15) $(am__append_16) \ +- $(am__append_17) $(am__append_18) $(am__append_19) ++ $(am__append_17) $(am__append_18) $(am__append_19) \ ++ $(am__append_20) + DIST_SUBDIRS = x86 amd64 ppc32 ppc64 s390x linux \ +- darwin solaris x86-linux amd64-linux x86-solaris amd64-solaris \ ++ darwin solaris x86-linux amd64-linux arm64-linux \ ++ x86-solaris amd64-solaris \ + common . + + dist_noinst_SCRIPTS = \ +@@ -1580,7 +1583,7 @@ + descr_belowsp_LDADD = -lpthread + err_disable3_LDADD = -lpthread + err_disable4_LDADD = -lpthread +-err_disable4_CFLAGS = $(AM_CFLAGS) $(am__append_25) ++err_disable4_CFLAGS = $(AM_CFLAGS) $(am__append_26) + reach_thread_register_CFLAGS = $(AM_CFLAGS) -O2 + reach_thread_register_LDADD = -lpthread + thread_alloca_LDADD = -lpthread +@@ -1595,7 +1598,7 @@ + inltemplate_CXXFLAGS = $(AM_CXXFLAGS) @FLAG_W_NO_UNINITIALIZED@ + long_namespace_xml_SOURCES = long_namespace_xml.cpp + manuel1_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@ +-memalign2_CFLAGS = $(AM_CFLAGS) $(am__append_26) ++memalign2_CFLAGS = $(AM_CFLAGS) $(am__append_27) + memcmptest_CFLAGS = $(AM_CFLAGS) -fno-builtin-memcmp + mismatches_SOURCES = mismatches.cpp + mismatches_CXXFLAGS = $(AM_CXXFLAGS) @FLAG_W_NO_MISMATCHED_NEW_DELETE@ +@@ -1617,7 +1620,7 @@ + # because then we can't intercept it + overlap_CFLAGS = $(AM_CFLAGS) -fno-builtin-memcpy -fno-builtin-strcpy + resvn_stack_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@ +-sendmsg_CFLAGS = $(AM_CFLAGS) $(am__append_27) ++sendmsg_CFLAGS = $(AM_CFLAGS) $(am__append_28) + @VGCONF_OS_IS_SOLARIS_TRUE@sendmsg_LDADD = -lsocket -lnsl + str_tester_CFLAGS = $(AM_CFLAGS) -Wno-shadow \ + @FLAG_W_NO_MEMSET_TRANSPOSED_ARGS@ +commit 366319c50f4d80b33c286f37b0228b3c0e626ffa +Author: mjw +Date: Thu Mar 10 07:59:33 2016 +0000 + + Add arm64-linux to tests/platform_test. + + Prevent executing arm64-linux specific tests on other arches. + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15827 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/tests/platform_test b/tests/platform_test +index 9653921..376f62e 100644 +--- a/tests/platform_test ++++ b/tests/platform_test +@@ -12,7 +12,7 @@ + + all_platforms= + all_platforms="$all_platforms x86-linux amd64-linux ppc32-linux ppc64-linux" +-all_platforms="$all_platforms arm-linux" ++all_platforms="$all_platforms arm-linux arm64-linux" + all_platforms="$all_platforms s390x-linux mips32-linux mips64-linux" + all_platforms="$all_platforms x86-darwin amd64-darwin" + all_platforms="$all_platforms x86-solaris amd64-solaris" diff --git a/SOURCES/valgrind-3.11.0-arm64-sigpending.patch b/SOURCES/valgrind-3.11.0-arm64-sigpending.patch new file mode 100644 index 0000000..2530d19 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-arm64-sigpending.patch @@ -0,0 +1,28 @@ +commit b78a32e41a8b5918c706b0ac1b8fbe02fcec854b +Author: mjw +Date: Wed Sep 23 12:15:36 2015 +0000 + + Bug 353084 arm64 doesn't support sigpending system call. + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15676 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c +index 6cf3ba5..8d3027d 100644 +--- a/coregrind/m_syswrap/syswrap-arm64-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm64-linux.c +@@ -959,6 +959,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_(__NR_rt_sigsuspend, sys_rt_sigsuspend), // 133 + LINXY(__NR_rt_sigaction, sys_rt_sigaction), // 134 + LINXY(__NR_rt_sigprocmask, sys_rt_sigprocmask), // 135 ++ LINXY(__NR_rt_sigpending, sys_rt_sigpending), // 136 + LINXY(__NR_rt_sigtimedwait, sys_rt_sigtimedwait), // 137 + LINXY(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo), // 138 + PLAX_(__NR_rt_sigreturn, sys_rt_sigreturn), // 139 +@@ -1231,7 +1232,6 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ LINXY(__NR_prctl, sys_prctl), // 172 + //ZZ LINXY(__NR_rt_sigaction, sys_rt_sigaction), // 174 + //ZZ +-//ZZ LINXY(__NR_rt_sigpending, sys_rt_sigpending), // 176 + //ZZ LINXY(__NR_rt_sigtimedwait, sys_rt_sigtimedwait),// 177 + //ZZ + //ZZ LINX_(__NR_chown, sys_chown16), // 182 diff --git a/SOURCES/valgrind-3.11.0-arm64-xattr.patch b/SOURCES/valgrind-3.11.0-arm64-xattr.patch new file mode 100644 index 0000000..36c0883 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-arm64-xattr.patch @@ -0,0 +1,54 @@ +commit 9f20263f224cf85a81b16fe1570439cecf5ef48b +Author: mjw +Date: Wed Sep 23 11:51:47 2015 +0000 + + Bug 353083 arm64 doesn't implement various xattr system calls. + + This enables setxattr, lsetxattr, fsetxattr, fgetxattr, removexattr, + lremovexattr, fremovexattr, listxattr, llistxattr and flistxattr on + arm64-linux. + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15675 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c +index 6661d1d..6cf3ba5 100644 +--- a/coregrind/m_syswrap/syswrap-arm64-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm64-linux.c +@@ -855,8 +855,18 @@ PRE(sys_rt_sigreturn) + // (unknown). + + static SyscallTableEntry syscall_main_table[] = { ++ LINX_(__NR_setxattr, sys_setxattr), // 5 ++ LINX_(__NR_lsetxattr, sys_lsetxattr), // 6 ++ LINX_(__NR_fsetxattr, sys_fsetxattr), // 7 + LINXY(__NR_getxattr, sys_getxattr), // 8 + LINXY(__NR_lgetxattr, sys_lgetxattr), // 9 ++ LINXY(__NR_fgetxattr, sys_fgetxattr), // 10 ++ LINXY(__NR_listxattr, sys_listxattr), // 11 ++ LINXY(__NR_llistxattr, sys_llistxattr), // 12 ++ LINXY(__NR_flistxattr, sys_flistxattr), // 13 ++ LINX_(__NR_removexattr, sys_removexattr), // 14 ++ LINX_(__NR_lremovexattr, sys_lremovexattr), // 15 ++ LINX_(__NR_fremovexattr, sys_fremovexattr), // 16 + GENXY(__NR_getcwd, sys_getcwd), // 17 + LINXY(__NR_eventfd2, sys_eventfd2), // 19 + LINXY(__NR_epoll_create1, sys_epoll_create1), // 20 +@@ -1267,18 +1277,6 @@ static SyscallTableEntry syscall_main_table[] = { + //ZZ // GENX_(222, sys_ni_syscall), // 222 + //ZZ // PLAXY(223, sys_syscall223), // 223 // sys_bproc? + //ZZ +-//ZZ LINX_(__NR_setxattr, sys_setxattr), // 226 +-//ZZ LINX_(__NR_lsetxattr, sys_lsetxattr), // 227 +-//ZZ LINX_(__NR_fsetxattr, sys_fsetxattr), // 228 +-//ZZ +-//ZZ LINXY(__NR_fgetxattr, sys_fgetxattr), // 231 +-//ZZ LINXY(__NR_listxattr, sys_listxattr), // 232 +-//ZZ LINXY(__NR_llistxattr, sys_llistxattr), // 233 +-//ZZ LINXY(__NR_flistxattr, sys_flistxattr), // 234 +-//ZZ +-//ZZ LINX_(__NR_removexattr, sys_removexattr), // 235 +-//ZZ LINX_(__NR_lremovexattr, sys_lremovexattr), // 236 +-//ZZ LINX_(__NR_fremovexattr, sys_fremovexattr), // 237 + //ZZ LINXY(__NR_tkill, sys_tkill), // 238 */Linux + //ZZ LINXY(__NR_sendfile64, sys_sendfile64), // 239 + //ZZ diff --git a/SOURCES/valgrind-3.11.0-aspacemgr.patch b/SOURCES/valgrind-3.11.0-aspacemgr.patch new file mode 100644 index 0000000..0688022 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-aspacemgr.patch @@ -0,0 +1,80 @@ +commit b28a423827a1c7917c6f3f3eba23b9432077dfbd +Author: florian +Date: Sat Jan 16 21:44:31 2016 +0000 + + In ML_(am_allocate_segname) do not set the reference count of the + slot to 1. Rather do that in add_segment which is where the segment + refering to that name actually comes into existence. + Properly handle the case in add_segment where the to-be-added segment + and one (or more) of the segments it replaces have the same name + This may occur when doing a mremap. + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15761 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_aspacemgr/aspacemgr-linux.c b/coregrind/m_aspacemgr/aspacemgr-linux.c +index 0a8f675..f6c1a41 100644 +--- a/coregrind/m_aspacemgr/aspacemgr-linux.c ++++ b/coregrind/m_aspacemgr/aspacemgr-linux.c +@@ -1445,6 +1445,15 @@ static void add_segment ( const NSegment* seg ) + + split_nsegments_lo_and_hi( sStart, sEnd, &iLo, &iHi ); + ++ /* Increase the reference count of SEG's name. We need to do this ++ *before* decreasing the reference count of the names of the replaced ++ segments. Consider the case where the segment name of SEG and one of ++ the replaced segments are the same. If the refcount of that name is 1, ++ then decrementing first would put the slot for that name on the free ++ list. Attempting to increment the refcount later would then fail ++ because the slot is no longer allocated. */ ++ ML_(am_inc_refcount)(seg->fnIdx); ++ + /* Now iLo .. iHi inclusive is the range of segment indices which + seg will replace. If we're replacing more than one segment, + slide those above the range down to fill the hole. Before doing +diff --git a/coregrind/m_aspacemgr/aspacemgr-segnames.c b/coregrind/m_aspacemgr/aspacemgr-segnames.c +index ef3d3ef..8e74356 100644 +--- a/coregrind/m_aspacemgr/aspacemgr-segnames.c ++++ b/coregrind/m_aspacemgr/aspacemgr-segnames.c +@@ -309,7 +309,7 @@ ML_(am_allocate_segname)(const HChar *name) + freeslot_chain = next_freeslot; + else + put_slotindex(prev, next_freeslot); +- put_refcount(ix, 1); ++ put_refcount(ix, 0); + put_slotsize(ix, size); + VG_(strcpy)(segnames + ix, name); + ++num_segnames; +@@ -336,7 +336,7 @@ ML_(am_allocate_segname)(const HChar *name) + + /* copy it in */ + ix = segnames_used; +- put_refcount(ix, 1); ++ put_refcount(ix, 0); + put_slotsize(ix, len + 1); + VG_(strcpy)(segnames + ix, name); + segnames_used += need; +commit e345eb50c0c5e96ac60b2bc21fbe9f281c20b9e6 +Author: florian +Date: Sat Jan 16 21:12:57 2016 +0000 + + Remove code that has no effect. Looks like a leftover from early + debugging days. + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15760 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_aspacemgr/aspacemgr-segnames.c b/coregrind/m_aspacemgr/aspacemgr-segnames.c +index 761608d..ef3d3ef 100644 +--- a/coregrind/m_aspacemgr/aspacemgr-segnames.c ++++ b/coregrind/m_aspacemgr/aspacemgr-segnames.c +@@ -250,9 +250,7 @@ dec_refcount(UInt ix) + UInt size = get_slotsize(ix); + /* Chain this slot in the freelist */ + put_slotindex(ix, freeslot_chain); +- get_slotindex(ix); + put_slotsize(ix + slotsize_size, size); +- get_slotindex(ix); + freeslot_chain = ix; + --num_segnames; + if (0) VG_(am_show_nsegments)(0, "AFTER DECREASE rc -> 0"); diff --git a/SOURCES/valgrind-3.11.0-cxx-freeres.patch b/SOURCES/valgrind-3.11.0-cxx-freeres.patch new file mode 100644 index 0000000..231655e --- /dev/null +++ b/SOURCES/valgrind-3.11.0-cxx-freeres.patch @@ -0,0 +1,639 @@ +commit b5dde4a2ff59cc87390a33d85c7bf0ad6443cb6c +Author: iraisr +Date: Wed Mar 30 17:53:03 2016 +0000 + + Run __gnu_cxx::__freeres() cleanup function available + from libstdc++ when available, similar to existing __libc_freeres(). + New option --run-cxx-freeres= can be used to change whether + this cleanup function is called or not. + + Note that __gnu_cxx::__freeres() is currently available + only in gcc 6. It is not yet decided what to do about + libstdc++ from gcc 5. + Tracked under https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69945 + for libstdc++. + + Fixes BZ#345307 (partially). + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15840 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_clientstate.c b/coregrind/m_clientstate.c +index 7cbc7c7..296d658 100644 +--- a/coregrind/m_clientstate.c ++++ b/coregrind/m_clientstate.c +@@ -106,9 +106,9 @@ HChar* VG_(name_of_launcher) = NULL; + Int VG_(fd_soft_limit) = -1; + Int VG_(fd_hard_limit) = -1; + +-/* Useful addresses extracted from the client */ +-/* Where is the __libc_freeres_wrapper routine we made? */ +-Addr VG_(client___libc_freeres_wrapper) = 0; ++/* Useful addresses extracted from the client. */ ++/* Where is the freeres_wrapper routine we made? */ ++Addr VG_(client_freeres_wrapper) = 0; + + /* x86-linux only: where is glibc's _dl_sysinfo_int80 function? + Finding it isn't essential, but knowing where it is does sometimes +diff --git a/coregrind/m_main.c b/coregrind/m_main.c +index 54997bd..8cfaf82 100644 +--- a/coregrind/m_main.c ++++ b/coregrind/m_main.c +@@ -36,6 +36,7 @@ + #include "pub_core_clientstate.h" + #include "pub_core_aspacemgr.h" + #include "pub_core_aspacehl.h" ++#include "pub_core_clreq.h" + #include "pub_core_commandline.h" + #include "pub_core_debuglog.h" + #include "pub_core_errormgr.h" +@@ -176,6 +177,8 @@ static void usage_NORETURN ( Bool debug_help ) + " --vgdb-shadow-registers=no|yes let gdb see the shadow registers [no]\n" + " --vgdb-prefix= prefix for vgdb FIFOs [%s]\n" + " --run-libc-freeres=no|yes free up glibc memory at exit on Linux? [yes]\n" ++" --run-cxx-freeres=no|yes free up libstdc++ memory at exit on Linux\n" ++" and Solaris? [yes]\n" + " --sim-hints=hint1,hint2,... activate unusual sim behaviours [none] \n" + " where hint is one of:\n" + " lax-ioctls lax-doors fuse-compatible enable-outer\n" +@@ -644,6 +647,7 @@ void main_process_cmd_line_options ( /*OUT*/Bool* logging_to_fd, + else if VG_BOOL_CLO(arg, "--show-emwarns", VG_(clo_show_emwarns)) {} + + else if VG_BOOL_CLO(arg, "--run-libc-freeres", VG_(clo_run_libc_freeres)) {} ++ else if VG_BOOL_CLO(arg, "--run-cxx-freeres", VG_(clo_run_cxx_freeres)) {} + else if VG_BOOL_CLO(arg, "--show-below-main", VG_(clo_show_below_main)) {} + else if VG_BOOL_CLO(arg, "--time-stamp", VG_(clo_time_stamp)) {} + else if VG_BOOL_CLO(arg, "--track-fds", VG_(clo_track_fds)) {} +@@ -2560,8 +2564,8 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp ) + So don't. + + The final_tidyup call makes a bit of a nonsense of the ExitProcess +- case, since it will run the libc_freeres function, thus allowing +- other lurking threads to run again. Hmm. */ ++ case, since it will run __gnu_cxx::__freeres and libc_freeres functions, ++ thus allowing other lurking threads to run again. Hmm. */ + + static + void shutdown_actions_NORETURN( ThreadId tid, +@@ -2584,8 +2588,8 @@ void shutdown_actions_NORETURN( ThreadId tid, + // jrs: Huh? but they surely are already gone + VG_(reap_threads)(tid); + +- // Clean the client up before the final report +- // this causes the libc_freeres function to run ++ // Clean the client up before the final report. ++ // This causes __gnu_cxx::__freeres and libc_freeres functions to run. + final_tidyup(tid); + + /* be paranoid */ +@@ -2600,9 +2604,9 @@ void shutdown_actions_NORETURN( ThreadId tid, + // that none of the other threads ever run again. + vg_assert( VG_(count_living_threads)() >= 1 ); + +- // Clean the client up before the final report +- // this causes the libc_freeres function to run +- // perhaps this is unsafe, as per comment above ++ // Clean the client up before the final report. ++ // This causes __gnu_cxx::__freeres and libc_freeres functions to run. ++ // Perhaps this is unsafe, as per comment above. + final_tidyup(tid); + + /* be paranoid */ +@@ -2742,63 +2746,141 @@ void shutdown_actions_NORETURN( ThreadId tid, + /* -------------------- */ + + /* Final clean-up before terminating the process. +- Clean up the client by calling __libc_freeres() (if requested) +- This is Linux-specific? +- GrP fixme glibc-specific, anyway ++ Clean up the client by calling __gnu_cxx::__freeres() (if requested) ++ and __libc_freeres() (if requested). + */ + static void final_tidyup(ThreadId tid) + { +-#if !defined(VGO_darwin) +- Addr __libc_freeres_wrapper = VG_(client___libc_freeres_wrapper); ++#if defined(VGO_linux) || defined(VGO_solaris) ++ Addr freeres_wrapper = VG_(client_freeres_wrapper); + + vg_assert(VG_(is_running_thread)(tid)); +- +- if ( !VG_(needs).libc_freeres || +- !VG_(clo_run_libc_freeres) || +- 0 == __libc_freeres_wrapper ) +- return; /* can't/won't do it */ ++ ++ if (freeres_wrapper == 0) { ++ return; /* can't do it */ ++ } ++ ++ Vg_FreeresToRun to_run = 0; ++ if (VG_(needs).cxx_freeres && VG_(clo_run_cxx_freeres)) { ++ to_run |= VG_RUN__GNU_CXX__FREERES; ++ } ++ ++ if (VG_(needs).libc_freeres && VG_(clo_run_libc_freeres)) { ++ to_run |= VG_RUN__LIBC_FREERES; ++ } ++ ++ if (to_run == 0) { ++ return; /* won't do it */ ++ } + + # if defined(VGP_ppc64be_linux) +- Addr r2 = VG_(get_tocptr)( __libc_freeres_wrapper ); ++ Addr r2 = VG_(get_tocptr)(freeres_wrapper); + if (r2 == 0) { + VG_(message)(Vg_UserMsg, +- "Caught __NR_exit, but can't run __libc_freeres()\n"); ++ "Caught __NR_exit, but can't run __gnu_cxx::__freeres()\n"); + VG_(message)(Vg_UserMsg, +- " since cannot establish TOC pointer for it.\n"); ++ " or __libc_freeres() since cannot establish TOC pointer " ++ "for it.\n"); + return; + } + # endif + + if (VG_(clo_verbosity) > 2 || + VG_(clo_trace_syscalls) || +- VG_(clo_trace_sched)) +- VG_(message)(Vg_DebugMsg, +- "Caught __NR_exit; running __libc_freeres()\n"); ++ VG_(clo_trace_sched)) { ++ ++ vg_assert(to_run > 0); ++ vg_assert(to_run <= (VG_RUN__GNU_CXX__FREERES | VG_RUN__LIBC_FREERES)); ++ ++ const HChar *msgs[] = {"__gnu_cxx::__freeres()", "__libc_freeres()", ++ "__gnu_cxx::__freeres and __libc_freeres()"}; ++ VG_(message)(Vg_DebugMsg, ++ "Caught __NR_exit; running %s wrapper\n", msgs[to_run - 1]); ++ } + +- /* set thread context to point to libc_freeres_wrapper */ +- /* ppc64be-linux note: __libc_freeres_wrapper gives us the real ++ /* set thread context to point to freeres_wrapper */ ++ /* ppc64be-linux note: freeres_wrapper gives us the real + function entry point, not a fn descriptor, so can use it + directly. However, we need to set R2 (the toc pointer) + appropriately. */ +- VG_(set_IP)(tid, __libc_freeres_wrapper); ++ VG_(set_IP)(tid, freeres_wrapper); + # if defined(VGP_ppc64be_linux) + VG_(threads)[tid].arch.vex.guest_GPR2 = r2; + # elif defined(VGP_ppc64le_linux) + /* setting GPR2 but not really needed, GPR12 is needed */ +- VG_(threads)[tid].arch.vex.guest_GPR2 = __libc_freeres_wrapper; +- VG_(threads)[tid].arch.vex.guest_GPR12 = __libc_freeres_wrapper; ++ VG_(threads)[tid].arch.vex.guest_GPR2 = freeres_wrapper; ++ VG_(threads)[tid].arch.vex.guest_GPR12 = freeres_wrapper; + # endif + /* mips-linux note: we need to set t9 */ + # if defined(VGP_mips32_linux) || defined(VGP_mips64_linux) +- VG_(threads)[tid].arch.vex.guest_r25 = __libc_freeres_wrapper; ++ VG_(threads)[tid].arch.vex.guest_r25 = freeres_wrapper; + # endif + ++ /* Pass a parameter to freeres_wrapper(). */ ++# if defined(VGA_x86) ++ Addr sp = VG_(threads)[tid].arch.vex.guest_ESP; ++ sp = sp - sizeof(UWord); ++ *((UWord *) sp) = to_run; ++ VG_TRACK(post_mem_write, Vg_CoreClientReq, tid, sp, sizeof(UWord)); ++ VG_(threads)[tid].arch.vex.guest_ESP = sp; ++ VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, ++ offsetof(VexGuestX86State, guest_ESP), ++ sizeof(VG_(threads)[tid].arch.vex.guest_ESP)); ++# elif defined(VGA_amd64) ++ VG_(threads)[tid].arch.vex.guest_RDI = to_run; ++ VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, ++ offsetof(VexGuestAMD64State, guest_RDI), ++ sizeof(VG_(threads)[tid].arch.vex.guest_RDI)); ++# elif defined(VGA_arm) ++ VG_(threads)[tid].arch.vex.guest_R0 = to_run; ++ VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, ++ offsetof(VexGuestARMState, guest_R0), ++ sizeof(VG_(threads)[tid].arch.vex.guest_R0)); ++# elif defined(VGA_arm64) ++ VG_(threads)[tid].arch.vex.guest_X0 = to_run; ++ VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, ++ offsetof(VexGuestARM64State, guest_X0), ++ sizeof(VG_(threads)[tid].arch.vex.guest_X0)); ++# elif defined(VGA_mips32) ++ VG_(threads)[tid].arch.vex.guest_r4 = to_run; ++ VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, ++ offsetof(VexGuestMIPS32State, guest_r4), ++ sizeof(VG_(threads)[tid].arch.vex.guest_r4)); ++# elif defined(VGA_mips64) ++ VG_(threads)[tid].arch.vex.guest_r4 = to_run; ++ VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, ++ offsetof(VexGuestMIPS64State, guest_r4), ++ sizeof(VG_(threads)[tid].arch.vex.guest_r4)); ++# elif defined(VGA_ppc32) ++ VG_(threads)[tid].arch.vex.guest_GPR3 = to_run; ++ VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, ++ offsetof(VexGuestPPC32State, guest_GPR3), ++ sizeof(VG_(threads)[tid].arch.vex.guest_GPR3)); ++# elif defined(VGA_ppc64be) || defined(VGA_ppc64le) ++ VG_(threads)[tid].arch.vex.guest_GPR3 = to_run; ++ VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, ++ offsetof(VexGuestPPC64State, guest_GPR3), ++ sizeof(VG_(threads)[tid].arch.vex.guest_GPR3)); ++# elif defined(VGA_s390x) ++ VG_(threads)[tid].arch.vex.guest_r2 = to_run; ++ VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, ++ offsetof(VexGuestS390XState, guest_r2), ++ sizeof(VG_(threads)[tid].arch.vex.guest_r2)); ++# elif defined(VGA_tilegx) ++ VG_(threads)[tid].arch.vex.guest_r0 = to_run; ++ VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, ++ offsetof(VexGuestTILEGXState, guest_r0), ++ sizeof(VG_(threads)[tid].arch.vex.guest_r0)); ++#else ++ I_die_here : architecture missing in m_main.c ++#endif ++ + /* Block all blockable signals by copying the real block state into +- the thread's block state*/ ++ the thread's block state */ + VG_(sigprocmask)(VKI_SIG_BLOCK, NULL, &VG_(threads)[tid].sig_mask); + VG_(threads)[tid].tmp_sig_mask = VG_(threads)[tid].sig_mask; + +- /* and restore handlers to default */ ++ /* and restore handlers to default. */ + VG_(set_default_handler)(VKI_SIGSEGV); + VG_(set_default_handler)(VKI_SIGBUS); + VG_(set_default_handler)(VKI_SIGILL); +@@ -2806,11 +2888,11 @@ static void final_tidyup(ThreadId tid) + + // We were exiting, so assert that... + vg_assert(VG_(is_exiting)(tid)); +- // ...but now we're not again ++ // ...but now we're not again. + VG_(threads)[tid].exitreason = VgSrc_None; + +- // run until client thread exits - ideally with LIBC_FREERES_DONE, +- // but exit/exitgroup/signal will do ++ // Run until client thread exits - ideally with FREERES_DONE, ++ // but exit/exitgroup/signal will do. + VG_(scheduler)(tid); + + vg_assert(VG_(is_exiting)(tid)); +diff --git a/coregrind/m_options.c b/coregrind/m_options.c +index 7e920e0..83d6018 100644 +--- a/coregrind/m_options.c ++++ b/coregrind/m_options.c +@@ -121,6 +121,7 @@ Bool VG_(clo_read_inline_info) = False; // Or should be put it to True by defa + Bool VG_(clo_read_var_info) = False; + XArray *VG_(clo_req_tsyms); // array of strings + Bool VG_(clo_run_libc_freeres) = True; ++Bool VG_(clo_run_cxx_freeres) = True; + Bool VG_(clo_track_fds) = False; + Bool VG_(clo_show_below_main)= False; + Bool VG_(clo_show_emwarns) = False; +diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c +index dae47f1..62cb45a 100644 +--- a/coregrind/m_redir.c ++++ b/coregrind/m_redir.c +@@ -49,7 +49,7 @@ + #include "pub_core_machine.h" // VG_(fnptr_to_fnentry) + #include "pub_core_aspacemgr.h" // VG_(am_find_nsegment) + #include "pub_core_xarray.h" +-#include "pub_core_clientstate.h" // VG_(client___libc_freeres_wrapper) ++#include "pub_core_clientstate.h" // VG_(client_freeres_wrapper) + #include "pub_core_demangle.h" // VG_(maybe_Z_demangle) + #include "pub_core_libcproc.h" // VG_(libdir) + +@@ -1688,7 +1688,7 @@ void handle_maybe_load_notifier( const HChar* soname, + return; + + if (VG_(strcmp)(symbol, VG_STRINGIFY(VG_NOTIFY_ON_LOAD(freeres))) == 0) +- VG_(client___libc_freeres_wrapper) = addr; ++ VG_(client_freeres_wrapper) = addr; + else + if (VG_(strcmp)(symbol, VG_STRINGIFY(VG_NOTIFY_ON_LOAD(ifunc_wrapper))) == 0) + iFuncWrapper = addr; +diff --git a/coregrind/m_scheduler/scheduler.c b/coregrind/m_scheduler/scheduler.c +index 1234d56..9aa854d 100644 +--- a/coregrind/m_scheduler/scheduler.c ++++ b/coregrind/m_scheduler/scheduler.c +@@ -1744,12 +1744,13 @@ static Bool os_client_request(ThreadId tid, UWord *args) + vg_assert(VG_(is_running_thread)(tid)); + + switch(args[0]) { +- case VG_USERREQ__LIBC_FREERES_DONE: ++ case VG_USERREQ__FREERES_DONE: + /* This is equivalent to an exit() syscall, but we don't set the + exitcode (since it might already be set) */ + if (0 || VG_(clo_trace_syscalls) || VG_(clo_trace_sched)) + VG_(message)(Vg_DebugMsg, +- "__libc_freeres() done; really quitting!\n"); ++ "__gnu_cxx::__freeres() and __libc_freeres() wrapper " ++ "done; really quitting!\n"); + VG_(threads)[tid].exitreason = VgSrc_ExitThread; + break; + +diff --git a/coregrind/m_tooliface.c b/coregrind/m_tooliface.c +index 6971a47..38bc7c2 100644 +--- a/coregrind/m_tooliface.c ++++ b/coregrind/m_tooliface.c +@@ -88,6 +88,7 @@ VgNeeds VG_(needs) = { + .core_errors = False, + .tool_errors = False, + .libc_freeres = False, ++ .cxx_freeres = False, + .superblock_discards = False, + .command_line_options = False, + .client_requests = False, +@@ -216,6 +217,7 @@ Bool VG_(sanity_check_needs)(const HChar** failmsg) + + // These ones don't require any tool-supplied functions + NEEDS(libc_freeres) ++NEEDS(cxx_freeres) + NEEDS(core_errors) + NEEDS(var_info) + +diff --git a/coregrind/pub_core_clientstate.h b/coregrind/pub_core_clientstate.h +index 215dfb2..ddd1c09 100644 +--- a/coregrind/pub_core_clientstate.h ++++ b/coregrind/pub_core_clientstate.h +@@ -90,9 +90,9 @@ extern HChar* VG_(name_of_launcher); + extern Int VG_(fd_soft_limit); + extern Int VG_(fd_hard_limit); + +-/* Useful addresses extracted from the client */ +-/* Where is the __libc_freeres_wrapper routine we made? */ +-extern Addr VG_(client___libc_freeres_wrapper); ++/* Useful addresses extracted from the client. */ ++/* Where is the freeres_wrapper routine we made? */ ++extern Addr VG_(client_freeres_wrapper); + + /* x86-linux only: where is ld.so's _dl_sysinfo_int80 function? + Finding it isn't essential, but knowing where it is does sometimes +diff --git a/coregrind/pub_core_clreq.h b/coregrind/pub_core_clreq.h +index 45c48c3..ce1493c 100644 +--- a/coregrind/pub_core_clreq.h ++++ b/coregrind/pub_core_clreq.h +@@ -41,8 +41,8 @@ + // used to be many more internal client requests. + typedef + enum { +- /* Denote the finish of __libc_freeres_wrapper(). Also causes exit. */ +- VG_USERREQ__LIBC_FREERES_DONE = 0x3029, ++ /* Denote the finish of freeres_wrapper(). Also causes exit. */ ++ VG_USERREQ__FREERES_DONE = 0x3029, + + /* Get the tool's malloc-wrapping functions */ + VG_USERREQ__GET_MALLOCFUNCS = 0x3030, +@@ -55,6 +55,18 @@ typedef + + } Vg_InternalClientRequest; + ++ ++/* Which freeres functions to run in the freeres_wrapper(). ++ It is possible to run both. */ ++typedef enum { ++ /* Run __gnu_cxx::__freeres(). */ ++ VG_RUN__GNU_CXX__FREERES = 1, ++ ++ /* Run __libc_freeres(). */ ++ VG_RUN__LIBC_FREERES = 2 ++ ++} Vg_FreeresToRun; ++ + // Function for printing from code within Valgrind, but which runs on the + // sim'd CPU. Must be a function rather than macros so that va_list can + // be used. +diff --git a/coregrind/pub_core_options.h b/coregrind/pub_core_options.h +index 2a45c6b..7a887fc 100644 +--- a/coregrind/pub_core_options.h ++++ b/coregrind/pub_core_options.h +@@ -281,6 +281,13 @@ extern Bool VG_(clo_track_fds); + cannot be overridden from the command line. */ + extern Bool VG_(clo_run_libc_freeres); + ++/* Should we run __gnu_cxx::__freeres at exit for C++ programs? ++ Default: YES. Note this is subservient to VG_(needs).cxx_freeres; ++ if the latter says False, then the setting of VG_(clo_run_cxx_freeres) ++ is ignored. Ie if a tool says no, I don't want this to run, that ++ cannot be overridden from the command line. */ ++extern Bool VG_(clo_run_cxx_freeres); ++ + /* Should we show VEX emulation warnings? Default: NO */ + extern Bool VG_(clo_show_emwarns); + +diff --git a/coregrind/pub_core_tooliface.h b/coregrind/pub_core_tooliface.h +index 41da986..83758a8 100644 +--- a/coregrind/pub_core_tooliface.h ++++ b/coregrind/pub_core_tooliface.h +@@ -81,6 +81,7 @@ extern VgDetails VG_(details); + typedef + struct { + Bool libc_freeres; ++ Bool cxx_freeres; + Bool core_errors; + Bool tool_errors; + Bool superblock_discards; +diff --git a/coregrind/vg_preloaded.c b/coregrind/vg_preloaded.c +index 2ea7a7a..2f53a7d 100644 +--- a/coregrind/vg_preloaded.c ++++ b/coregrind/vg_preloaded.c +@@ -47,29 +47,47 @@ + #include "pub_core_debuginfo.h" // Needed for pub_core_redir.h + #include "pub_core_redir.h" // For VG_NOTIFY_ON_LOAD + +-#if defined(VGO_linux) ++#if defined(VGO_linux) || defined(VGO_solaris) + + /* --------------------------------------------------------------------- +- Hook for running __libc_freeres once the program exits. ++ Hook for running __gnu_cxx::__freeres() and __libc_freeres() once ++ the program exits. + ------------------------------------------------------------------ */ + +-void VG_NOTIFY_ON_LOAD(freeres)( void ); +-void VG_NOTIFY_ON_LOAD(freeres)( void ) ++void VG_NOTIFY_ON_LOAD(freeres)(Vg_FreeresToRun to_run); ++void VG_NOTIFY_ON_LOAD(freeres)(Vg_FreeresToRun to_run) + { + # if !defined(__UCLIBC__) \ + && !defined(VGPV_arm_linux_android) \ + && !defined(VGPV_x86_linux_android) \ + && !defined(VGPV_mips32_linux_android) \ + && !defined(VGPV_arm64_linux_android) ++ ++ /* g++ mangled __gnu_cxx::__freeres yields -> _ZN9__gnu_cxx9__freeresEv */ ++ extern void _ZN9__gnu_cxx9__freeresEv(void) __attribute__((weak)); ++ if (((to_run & VG_RUN__GNU_CXX__FREERES) != 0) && ++ (_ZN9__gnu_cxx9__freeresEv != NULL)) { ++ _ZN9__gnu_cxx9__freeresEv(); ++ } ++ ++# if defined(VGO_linux) ++ /* __libc_freeres() not yet available on Solaris. */ + extern void __libc_freeres(void); +- __libc_freeres(); ++ if ((to_run & VG_RUN__LIBC_FREERES) != 0) { ++ __libc_freeres(); ++ } + # endif +- VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__LIBC_FREERES_DONE, +- 0, 0, 0, 0, 0); ++# endif ++ ++ VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__FREERES_DONE, 0, 0, 0, 0, 0); + /*NOTREACHED*/ + *(volatile int *)0 = 'x'; + } + ++#endif // VGO_linux || VGO_solaris ++ ++#if defined(VGO_linux) ++ + /* --------------------------------------------------------------------- + Wrapper for indirect functions which need to be redirected. + ------------------------------------------------------------------ */ +diff --git a/docs/xml/manual-core.xml b/docs/xml/manual-core.xml +index 758e2f4..7628836 100644 +--- a/docs/xml/manual-core.xml ++++ b/docs/xml/manual-core.xml +@@ -1930,6 +1930,37 @@ need to use them. + + + ++ ++ ++ ++ ++ ++ This option is only relevant when running Valgrind on Linux ++ or Solaris C++ programs. ++ ++ The GNU Standard C++ library (libstdc++.so), ++ which is used by all C++ programs compiled with g++, may allocate memory ++ for its own uses. Usually it doesn't bother to free that memory when ++ the program ends—there would be no point, since the kernel reclaims ++ all process resources when a process exits anyway, so it would ++ just slow things down. ++ ++ The gcc authors realised that this behaviour causes leak ++ checkers, such as Valgrind, to falsely report leaks in libstdc++, when ++ a leak check is done at exit. In order to avoid this, they ++ provided a routine called __gnu_cxx::__freeres ++ specifically to make libstdc++ release all memory it has allocated. ++ Memcheck therefore tries to run ++ __gnu_cxx::__freeres at exit. ++ ++ For the sake of flexibility and unforeseen problems with ++ __gnu_cxx::__freeres, option ++ exists, ++ although at the cost of possibly falsely reporting space leaks in ++ libstdc++.so. ++ ++ ++ + + + +diff --git a/exp-dhat/dh_main.c b/exp-dhat/dh_main.c +index e636ccb..3476cd9 100644 +--- a/exp-dhat/dh_main.c ++++ b/exp-dhat/dh_main.c +@@ -1358,6 +1358,7 @@ static void dh_pre_clo_init(void) + //zz + // Needs. + VG_(needs_libc_freeres)(); ++ VG_(needs_cxx_freeres)(); + VG_(needs_command_line_options)(dh_process_cmd_line_option, + dh_print_usage, + dh_print_debug_usage); +diff --git a/include/pub_tool_tooliface.h b/include/pub_tool_tooliface.h +index 8df00b5..f7805e9 100644 +--- a/include/pub_tool_tooliface.h ++++ b/include/pub_tool_tooliface.h +@@ -263,6 +263,9 @@ extern void VG_(details_bug_reports_to) ( const HChar* bug_reports_to ); + /* Should __libc_freeres() be run? Bugs in it can crash the tool. */ + extern void VG_(needs_libc_freeres) ( void ); + ++/* Should __gnu_cxx::__freeres() be run? Bugs in it can crash the tool. */ ++extern void VG_(needs_cxx_freeres) ( void ); ++ + /* Want to have errors detected by Valgrind's core reported? Includes: + - pthread API errors (many; eg. unlocking a non-locked mutex) + [currently disabled] +diff --git a/massif/ms_main.c b/massif/ms_main.c +index 66f9be9..628a37b 100644 +--- a/massif/ms_main.c ++++ b/massif/ms_main.c +@@ -2569,6 +2569,7 @@ static void ms_pre_clo_init(void) + + // Needs. + VG_(needs_libc_freeres)(); ++ VG_(needs_cxx_freeres)(); + VG_(needs_command_line_options)(ms_process_cmd_line_option, + ms_print_usage, + ms_print_debug_usage); +diff --git a/memcheck/mc_main.c b/memcheck/mc_main.c +index 99421f5..5464a06 100644 +--- a/memcheck/mc_main.c ++++ b/memcheck/mc_main.c +@@ -7745,6 +7745,7 @@ static void mc_pre_clo_init(void) + MC_(print_extra_suppression_use), + MC_(update_extra_suppression_use)); + VG_(needs_libc_freeres) (); ++ VG_(needs_cxx_freeres) (); + VG_(needs_command_line_options)(mc_process_cmd_line_options, + mc_print_usage, + mc_print_debug_usage); +diff --git a/none/tests/cmdline1.stdout.exp b/none/tests/cmdline1.stdout.exp +index cc25a16..0faec69 100644 +--- a/none/tests/cmdline1.stdout.exp ++++ b/none/tests/cmdline1.stdout.exp +@@ -90,6 +90,8 @@ usage: valgrind [options] prog-and-args + --vgdb-shadow-registers=no|yes let gdb see the shadow registers [no] + --vgdb-prefix= prefix for vgdb FIFOs [.../vgdb-pipe] + --run-libc-freeres=no|yes free up glibc memory at exit on Linux? [yes] ++ --run-cxx-freeres=no|yes free up libstdc++ memory at exit on Linux ++ and Solaris? [yes] + --sim-hints=hint1,hint2,... activate unusual sim behaviours [none] + where hint is one of: + lax-ioctls lax-doors fuse-compatible enable-outer +diff --git a/none/tests/cmdline2.stdout.exp b/none/tests/cmdline2.stdout.exp +index 580fa19..b124f20 100644 +--- a/none/tests/cmdline2.stdout.exp ++++ b/none/tests/cmdline2.stdout.exp +@@ -90,6 +90,8 @@ usage: valgrind [options] prog-and-args + --vgdb-shadow-registers=no|yes let gdb see the shadow registers [no] + --vgdb-prefix= prefix for vgdb FIFOs [.../vgdb-pipe] + --run-libc-freeres=no|yes free up glibc memory at exit on Linux? [yes] ++ --run-cxx-freeres=no|yes free up libstdc++ memory at exit on Linux ++ and Solaris? [yes] + --sim-hints=hint1,hint2,... activate unusual sim behaviours [none] + where hint is one of: + lax-ioctls lax-doors fuse-compatible enable-outer +commit 315cb2823de2e3006ec454b278a9f9e474520f57 +Author: iraisr +Date: Fri Apr 8 21:29:15 2016 +0000 + + Follow up to bug 345307. + Passing parameter on x86 architecture was wrong in final_tidyup(). + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15854 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_main.c b/coregrind/m_main.c +index 8cfaf82..80f347e 100644 +--- a/coregrind/m_main.c ++++ b/coregrind/m_main.c +@@ -2819,9 +2819,9 @@ static void final_tidyup(ThreadId tid) + /* Pass a parameter to freeres_wrapper(). */ + # if defined(VGA_x86) + Addr sp = VG_(threads)[tid].arch.vex.guest_ESP; +- sp = sp - sizeof(UWord); + *((UWord *) sp) = to_run; + VG_TRACK(post_mem_write, Vg_CoreClientReq, tid, sp, sizeof(UWord)); ++ sp = sp - sizeof(UWord); + VG_(threads)[tid].arch.vex.guest_ESP = sp; + VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, + offsetof(VexGuestX86State, guest_ESP), diff --git a/SOURCES/valgrind-3.11.0-deduppoolalloc.patch b/SOURCES/valgrind-3.11.0-deduppoolalloc.patch new file mode 100644 index 0000000..46b64a0 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-deduppoolalloc.patch @@ -0,0 +1,56 @@ +commit 46809ccf0281e7556e55f50f25ad5c811fad6ba3 +Author: philippe +Date: Sun Feb 14 22:14:19 2016 +0000 + + Fix Bug 359133 - m_deduppoolalloc.c:258 (vgPlain_allocEltDedupPA): Assertion 'eltSzB <= ddpa->poolSzB' failed. + + When the elt to allocate is bigger than the pool size, allocate + a specific pool only for this element. + + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15787 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_deduppoolalloc.c b/coregrind/m_deduppoolalloc.c +index 92016d8..f7ebd27 100644 +--- a/coregrind/m_deduppoolalloc.c ++++ b/coregrind/m_deduppoolalloc.c +@@ -255,7 +255,6 @@ const void* VG_(allocEltDedupPA) (DedupPoolAlloc *ddpa, SizeT eltSzB, + ht_node *ht_ins; + vg_assert(ddpa); + vg_assert(ddpa->ht_elements); +- vg_assert (eltSzB <= ddpa->poolSzB); + + ddpa->nr_alloc_calls++; + +@@ -272,15 +271,24 @@ const void* VG_(allocEltDedupPA) (DedupPoolAlloc *ddpa, SizeT eltSzB, + and insert it in the hash table of inserted elements. */ + + // Add a new pool or grow pool if not enough space in the current pool +- if (UNLIKELY(ddpa->curpool_free == NULL +- || ddpa->curpool_free + eltSzB - 1 > ddpa->curpool_limit)) { +- ddpa_add_new_pool_or_grow (ddpa); ++ if (eltSzB + ddpa->eltAlign > ddpa->poolSzB) { ++ // Element (+eltAlign for worst case) bigger than the pool size ++ // => allocate a specific pool just for this element ++ UChar *newpool = ddpa->alloc_fn (ddpa->cc, eltSzB + ddpa->eltAlign); ++ /* add to our collection of pools */ ++ VG_(addToXA)( ddpa->pools, &newpool ); ++ elt_ins = ddpa_align (ddpa, newpool); ++ } else { ++ if (UNLIKELY(ddpa->curpool_free == NULL ++ || ddpa->curpool_free + eltSzB - 1 > ddpa->curpool_limit)) { ++ ddpa_add_new_pool_or_grow (ddpa); ++ } ++ elt_ins = ddpa->curpool_free; ++ ddpa->curpool_free = ddpa_align(ddpa, ddpa->curpool_free + eltSzB); + } + +- elt_ins = ddpa->curpool_free; +- VG_(memcpy)(elt_ins, elt, eltSzB); +- ddpa->curpool_free = ddpa_align(ddpa, ddpa->curpool_free + eltSzB); + ++ VG_(memcpy)(elt_ins, elt, eltSzB); + ht_ins = VG_(allocEltPA) (ddpa->ht_node_pa); + ht_ins->key = ht_elt.key; + ht_ins->eltSzB = eltSzB; diff --git a/SOURCES/valgrind-3.11.0-drd_std_thread.patch b/SOURCES/valgrind-3.11.0-drd_std_thread.patch new file mode 100644 index 0000000..a103265 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-drd_std_thread.patch @@ -0,0 +1,72 @@ +commit ef3ac601dfcd45b2e27bd09b84e85607ebd5183f +Author: bart +Date: Mon Jan 25 04:27:25 2016 +0000 + + configure.ac: Port to gcc 5 + + Apparently gcc 5 behaves as follows: + $ gcc -dumpversion + 5 + + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15773 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/configure.ac b/configure.ac +index e93c882..d621dca 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -160,7 +160,7 @@ case "${is_clang}-${gcc_version}" in + icc-1[[3-9]].*) + AC_MSG_RESULT([ok (ICC version ${gcc_version})]) + ;; +- notclang-[[3-9]].*|notclang-[[1-9][0-9]]*) ++ notclang-[[3-9]]|notclang-[[3-9]].*|notclang-[[1-9][0-9]]*) + AC_MSG_RESULT([ok (${gcc_version})]) + ;; + clang-2.9|clang-[[3-9]].*|clang-[[1-9][0-9]]*) +diff --git a/drd/tests/std_thread.cpp b/drd/tests/std_thread.cpp +index 9275c3a..6af7455 100644 +--- a/drd/tests/std_thread.cpp ++++ b/drd/tests/std_thread.cpp +@@ -21,6 +21,7 @@ int main(int argc, char** argv) + return 0; + } + ++#if defined(__GNUC__) && __GNUC__ -0 < 6 + // + // From libstdc++-v3/src/c++11/thread.cc + // +@@ -65,3 +66,4 @@ namespace std + } + } + } ++#endif +diff --git a/drd/tests/std_thread2.cpp b/drd/tests/std_thread2.cpp +index 9861c61..7de4f9d 100644 +--- a/drd/tests/std_thread2.cpp ++++ b/drd/tests/std_thread2.cpp +@@ -26,6 +26,7 @@ int main(int argc, char** argv) + return 0; + } + ++#if defined(__GNUC__) && __GNUC__ -0 < 6 + // + // From libstdc++-v3/src/c++11/thread.cc + // +@@ -70,3 +71,4 @@ namespace std + } + } + } ++#endif +--- valgrind-3.11.0.orig/configure 2016-01-25 21:16:13.019563625 +0100 ++++ valgrind-3.11.0/configure 2016-01-25 21:17:31.120337140 +0100 +@@ -5453,7 +5453,7 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (ICC version ${gcc_version})" >&5 + $as_echo "ok (ICC version ${gcc_version})" >&6; } + ;; +- notclang-[3-9].*|notclang-[1-9][0-9]*) ++ notclang-[3-9]|notclang-[3-9].*|notclang-[1-9][0-9]*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (${gcc_version})" >&5 + $as_echo "ok (${gcc_version})" >&6; } + ;; diff --git a/SOURCES/valgrind-3.11.0-fclose.patch b/SOURCES/valgrind-3.11.0-fclose.patch new file mode 100644 index 0000000..d79fa93 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-fclose.patch @@ -0,0 +1,21 @@ +commit 8c8306308e05e92de228de57e832c85fb976124b +Author: florian +Date: Tue Jan 12 14:32:05 2016 +0000 + + VG_(fclose) ought to close the file, you silly. Fixes BZ #357887. + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15755 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_libcprint.c b/coregrind/m_libcprint.c +index 1283de5..ce2c038 100644 +--- a/coregrind/m_libcprint.c ++++ b/coregrind/m_libcprint.c +@@ -359,6 +359,7 @@ void VG_(fclose)( VgFile *fp ) + if (fp->num_chars) + VG_(write)(fp->fd, fp->buf, fp->num_chars); + ++ VG_(close)(fp->fd); + VG_(free)(fp); + } + diff --git a/SOURCES/valgrind-3.11.0-futex.patch b/SOURCES/valgrind-3.11.0-futex.patch new file mode 100644 index 0000000..50b4e9b --- /dev/null +++ b/SOURCES/valgrind-3.11.0-futex.patch @@ -0,0 +1,50 @@ +commit 9a447c6472947bce97e8b90b7f3f97bd7cd9f3ed +Author: mjw +Date: Wed Feb 17 20:53:34 2016 +0000 + + Bug 359201 futex syscall skips argument 5 if op is FUTEX_WAIT_BITSET + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15793 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +commit f71fd226f26ab49a615d7886ff2aeadc9915c7c1 +Author: mjw +Date: Thu Feb 18 11:14:47 2016 +0000 + + Bug 359201 followup. futex skips argument 5 if op is FUTEX_WAIT_BITSET. + + The original fix in svn r15793 read argument 6 separately by using PRA6 + unconditionally. This is wrong. We need to first check whether a + track_pre_reg_read callback is registered (only memcheck does). + The PRE_REG_READX macro already had this check. Just add the same + before calling PRA6. Thanks to Tom Hughes for noticing. Without this + helgrind/tests/cond_timedwait_test and drd/tests/pth_inconsistent_cond_wait + regtests would fail. + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15795 a5019735-40e9-0310-8 + +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index f796969..f2d1076 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -1154,13 +1154,17 @@ PRE(sys_futex) + return; + } + if (*(vki_u32 *)ARG1 != ARG3) { +- PRE_REG_READ5(long, "futex", ++ PRE_REG_READ4(long, "futex", + vki_u32 *, futex, int, op, int, val, +- struct timespec *, utime, int, dummy); ++ struct timespec *, utime); + } else { +- PRE_REG_READ6(long, "futex", ++ /* Note argument 5 is unused, but argument 6 is used. ++ So we cannot just PRE_REG_READ6. Read argument 6 separately. */ ++ PRE_REG_READ4(long, "futex", + vki_u32 *, futex, int, op, int, val, +- struct timespec *, utime, int, dummy, int, val3); ++ struct timespec *, utime); ++ if (VG_(tdict).track_pre_reg_read) ++ PRA6("futex",int,val3); + } + break; + case VKI_FUTEX_WAKE_BITSET: diff --git a/SOURCES/valgrind-3.11.0-gdb-test-filters.patch b/SOURCES/valgrind-3.11.0-gdb-test-filters.patch new file mode 100644 index 0000000..739c58c --- /dev/null +++ b/SOURCES/valgrind-3.11.0-gdb-test-filters.patch @@ -0,0 +1,59 @@ +commit c4ada110b0de0a56ec41ca0babc4effce4a4fc04 +Author: mjw +Date: Sun Apr 3 15:24:20 2016 +0000 + + Update gdbserver_tests filter for newer GDB version. + + - Newer gdb say Thread .... hit Breakpoint, we expect just Breakpoint. + - We expect "Program received" instead of "Thread .... received" + - Ordering of ' Thread .... (tid .' might differ between gdb version, + so remove all such lines except the "current" one (starts with '*'). + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15844 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/gdbserver_tests/filter_gdb b/gdbserver_tests/filter_gdb +index df9479f..7177720 100755 +--- a/gdbserver_tests/filter_gdb ++++ b/gdbserver_tests/filter_gdb +@@ -62,6 +62,10 @@ sed -e '/^\ \ \ \ \.\.\.$/d' | + # gdb might also try to show the "entry value" p=p@entry=0x... + # Some gdb versions don't show the source line:number after switching + # threads in #0 0x........ in do_burn (). ++# Newer gdb say Thread .... hit Breakpoint, we expect just Breakpoint. ++# We expect "Program received" instead of "Thread .... received" ++# Ordering of ' Thread .... (tid .' might differ between gdb version, ++# so remove all such lines except the "current" one (starts with '*'). + sed -e '/Remote debugging using/,/vgdb launched process attached/d' \ + -e '/filter_gdb BEGIN drop/,/filter_gdb END drop/d' \ + -e 's/^\[?1034hReading symbols/Reading symbols/' \ +@@ -74,6 +78,8 @@ sed -e '/Remote debugging using/,/vgdb launched process attached/d' + -e '/\[Switching to Thread ....\]/d' \ + -e 's/\(\[Switching to thread [1234] (Thread ....)\]\)#0/\1\n#0/' \ + -e 's/^\([ \* ] [0-9] Thread .... (tid [0-9] VgTs_WaitSys) 0x........ in\).*$/\1 syscall .../' \ ++ -e 's/^Thread .... hit Breakpoint /Breakpoint /' \ ++ -e 's/^Thread .... received /Program received /' \ + -e 's/#[0-9]\( 0x........ in sleeper_or_burner\)/#.\1/' \ + -e 's/\(#0 0x........ in do_burn ()\) at sleepers.c:41/\1/' \ + -e '/^Reading symbols from .*\.\.\.done\./d' \ +@@ -115,6 +121,7 @@ sed -e '/Remote debugging using/,/vgdb launched process attached/d' + -e 's/\(^Breakpoint 1, tls_ptr (p=0x........\) \() at tls.c:55\)/\1\2/' \ + -e '/Id Target Id Frame/d' \ + -e 's/^\([ \*] [1234] \) *Thread /\1Thread /' \ ++ -e 's/^ [0-9] Thread .... (tid [0-9] .*$//' \ + -e 's/VgTs_WaitSys) 0x/VgTs_WaitSys) 0x/' \ + -e '/Cannot access memory at address 0x......../d' \ + -e '/\[New Thread/d' \ +diff --git a/gdbserver_tests/nlcontrolc.stdoutB.exp b/gdbserver_tests/nlcontrolc.stdoutB.exp +index a1013ce..e334fd0 100644 +--- a/gdbserver_tests/nlcontrolc.stdoutB.exp ++++ b/gdbserver_tests/nlcontrolc.stdoutB.exp +@@ -1,9 +1,6 @@ + Continuing. + Program received signal SIGTRAP, Trace/breakpoint trap. + 0x........ in syscall ... +- 4 Thread .... (tid 4 VgTs_WaitSys) 0x........ in syscall ... +- 3 Thread .... (tid 3 VgTs_WaitSys) 0x........ in syscall ... +- 2 Thread .... (tid 2 VgTs_WaitSys) 0x........ in syscall ... + * 1 Thread .... (tid 1 VgTs_WaitSys) 0x........ in syscall ... + $1 = 0 + $2 = 0 diff --git a/SOURCES/valgrind-3.11.0-isZeroU.patch b/SOURCES/valgrind-3.11.0-isZeroU.patch new file mode 100644 index 0000000..a58998f --- /dev/null +++ b/SOURCES/valgrind-3.11.0-isZeroU.patch @@ -0,0 +1,21 @@ +commit 770707cd209a94b9fe19273b68ddb1cb84191399 +Author: sewardj +Date: Mon Mar 21 19:29:20 2016 +0000 + + Make isZeroU handle the V256 case. Fixes #356393. + + + git-svn-id: svn://svn.valgrind.org/vex/trunk@3213 8f6e269a-dfd6-0310-a8e1-e2731360e62c + +diff --git a/VEX/priv/ir_opt.c b/VEX/priv/ir_opt.c +index 7a7246a..4266823 100644 +--- a/VEX/priv/ir_opt.c ++++ b/VEX/priv/ir_opt.c +@@ -1223,6 +1223,7 @@ static Bool isZeroU ( IRExpr* e ) + case Ico_U16: return toBool( e->Iex.Const.con->Ico.U16 == 0); + case Ico_U32: return toBool( e->Iex.Const.con->Ico.U32 == 0); + case Ico_U64: return toBool( e->Iex.Const.con->Ico.U64 == 0); ++ case Ico_V256: return toBool( e->Iex.Const.con->Ico.V256 == 0x00000000); + default: vpanic("isZeroU"); + } + } diff --git a/SOURCES/valgrind-3.11.0-is_stmt.patch b/SOURCES/valgrind-3.11.0-is_stmt.patch new file mode 100644 index 0000000..35530d8 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-is_stmt.patch @@ -0,0 +1,254 @@ +commit 434c7524413a8a47ae40e4b141f5821eabc506b7 +Author: iraisr +Date: Fri Dec 4 13:14:10 2015 +0000 + + Dwarf line info reader now correctly interprets 'is_stmt' register + + Line numbers should correctly reflect all instructions belonging to a source line, + regardless of is_stmt value. Previously only instructions covered by + 'is_stmt = 1' were attributed to a source line. + + Fixes BZ#356044 + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15741 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_debuginfo/readdwarf.c b/coregrind/m_debuginfo/readdwarf.c +index 88d49e9..a95bb3d 100644 +--- a/coregrind/m_debuginfo/readdwarf.c ++++ b/coregrind/m_debuginfo/readdwarf.c +@@ -91,7 +91,6 @@ typedef struct + ULong li_header_length; + UChar li_min_insn_length; + UChar li_max_ops_per_insn; +- UChar li_default_is_stmt; + Int li_line_base; + UChar li_line_range; + UChar li_opcode_base; +@@ -150,7 +149,6 @@ typedef struct + UInt file; + UInt line; + UInt column; +- Int is_stmt; + Int basic_block; + UChar end_sequence; + } LineSMR; +@@ -230,7 +228,7 @@ ULong read_initial_length_field ( DiCursor p_img, /*OUT*/Bool* is64 ) + static LineSMR state_machine_regs; + + static +-void reset_state_machine ( Int is_stmt ) ++void reset_state_machine ( void ) + { + if (0) VG_(printf)("smr.a := %p (reset)\n", NULL ); + state_machine_regs.last_address = 0; +@@ -240,7 +238,6 @@ void reset_state_machine ( Int is_stmt ) + state_machine_regs.file = 1; + state_machine_regs.line = 1; + state_machine_regs.column = 0; +- state_machine_regs.is_stmt = is_stmt; + state_machine_regs.basic_block = 0; + state_machine_regs.end_sequence = 0; + } +@@ -253,7 +250,7 @@ void reset_state_machine ( Int is_stmt ) + static + void process_extended_line_op( struct _DebugInfo* di, + XArray* fndn_ix_xa, +- DiCursor* data, Int is_stmt) ++ DiCursor* data ) + { + UInt len = step_leb128U(data); + if (len == 0) { +@@ -275,19 +272,17 @@ void process_extended_line_op( struct _DebugInfo* di, + reset_state_machine below */ + state_machine_regs.end_sequence = 1; + +- if (state_machine_regs.is_stmt) { +- if (state_machine_regs.last_address) { +- ML_(addLineInfo) ( +- di, +- safe_fndn_ix (fndn_ix_xa, +- state_machine_regs.last_file), +- di->text_debug_bias + state_machine_regs.last_address, +- di->text_debug_bias + state_machine_regs.address, +- state_machine_regs.last_line, 0 +- ); +- } ++ if (state_machine_regs.last_address) { ++ ML_(addLineInfo)( ++ di, ++ safe_fndn_ix(fndn_ix_xa, ++ state_machine_regs.last_file), ++ di->text_debug_bias + state_machine_regs.last_address, ++ di->text_debug_bias + state_machine_regs.address, ++ state_machine_regs.last_line, 0 ++ ); + } +- reset_state_machine (is_stmt); ++ reset_state_machine(); + if (di->ddump_line) + VG_(printf)(" Extended opcode %d: End of Sequence\n\n", + (Int)op_code); +@@ -446,29 +441,9 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, + info.li_max_ops_per_insn = 1; + } + +- info.li_default_is_stmt = ML_(cur_step_UChar)(&external); +- if (di->ddump_line) +- VG_(printf)(" Initial value of 'is_stmt': %d\n", +- (Int)info.li_default_is_stmt); +- +- /* Josef Weidendorfer (20021021) writes: +- +- It seems to me that the Intel Fortran compiler generates bad +- DWARF2 line info code: It sets "is_stmt" of the state machine in +- the line info reader to be always false. Thus, there is never +- a statement boundary generated and therefore never an instruction +- range/line number mapping generated for valgrind. +- +- Please have a look at the DWARF2 specification, Ch. 6.2 +- (x86.ddj.com/ftp/manuals/tools/dwarf.pdf). Perhaps I understand +- this wrong, but I don't think so. +- +- I just had a look at the GDB DWARF2 reader... They completely +- ignore "is_stmt" when recording line info ;-) That's the reason +- "objdump -S" works on files from the intel fortran compiler. +- +- Therefore: */ +- info.li_default_is_stmt = True; ++ /* Register is_stmt is not tracked as we are interested only ++ in pc -> line info mapping and not other debugger features. */ ++ /* default_is_stmt = */ ML_(cur_step_UChar)(&external); + + /* JRS: changed (UInt*) to (UChar*) */ + info.li_line_base = ML_(cur_step_UChar)(&external); +@@ -495,7 +470,7 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, + DiCursor end_of_sequence + = ML_(cur_plus)(data, info.li_length + (is64 ? 12 : 4)); + +- reset_state_machine (info.li_default_is_stmt); ++ reset_state_machine(); + + /* Read the contents of the Opcodes table. */ + DiCursor standard_opcodes = external; +@@ -632,55 +607,49 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, + (Int)op_code, advAddr, state_machine_regs.address, + (Int)adv, (Int)state_machine_regs.line ); + +- if (state_machine_regs.is_stmt) { +- /* only add a statement if there was a previous boundary */ +- if (state_machine_regs.last_address) { +- ML_(addLineInfo)( +- di, +- safe_fndn_ix (fndn_ix_xa, +- state_machine_regs.last_file), +- di->text_debug_bias + state_machine_regs.last_address, +- di->text_debug_bias + state_machine_regs.address, +- state_machine_regs.last_line, +- 0 +- ); +- } +- state_machine_regs.last_address = state_machine_regs.address; +- state_machine_regs.last_file = state_machine_regs.file; +- state_machine_regs.last_line = state_machine_regs.line; ++ /* only add a statement if there was a previous boundary */ ++ if (state_machine_regs.last_address) { ++ ML_(addLineInfo)( ++ di, ++ safe_fndn_ix(fndn_ix_xa, ++ state_machine_regs.last_file), ++ di->text_debug_bias + state_machine_regs.last_address, ++ di->text_debug_bias + state_machine_regs.address, ++ state_machine_regs.last_line, ++ 0 ++ ); + } ++ state_machine_regs.last_address = state_machine_regs.address; ++ state_machine_regs.last_file = state_machine_regs.file; ++ state_machine_regs.last_line = state_machine_regs.line; + } + + else { /* ! (op_code >= info.li_opcode_base) */ + + switch (op_code) { + case DW_LNS_extended_op: +- process_extended_line_op ( +- di, fndn_ix_xa, +- &data, info.li_default_is_stmt); ++ process_extended_line_op(di, fndn_ix_xa, &data); + break; + + case DW_LNS_copy: + if (0) VG_(printf)("1002: di->o %#lx, smr.a %#lx\n", + (UWord)di->text_debug_bias, + state_machine_regs.address ); +- if (state_machine_regs.is_stmt) { +- /* only add a statement if there was a previous boundary */ +- if (state_machine_regs.last_address) { +- ML_(addLineInfo)( +- di, +- safe_fndn_ix (fndn_ix_xa, +- state_machine_regs.last_file), +- di->text_debug_bias + state_machine_regs.last_address, +- di->text_debug_bias + state_machine_regs.address, +- state_machine_regs.last_line, +- 0 +- ); +- } +- state_machine_regs.last_address = state_machine_regs.address; +- state_machine_regs.last_file = state_machine_regs.file; +- state_machine_regs.last_line = state_machine_regs.line; ++ /* only add a statement if there was a previous boundary */ ++ if (state_machine_regs.last_address) { ++ ML_(addLineInfo)( ++ di, ++ safe_fndn_ix(fndn_ix_xa, ++ state_machine_regs.last_file), ++ di->text_debug_bias + state_machine_regs.last_address, ++ di->text_debug_bias + state_machine_regs.address, ++ state_machine_regs.last_line, ++ 0 ++ ); + } ++ state_machine_regs.last_address = state_machine_regs.address; ++ state_machine_regs.last_file = state_machine_regs.file; ++ state_machine_regs.last_line = state_machine_regs.line; + state_machine_regs.basic_block = 0; /* JRS added */ + if (di->ddump_line) + VG_(printf)(" Copy\n"); +@@ -719,9 +688,6 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, + break; + } + case DW_LNS_negate_stmt: { +- Int adv = state_machine_regs.is_stmt; +- adv = ! adv; +- state_machine_regs.is_stmt = adv; + if (di->ddump_line) + VG_(printf)(" DWARF2-line: negate_stmt\n"); + break; +diff --git a/coregrind/m_debuginfo/storage.c b/coregrind/m_debuginfo/storage.c +index 7b2e26a..e6a9856 100644 +--- a/coregrind/m_debuginfo/storage.c ++++ b/coregrind/m_debuginfo/storage.c +@@ -419,6 +419,21 @@ static void addLoc ( struct _DebugInfo* di, DiLoc* loc, UInt fndn_ix ) + /* Zero-sized locs should have been ignored earlier */ + vg_assert(loc->size > 0); + ++ /* Check if the last entry has adjacent range for the same line. */ ++ if (di->loctab_used > 0) { ++ DiLoc *previous = &di->loctab[di->loctab_used - 1]; ++ if ((previous->lineno == loc->lineno) ++ && (previous->addr + previous->size == loc->addr)) { ++ if (0) ++ VG_(printf)("Merging previous: addr %#lx, size %d, line %d, " ++ "with current: addr %#lx, size %d, line %d.\n", ++ previous->addr, previous->size, previous->lineno, ++ loc->addr, loc->size, loc->lineno); ++ previous->size += loc->size; ++ return; ++ } ++ } ++ + if (di->loctab_used == di->loctab_size) { + UInt new_sz; + DiLoc* new_loctab; diff --git a/SOURCES/valgrind-3.11.0-libstdc++-supp.patch b/SOURCES/valgrind-3.11.0-libstdc++-supp.patch new file mode 100644 index 0000000..2464431 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-libstdc++-supp.patch @@ -0,0 +1,109 @@ +commit 578a0ec2872203dd4a741f7a445056c80320e2c8 +Author: Mark Wielaard +Date: Thu Mar 10 21:36:00 2016 +0100 + + Add libstdc++.supp for still reachable leaks from global memory cache. + + Contributed by Björn "besser82" Esser . + +diff --git a/configure.ac b/configure.ac +index 888a308..01012e1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1060,6 +1060,9 @@ if test "$VGCONF_OS" != "solaris"; then + DEFAULT_SUPP="exp-sgcheck.supp ${DEFAULT_SUPP}" + fi + ++# Suppression file for libstdc++ until we solve KDE#345307 ++DEFAULT_SUPP="libstdc++.supp ${DEFAULT_SUPP}" ++ + + #---------------------------------------------------------------------------- + # Platform variants? +diff --git a/libstdc++.supp b/libstdc++.supp +new file mode 100644 +index 0000000..f04f90d +--- /dev/null ++++ b/libstdc++.supp +@@ -0,0 +1,68 @@ ++ ++# Some programs are using the C++ STL and string classes. ++# Valgrind reports 'still reachable' memory leaks involving these classes ++# at the exit of the program, but there should be none. ++# ++# Many implementations of the C++ standard libraries use their own memory ++# pool allocators. Memory for quite a number of destructed objects is not ++# immediately freed and given back to the OS, but kept in the pool(s) for ++# later re-use. The fact that the pools are not freed at the exit of the ++# program cause Valgrind to report this memory as still reachable. ++# ++# The behavior not to free pools at the exit could be called a bug of the ++# library though. ++# ++# Using GCC, you can force the STL to use malloc and to free memory as soon ++# as possible by globally disabling memory caching. Beware! Doing so will ++# probably slow down your program, sometimes drastically. ++# ++# There are other ways to disable memory pooling: using the malloc_alloc ++# template with your objects (not portable, but should work for GCC) or ++# even writing your own memory allocators. But beware: allocators belong ++# to the more messy parts of the STL and people went to great lengths to ++# make the STL portable across platforms. Chances are good that your ++# solution will work on your platform, but not on others. ++# ++# 72,704 bytes in 1 blocks are still reachable in loss record 1 of 1 ++# at 0x4C28D06: malloc (vg_replace_malloc.c:299) ++# by 0x50C317F: ??? (in /usr/lib64/libstdc++.so.6.0.21) ++# by 0x400F759: call_init.part.0 (dl-init.c:72) ++# by 0x400F86A: call_init (dl-init.c:30) ++# by 0x400F86A: _dl_init (dl-init.c:120) ++# by 0x4000CB9: ??? (in /usr/lib64/ld-2.22.so) ++# ++# HEAP SUMMARY: ++# in use at exit: 72,704 bytes in 1 blocks ++# total heap usage: 4 allocs, 3 frees, 72,864 bytes allocated ++# ++# LEAK SUMMARY: ++# definitely lost: 0 bytes in 0 blocks ++# indirectly lost: 0 bytes in 0 blocks ++# possibly lost: 0 bytes in 0 blocks ++# still reachable: 72,704 bytes in 1 blocks ++# suppressed: 0 bytes in 0 blocks ++ ++{ ++ malloc-leaks-cxx-stl-string-classes ++ Memcheck:Leak ++ match-leak-kinds: reachable ++ fun:malloc ++ obj:*/*lib*/libstdc++.so* ++ fun:call_init.part.0 ++ fun:call_init ++ fun:_dl_init ++ obj:/usr/*lib*/ld-2.*.so ++} ++{ ++ malloc-leaks-cxx-stl-string-classes-debug ++ Memcheck:Leak ++ match-leak-kinds: reachable ++ fun:malloc ++ fun:pool ++ fun:__static_initialization_and_destruction_0 ++ fun:_GLOBAL__sub_I_eh_alloc.cc ++ fun:call_init.part.0 ++ fun:call_init ++ fun:_dl_init ++ obj:/usr/*lib*/ld-2.*.so ++} +diff -ru valgrind-3.11.0.orig/configure valgrind-3.11.0/configure +--- valgrind-3.11.0.orig/configure 2016-03-10 22:08:46.236519482 +0100 ++++ valgrind-3.11.0/configure 2016-03-10 22:09:01.550443864 +0100 +@@ -7073,6 +7073,9 @@ + DEFAULT_SUPP="exp-sgcheck.supp ${DEFAULT_SUPP}" + fi + ++# Suppression file for libstdc++ until we solve KDE#345307 ++DEFAULT_SUPP="libstdc++.supp ${DEFAULT_SUPP}" ++ + + #---------------------------------------------------------------------------- + # Platform variants? diff --git a/SOURCES/valgrind-3.11.0-no-rdrand.patch b/SOURCES/valgrind-3.11.0-no-rdrand.patch new file mode 100644 index 0000000..cb4a49c --- /dev/null +++ b/SOURCES/valgrind-3.11.0-no-rdrand.patch @@ -0,0 +1,26 @@ +commit 1ab61656f71e94ce12b68de87f1e28cf3dc0c18c +Author: mjw +Date: Thu Oct 1 12:31:19 2015 +0000 + + Don't advertise RDRAND in cpuid for Core-i7-4910-like avx2 machine. + + Bug#353370. In amd64g_dirtyhelper_CPUID_avx2 we set the RDRAND bit + but we don't implement support for RDRAND. Turn the bit off so programs + don't try to use RDRAND when running under valgrind. + + git-svn-id: svn://svn.valgrind.org/vex/trunk@3197 8f6e269a-dfd6-0310-a8e1-e2731360e62c + +diff --git a/VEX/priv/guest_amd64_helpers.c b/VEX/priv/guest_amd64_helpers.c +index e77d753..ab53e15 100644 +--- a/VEX/priv/guest_amd64_helpers.c ++++ b/VEX/priv/guest_amd64_helpers.c +@@ -3101,7 +3101,8 @@ void amd64g_dirtyhelper_CPUID_avx2 ( VexGuestAMD64State* st ) + SET_ABCD(0x0000000d, 0x756e6547, 0x6c65746e, 0x49656e69); + break; + case 0x00000001: +- SET_ABCD(0x000306c3, 0x02100800, 0x7ffafbff, 0xbfebfbff); ++ /* Don't advertise RDRAND support, bit 30 in ECX. */ ++ SET_ABCD(0x000306c3, 0x02100800, 0x3ffafbff, 0xbfebfbff); + break; + case 0x00000002: + SET_ABCD(0x76036301, 0x00f0b6ff, 0x00000000, 0x00c10000); diff --git a/SOURCES/valgrind-3.11.0-pcmpxstrx-0x70-0x19.patch b/SOURCES/valgrind-3.11.0-pcmpxstrx-0x70-0x19.patch new file mode 100644 index 0000000..1b32b66 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-pcmpxstrx-0x70-0x19.patch @@ -0,0 +1,350 @@ +commit b4ead6dd41c3234b491c803fe513580363f38998 +Author: sewardj +Date: Wed Jul 20 16:35:55 2016 +0000 + + Enable PCMPxSTRx cases 0x70 and 0x19. Fixes #359952. + + + git-svn-id: svn://svn.valgrind.org/vex/trunk@3228 8f6e269a-dfd6-0310-a8e1-e2731360e62c + +diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c +index 936d16f..4c9a122 100644 +--- a/VEX/priv/guest_amd64_toIR.c ++++ b/VEX/priv/guest_amd64_toIR.c +@@ -18671,10 +18671,11 @@ static Long dis_PCMPxSTRx ( const VexAbiInfo* vbi, Prefix pfx, + case 0x12: case 0x14: case 0x18: case 0x1A: + case 0x30: case 0x34: case 0x38: case 0x3A: + case 0x40: case 0x42: case 0x44: case 0x46: case 0x4A: ++ case 0x70: + break; + // the 16-bit character versions of the above + case 0x01: case 0x03: case 0x09: case 0x0B: case 0x0D: +- case 0x13: case 0x1B: ++ case 0x13: case 0x19: case 0x1B: + case 0x39: case 0x3B: + case 0x45: case 0x4B: + break; +diff --git a/VEX/priv/guest_generic_x87.c b/VEX/priv/guest_generic_x87.c +index 2c9b25b..9a3c603 100644 +--- a/VEX/priv/guest_generic_x87.c ++++ b/VEX/priv/guest_generic_x87.c +@@ -799,6 +799,7 @@ Bool compute_PCMPxSTRx ( /*OUT*/V128* resV, + case 0x12: case 0x14: case 0x18: case 0x1A: + case 0x30: case 0x34: case 0x38: case 0x3A: + case 0x40: case 0x42: case 0x44: case 0x46: case 0x4A: ++ case 0x70: + break; + default: + return False; +@@ -1047,7 +1048,7 @@ Bool compute_PCMPxSTRx_wide ( /*OUT*/V128* resV, + unvalidated cases in the code base. */ + switch (imm8) { + case 0x01: case 0x03: case 0x09: case 0x0B: case 0x0D: +- case 0x13: case 0x1B: ++ case 0x13: case 0x19: case 0x1B: + case 0x39: case 0x3B: + case 0x45: case 0x4B: + break; +commit b5ca153e38556e9e4bef0a79c99e3ab6a7e47056 +Author: sewardj +Date: Wed Jul 20 16:37:09 2016 +0000 + + Add test cases for PCMPxSTRx cases 0x70 and 0x19. Pertains to #359952. + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15910 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/none/tests/amd64/pcmpstr64.c b/none/tests/amd64/pcmpstr64.c +index 0694012..2b48c72 100644 +--- a/none/tests/amd64/pcmpstr64.c ++++ b/none/tests/amd64/pcmpstr64.c +@@ -207,6 +207,7 @@ Bool pcmpXstrX_WRK ( /*OUT*/V128* resV, + case 0x12: case 0x14: case 0x18: case 0x1A: + case 0x30: case 0x34: case 0x38: case 0x3A: + case 0x40: case 0x42: case 0x44: case 0x46: case 0x4A: ++ case 0x70: + break; + default: + return False; +@@ -1971,6 +1972,86 @@ void istri_14 ( void ) + + ////////////////////////////////////////////////////////// + // // ++// ISTRI_70 // ++// // ++////////////////////////////////////////////////////////// ++ ++UInt h_pcmpistri_70 ( V128* argL, V128* argR ) ++{ ++ V128 block[2]; ++ memcpy(&block[0], argL, sizeof(V128)); ++ memcpy(&block[1], argR, sizeof(V128)); ++ ULong res, flags; ++ __asm__ __volatile__( ++ "subq $1024, %%rsp" "\n\t" ++ "movdqu 0(%2), %%xmm2" "\n\t" ++ "movdqu 16(%2), %%xmm11" "\n\t" ++ "pcmpistri $0x70, %%xmm2, %%xmm11" "\n\t" ++ "pushfq" "\n\t" ++ "popq %%rdx" "\n\t" ++ "movq %%rcx, %0" "\n\t" ++ "movq %%rdx, %1" "\n\t" ++ "addq $1024, %%rsp" "\n\t" ++ : /*out*/ "=r"(res), "=r"(flags) : "r"/*in*/(&block[0]) ++ : "rcx","rdx","xmm0","xmm2","xmm11","cc","memory" ++ ); ++ return ((flags & 0x8D5) << 16) | (res & 0xFFFF); ++} ++ ++UInt s_pcmpistri_70 ( V128* argLU, V128* argRU ) ++{ ++ V128 resV; ++ UInt resOSZACP, resECX; ++ Bool ok ++ = pcmpXstrX_WRK( &resV, &resOSZACP, argLU, argRU, ++ zmask_from_V128(argLU), ++ zmask_from_V128(argRU), ++ 0x70, False/*!isSTRM*/ ++ ); ++ assert(ok); ++ resECX = resV.uInt[0]; ++ return (resOSZACP << 16) | resECX; ++} ++ ++void istri_70 ( void ) ++{ ++ char* wot = "70"; ++ UInt(*h)(V128*,V128*) = h_pcmpistri_70; ++ UInt(*s)(V128*,V128*) = s_pcmpistri_70; ++ ++ try_istri(wot,h,s, "abcdacbdabcdabcd", "000000000000000a"); ++ try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000000b"); ++ try_istri(wot,h,s, "abcdabcdabcdabcd", "00000000000000ab"); ++ try_istri(wot,h,s, "abcdabc0abcdabcd", "000000000000abcd"); ++ ++ try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000abcd"); ++ try_istri(wot,h,s, "0bcdabcdabcdabcd", "000000000000abcd"); ++ try_istri(wot,h,s, "abcdabcdabcda0cd", "000000000000abcd"); ++ try_istri(wot,h,s, "abcdabcdabcdab0d", "000000000000abcd"); ++ try_istri(wot,h,s, "abcdabcdabcdabc0", "000000000000abcd"); ++ ++ try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000abcd"); ++ try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000a0cd"); ++ try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000ab0d"); ++ try_istri(wot,h,s, "abcdabcdabcdabcd", "000000000000abc0"); ++ ++ try_istri(wot,h,s, "0000000000000000", "0000000000000000"); ++ try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); ++ ++ try_istri(wot,h,s, "0000abcdabcdabcd", "000000000000abcd"); ++ try_istri(wot,h,s, "0000abcdabcdabcd", "000000000000dcba"); ++ try_istri(wot,h,s, "0000abcdabcdabcd", "000000000000bbbb"); ++ try_istri(wot,h,s, "0000abcdabcdabcd", "000000000000baba"); ++ ++ try_istri(wot,h,s, "0000abcdabcdabcd", "00000000000baba0"); ++ ++ try_istri(wot,h,s, "0ddc0ffeebadf00d", "00000000cafebabe"); ++ try_istri(wot,h,s, "0ddc0ffeebadfeed", "00000000cafebabe"); ++} ++ ++ ++////////////////////////////////////////////////////////// ++// // + // main // + // // + ////////////////////////////////////////////////////////// +@@ -1995,5 +2076,6 @@ int main ( void ) + istri_0E(); + istri_14(); + istri_34(); ++ istri_70(); + return 0; + } +diff --git a/none/tests/amd64/pcmpstr64.stdout.exp b/none/tests/amd64/pcmpstr64.stdout.exp +index 4921586..55d7fe0 100644 +--- a/none/tests/amd64/pcmpstr64.stdout.exp ++++ b/none/tests/amd64/pcmpstr64.stdout.exp +@@ -458,3 +458,25 @@ istri 34 163887ec041a9b72 fcd75adb9b3e895a -> 08410000 08410000 + istri 34 fc937cbfbf53f8e2 0d136bcb024d3fb7 -> 08810000 08810000 + istri 34 2ca34182c29a82ab 302ebd646775ab54 -> 08810000 08810000 + istri 34 3f2987608c11be6f a9ecb661f8e0a8cb -> 08c10000 08c10000 ++istri 70 abcdacbdabcdabcd 000000000000000a -> 0881000e 0881000e ++istri 70 abcdabcdabcdabcd 000000000000000b -> 0881000f 0881000f ++istri 70 abcdabcdabcdabcd 00000000000000ab -> 0881000d 0881000d ++istri 70 abcdabc0abcdabcd 000000000000abcd -> 00c00010 00c00010 ++istri 70 abcdabcdabcdabcd 000000000000abcd -> 00800010 00800010 ++istri 70 0bcdabcdabcdabcd 000000000000abcd -> 00c00010 00c00010 ++istri 70 abcdabcdabcda0cd 000000000000abcd -> 00c00010 00c00010 ++istri 70 abcdabcdabcdab0d 000000000000abcd -> 00c00010 00c00010 ++istri 70 abcdabcdabcdabc0 000000000000abcd -> 00c00010 00c00010 ++istri 70 abcdabcdabcdabcd 000000000000abcd -> 00800010 00800010 ++istri 70 abcdabcdabcdabcd 000000000000a0cd -> 0081000f 0081000f ++istri 70 abcdabcdabcdabcd 000000000000ab0d -> 0081000f 0081000f ++istri 70 abcdabcdabcdabcd 000000000000abc0 -> 0881000f 0881000f ++istri 70 0000000000000000 0000000000000000 -> 00c00010 00c00010 ++istri 70 aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00000010 00000010 ++istri 70 0000abcdabcdabcd 000000000000abcd -> 00c00010 00c00010 ++istri 70 0000abcdabcdabcd 000000000000dcba -> 00c00010 00c00010 ++istri 70 0000abcdabcdabcd 000000000000bbbb -> 08c1000b 08c1000b ++istri 70 0000abcdabcdabcd 000000000000baba -> 08c10009 08c10009 ++istri 70 0000abcdabcdabcd 00000000000baba0 -> 08c1000b 08c1000b ++istri 70 0ddc0ffeebadf00d 00000000cafebabe -> 08c10000 08c10000 ++istri 70 0ddc0ffeebadfeed 00000000cafebabe -> 08c10004 08c10004 +diff --git a/none/tests/amd64/pcmpstr64w.c b/none/tests/amd64/pcmpstr64w.c +index 858cfd8..6a1adad 100644 +--- a/none/tests/amd64/pcmpstr64w.c ++++ b/none/tests/amd64/pcmpstr64w.c +@@ -209,7 +209,7 @@ Bool pcmpXstrX_WRK_wide ( /*OUT*/V128* resV, + unvalidated cases in the code base. */ + switch (imm8) { + case 0x01: case 0x03: case 0x09: case 0x0B: case 0x0D: +- case 0x13: case 0x1B: ++ case 0x13: case 0x19: case 0x1B: + case 0x39: case 0x3B: + case 0x45: case 0x4B: + break; +@@ -1255,6 +1255,99 @@ void istri_39 ( void ) + + ////////////////////////////////////////////////////////// + // // ++// ISTRI_19 // ++// // ++////////////////////////////////////////////////////////// ++ ++UInt h_pcmpistri_19 ( V128* argL, V128* argR ) ++{ ++ V128 block[2]; ++ memcpy(&block[0], argL, sizeof(V128)); ++ memcpy(&block[1], argR, sizeof(V128)); ++ ULong res, flags; ++ __asm__ __volatile__( ++ "subq $1024, %%rsp" "\n\t" ++ "movdqu 0(%2), %%xmm2" "\n\t" ++ "movdqu 16(%2), %%xmm11" "\n\t" ++ "pcmpistri $0x19, %%xmm2, %%xmm11" "\n\t" ++ "pushfq" "\n\t" ++ "popq %%rdx" "\n\t" ++ "movq %%rcx, %0" "\n\t" ++ "movq %%rdx, %1" "\n\t" ++ "addq $1024, %%rsp" "\n\t" ++ : /*out*/ "=r"(res), "=r"(flags) : "r"/*in*/(&block[0]) ++ : "rcx","rdx","xmm0","xmm2","xmm11","cc","memory" ++ ); ++ return ((flags & 0x8D5) << 16) | (res & 0xFFFF); ++} ++ ++UInt s_pcmpistri_19 ( V128* argLU, V128* argRU ) ++{ ++ V128 resV; ++ UInt resOSZACP, resECX; ++ Bool ok ++ = pcmpXstrX_WRK_wide( &resV, &resOSZACP, argLU, argRU, ++ zmask_from_V128(argLU), ++ zmask_from_V128(argRU), ++ 0x19, False/*!isSTRM*/ ++ ); ++ assert(ok); ++ resECX = resV.uInt[0]; ++ return (resOSZACP << 16) | resECX; ++} ++ ++void istri_19 ( void ) ++{ ++ char* wot = "19"; ++ UInt(*h)(V128*,V128*) = h_pcmpistri_19; ++ UInt(*s)(V128*,V128*) = s_pcmpistri_19; ++ ++ try_istri(wot,h,s, "0000000000000000", "0000000000000000"); ++ ++ try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); ++ try_istri(wot,h,s, "aaaa2aaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); ++ try_istri(wot,h,s, "aaaaaaaaa2aaaaaa", "aaaaaaaaaaaaaaaa"); ++ try_istri(wot,h,s, "aaaaaaaaaaaaa2aa", "aaaaaaaaaaaaaaaa"); ++ ++ try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaa2aaaaaaaaaaa"); ++ try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaa2aaaaaa"); ++ try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaa2a"); ++ ++ try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); ++ try_istri(wot,h,s, "baaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); ++ try_istri(wot,h,s, "b9aaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); ++ try_istri(wot,h,s, "b9baaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); ++ ++ try_istri(wot,h,s, "b9baaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); ++ try_istri(wot,h,s, "b9baaaaaaaaaaaaa", "aaaaaaaaaaaa7aaa"); ++ try_istri(wot,h,s, "b9baaaaaaaaaaaaa", "aaaaaaaa2aaa4aaa"); ++ ++ try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaa"); ++ ++ try_istri(wot,h,s, "aaaaaaaaaaaa00aa", "aaaaaaaaaaaaaaaa"); ++ try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaa00aa"); ++ try_istri(wot,h,s, "aaaaaaaaaaaa00aa", "aaaaaaaaaaaa00aa"); ++ ++ try_istri(wot,h,s, "aaaaaaaa00aaaaaa", "aaaaaaaaaaaaaaaa"); ++ try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaa00aa"); ++ try_istri(wot,h,s, "aaaaaaaa00aaaaaa", "aaaaaaaaaaaa00aa"); ++ ++ try_istri(wot,h,s, "aaaaaaaaaaaa00aa", "aaaaaaaaaaaaaaaa"); ++ try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "aaaaaaaa00aaaaaa"); ++ try_istri(wot,h,s, "aaaaaaaaaaaa00aa", "aaaaaaaa00aaaaaa"); ++ ++ try_istri(wot,h,s, "0000000000000000", "aaaaaaaa00aaaaaa"); ++ try_istri(wot,h,s, "8000000000000000", "aaaaaaaa00aaaaaa"); ++ try_istri(wot,h,s, "0000000000000001", "aaaaaaaa00aaaaaa"); ++ ++ try_istri(wot,h,s, "0000000000000000", "aaaaaaaaaaaaaaaa"); ++ try_istri(wot,h,s, "aaaaaaaaaaaaaaaa", "0000000000000000"); ++} ++ ++ ++ ++////////////////////////////////////////////////////////// ++// // + // main // + // // + ////////////////////////////////////////////////////////// +@@ -1271,5 +1364,6 @@ int main ( void ) + istri_45(); + istri_01(); + istri_39(); ++ istri_19(); + return 0; + } +diff --git a/none/tests/amd64/pcmpstr64w.stdout.exp b/none/tests/amd64/pcmpstr64w.stdout.exp +index 77d555d..c18184c 100644 +--- a/none/tests/amd64/pcmpstr64w.stdout.exp ++++ b/none/tests/amd64/pcmpstr64w.stdout.exp +@@ -258,3 +258,33 @@ istri 39 8000000000000000 aaaaaaaa00aaaaaa -> 00c10003 00c10003 + istri 39 0000000000000001 aaaaaaaa00aaaaaa -> 08c10000 08c10000 + istri 39 0000000000000000 aaaaaaaaaaaaaaaa -> 00400008 00400008 + istri 39 aaaaaaaaaaaaaaaa 0000000000000000 -> 08810000 08810000 ++istri 19 0000000000000000 0000000000000000 -> 00c00008 00c00008 ++istri 19 aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00000008 00000008 ++istri 19 aaaa2aaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00010005 00010005 ++istri 19 aaaaaaaaa2aaaaaa aaaaaaaaaaaaaaaa -> 00010003 00010003 ++istri 19 aaaaaaaaaaaaa2aa aaaaaaaaaaaaaaaa -> 00010001 00010001 ++istri 19 aaaaaaaaaaaaaaaa aaaa2aaaaaaaaaaa -> 00010005 00010005 ++istri 19 aaaaaaaaaaaaaaaa aaaaaaaaa2aaaaaa -> 00010003 00010003 ++istri 19 aaaaaaaaaaaaaaaa aaaaaaaaaaaaaa2a -> 08010000 08010000 ++istri 19 aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00000008 00000008 ++istri 19 baaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00010007 00010007 ++istri 19 b9aaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00010007 00010007 ++istri 19 b9baaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00010006 00010006 ++istri 19 b9baaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00010006 00010006 ++istri 19 b9baaaaaaaaaaaaa aaaaaaaaaaaa7aaa -> 00010001 00010001 ++istri 19 b9baaaaaaaaaaaaa aaaaaaaa2aaa4aaa -> 00010001 00010001 ++istri 19 aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa -> 00000008 00000008 ++istri 19 aaaaaaaaaaaa00aa aaaaaaaaaaaaaaaa -> 00410001 00410001 ++istri 19 aaaaaaaaaaaaaaaa aaaaaaaaaaaa00aa -> 00810001 00810001 ++istri 19 aaaaaaaaaaaa00aa aaaaaaaaaaaa00aa -> 00c00008 00c00008 ++istri 19 aaaaaaaa00aaaaaa aaaaaaaaaaaaaaaa -> 00410003 00410003 ++istri 19 aaaaaaaaaaaaaaaa aaaaaaaaaaaa00aa -> 00810001 00810001 ++istri 19 aaaaaaaa00aaaaaa aaaaaaaaaaaa00aa -> 00c10001 00c10001 ++istri 19 aaaaaaaaaaaa00aa aaaaaaaaaaaaaaaa -> 00410001 00410001 ++istri 19 aaaaaaaaaaaaaaaa aaaaaaaa00aaaaaa -> 00810003 00810003 ++istri 19 aaaaaaaaaaaa00aa aaaaaaaa00aaaaaa -> 00c10001 00c10001 ++istri 19 0000000000000000 aaaaaaaa00aaaaaa -> 08c10000 08c10000 ++istri 19 8000000000000000 aaaaaaaa00aaaaaa -> 08c10000 08c10000 ++istri 19 0000000000000001 aaaaaaaa00aaaaaa -> 08c10000 08c10000 ++istri 19 0000000000000000 aaaaaaaaaaaaaaaa -> 08410000 08410000 ++istri 19 aaaaaaaaaaaaaaaa 0000000000000000 -> 08810000 08810000 diff --git a/SOURCES/valgrind-3.11.0-ppc-bcd-addsub.patch b/SOURCES/valgrind-3.11.0-ppc-bcd-addsub.patch new file mode 100644 index 0000000..04f45f6 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-ppc-bcd-addsub.patch @@ -0,0 +1,383 @@ +Fix without v-bit test program changes which changed too much since 3.11.0. + +commit 568f3ab3f7a4c074fe9ce6f4f395fb25b6fa375b +Author: carll +Date: Tue Apr 26 19:52:56 2016 +0000 + + Power PC Fix V bit error in 128-bit BCD add and subtract instructions + + The original code was using the bcdadd / bcdsub instruction on the operand + shadow bits to calculate the shadow bits for the result. This introduced + non-zero bits shadow bits in the result. The shadow bits for these + instructions should be set to all valid or all invalid. If one of the + argument shadow bits was one, then all of the shadow bits of the result should + be one. Otherwise the result shadow bits should be zero. + + This patch fixes the above bug in memcheck/mc_translate.c + + Fixing the above bug broke the v-bit test. The issue is the v-bit tester + assumes the shadow bits for the operands of a given Iop can be set to one + for testing purposes. The implementation of the bcdadd and bcdsub was passing + a constant value for the variable ps. The ps value is an argument to the + instruction that specifies how to set the sign code of the result. The + implementation of the instructions was changed to issue the instruction with + ps=0. Then the result of the instruction is updated in the VEX code if ps=1. + This changed also results in cleaning up the vbit test code. + + This patch also fixes the issues with the v-bit test program. + + Bugzilla 360035 + + + git-svn-id: svn://svn.valgrind.org/vex/trunk@3218 8f6e269a-dfd6-0310-a8e1-e2731360e62c + +diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c +index 034a766..44304df 100644 +--- a/VEX/priv/guest_ppc_toIR.c ++++ b/VEX/priv/guest_ppc_toIR.c +@@ -21297,6 +21297,43 @@ static Bool dis_av_quad ( UInt theInstr ) + return True; + } + ++static IRExpr * bcd_sign_code_adjust( UInt ps, IRExpr * tmp) ++{ ++ /* The Iop_BCDAdd and Iop_BCDSub will result in the corresponding Power PC ++ * instruction being issued with ps = 0. If ps = 1, the sign code, which ++ * is in the least significant four bits of the result, needs to be updated ++ * per the ISA: ++ * ++ * If PS=0, the sign code of the result is set to 0b1100. ++ * If PS=1, the sign code of the result is set to 0b1111. ++ * ++ * Note, the ps value is NOT being passed down to the instruction issue ++ * because passing a constant via triop() breaks the vbit-test test. The ++ * vbit-tester assumes it can set non-zero shadow bits for the triop() ++ * arguments. Thus they have to be expressions not a constant. ++ */ ++ IRTemp mask = newTemp(Ity_I64); ++ IRExpr *rtn; ++ ++ if ( ps == 0 ) { ++ /* sign code is correct, just return it. */ ++ rtn = tmp; ++ ++ } else { ++ /* check if lower four bits are 0b1100, if so, change to 0b1111 */ ++ assign( mask, unop( Iop_1Sto64, ++ binop( Iop_CmpEQ64, mkU64( 0xC ), ++ binop( Iop_And64, mkU64( 0xF ), ++ unop( Iop_V128to64, tmp ) ) ) ) ); ++ rtn = binop( Iop_64HLtoV128, ++ unop( Iop_V128HIto64, tmp ), ++ binop( Iop_Or64, ++ binop( Iop_And64, mkU64( 0xF ), mkexpr( mask ) ), ++ unop( Iop_V128to64, tmp ) ) ); ++ } ++ ++ return rtn; ++} + + /* + AltiVec BCD Arithmetic instructions. +@@ -21329,15 +21366,19 @@ static Bool dis_av_bcd ( UInt theInstr ) + switch (opc2) { + case 0x1: // bcdadd + DIP("bcdadd. v%d,v%d,v%d,%u\n", vRT_addr, vRA_addr, vRB_addr, ps); +- assign( dst, triop( Iop_BCDAdd, mkexpr( vA ), +- mkexpr( vB ), mkU8( ps ) ) ); ++ assign( dst, bcd_sign_code_adjust( ps, ++ binop( Iop_BCDAdd, ++ mkexpr( vA ), ++ mkexpr( vB ) ) ) ); + putVReg( vRT_addr, mkexpr(dst)); + return True; + + case 0x41: // bcdsub + DIP("bcdsub. v%d,v%d,v%d,%u\n", vRT_addr, vRA_addr, vRB_addr, ps); +- assign( dst, triop( Iop_BCDSub, mkexpr( vA ), +- mkexpr( vB ), mkU8( ps ) ) ); ++ assign( dst, bcd_sign_code_adjust( ps, ++ binop( Iop_BCDSub, ++ mkexpr( vA ), ++ mkexpr( vB ) ) ) ); + putVReg( vRT_addr, mkexpr(dst)); + return True; + +diff --git a/VEX/priv/host_ppc_defs.c b/VEX/priv/host_ppc_defs.c +index 13b193c..06487b5 100644 +--- a/VEX/priv/host_ppc_defs.c ++++ b/VEX/priv/host_ppc_defs.c +@@ -1415,15 +1415,14 @@ PPCInstr* PPCInstr_AvHashV128Binary ( PPCAvOp op, HReg dst, + i->Pin.AvHashV128Binary.s_field = s_field; + return i; + } +-PPCInstr* PPCInstr_AvBCDV128Trinary ( PPCAvOp op, HReg dst, +- HReg src1, HReg src2, PPCRI* ps ) { ++PPCInstr* PPCInstr_AvBCDV128Binary ( PPCAvOp op, HReg dst, ++ HReg src1, HReg src2 ) { + PPCInstr* i = LibVEX_Alloc_inline(sizeof(PPCInstr)); +- i->tag = Pin_AvBCDV128Trinary; +- i->Pin.AvBCDV128Trinary.op = op; +- i->Pin.AvBCDV128Trinary.dst = dst; +- i->Pin.AvBCDV128Trinary.src1 = src1; +- i->Pin.AvBCDV128Trinary.src2 = src2; +- i->Pin.AvBCDV128Trinary.ps = ps; ++ i->tag = Pin_AvBCDV128Binary; ++ i->Pin.AvBCDV128Binary.op = op; ++ i->Pin.AvBCDV128Binary.dst = dst; ++ i->Pin.AvBCDV128Binary.src1 = src1; ++ i->Pin.AvBCDV128Binary.src2 = src2; + return i; + } + +@@ -2038,15 +2037,13 @@ void ppPPCInstr ( const PPCInstr* i, Bool mode64 ) + ppPPCRI(i->Pin.AvHashV128Binary.s_field); + return; + +- case Pin_AvBCDV128Trinary: +- vex_printf("%s(w) ", showPPCAvOp(i->Pin.AvBCDV128Trinary.op)); +- ppHRegPPC(i->Pin.AvBCDV128Trinary.dst); ++ case Pin_AvBCDV128Binary: ++ vex_printf("%s(w) ", showPPCAvOp(i->Pin.AvBCDV128Binary.op)); ++ ppHRegPPC(i->Pin.AvBCDV128Binary.dst); + vex_printf(","); +- ppHRegPPC(i->Pin.AvBCDV128Trinary.src1); ++ ppHRegPPC(i->Pin.AvBCDV128Binary.src1); + vex_printf(","); +- ppHRegPPC(i->Pin.AvBCDV128Trinary.src2); +- vex_printf(","); +- ppPPCRI(i->Pin.AvBCDV128Trinary.ps); ++ ppHRegPPC(i->Pin.AvBCDV128Binary.src2); + return; + + case Pin_Dfp64Unary: +@@ -2511,11 +2508,10 @@ void getRegUsage_PPCInstr ( HRegUsage* u, const PPCInstr* i, Bool mode64 ) + addHRegUse(u, HRmRead, i->Pin.AvHashV128Binary.src); + addRegUsage_PPCRI(u, i->Pin.AvHashV128Binary.s_field); + return; +- case Pin_AvBCDV128Trinary: +- addHRegUse(u, HRmWrite, i->Pin.AvBCDV128Trinary.dst); +- addHRegUse(u, HRmRead, i->Pin.AvBCDV128Trinary.src1); +- addHRegUse(u, HRmRead, i->Pin.AvBCDV128Trinary.src2); +- addRegUsage_PPCRI(u, i->Pin.AvBCDV128Trinary.ps); ++ case Pin_AvBCDV128Binary: ++ addHRegUse(u, HRmWrite, i->Pin.AvBCDV128Binary.dst); ++ addHRegUse(u, HRmRead, i->Pin.AvBCDV128Binary.src1); ++ addHRegUse(u, HRmRead, i->Pin.AvBCDV128Binary.src2); + return; + case Pin_Dfp64Unary: + addHRegUse(u, HRmWrite, i->Pin.Dfp64Unary.dst); +@@ -2844,11 +2840,10 @@ void mapRegs_PPCInstr ( HRegRemap* m, PPCInstr* i, Bool mode64 ) + mapReg(m, &i->Pin.AvHashV128Binary.dst); + mapReg(m, &i->Pin.AvHashV128Binary.src); + return; +- case Pin_AvBCDV128Trinary: +- mapReg(m, &i->Pin.AvBCDV128Trinary.dst); +- mapReg(m, &i->Pin.AvBCDV128Trinary.src1); +- mapReg(m, &i->Pin.AvBCDV128Trinary.src2); +- mapRegs_PPCRI(m, i->Pin.AvBCDV128Trinary.ps); ++ case Pin_AvBCDV128Binary: ++ mapReg(m, &i->Pin.AvBCDV128Binary.dst); ++ mapReg(m, &i->Pin.AvBCDV128Binary.src1); ++ mapReg(m, &i->Pin.AvBCDV128Binary.src2); + return; + case Pin_Dfp64Unary: + mapReg(m, &i->Pin.Dfp64Unary.dst); +@@ -5104,20 +5099,22 @@ Int emit_PPCInstr ( /*MB_MOD*/Bool* is_profInc, + p = mkFormVX( p, 4, v_dst, v_src, s_field->Pri.Imm, opc2, endness_host ); + goto done; + } +- case Pin_AvBCDV128Trinary: { +- UInt v_dst = vregEnc(i->Pin.AvBCDV128Trinary.dst); +- UInt v_src1 = vregEnc(i->Pin.AvBCDV128Trinary.src1); +- UInt v_src2 = vregEnc(i->Pin.AvBCDV128Trinary.src2); +- PPCRI* ps = i->Pin.AvBCDV128Trinary.ps; ++ case Pin_AvBCDV128Binary: { ++ UInt v_dst = vregEnc(i->Pin.AvBCDV128Binary.dst); ++ UInt v_src1 = vregEnc(i->Pin.AvBCDV128Binary.src1); ++ UInt v_src2 = vregEnc(i->Pin.AvBCDV128Binary.src2); ++ UInt ps = 0; /* Issue the instruction with ps=0. The IR code will ++ * fix up the result if ps=1. ++ */ + UInt opc2; +- switch (i->Pin.AvBCDV128Trinary.op) { ++ switch (i->Pin.AvBCDV128Binary.op) { + case Pav_BCDAdd: opc2 = 1; break; // bcdadd + case Pav_BCDSub: opc2 = 65; break; // bcdsub + default: + goto bad; + } + p = mkFormVXR( p, 4, v_dst, v_src1, v_src2, +- 0x1, (ps->Pri.Imm << 9) | opc2, endness_host ); ++ 0x1, ps | opc2, endness_host ); + goto done; + } + case Pin_AvBin32Fx4: { +diff --git a/VEX/priv/host_ppc_defs.h b/VEX/priv/host_ppc_defs.h +index c04c994..0b1939d 100644 +--- a/VEX/priv/host_ppc_defs.h ++++ b/VEX/priv/host_ppc_defs.h +@@ -499,7 +499,7 @@ typedef + Pin_AvCipherV128Unary, /* AV Vector unary Cipher */ + Pin_AvCipherV128Binary, /* AV Vector binary Cipher */ + Pin_AvHashV128Binary, /* AV Vector binary Hash */ +- Pin_AvBCDV128Trinary, /* BCD Arithmetic */ ++ Pin_AvBCDV128Binary, /* BCD Arithmetic */ + Pin_Dfp64Unary, /* DFP64 unary op */ + Pin_Dfp128Unary, /* DFP128 unary op */ + Pin_DfpShift, /* Decimal floating point shift by immediate value */ +@@ -867,8 +867,7 @@ typedef + HReg dst; + HReg src1; + HReg src2; +- PPCRI* ps; +- } AvBCDV128Trinary; ++ } AvBCDV128Binary; + struct { + PPCAvOp op; + HReg dst; +@@ -1063,9 +1062,8 @@ extern PPCInstr* PPCInstr_AvCipherV128Binary ( PPCAvOp op, HReg dst, + HReg srcL, HReg srcR ); + extern PPCInstr* PPCInstr_AvHashV128Binary ( PPCAvOp op, HReg dst, + HReg src, PPCRI* s_field ); +-extern PPCInstr* PPCInstr_AvBCDV128Trinary ( PPCAvOp op, HReg dst, +- HReg src1, HReg src2, +- PPCRI* ps ); ++extern PPCInstr* PPCInstr_AvBCDV128Binary ( PPCAvOp op, HReg dst, ++ HReg src1, HReg src2 ); + extern PPCInstr* PPCInstr_Dfp64Unary ( PPCFpOp op, HReg dst, HReg src ); + extern PPCInstr* PPCInstr_Dfp64Binary ( PPCFpOp op, HReg dst, HReg srcL, + HReg srcR ); +diff --git a/VEX/priv/host_ppc_isel.c b/VEX/priv/host_ppc_isel.c +index 11a9943..5a701ed 100644 +--- a/VEX/priv/host_ppc_isel.c ++++ b/VEX/priv/host_ppc_isel.c +@@ -5392,25 +5392,25 @@ static HReg iselVecExpr_wrk ( ISelEnv* env, IRExpr* e, IREndness IEndianess ) + addInstr(env, PPCInstr_AvHashV128Binary(op, dst, arg1, s_field)); + return dst; + } +- default: +- break; +- } /* switch (e->Iex.Binop.op) */ +- } /* if (e->tag == Iex_Binop) */ + +- if (e->tag == Iex_Triop) { +- IRTriop *triop = e->Iex.Triop.details; +- switch (triop->op) { + case Iop_BCDAdd:op = Pav_BCDAdd; goto do_AvBCDV128; + case Iop_BCDSub:op = Pav_BCDSub; goto do_AvBCDV128; + do_AvBCDV128: { +- HReg arg1 = iselVecExpr(env, triop->arg1, IEndianess); +- HReg arg2 = iselVecExpr(env, triop->arg2, IEndianess); ++ HReg arg1 = iselVecExpr(env, e->Iex.Binop.arg1, IEndianess); ++ HReg arg2 = iselVecExpr(env, e->Iex.Binop.arg2, IEndianess); + HReg dst = newVRegV(env); +- PPCRI* ps = iselWordExpr_RI(env, triop->arg3, IEndianess); +- addInstr(env, PPCInstr_AvBCDV128Trinary(op, dst, arg1, arg2, ps)); ++ addInstr(env, PPCInstr_AvBCDV128Binary(op, dst, arg1, arg2)); + return dst; + } + ++ default: ++ break; ++ } /* switch (e->Iex.Binop.op) */ ++ } /* if (e->tag == Iex_Binop) */ ++ ++ if (e->tag == Iex_Triop) { ++ IRTriop *triop = e->Iex.Triop.details; ++ switch (triop->op) { + case Iop_Add32Fx4: fpop = Pavfp_ADDF; goto do_32Fx4_with_rm; + case Iop_Sub32Fx4: fpop = Pavfp_SUBF; goto do_32Fx4_with_rm; + case Iop_Mul32Fx4: fpop = Pavfp_MULF; goto do_32Fx4_with_rm; +diff --git a/VEX/priv/ir_defs.c b/VEX/priv/ir_defs.c +index 4a7b770..8fdfcab 100644 +--- a/VEX/priv/ir_defs.c ++++ b/VEX/priv/ir_defs.c +@@ -3122,7 +3122,8 @@ void typeOfPrimop ( IROp op, + + case Iop_BCDAdd: + case Iop_BCDSub: +- TERNARY(Ity_V128,Ity_V128, Ity_I8, Ity_V128); ++ BINARY(Ity_V128, Ity_V128, Ity_V128); ++ + case Iop_QDMull16Sx4: case Iop_QDMull32Sx2: + BINARY(Ity_I64, Ity_I64, Ity_V128); + +commit c8da12c274b2d94c42c07676139378b57fa7b31b +Author: carll +Date: Tue Apr 26 19:53:56 2016 +0000 + + Power PC Fix V bit error in 128-bit BCD add and subtract instructions + + The original code was using the bcdadd / bcdsub instruction on the operand + shadow bits to calculate the shadow bits for the result. This introduced + non-zero bits shadow bits in the result. The shadow bits for these + instructions should be set to all valid or all invalid. If one of the + argument shadow bits was one, then all of the shadow bits of the result should + be one. Otherwise the result shadow bits should be zero. + + This patch fixes the above bug in memcheck/mc_translate.c + + Fixing the above bug broke the v-bit test. The issue is the v-bit tester + assumes the shadow bits for the operands of a given Iop can be set to one + for testing purposes. The implementation of the bcdadd and bcdsub was passing + a constant value for the variable ps. The ps value is an argument to the + instruction that specifies how to set the sign code of the result. The + implementation of the instructions was changed to issue the instruction with + ps=0. Then the result of the instruction is updated in the VEX code if ps=1. + This changed also results in cleaning up the vbit test code. + + This patch also fixes the issues with the v-bit test program. + + Valgrind commit 3218 + + Bugzilla 360035 + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15871 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c +index c239e46..d50b53d 100644 +--- a/memcheck/mc_translate.c ++++ b/memcheck/mc_translate.c +@@ -852,6 +852,17 @@ static IRAtom* mkPCastTo( MCEnv* mce, IRType dst_ty, IRAtom* vbits ) + unop(Iop_CmpNEZ64, tmp4)); + break; + } ++ case Ity_V128: { ++ /* Chop it in half, OR the halves together, and compare that ++ * with zero. ++ */ ++ IRAtom* tmp2 = assignNew('V', mce, Ity_I64, unop(Iop_V128HIto64, vbits)); ++ IRAtom* tmp3 = assignNew('V', mce, Ity_I64, unop(Iop_V128to64, vbits)); ++ IRAtom* tmp4 = assignNew('V', mce, Ity_I64, binop(Iop_Or64, tmp2, tmp3)); ++ tmp1 = assignNew('V', mce, Ity_I1, ++ unop(Iop_CmpNEZ64, tmp4)); ++ break; ++ } + default: + ppIRType(src_ty); + VG_(tool_panic)("mkPCastTo(1)"); +@@ -2888,11 +2899,6 @@ IRAtom* expr2vbits_Triop ( MCEnv* mce, + case Iop_SetElem32x2: + complainIfUndefined(mce, atom2, NULL); + return assignNew('V', mce, Ity_I64, triop(op, vatom1, atom2, vatom3)); +- /* BCDIops */ +- case Iop_BCDAdd: +- case Iop_BCDSub: +- complainIfUndefined(mce, atom3, NULL); +- return assignNew('V', mce, Ity_V128, triop(op, vatom1, vatom2, atom3)); + + /* Vector FP with rounding mode as the first arg */ + case Iop_Add64Fx2: +@@ -3723,6 +3729,10 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce, + complainIfUndefined(mce, atom2, NULL); + return assignNew('V', mce, Ity_V128, binop(op, vatom1, atom2)); + ++ case Iop_BCDAdd: ++ case Iop_BCDSub: ++ return mkLazy2(mce, Ity_V128, vatom1, vatom2); ++ + /* SHA Iops */ + case Iop_SHA256: + case Iop_SHA512: diff --git a/SOURCES/valgrind-3.11.0-ppc-fppo.patch b/SOURCES/valgrind-3.11.0-ppc-fppo.patch new file mode 100644 index 0000000..8890e6b --- /dev/null +++ b/SOURCES/valgrind-3.11.0-ppc-fppo.patch @@ -0,0 +1,37 @@ +--- valgrind-3.10.0.BETA1/configure.orig 2014-09-02 13:49:58.125269536 +0200 ++++ valgrind-3.10.0.BETA1/configure 2014-09-02 13:54:08.188701144 +0200 +@@ -8978,9 +8978,8 @@ + fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test x$ac_have_as_ppc_fpPO = xyes ; then +- +-$as_echo "#define HAVE_AS_PPC_FPPO 1" >>confdefs.h +- ++ { $as_echo "$as_me:${as_lineno-$LINENO}: HAVE_AS_PPC_FPPO found, but ignoring." >&5 ++$as_echo "$as_me: HAVE_AS_PPC_FPPO found, but ignoring." >&6;} + fi + + +--- valgrind-3.11.0/config.h.in.orig 2016-04-15 23:51:26.889440687 +0200 ++++ valgrind-3.11.0/config.h.in 2016-04-15 23:51:43.430126014 +0200 +@@ -55,9 +55,6 @@ + /* Define to 1 if as supports fxsave64/fxrstor64. */ + #undef HAVE_AS_AMD64_FXSAVE64 + +-/* Define to 1 if as supports floating point phased out category. */ +-#undef HAVE_AS_PPC_FPPO +- + /* Define to 1 if as supports mtocrf/mfocrf. */ + #undef HAVE_AS_PPC_MFTOCRF + +--- valgrind-3.10.0.BETA1/configure.ac.orig 2014-09-02 14:01:04.443754937 +0200 ++++ valgrind-3.10.0.BETA1/configure.ac 2014-09-02 14:01:16.483727639 +0200 +@@ -2022,7 +2022,7 @@ + AC_MSG_RESULT([no]) + ]) + if test x$ac_have_as_ppc_fpPO = xyes ; then +- AC_DEFINE(HAVE_AS_PPC_FPPO, 1, [Define to 1 if as supports floating point phased out category.]) ++ AC_MSG_NOTICE([HAVE_AS_PPC_FPPO found, but ignoring.]) + fi + + diff --git a/SOURCES/valgrind-3.11.0-ppc64-128bit-mod-carry.patch b/SOURCES/valgrind-3.11.0-ppc64-128bit-mod-carry.patch new file mode 100644 index 0000000..3d986e5 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-ppc64-128bit-mod-carry.patch @@ -0,0 +1,1923 @@ +commit e92c94c87913d9c257d1577493fdfd6b346b1a67 +Author: carll +Date: Tue Feb 16 21:20:24 2016 +0000 + + 128bit modulo and carry instruction fix + + This patch fixes an issue with caculating the carry to the next 32-bit + chunk for the 128-bit add and subract instructions: vaddcuq, vadduqm, + vsubcuq, vsubuqm, vaddecuq, vaddeuqm, vsubecuq, vsubeuqm + + Valgrind Bugzilla 359472 + + + git-svn-id: svn://svn.valgrind.org/vex/trunk@3209 8f6e269a-dfd6-0310-a8e1-e2731360e62c + +diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c +index 6a0b6d8..21a0692 100644 +--- a/VEX/priv/guest_ppc_toIR.c ++++ b/VEX/priv/guest_ppc_toIR.c +@@ -17968,6 +17968,7 @@ static IRTemp _get_quad_modulo_or_carry(IRExpr * vecA, IRExpr * vecB, + IRTemp _vecA_32 = IRTemp_INVALID; + IRTemp _vecB_32 = IRTemp_INVALID; + IRTemp res_32 = IRTemp_INVALID; ++ IRTemp res_64 = IRTemp_INVALID; + IRTemp result = IRTemp_INVALID; + IRTemp tmp_result = IRTemp_INVALID; + IRTemp carry = IRTemp_INVALID; +@@ -17977,10 +17978,15 @@ static IRTemp _get_quad_modulo_or_carry(IRExpr * vecA, IRExpr * vecB, + IRExpr * _vecA_high64 = unop( Iop_V128HIto64, vecA ); + IRExpr * _vecB_high64 = unop( Iop_V128HIto64, vecB ); + ++ carry = newTemp(Ity_I32); ++ assign( carry, cin ); ++ + for (i = 0; i < 4; i++) { + _vecA_32 = newTemp(Ity_I32); + _vecB_32 = newTemp(Ity_I32); + res_32 = newTemp(Ity_I32); ++ res_64 = newTemp(Ity_I64); ++ + switch (i) { + case 0: + assign(_vecA_32, unop( Iop_64to32, _vecA_low64 ) ); +@@ -18000,13 +18006,25 @@ static IRTemp _get_quad_modulo_or_carry(IRExpr * vecA, IRExpr * vecB, + break; + } + +- assign(res_32, binop( Iop_Add32, +- binop( Iop_Add32, +- binop ( Iop_Add32, +- mkexpr(_vecA_32), +- mkexpr(_vecB_32) ), +- (i == 0) ? mkU32(0) : mkexpr(carry) ), +- (i == 0) ? cin : mkU32(0) ) ); ++ assign( res_64, binop( Iop_Add64, ++ binop ( Iop_Add64, ++ binop( Iop_32HLto64, ++ mkU32( 0 ), ++ mkexpr(_vecA_32) ), ++ binop( Iop_32HLto64, ++ mkU32( 0 ), ++ mkexpr(_vecB_32) ) ), ++ binop( Iop_32HLto64, ++ mkU32( 0 ), ++ mkexpr( carry ) ) ) ); ++ ++ /* Calculate the carry to the next higher 32 bits. */ ++ carry = newTemp(Ity_I32); ++ assign(carry, unop( Iop_64HIto32, mkexpr( res_64 ) ) ); ++ ++ /* result is the lower 32-bits */ ++ assign(res_32, unop( Iop_64to32, mkexpr( res_64 ) ) ); ++ + if (modulo) { + result = newTemp(Ity_V128); + assign(result, binop( Iop_OrV128, +@@ -18023,10 +18041,6 @@ static IRTemp _get_quad_modulo_or_carry(IRExpr * vecA, IRExpr * vecB, + tmp_result = newTemp(Ity_V128); + assign(tmp_result, mkexpr(result)); + } +- carry = newTemp(Ity_I32); +- assign(carry, unop(Iop_1Uto32, binop( Iop_CmpLT32U, +- mkexpr(res_32), +- mkexpr(_vecA_32 ) ) ) ); + } + if (modulo) + return result; +commit 211840304bbac0dcda454ef41c557d8bcfdc6c78 +Author: carll +Date: Tue Feb 16 21:23:52 2016 +0000 + + Power PPC 128bit modulo and carry instruction fix + + VEX commit 3209 fixed: an issue with caculating the carry to the next 32-bit + chunk for the Power PPC 128-bit add and subract instructions: vaddcuq, vadduqm, + vsubcuq, vsubuqm, vaddecuq, vaddeuqm, vsubecuq, vsubeuqm + + The corresponding test case didn't catch the issue. This commit adds data + values to the test that verify the issue is fixed. + + Valgrind Bugzilla 359472 + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15790 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/none/tests/ppc64/jm_vec_isa_2_07.stdout.exp b/none/tests/ppc64/jm_vec_isa_2_07.stdout.exp +index 9b5c24f..099491d 100644 +--- a/none/tests/ppc64/jm_vec_isa_2_07.stdout.exp ++++ b/none/tests/ppc64/jm_vec_isa_2_07.stdout.exp +@@ -2,224 +2,1173 @@ mfvsrd: 0102030405060708 => 0102030405060708 + mfvsrd: 090a0b0c0e0d0e0f => 090a0b0c0e0d0e0f + mfvsrd: f1f2f3f4f5f6f7f8 => f1f2f3f4f5f6f7f8 + mfvsrd: f9fafbfcfefdfeff => f9fafbfcfefdfeff ++mfvsrd: 00007fffffffffff => 00007fffffffffff ++mfvsrd: ffff000000000000 => ffff000000000000 ++mfvsrd: 0000800000000000 => 0000800000000000 ++mfvsrd: 0000000000000000 => 0000000000000000 ++mfvsrd: ffffffffffffffff => ffffffffffffffff + + mfvsrwz: 0102030405060708 => 0000000005060708 + mfvsrwz: 090a0b0c0e0d0e0f => 000000000e0d0e0f + mfvsrwz: f1f2f3f4f5f6f7f8 => 00000000f5f6f7f8 + mfvsrwz: f9fafbfcfefdfeff => 00000000fefdfeff ++mfvsrwz: 00007fffffffffff => 00000000ffffffff ++mfvsrwz: ffff000000000000 => 0000000000000000 ++mfvsrwz: 0000800000000000 => 0000000000000000 ++mfvsrwz: 0000000000000000 => 0000000000000000 ++mfvsrwz: ffffffffffffffff => 00000000ffffffff + + mtvsrd: 0102030405060708 => 0102030405060708 + mtvsrd: 090a0b0c0e0d0e0f => 090a0b0c0e0d0e0f + mtvsrd: f1f2f3f4f5f6f7f8 => f1f2f3f4f5f6f7f8 + mtvsrd: f9fafbfcfefdfeff => f9fafbfcfefdfeff ++mtvsrd: 00007fffffffffff => 00007fffffffffff ++mtvsrd: ffff000000000000 => ffff000000000000 ++mtvsrd: 0000800000000000 => 0000800000000000 ++mtvsrd: 0000000000000000 => 0000000000000000 ++mtvsrd: ffffffffffffffff => ffffffffffffffff + + mtvsrwz: 05060708 => 0000000005060708 + mtvsrwz: 0e0d0e0f => 000000000e0d0e0f + mtvsrwz: f5f6f7f8 => 00000000f5f6f7f8 + mtvsrwz: fefdfeff => 00000000fefdfeff ++mtvsrwz: ffffffff => 00000000ffffffff ++mtvsrwz: 00000000 => 0000000000000000 ++mtvsrwz: 00000000 => 0000000000000000 ++mtvsrwz: 00000000 => 0000000000000000 ++mtvsrwz: ffffffff => 00000000ffffffff + + mtfprwa: 05060708 => 0000000005060708 + mtfprwa: 0e0d0e0f => 000000000e0d0e0f + mtfprwa: f5f6f7f8 => fffffffff5f6f7f8 + mtfprwa: fefdfeff => fffffffffefdfeff ++mtfprwa: ffffffff => ffffffffffffffff ++mtfprwa: 00000000 => 0000000000000000 ++mtfprwa: 00000000 => 0000000000000000 ++mtfprwa: 00000000 => 0000000000000000 ++mtfprwa: ffffffff => ffffffffffffffff + + vaddudm: 0102030405060708 @@ 0102030405060708 ==> 020406080a0c0e10 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 121416181c1a1c1e + vaddudm: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> f2f4f6f8fafcff00 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 030507090d0b0d0e ++vaddudm: 0102030405060708 @@ 00007fffffffffff ==> 0102830405060707 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 09090b0c0e0d0e0f ++vaddudm: 0102030405060708 @@ 0000800000000000 ==> 0102830405060708 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 090a0b0c0e0d0e0f ++vaddudm: 0102030405060708 @@ ffffffffffffffff ==> 0102030405060707 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 090a0b0c0e0d0e60 + vaddudm: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> f2f4f6f8fafcff00 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 030507090d0b0d0e + vaddudm: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> e3e5e7e9ebedeff0 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> f3f5f7f9fdfbfdfe ++vaddudm: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> f1f373f4f5f6f7f7 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> f9f9fbfcfefdfeff ++vaddudm: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> f1f373f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> f9fafbfcfefdfeff ++vaddudm: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> f1f2f3f4f5f6f7f7 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> f9fafbfcfefdff50 ++vaddudm: 00007fffffffffff @@ 0102030405060708 ==> 0102830405060707 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 09090b0c0e0d0e0f ++vaddudm: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> f1f373f4f5f6f7f7 ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> f9f9fbfcfefdfeff ++vaddudm: 00007fffffffffff @@ 00007fffffffffff ==> 0000fffffffffffe ++ ffff000000000000 @@ ffff000000000000 ==> fffe000000000000 ++vaddudm: 00007fffffffffff @@ 0000800000000000 ==> 0000ffffffffffff ++ ffff000000000000 @@ 0000000000000000 ==> ffff000000000000 ++vaddudm: 00007fffffffffff @@ ffffffffffffffff ==> 00007ffffffffffe ++ ffff000000000000 @@ 0000000000000051 ==> ffff000000000051 ++vaddudm: 0000800000000000 @@ 0102030405060708 ==> 0102830405060708 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e0f ++vaddudm: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> f1f373f4f5f6f7f8 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> f9fafbfcfefdfeff ++vaddudm: 0000800000000000 @@ 00007fffffffffff ==> 0000ffffffffffff ++ 0000000000000000 @@ ffff000000000000 ==> ffff000000000000 ++vaddudm: 0000800000000000 @@ 0000800000000000 ==> 0001000000000000 ++ 0000000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vaddudm: 0000800000000000 @@ ffffffffffffffff ==> 00007fffffffffff ++ 0000000000000000 @@ 0000000000000051 ==> 0000000000000051 ++vaddudm: ffffffffffffffff @@ 0102030405060708 ==> 0102030405060707 ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e60 ++vaddudm: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f7 ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> f9fafbfcfefdff50 ++vaddudm: ffffffffffffffff @@ 00007fffffffffff ==> 00007ffffffffffe ++ 0000000000000051 @@ ffff000000000000 ==> ffff000000000051 ++vaddudm: ffffffffffffffff @@ 0000800000000000 ==> 00007fffffffffff ++ 0000000000000051 @@ 0000000000000000 ==> 0000000000000051 ++vaddudm: ffffffffffffffff @@ ffffffffffffffff ==> fffffffffffffffe ++ 0000000000000051 @@ 0000000000000051 ==> 00000000000000a2 + + vsubudm: 0102030405060708 @@ 0102030405060708 ==> 0000000000000000 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 0000000000000000 + vsubudm: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0f0f0f0f0f0f0f10 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 0f0f0f0f0f0f0f10 ++vsubudm: 0102030405060708 @@ 00007fffffffffff ==> 0101830405060709 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 090b0b0c0e0d0e0f ++vsubudm: 0102030405060708 @@ 0000800000000000 ==> 0101830405060708 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 090a0b0c0e0d0e0f ++vsubudm: 0102030405060708 @@ ffffffffffffffff ==> 0102030405060709 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 090a0b0c0e0d0dbe + vsubudm: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> f0f0f0f0f0f0f0f0 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> f0f0f0f0f0f0f0f0 + vsubudm: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vsubudm: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> f1f273f4f5f6f7f9 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> f9fbfbfcfefdfeff ++vsubudm: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> f1f273f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> f9fafbfcfefdfeff ++vsubudm: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> f1f2f3f4f5f6f7f9 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> f9fafbfcfefdfeae ++vsubudm: 00007fffffffffff @@ 0102030405060708 ==> fefe7cfbfaf9f8f7 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> f6f4f4f3f1f2f1f1 ++vsubudm: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 0e0d8c0b0a090807 ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> 0604040301020101 ++vsubudm: 00007fffffffffff @@ 00007fffffffffff ==> 0000000000000000 ++ ffff000000000000 @@ ffff000000000000 ==> 0000000000000000 ++vsubudm: 00007fffffffffff @@ 0000800000000000 ==> ffffffffffffffff ++ ffff000000000000 @@ 0000000000000000 ==> ffff000000000000 ++vsubudm: 00007fffffffffff @@ ffffffffffffffff ==> 0000800000000000 ++ ffff000000000000 @@ 0000000000000051 ==> fffeffffffffffaf ++vsubudm: 0000800000000000 @@ 0102030405060708 ==> fefe7cfbfaf9f8f8 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> f6f5f4f3f1f2f1f1 ++vsubudm: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0e0d8c0b0a090808 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0605040301020101 ++vsubudm: 0000800000000000 @@ 00007fffffffffff ==> 0000000000000001 ++ 0000000000000000 @@ ffff000000000000 ==> 0001000000000000 ++vsubudm: 0000800000000000 @@ 0000800000000000 ==> 0000000000000000 ++ 0000000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vsubudm: 0000800000000000 @@ ffffffffffffffff ==> 0000800000000001 ++ 0000000000000000 @@ 0000000000000051 ==> ffffffffffffffaf ++vsubudm: ffffffffffffffff @@ 0102030405060708 ==> fefdfcfbfaf9f8f7 ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> f6f5f4f3f1f2f242 ++vsubudm: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> 0e0d0c0b0a090807 ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 0605040301020152 ++vsubudm: ffffffffffffffff @@ 00007fffffffffff ==> ffff800000000000 ++ 0000000000000051 @@ ffff000000000000 ==> 0001000000000051 ++vsubudm: ffffffffffffffff @@ 0000800000000000 ==> ffff7fffffffffff ++ 0000000000000051 @@ 0000000000000000 ==> 0000000000000051 ++vsubudm: ffffffffffffffff @@ ffffffffffffffff ==> 0000000000000000 ++ 0000000000000051 @@ 0000000000000051 ==> 0000000000000000 + + vmaxud: 0102030405060708 @@ 0102030405060708 ==> 0102030405060708 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e0f + vmaxud: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f8 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> f9fafbfcfefdfeff ++vmaxud: 0102030405060708 @@ 00007fffffffffff ==> 0102030405060708 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> ffff000000000000 ++vmaxud: 0102030405060708 @@ 0000800000000000 ==> 0102030405060708 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 090a0b0c0e0d0e0f ++vmaxud: 0102030405060708 @@ ffffffffffffffff ==> ffffffffffffffff ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 090a0b0c0e0d0e0f + vmaxud: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> f1f2f3f4f5f6f7f8 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> f9fafbfcfefdfeff + vmaxud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f8 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> f9fafbfcfefdfeff ++vmaxud: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> f1f2f3f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> ffff000000000000 ++vmaxud: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> f1f2f3f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> f9fafbfcfefdfeff ++vmaxud: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> ffffffffffffffff ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> f9fafbfcfefdfeff ++vmaxud: 00007fffffffffff @@ 0102030405060708 ==> 0102030405060708 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> ffff000000000000 ++vmaxud: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f8 ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> ffff000000000000 ++vmaxud: 00007fffffffffff @@ 00007fffffffffff ==> 00007fffffffffff ++ ffff000000000000 @@ ffff000000000000 ==> ffff000000000000 ++vmaxud: 00007fffffffffff @@ 0000800000000000 ==> 0000800000000000 ++ ffff000000000000 @@ 0000000000000000 ==> ffff000000000000 ++vmaxud: 00007fffffffffff @@ ffffffffffffffff ==> ffffffffffffffff ++ ffff000000000000 @@ 0000000000000051 ==> ffff000000000000 ++vmaxud: 0000800000000000 @@ 0102030405060708 ==> 0102030405060708 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e0f ++vmaxud: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f8 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> f9fafbfcfefdfeff ++vmaxud: 0000800000000000 @@ 00007fffffffffff ==> 0000800000000000 ++ 0000000000000000 @@ ffff000000000000 ==> ffff000000000000 ++vmaxud: 0000800000000000 @@ 0000800000000000 ==> 0000800000000000 ++ 0000000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vmaxud: 0000800000000000 @@ ffffffffffffffff ==> ffffffffffffffff ++ 0000000000000000 @@ 0000000000000051 ==> 0000000000000051 ++vmaxud: ffffffffffffffff @@ 0102030405060708 ==> ffffffffffffffff ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e0f ++vmaxud: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffffff ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> f9fafbfcfefdfeff ++vmaxud: ffffffffffffffff @@ 00007fffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ ffff000000000000 ==> ffff000000000000 ++vmaxud: ffffffffffffffff @@ 0000800000000000 ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000000 ==> 0000000000000051 ++vmaxud: ffffffffffffffff @@ ffffffffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000051 ==> 0000000000000051 + + vmaxsd: 0102030405060708 @@ 0102030405060708 ==> 0102030405060708 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e0f + vmaxsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0102030405060708 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 090a0b0c0e0d0e0f ++vmaxsd: 0102030405060708 @@ 00007fffffffffff ==> 0102030405060708 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 090a0b0c0e0d0e0f ++vmaxsd: 0102030405060708 @@ 0000800000000000 ==> 0102030405060708 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 090a0b0c0e0d0e0f ++vmaxsd: 0102030405060708 @@ ffffffffffffffff ==> 0102030405060708 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 090a0b0c0e0d0e0f + vmaxsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> 0102030405060708 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e0f + vmaxsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f8 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> f9fafbfcfefdfeff ++vmaxsd: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> 00007fffffffffff ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> ffff000000000000 ++vmaxsd: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> 0000800000000000 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> 0000000000000000 ++vmaxsd: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> ffffffffffffffff ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> 0000000000000051 ++vmaxsd: 00007fffffffffff @@ 0102030405060708 ==> 0102030405060708 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e0f ++vmaxsd: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 00007fffffffffff ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> ffff000000000000 ++vmaxsd: 00007fffffffffff @@ 00007fffffffffff ==> 00007fffffffffff ++ ffff000000000000 @@ ffff000000000000 ==> ffff000000000000 ++vmaxsd: 00007fffffffffff @@ 0000800000000000 ==> 0000800000000000 ++ ffff000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vmaxsd: 00007fffffffffff @@ ffffffffffffffff ==> 00007fffffffffff ++ ffff000000000000 @@ 0000000000000051 ==> 0000000000000051 ++vmaxsd: 0000800000000000 @@ 0102030405060708 ==> 0102030405060708 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e0f ++vmaxsd: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0000800000000000 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vmaxsd: 0000800000000000 @@ 00007fffffffffff ==> 0000800000000000 ++ 0000000000000000 @@ ffff000000000000 ==> 0000000000000000 ++vmaxsd: 0000800000000000 @@ 0000800000000000 ==> 0000800000000000 ++ 0000000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vmaxsd: 0000800000000000 @@ ffffffffffffffff ==> 0000800000000000 ++ 0000000000000000 @@ 0000000000000051 ==> 0000000000000051 ++vmaxsd: ffffffffffffffff @@ 0102030405060708 ==> 0102030405060708 ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e0f ++vmaxsd: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffffff ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 0000000000000051 ++vmaxsd: ffffffffffffffff @@ 00007fffffffffff ==> 00007fffffffffff ++ 0000000000000051 @@ ffff000000000000 ==> 0000000000000051 ++vmaxsd: ffffffffffffffff @@ 0000800000000000 ==> 0000800000000000 ++ 0000000000000051 @@ 0000000000000000 ==> 0000000000000051 ++vmaxsd: ffffffffffffffff @@ ffffffffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000051 ==> 0000000000000051 + + vminud: 0102030405060708 @@ 0102030405060708 ==> 0102030405060708 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e0f + vminud: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0102030405060708 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 090a0b0c0e0d0e0f ++vminud: 0102030405060708 @@ 00007fffffffffff ==> 00007fffffffffff ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 090a0b0c0e0d0e0f ++vminud: 0102030405060708 @@ 0000800000000000 ==> 0000800000000000 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 0000000000000000 ++vminud: 0102030405060708 @@ ffffffffffffffff ==> 0102030405060708 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 0000000000000051 + vminud: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> 0102030405060708 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e0f + vminud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f8 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> f9fafbfcfefdfeff ++vminud: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> 00007fffffffffff ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> f9fafbfcfefdfeff ++vminud: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> 0000800000000000 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> 0000000000000000 ++vminud: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> f1f2f3f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> 0000000000000051 ++vminud: 00007fffffffffff @@ 0102030405060708 ==> 00007fffffffffff ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e0f ++vminud: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 00007fffffffffff ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> f9fafbfcfefdfeff ++vminud: 00007fffffffffff @@ 00007fffffffffff ==> 00007fffffffffff ++ ffff000000000000 @@ ffff000000000000 ==> ffff000000000000 ++vminud: 00007fffffffffff @@ 0000800000000000 ==> 00007fffffffffff ++ ffff000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vminud: 00007fffffffffff @@ ffffffffffffffff ==> 00007fffffffffff ++ ffff000000000000 @@ 0000000000000051 ==> 0000000000000051 ++vminud: 0000800000000000 @@ 0102030405060708 ==> 0000800000000000 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vminud: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0000800000000000 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vminud: 0000800000000000 @@ 00007fffffffffff ==> 00007fffffffffff ++ 0000000000000000 @@ ffff000000000000 ==> 0000000000000000 ++vminud: 0000800000000000 @@ 0000800000000000 ==> 0000800000000000 ++ 0000000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vminud: 0000800000000000 @@ ffffffffffffffff ==> 0000800000000000 ++ 0000000000000000 @@ 0000000000000051 ==> 0000000000000000 ++vminud: ffffffffffffffff @@ 0102030405060708 ==> 0102030405060708 ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 0000000000000051 ++vminud: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f8 ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 0000000000000051 ++vminud: ffffffffffffffff @@ 00007fffffffffff ==> 00007fffffffffff ++ 0000000000000051 @@ ffff000000000000 ==> 0000000000000051 ++vminud: ffffffffffffffff @@ 0000800000000000 ==> 0000800000000000 ++ 0000000000000051 @@ 0000000000000000 ==> 0000000000000000 ++vminud: ffffffffffffffff @@ ffffffffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000051 ==> 0000000000000051 + + vminsd: 0102030405060708 @@ 0102030405060708 ==> 0102030405060708 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 090a0b0c0e0d0e0f + vminsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f8 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> f9fafbfcfefdfeff ++vminsd: 0102030405060708 @@ 00007fffffffffff ==> 00007fffffffffff ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> ffff000000000000 ++vminsd: 0102030405060708 @@ 0000800000000000 ==> 0000800000000000 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 0000000000000000 ++vminsd: 0102030405060708 @@ ffffffffffffffff ==> ffffffffffffffff ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 0000000000000051 + vminsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> f1f2f3f4f5f6f7f8 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> f9fafbfcfefdfeff + vminsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f8 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> f9fafbfcfefdfeff ++vminsd: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> f1f2f3f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> f9fafbfcfefdfeff ++vminsd: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> f1f2f3f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> f9fafbfcfefdfeff ++vminsd: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> f1f2f3f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> f9fafbfcfefdfeff ++vminsd: 00007fffffffffff @@ 0102030405060708 ==> 00007fffffffffff ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> ffff000000000000 ++vminsd: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f8 ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> f9fafbfcfefdfeff ++vminsd: 00007fffffffffff @@ 00007fffffffffff ==> 00007fffffffffff ++ ffff000000000000 @@ ffff000000000000 ==> ffff000000000000 ++vminsd: 00007fffffffffff @@ 0000800000000000 ==> 00007fffffffffff ++ ffff000000000000 @@ 0000000000000000 ==> ffff000000000000 ++vminsd: 00007fffffffffff @@ ffffffffffffffff ==> ffffffffffffffff ++ ffff000000000000 @@ 0000000000000051 ==> ffff000000000000 ++vminsd: 0000800000000000 @@ 0102030405060708 ==> 0000800000000000 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vminsd: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f8 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> f9fafbfcfefdfeff ++vminsd: 0000800000000000 @@ 00007fffffffffff ==> 00007fffffffffff ++ 0000000000000000 @@ ffff000000000000 ==> ffff000000000000 ++vminsd: 0000800000000000 @@ 0000800000000000 ==> 0000800000000000 ++ 0000000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vminsd: 0000800000000000 @@ ffffffffffffffff ==> ffffffffffffffff ++ 0000000000000000 @@ 0000000000000051 ==> 0000000000000000 ++vminsd: ffffffffffffffff @@ 0102030405060708 ==> ffffffffffffffff ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 0000000000000051 ++vminsd: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f8 ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> f9fafbfcfefdfeff ++vminsd: ffffffffffffffff @@ 00007fffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ ffff000000000000 ==> ffff000000000000 ++vminsd: ffffffffffffffff @@ 0000800000000000 ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000000 ==> 0000000000000000 ++vminsd: ffffffffffffffff @@ ffffffffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000051 ==> 0000000000000051 + + vcmpequd: 0102030405060708 @@ 0102030405060708 ==> ffffffffffffffff + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> ffffffffffffffff + vcmpequd: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vcmpequd: 0102030405060708 @@ 00007fffffffffff ==> 0000000000000000 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 0000000000000000 ++vcmpequd: 0102030405060708 @@ 0000800000000000 ==> 0000000000000000 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 0000000000000000 ++vcmpequd: 0102030405060708 @@ ffffffffffffffff ==> 0000000000000000 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 0000000000000000 + vcmpequd: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> 0000000000000000 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 0000000000000000 + vcmpequd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffffff + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> ffffffffffffffff ++vcmpequd: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> 0000000000000000 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> 0000000000000000 ++vcmpequd: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> 0000000000000000 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> 0000000000000000 ++vcmpequd: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> 0000000000000000 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> 0000000000000000 ++vcmpequd: 00007fffffffffff @@ 0102030405060708 ==> 0000000000000000 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vcmpequd: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vcmpequd: 00007fffffffffff @@ 00007fffffffffff ==> ffffffffffffffff ++ ffff000000000000 @@ ffff000000000000 ==> ffffffffffffffff ++vcmpequd: 00007fffffffffff @@ 0000800000000000 ==> 0000000000000000 ++ ffff000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vcmpequd: 00007fffffffffff @@ ffffffffffffffff ==> 0000000000000000 ++ ffff000000000000 @@ 0000000000000051 ==> 0000000000000000 ++vcmpequd: 0000800000000000 @@ 0102030405060708 ==> 0000000000000000 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vcmpequd: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vcmpequd: 0000800000000000 @@ 00007fffffffffff ==> 0000000000000000 ++ 0000000000000000 @@ ffff000000000000 ==> 0000000000000000 ++vcmpequd: 0000800000000000 @@ 0000800000000000 ==> ffffffffffffffff ++ 0000000000000000 @@ 0000000000000000 ==> ffffffffffffffff ++vcmpequd: 0000800000000000 @@ ffffffffffffffff ==> 0000000000000000 ++ 0000000000000000 @@ 0000000000000051 ==> 0000000000000000 ++vcmpequd: ffffffffffffffff @@ 0102030405060708 ==> 0000000000000000 ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vcmpequd: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vcmpequd: ffffffffffffffff @@ 00007fffffffffff ==> 0000000000000000 ++ 0000000000000051 @@ ffff000000000000 ==> 0000000000000000 ++vcmpequd: ffffffffffffffff @@ 0000800000000000 ==> 0000000000000000 ++ 0000000000000051 @@ 0000000000000000 ==> 0000000000000000 ++vcmpequd: ffffffffffffffff @@ ffffffffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000051 ==> ffffffffffffffff + + vcmpgtud: 0102030405060708 @@ 0102030405060708 ==> 0000000000000000 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 0000000000000000 + vcmpgtud: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vcmpgtud: 0102030405060708 @@ 00007fffffffffff ==> ffffffffffffffff ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 0000000000000000 ++vcmpgtud: 0102030405060708 @@ 0000800000000000 ==> ffffffffffffffff ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> ffffffffffffffff ++vcmpgtud: 0102030405060708 @@ ffffffffffffffff ==> 0000000000000000 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> ffffffffffffffff + vcmpgtud: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> ffffffffffffffff + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> ffffffffffffffff + vcmpgtud: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vcmpgtud: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> ffffffffffffffff ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> 0000000000000000 ++vcmpgtud: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> ffffffffffffffff ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> ffffffffffffffff ++vcmpgtud: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> 0000000000000000 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> ffffffffffffffff ++vcmpgtud: 00007fffffffffff @@ 0102030405060708 ==> 0000000000000000 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> ffffffffffffffff ++vcmpgtud: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> ffffffffffffffff ++vcmpgtud: 00007fffffffffff @@ 00007fffffffffff ==> 0000000000000000 ++ ffff000000000000 @@ ffff000000000000 ==> 0000000000000000 ++vcmpgtud: 00007fffffffffff @@ 0000800000000000 ==> 0000000000000000 ++ ffff000000000000 @@ 0000000000000000 ==> ffffffffffffffff ++vcmpgtud: 00007fffffffffff @@ ffffffffffffffff ==> 0000000000000000 ++ ffff000000000000 @@ 0000000000000051 ==> ffffffffffffffff ++vcmpgtud: 0000800000000000 @@ 0102030405060708 ==> 0000000000000000 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vcmpgtud: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vcmpgtud: 0000800000000000 @@ 00007fffffffffff ==> ffffffffffffffff ++ 0000000000000000 @@ ffff000000000000 ==> 0000000000000000 ++vcmpgtud: 0000800000000000 @@ 0000800000000000 ==> 0000000000000000 ++ 0000000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vcmpgtud: 0000800000000000 @@ ffffffffffffffff ==> 0000000000000000 ++ 0000000000000000 @@ 0000000000000051 ==> 0000000000000000 ++vcmpgtud: ffffffffffffffff @@ 0102030405060708 ==> ffffffffffffffff ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vcmpgtud: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffffff ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vcmpgtud: ffffffffffffffff @@ 00007fffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ ffff000000000000 ==> 0000000000000000 ++vcmpgtud: ffffffffffffffff @@ 0000800000000000 ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000000 ==> ffffffffffffffff ++vcmpgtud: ffffffffffffffff @@ ffffffffffffffff ==> 0000000000000000 ++ 0000000000000051 @@ 0000000000000051 ==> 0000000000000000 + + vcmpgtsd: 0102030405060708 @@ 0102030405060708 ==> 0000000000000000 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 0000000000000000 + vcmpgtsd: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffffff + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> ffffffffffffffff ++vcmpgtsd: 0102030405060708 @@ 00007fffffffffff ==> ffffffffffffffff ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> ffffffffffffffff ++vcmpgtsd: 0102030405060708 @@ 0000800000000000 ==> ffffffffffffffff ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> ffffffffffffffff ++vcmpgtsd: 0102030405060708 @@ ffffffffffffffff ==> ffffffffffffffff ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> ffffffffffffffff + vcmpgtsd: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> 0000000000000000 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 0000000000000000 + vcmpgtsd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vcmpgtsd: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> 0000000000000000 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> 0000000000000000 ++vcmpgtsd: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> 0000000000000000 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> 0000000000000000 ++vcmpgtsd: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> 0000000000000000 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> 0000000000000000 ++vcmpgtsd: 00007fffffffffff @@ 0102030405060708 ==> 0000000000000000 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vcmpgtsd: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffffff ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> ffffffffffffffff ++vcmpgtsd: 00007fffffffffff @@ 00007fffffffffff ==> 0000000000000000 ++ ffff000000000000 @@ ffff000000000000 ==> 0000000000000000 ++vcmpgtsd: 00007fffffffffff @@ 0000800000000000 ==> 0000000000000000 ++ ffff000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vcmpgtsd: 00007fffffffffff @@ ffffffffffffffff ==> ffffffffffffffff ++ ffff000000000000 @@ 0000000000000051 ==> 0000000000000000 ++vcmpgtsd: 0000800000000000 @@ 0102030405060708 ==> 0000000000000000 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vcmpgtsd: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffffff ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> ffffffffffffffff ++vcmpgtsd: 0000800000000000 @@ 00007fffffffffff ==> ffffffffffffffff ++ 0000000000000000 @@ ffff000000000000 ==> ffffffffffffffff ++vcmpgtsd: 0000800000000000 @@ 0000800000000000 ==> 0000000000000000 ++ 0000000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vcmpgtsd: 0000800000000000 @@ ffffffffffffffff ==> ffffffffffffffff ++ 0000000000000000 @@ 0000000000000051 ==> 0000000000000000 ++vcmpgtsd: ffffffffffffffff @@ 0102030405060708 ==> 0000000000000000 ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vcmpgtsd: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffffff ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> ffffffffffffffff ++vcmpgtsd: ffffffffffffffff @@ 00007fffffffffff ==> 0000000000000000 ++ 0000000000000051 @@ ffff000000000000 ==> ffffffffffffffff ++vcmpgtsd: ffffffffffffffff @@ 0000800000000000 ==> 0000000000000000 ++ 0000000000000051 @@ 0000000000000000 ==> ffffffffffffffff ++vcmpgtsd: ffffffffffffffff @@ ffffffffffffffff ==> 0000000000000000 ++ 0000000000000051 @@ 0000000000000051 ==> 0000000000000000 + + vrld: 0102030405060708 @@ 0102030405060708 ==> 0203040506070801 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 0586070687078485 + vrld: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0801020304050607 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 8485058607068707 ++vrld: 0102030405060708 @@ 00007fffffffffff ==> 0081018202830384 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 090a0b0c0e0d0e0f ++vrld: 0102030405060708 @@ 0000800000000000 ==> 0102030405060708 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 090a0b0c0e0d0e0f ++vrld: 0102030405060708 @@ ffffffffffffffff ==> 0081018202830384 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 16181c1a1c1e1214 + vrld: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> f2f3f4f5f6f7f8f1 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 7dfe7f7eff7ffcfd + vrld: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> f8f1f2f3f4f5f6f7 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> fcfd7dfe7f7eff7f ++vrld: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> 78f979fa7afb7bfc ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> f9fafbfcfefdfeff ++vrld: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> f1f2f3f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> f9fafbfcfefdfeff ++vrld: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> 78f979fa7afb7bfc ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> f7f9fdfbfdfff3f5 ++vrld: 00007fffffffffff @@ 0102030405060708 ==> 007fffffffffff00 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 8000000000007fff ++vrld: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> ff00007fffffffff ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> 7fff800000000000 ++vrld: 00007fffffffffff @@ 00007fffffffffff ==> 80003fffffffffff ++ ffff000000000000 @@ ffff000000000000 ==> ffff000000000000 ++vrld: 00007fffffffffff @@ 0000800000000000 ==> 00007fffffffffff ++ ffff000000000000 @@ 0000000000000000 ==> ffff000000000000 ++vrld: 00007fffffffffff @@ ffffffffffffffff ==> 80003fffffffffff ++ ffff000000000000 @@ 0000000000000051 ==> 000000000001fffe ++vrld: 0000800000000000 @@ 0102030405060708 ==> 0080000000000000 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vrld: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0000008000000000 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vrld: 0000800000000000 @@ 00007fffffffffff ==> 0000400000000000 ++ 0000000000000000 @@ ffff000000000000 ==> 0000000000000000 ++vrld: 0000800000000000 @@ 0000800000000000 ==> 0000800000000000 ++ 0000000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vrld: 0000800000000000 @@ ffffffffffffffff ==> 0000400000000000 ++ 0000000000000000 @@ 0000000000000051 ==> 0000000000000000 ++vrld: ffffffffffffffff @@ 0102030405060708 ==> ffffffffffffffff ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 0000000000288000 ++vrld: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffffff ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 8000000000000028 ++vrld: ffffffffffffffff @@ 00007fffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ ffff000000000000 ==> 0000000000000051 ++vrld: ffffffffffffffff @@ 0000800000000000 ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000000 ==> 0000000000000051 ++vrld: ffffffffffffffff @@ ffffffffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000051 ==> 0000000000a20000 + + vsld: 0102030405060708 @@ 0102030405060708 ==> 0203040506070800 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 0586070687078000 + vsld: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0800000000000000 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 8000000000000000 ++vsld: 0102030405060708 @@ 00007fffffffffff ==> 0000000000000000 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 090a0b0c0e0d0e0f ++vsld: 0102030405060708 @@ 0000800000000000 ==> 0102030405060708 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 090a0b0c0e0d0e0f ++vsld: 0102030405060708 @@ ffffffffffffffff ==> 0000000000000000 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 16181c1a1c1e0000 + vsld: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> f2f3f4f5f6f7f800 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 7dfe7f7eff7f8000 + vsld: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> f800000000000000 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> 8000000000000000 ++vsld: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> 0000000000000000 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> f9fafbfcfefdfeff ++vsld: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> f1f2f3f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> f9fafbfcfefdfeff ++vsld: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> 0000000000000000 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> f7f9fdfbfdfe0000 ++vsld: 00007fffffffffff @@ 0102030405060708 ==> 007fffffffffff00 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 8000000000000000 ++vsld: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> ff00000000000000 ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vsld: 00007fffffffffff @@ 00007fffffffffff ==> 8000000000000000 ++ ffff000000000000 @@ ffff000000000000 ==> ffff000000000000 ++vsld: 00007fffffffffff @@ 0000800000000000 ==> 00007fffffffffff ++ ffff000000000000 @@ 0000000000000000 ==> ffff000000000000 ++vsld: 00007fffffffffff @@ ffffffffffffffff ==> 8000000000000000 ++ ffff000000000000 @@ 0000000000000051 ==> 0000000000000000 ++vsld: 0000800000000000 @@ 0102030405060708 ==> 0080000000000000 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vsld: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vsld: 0000800000000000 @@ 00007fffffffffff ==> 0000000000000000 ++ 0000000000000000 @@ ffff000000000000 ==> 0000000000000000 ++vsld: 0000800000000000 @@ 0000800000000000 ==> 0000800000000000 ++ 0000000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vsld: 0000800000000000 @@ ffffffffffffffff ==> 0000000000000000 ++ 0000000000000000 @@ 0000000000000051 ==> 0000000000000000 ++vsld: ffffffffffffffff @@ 0102030405060708 ==> ffffffffffffff00 ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 0000000000288000 ++vsld: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> ff00000000000000 ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 8000000000000000 ++vsld: ffffffffffffffff @@ 00007fffffffffff ==> 8000000000000000 ++ 0000000000000051 @@ ffff000000000000 ==> 0000000000000051 ++vsld: ffffffffffffffff @@ 0000800000000000 ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000000 ==> 0000000000000051 ++vsld: ffffffffffffffff @@ ffffffffffffffff ==> 8000000000000000 ++ 0000000000000051 @@ 0000000000000051 ==> 0000000000a20000 + + vsrad: 0102030405060708 @@ 0102030405060708 ==> 0001020304050607 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 0000121416181c1a + vsrad: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0000000000000001 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vsrad: 0102030405060708 @@ 00007fffffffffff ==> 0000000000000000 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 090a0b0c0e0d0e0f ++vsrad: 0102030405060708 @@ 0000800000000000 ==> 0102030405060708 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 090a0b0c0e0d0e0f ++vsrad: 0102030405060708 @@ ffffffffffffffff ==> 0000000000000000 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 0000048505860706 + vsrad: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> fff1f2f3f4f5f6f7 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> fffff3f5f7f9fdfb + vsrad: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> fffffffffffffff1 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> ffffffffffffffff ++vsrad: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> ffffffffffffffff ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> f9fafbfcfefdfeff ++vsrad: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> f1f2f3f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> f9fafbfcfefdfeff ++vsrad: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> ffffffffffffffff ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> fffffcfd7dfe7f7e ++vsrad: 00007fffffffffff @@ 0102030405060708 ==> 0000007fffffffff ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> fffffffe00000000 ++vsrad: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> ffffffffffffffff ++vsrad: 00007fffffffffff @@ 00007fffffffffff ==> 0000000000000000 ++ ffff000000000000 @@ ffff000000000000 ==> ffff000000000000 ++vsrad: 00007fffffffffff @@ 0000800000000000 ==> 00007fffffffffff ++ ffff000000000000 @@ 0000000000000000 ==> ffff000000000000 ++vsrad: 00007fffffffffff @@ ffffffffffffffff ==> 0000000000000000 ++ ffff000000000000 @@ 0000000000000051 ==> ffffffff80000000 ++vsrad: 0000800000000000 @@ 0102030405060708 ==> 0000008000000000 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vsrad: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vsrad: 0000800000000000 @@ 00007fffffffffff ==> 0000000000000000 ++ 0000000000000000 @@ ffff000000000000 ==> 0000000000000000 ++vsrad: 0000800000000000 @@ 0000800000000000 ==> 0000800000000000 ++ 0000000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vsrad: 0000800000000000 @@ ffffffffffffffff ==> 0000000000000000 ++ 0000000000000000 @@ 0000000000000051 ==> 0000000000000000 ++vsrad: ffffffffffffffff @@ 0102030405060708 ==> ffffffffffffffff ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vsrad: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffffff ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vsrad: ffffffffffffffff @@ 00007fffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ ffff000000000000 ==> 0000000000000051 ++vsrad: ffffffffffffffff @@ 0000800000000000 ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000000 ==> 0000000000000051 ++vsrad: ffffffffffffffff @@ ffffffffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000051 ==> 0000000000000000 + + vsrd: 0102030405060708 @@ 0102030405060708 ==> 0001020304050607 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 0000121416181c1a + vsrd: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0000000000000001 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vsrd: 0102030405060708 @@ 00007fffffffffff ==> 0000000000000000 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 090a0b0c0e0d0e0f ++vsrd: 0102030405060708 @@ 0000800000000000 ==> 0102030405060708 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 090a0b0c0e0d0e0f ++vsrd: 0102030405060708 @@ ffffffffffffffff ==> 0000000000000000 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 0000048505860706 + vsrd: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> 00f1f2f3f4f5f6f7 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 0001f3f5f7f9fdfb + vsrd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> 00000000000000f1 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> 0000000000000001 ++vsrd: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> 0000000000000001 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> f9fafbfcfefdfeff ++vsrd: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> f1f2f3f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> f9fafbfcfefdfeff ++vsrd: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> 0000000000000001 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> 00007cfd7dfe7f7e ++vsrd: 00007fffffffffff @@ 0102030405060708 ==> 0000007fffffffff ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 0001fffe00000000 ++vsrd: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> 0000000000000001 ++vsrd: 00007fffffffffff @@ 00007fffffffffff ==> 0000000000000000 ++ ffff000000000000 @@ ffff000000000000 ==> ffff000000000000 ++vsrd: 00007fffffffffff @@ 0000800000000000 ==> 00007fffffffffff ++ ffff000000000000 @@ 0000000000000000 ==> ffff000000000000 ++vsrd: 00007fffffffffff @@ ffffffffffffffff ==> 0000000000000000 ++ ffff000000000000 @@ 0000000000000051 ==> 00007fff80000000 ++vsrd: 0000800000000000 @@ 0102030405060708 ==> 0000008000000000 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vsrd: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0000000000000000 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vsrd: 0000800000000000 @@ 00007fffffffffff ==> 0000000000000000 ++ 0000000000000000 @@ ffff000000000000 ==> 0000000000000000 ++vsrd: 0000800000000000 @@ 0000800000000000 ==> 0000800000000000 ++ 0000000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vsrd: 0000800000000000 @@ ffffffffffffffff ==> 0000000000000000 ++ 0000000000000000 @@ 0000000000000051 ==> 0000000000000000 ++vsrd: ffffffffffffffff @@ 0102030405060708 ==> 00ffffffffffffff ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vsrd: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> 00000000000000ff ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vsrd: ffffffffffffffff @@ 00007fffffffffff ==> 0000000000000001 ++ 0000000000000051 @@ ffff000000000000 ==> 0000000000000051 ++vsrd: ffffffffffffffff @@ 0000800000000000 ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000000 ==> 0000000000000051 ++vsrd: ffffffffffffffff @@ ffffffffffffffff ==> 0000000000000001 ++ 0000000000000051 @@ 0000000000000051 ==> 0000000000000000 + + vpkudum: Inputs: 05060708 0e0d0e0f 05060708 0e0d0e0f + Output: 05060708 0e0d0e0f 05060708 0e0d0e0f + vpkudum: Inputs: 05060708 0e0d0e0f f5f6f7f8 fefdfeff + Output: 05060708 0e0d0e0f f5f6f7f8 fefdfeff ++vpkudum: Inputs: 05060708 0e0d0e0f ffffffff 00000000 ++ Output: 05060708 0e0d0e0f ffffffff 00000000 ++vpkudum: Inputs: 05060708 0e0d0e0f 00000000 00000000 ++ Output: 05060708 0e0d0e0f 00000000 00000000 ++vpkudum: Inputs: 05060708 0e0d0e0f ffffffff 00000051 ++ Output: 05060708 0e0d0e0f ffffffff 00000051 + vpkudum: Inputs: f5f6f7f8 fefdfeff 05060708 0e0d0e0f + Output: f5f6f7f8 fefdfeff 05060708 0e0d0e0f + vpkudum: Inputs: f5f6f7f8 fefdfeff f5f6f7f8 fefdfeff + Output: f5f6f7f8 fefdfeff f5f6f7f8 fefdfeff ++vpkudum: Inputs: f5f6f7f8 fefdfeff ffffffff 00000000 ++ Output: f5f6f7f8 fefdfeff ffffffff 00000000 ++vpkudum: Inputs: f5f6f7f8 fefdfeff 00000000 00000000 ++ Output: f5f6f7f8 fefdfeff 00000000 00000000 ++vpkudum: Inputs: f5f6f7f8 fefdfeff ffffffff 00000051 ++ Output: f5f6f7f8 fefdfeff ffffffff 00000051 ++vpkudum: Inputs: ffffffff 00000000 05060708 0e0d0e0f ++ Output: ffffffff 00000000 05060708 0e0d0e0f ++vpkudum: Inputs: ffffffff 00000000 f5f6f7f8 fefdfeff ++ Output: ffffffff 00000000 f5f6f7f8 fefdfeff ++vpkudum: Inputs: ffffffff 00000000 ffffffff 00000000 ++ Output: ffffffff 00000000 ffffffff 00000000 ++vpkudum: Inputs: ffffffff 00000000 00000000 00000000 ++ Output: ffffffff 00000000 00000000 00000000 ++vpkudum: Inputs: ffffffff 00000000 ffffffff 00000051 ++ Output: ffffffff 00000000 ffffffff 00000051 ++vpkudum: Inputs: 00000000 00000000 05060708 0e0d0e0f ++ Output: 00000000 00000000 05060708 0e0d0e0f ++vpkudum: Inputs: 00000000 00000000 f5f6f7f8 fefdfeff ++ Output: 00000000 00000000 f5f6f7f8 fefdfeff ++vpkudum: Inputs: 00000000 00000000 ffffffff 00000000 ++ Output: 00000000 00000000 ffffffff 00000000 ++vpkudum: Inputs: 00000000 00000000 00000000 00000000 ++ Output: 00000000 00000000 00000000 00000000 ++vpkudum: Inputs: 00000000 00000000 ffffffff 00000051 ++ Output: 00000000 00000000 ffffffff 00000051 ++vpkudum: Inputs: ffffffff 00000051 05060708 0e0d0e0f ++ Output: ffffffff 00000051 05060708 0e0d0e0f ++vpkudum: Inputs: ffffffff 00000051 f5f6f7f8 fefdfeff ++ Output: ffffffff 00000051 f5f6f7f8 fefdfeff ++vpkudum: Inputs: ffffffff 00000051 ffffffff 00000000 ++ Output: ffffffff 00000051 ffffffff 00000000 ++vpkudum: Inputs: ffffffff 00000051 00000000 00000000 ++ Output: ffffffff 00000051 00000000 00000000 ++vpkudum: Inputs: ffffffff 00000051 ffffffff 00000051 ++ Output: ffffffff 00000051 ffffffff 00000051 + + vpmsumd: 0102030405060708 @@ 0102030405060708 ==> 0040004000400040 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 0045004500410015 + vpmsumd: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 07c007c006d00735 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> a260a260a374a2c5 ++vpmsumd: 0102030405060708 @@ 00007fffffffffff ==> 07060182fc7efe7f ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 0478fefc030202f8 ++vpmsumd: 0102030405060708 @@ 0000800000000000 ==> 0000008101820283 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 0384000000000000 ++vpmsumd: 0102030405060708 @@ ffffffffffffffff ==> 00fe0103fcfdfd05 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 242986336e9c6fc7 + vpmsumd: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> 07c007c006d00735 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> a260a260a374a2c5 + vpmsumd: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> 0040004000400040 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> 0045004500410015 ++vpmsumd: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> 575629aad456d657 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> 2c50aeac535252a8 ++vpmsumd: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> 000078f979fa7afb ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> 7bfc000000000000 ++vpmsumd: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> 50ae5153acadad66 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> b7ba15a0fd0ffc67 ++vpmsumd: 00007fffffffffff @@ 0102030405060708 ==> 07060182fc7efe7f ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 0478fefc030202f8 ++vpmsumd: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 575629aad456d657 ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> 2c50aeac535252a8 ++vpmsumd: 00007fffffffffff @@ 00007fffffffffff ==> 5555555515555555 ++ ffff000000000000 @@ ffff000000000000 ==> 5555555555555555 ++vpmsumd: 00007fffffffffff @@ 0000800000000000 ==> 000000003fffffff ++ ffff000000000000 @@ 0000000000000000 ==> ffff800000000000 ++vpmsumd: 00007fffffffffff @@ ffffffffffffffff ==> 00002aaaaaaaaa9a ++ ffff000000000000 @@ 0000000000000051 ==> 0030d55555555555 ++vpmsumd: 0000800000000000 @@ 0102030405060708 ==> 0000008101820283 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 0384000000000000 ++vpmsumd: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 000078f979fa7afb ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 7bfc000000000000 ++vpmsumd: 0000800000000000 @@ 00007fffffffffff ==> 000000003fffffff ++ 0000000000000000 @@ ffff000000000000 ==> ffff800000000000 ++vpmsumd: 0000800000000000 @@ 0000800000000000 ==> 0000000040000000 ++ 0000000000000000 @@ 0000000000000000 ==> 0000000000000000 ++vpmsumd: 0000800000000000 @@ ffffffffffffffff ==> 00007fffffffffff ++ 0000000000000000 @@ 0000000000000051 ==> ffff800000000000 ++vpmsumd: ffffffffffffffff @@ 0102030405060708 ==> 00fe0103fcfdfd05 ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 242986336e9c6fc7 ++vpmsumd: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> 50ae5153acadad66 ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> b7ba15a0fd0ffc67 ++vpmsumd: ffffffffffffffff @@ 00007fffffffffff ==> 00002aaaaaaaaa9a ++ 0000000000000051 @@ ffff000000000000 ==> 0030d55555555555 ++vpmsumd: ffffffffffffffff @@ 0000800000000000 ==> 00007fffffffffff ++ 0000000000000051 @@ 0000000000000000 ==> ffff800000000000 ++vpmsumd: ffffffffffffffff @@ ffffffffffffffff ==> 5555555555555555 ++ 0000000000000051 @@ 0000000000000051 ==> 5555555555554454 + + vnand: 0102030405060708 @@ 0102030405060708 ==> fefdfcfbfaf9f8f7 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> f6f5f4f3f1f2f1f0 + vnand: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> fefdfcfbfaf9f8f7 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> f6f5f4f3f1f2f1f0 ++vnand: 0102030405060708 @@ 00007fffffffffff ==> fffffcfbfaf9f8f7 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> f6f5ffffffffffff ++vnand: 0102030405060708 @@ 0000800000000000 ==> ffffffffffffffff ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> ffffffffffffffff ++vnand: 0102030405060708 @@ ffffffffffffffff ==> fefdfcfbfaf9f8f7 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> fffffffffffffffe + vnand: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> fefdfcfbfaf9f8f7 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> f6f5f4f3f1f2f1f0 + vnand: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> 0e0d0c0b0a090807 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> 0605040301020100 ++vnand: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> ffff8c0b0a090807 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> 0605ffffffffffff ++vnand: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> ffff7fffffffffff ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> ffffffffffffffff ++vnand: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> 0e0d0c0b0a090807 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> ffffffffffffffae ++vnand: 00007fffffffffff @@ 0102030405060708 ==> fffffcfbfaf9f8f7 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> f6f5ffffffffffff ++vnand: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> ffff8c0b0a090807 ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> 0605ffffffffffff ++vnand: 00007fffffffffff @@ 00007fffffffffff ==> ffff800000000000 ++ ffff000000000000 @@ ffff000000000000 ==> 0000ffffffffffff ++vnand: 00007fffffffffff @@ 0000800000000000 ==> ffffffffffffffff ++ ffff000000000000 @@ 0000000000000000 ==> ffffffffffffffff ++vnand: 00007fffffffffff @@ ffffffffffffffff ==> ffff800000000000 ++ ffff000000000000 @@ 0000000000000051 ==> ffffffffffffffff ++vnand: 0000800000000000 @@ 0102030405060708 ==> ffffffffffffffff ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> ffffffffffffffff ++vnand: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> ffff7fffffffffff ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> ffffffffffffffff ++vnand: 0000800000000000 @@ 00007fffffffffff ==> ffffffffffffffff ++ 0000000000000000 @@ ffff000000000000 ==> ffffffffffffffff ++vnand: 0000800000000000 @@ 0000800000000000 ==> ffff7fffffffffff ++ 0000000000000000 @@ 0000000000000000 ==> ffffffffffffffff ++vnand: 0000800000000000 @@ ffffffffffffffff ==> ffff7fffffffffff ++ 0000000000000000 @@ 0000000000000051 ==> ffffffffffffffff ++vnand: ffffffffffffffff @@ 0102030405060708 ==> fefdfcfbfaf9f8f7 ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> fffffffffffffffe ++vnand: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> 0e0d0c0b0a090807 ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> ffffffffffffffae ++vnand: ffffffffffffffff @@ 00007fffffffffff ==> ffff800000000000 ++ 0000000000000051 @@ ffff000000000000 ==> ffffffffffffffff ++vnand: ffffffffffffffff @@ 0000800000000000 ==> ffff7fffffffffff ++ 0000000000000051 @@ 0000000000000000 ==> ffffffffffffffff ++vnand: ffffffffffffffff @@ ffffffffffffffff ==> 0000000000000000 ++ 0000000000000051 @@ 0000000000000051 ==> ffffffffffffffae + + vorc: 0102030405060708 @@ 0102030405060708 ==> ffffffffffffffff + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> ffffffffffffffff + vorc: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0f0f0f0f0f0f0f0f + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 0f0f0f0f0f0f0f0f ++vorc: 0102030405060708 @@ 00007fffffffffff ==> ffff830405060708 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 090affffffffffff ++vorc: 0102030405060708 @@ 0000800000000000 ==> ffff7fffffffffff ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> ffffffffffffffff ++vorc: 0102030405060708 @@ ffffffffffffffff ==> 0102030405060708 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> ffffffffffffffaf + vorc: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> ffffffffffffffff + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> ffffffffffffffff + vorc: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffffff + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> ffffffffffffffff ++vorc: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> fffff3f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> f9faffffffffffff ++vorc: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> ffffffffffffffff ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> ffffffffffffffff ++vorc: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> f1f2f3f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> ffffffffffffffff ++vorc: 00007fffffffffff @@ 0102030405060708 ==> fefdffffffffffff ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> fffff4f3f1f2f1f0 ++vorc: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 0e0d7fffffffffff ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> ffff040301020100 ++vorc: 00007fffffffffff @@ 00007fffffffffff ==> ffffffffffffffff ++ ffff000000000000 @@ ffff000000000000 ==> ffffffffffffffff ++vorc: 00007fffffffffff @@ 0000800000000000 ==> ffff7fffffffffff ++ ffff000000000000 @@ 0000000000000000 ==> ffffffffffffffff ++vorc: 00007fffffffffff @@ ffffffffffffffff ==> 00007fffffffffff ++ ffff000000000000 @@ 0000000000000051 ==> ffffffffffffffae ++vorc: 0000800000000000 @@ 0102030405060708 ==> fefdfcfbfaf9f8f7 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> f6f5f4f3f1f2f1f0 ++vorc: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0e0d8c0b0a090807 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0605040301020100 ++vorc: 0000800000000000 @@ 00007fffffffffff ==> ffff800000000000 ++ 0000000000000000 @@ ffff000000000000 ==> 0000ffffffffffff ++vorc: 0000800000000000 @@ 0000800000000000 ==> ffffffffffffffff ++ 0000000000000000 @@ 0000000000000000 ==> ffffffffffffffff ++vorc: 0000800000000000 @@ ffffffffffffffff ==> 0000800000000000 ++ 0000000000000000 @@ 0000000000000051 ==> ffffffffffffffae ++vorc: ffffffffffffffff @@ 0102030405060708 ==> ffffffffffffffff ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> f6f5f4f3f1f2f1f1 ++vorc: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffffff ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 0605040301020151 ++vorc: ffffffffffffffff @@ 00007fffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ ffff000000000000 ==> 0000ffffffffffff ++vorc: ffffffffffffffff @@ 0000800000000000 ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000000 ==> ffffffffffffffff ++vorc: ffffffffffffffff @@ ffffffffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000051 ==> ffffffffffffffff + + veqv: 0102030405060708 @@ 0102030405060708 ==> ffffffffffffffff + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> ffffffffffffffff + veqv: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0f0f0f0f0f0f0f0f + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 0f0f0f0f0f0f0f0f ++veqv: 0102030405060708 @@ 00007fffffffffff ==> fefd830405060708 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 090af4f3f1f2f1f0 ++veqv: 0102030405060708 @@ 0000800000000000 ==> fefd7cfbfaf9f8f7 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> f6f5f4f3f1f2f1f0 ++veqv: 0102030405060708 @@ ffffffffffffffff ==> 0102030405060708 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> f6f5f4f3f1f2f1a1 + veqv: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> 0f0f0f0f0f0f0f0f + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 0f0f0f0f0f0f0f0f + veqv: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffffff + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> ffffffffffffffff ++veqv: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> 0e0d73f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> f9fa040301020100 ++veqv: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> 0e0d8c0b0a090807 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> 0605040301020100 ++veqv: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> f1f2f3f4f5f6f7f8 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> 0605040301020151 ++veqv: 00007fffffffffff @@ 0102030405060708 ==> fefd830405060708 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 090af4f3f1f2f1f0 ++veqv: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 0e0d73f4f5f6f7f8 ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> f9fa040301020100 ++veqv: 00007fffffffffff @@ 00007fffffffffff ==> ffffffffffffffff ++ ffff000000000000 @@ ffff000000000000 ==> ffffffffffffffff ++veqv: 00007fffffffffff @@ 0000800000000000 ==> ffff000000000000 ++ ffff000000000000 @@ 0000000000000000 ==> 0000ffffffffffff ++veqv: 00007fffffffffff @@ ffffffffffffffff ==> 00007fffffffffff ++ ffff000000000000 @@ 0000000000000051 ==> 0000ffffffffffae ++veqv: 0000800000000000 @@ 0102030405060708 ==> fefd7cfbfaf9f8f7 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> f6f5f4f3f1f2f1f0 ++veqv: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0e0d8c0b0a090807 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0605040301020100 ++veqv: 0000800000000000 @@ 00007fffffffffff ==> ffff000000000000 ++ 0000000000000000 @@ ffff000000000000 ==> 0000ffffffffffff ++veqv: 0000800000000000 @@ 0000800000000000 ==> ffffffffffffffff ++ 0000000000000000 @@ 0000000000000000 ==> ffffffffffffffff ++veqv: 0000800000000000 @@ ffffffffffffffff ==> 0000800000000000 ++ 0000000000000000 @@ 0000000000000051 ==> ffffffffffffffae ++veqv: ffffffffffffffff @@ 0102030405060708 ==> 0102030405060708 ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> f6f5f4f3f1f2f1a1 ++veqv: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> f1f2f3f4f5f6f7f8 ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 0605040301020151 ++veqv: ffffffffffffffff @@ 00007fffffffffff ==> 00007fffffffffff ++ 0000000000000051 @@ ffff000000000000 ==> 0000ffffffffffae ++veqv: ffffffffffffffff @@ 0000800000000000 ==> 0000800000000000 ++ 0000000000000051 @@ 0000000000000000 ==> ffffffffffffffae ++veqv: ffffffffffffffff @@ ffffffffffffffff ==> ffffffffffffffff ++ 0000000000000051 @@ 0000000000000051 ==> ffffffffffffffff + + vcipher: 0102030405060708 @@ 0102030405060708 ==> 15abdc2823b74b86 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 22037bc3e1e25abc + vcipher: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> e55b2cd8d347bb76 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> d2f38b331112aa4c ++vcipher: 0102030405060708 @@ 00007fffffffffff ==> 14a9a0d3d94eb371 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> d4f670cfefef54b3 ++vcipher: 0102030405060708 @@ 0000800000000000 ==> 14a95f2c26b14c8e ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 2b0970cfefef54b3 ++vcipher: 0102030405060708 @@ ffffffffffffffff ==> eb5620d3d94eb371 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 2b0970cfefef54e2 + vcipher: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> 8720c49da1d37bca + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 906d1f673bb72743 + vcipher: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> 77d0346d51238b3a + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> 609def97cb47d7b3 ++vcipher: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> 8622b8665b2a833d ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> 6698146b35ba294c ++vcipher: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> 86224799a4d57cc2 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> 9967146b35ba294c ++vcipher: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> 79dd38665b2a833d ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> 9967146b35ba291d ++vcipher: 00007fffffffffff @@ 0102030405060708 ==> fd8b1512668ffb6b ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 44a1fbab18f18719 ++vcipher: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 0d7be5e2967f0b9b ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> b4510b5be80177e9 ++vcipher: 00007fffffffffff @@ 00007fffffffffff ==> fc8969e99c76039c ++ ffff000000000000 @@ ffff000000000000 ==> b254f0a716fc8916 ++vcipher: 00007fffffffffff @@ 0000800000000000 ==> fc8996166389fc63 ++ ffff000000000000 @@ 0000000000000000 ==> 4dabf0a716fc8916 ++vcipher: 00007fffffffffff @@ ffffffffffffffff ==> 0376e9e99c76039c ++ ffff000000000000 @@ 0000000000000051 ==> 4dabf0a716fc8947 ++vcipher: 0000800000000000 @@ 0102030405060708 ==> 626160676665646b ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> c4802fc16d6e6d6c ++vcipher: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 929190979695949b ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 3470df319d9e9d9c ++vcipher: 0000800000000000 @@ 00007fffffffffff ==> 63631c9c9c9c9c9c ++ 0000000000000000 @@ ffff000000000000 ==> 327524cd63636363 ++vcipher: 0000800000000000 @@ 0000800000000000 ==> 6363e36363636363 ++ 0000000000000000 @@ 0000000000000000 ==> cd8a24cd63636363 ++vcipher: 0000800000000000 @@ ffffffffffffffff ==> 9c9c9c9c9c9c9c9c ++ 0000000000000000 @@ 0000000000000051 ==> cd8a24cd63636332 ++vcipher: ffffffffffffffff @@ 0102030405060708 ==> a54cadf2f9658e1e ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 6a831df0871bf26c ++vcipher: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> 55bc5d0209957eee ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 9a73ed0077eb029c ++vcipher: ffffffffffffffff @@ 00007fffffffffff ==> a44ed109039c76e9 ++ 0000000000000051 @@ ffff000000000000 ==> 9c7616fc8916fc63 ++vcipher: ffffffffffffffff @@ 0000800000000000 ==> a44e2ef6fc638916 ++ 0000000000000051 @@ 0000000000000000 ==> 638916fc8916fc63 ++vcipher: ffffffffffffffff @@ ffffffffffffffff ==> 5bb15109039c76e9 ++ 0000000000000051 @@ 0000000000000051 ==> 638916fc8916fc32 + + vcipherlast: 0102030405060708 @@ 0102030405060708 ==> 7d6d28726e61acfa + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 08dd703ca57acbf1 + vcipherlast: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 8d9dd8829e915c0a + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> f82d80cc558a3b01 ++vcipherlast: 0102030405060708 @@ 00007fffffffffff ==> 7c6f54899498540d ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> fe287b30ab77c5fe ++vcipherlast: 0102030405060708 @@ 0000800000000000 ==> 7c6fab766b67abf2 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 01d77b30ab77c5fe ++vcipherlast: 0102030405060708 @@ ffffffffffffffff ==> 8390d4899498540d ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 01d77b30ab77c5af + vcipherlast: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> a0400c12e32bbcb7 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 905e064db58466bf + vcipherlast: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> 50b0fce213db4c47 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> 60aef6bd4574964f ++vcipherlast: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> a14270e919d24440 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> 66ab0d41bb8968b0 ++vcipherlast: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> a1428f16e62dbbbf ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> 99540d41bb8968b0 ++vcipherlast: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> 5ebdf0e919d24440 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> 99540d41bb8968e1 ++vcipherlast: 00007fffffffffff @@ 0102030405060708 ==> 621460671310641e ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 1f69d91a6d6e186c ++vcipherlast: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 92e49097e3e094ee ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> ef9929ea9d9ee89c ++vcipherlast: 00007fffffffffff @@ 00007fffffffffff ==> 63161c9ce9e99ce9 ++ ffff000000000000 @@ ffff000000000000 ==> e99cd21663631663 ++vcipherlast: 00007fffffffffff @@ 0000800000000000 ==> 6316e36316166316 ++ ffff000000000000 @@ 0000000000000000 ==> 1663d21663631663 ++vcipherlast: 00007fffffffffff @@ ffffffffffffffff ==> 9ce99c9ce9e99ce9 ++ ffff000000000000 @@ 0000000000000051 ==> 1663d21663631632 ++vcipherlast: 0000800000000000 @@ 0102030405060708 ==> 626160676665646b ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 6a69c66f6d6e6d6c ++vcipherlast: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 929190979695949b ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 9a99369f9d9e9d9c ++vcipherlast: 0000800000000000 @@ 00007fffffffffff ==> 63631c9c9c9c9c9c ++ 0000000000000000 @@ ffff000000000000 ==> 9c9ccd6363636363 ++vcipherlast: 0000800000000000 @@ 0000800000000000 ==> 6363e36363636363 ++ 0000000000000000 @@ 0000000000000000 ==> 6363cd6363636363 ++vcipherlast: 0000800000000000 @@ ffffffffffffffff ==> 9c9c9c9c9c9c9c9c ++ 0000000000000000 @@ 0000000000000051 ==> 6363cd6363636332 ++vcipherlast: ffffffffffffffff @@ 0102030405060708 ==> 171460d51365641e ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 6a691d1a6d1b186c ++vcipherlast: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> e7e49025e39594ee ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 9a99edea9debe89c ++vcipherlast: ffffffffffffffff @@ 00007fffffffffff ==> 16161c2ee99c9ce9 ++ 0000000000000051 @@ ffff000000000000 ==> 9c9c161663161663 ++vcipherlast: ffffffffffffffff @@ 0000800000000000 ==> 1616e3d116636316 ++ 0000000000000051 @@ 0000000000000000 ==> 6363161663161663 ++vcipherlast: ffffffffffffffff @@ ffffffffffffffff ==> e9e99c2ee99c9ce9 ++ 0000000000000051 @@ 0000000000000051 ==> 6363161663161632 + + vncipher: 0102030405060708 @@ 0102030405060708 ==> fe67ce881a80f569 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 19db0b0605541639 + vncipher: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0e973e78ea700599 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> e92bfbf6f5a4e6c9 ++vncipher: 0102030405060708 @@ 00007fffffffffff ==> de98809d822f77d0 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> 1424f3081f45082e ++vncipher: 0102030405060708 @@ 0000800000000000 ==> 0facae567dd0882f ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 3aef223c1f45082e ++vncipher: 0102030405060708 @@ ffffffffffffffff ==> 2aa41045822f77d0 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 3aef223cf0f5456d + vncipher: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> 8b10c2d5607a5569 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 581826de46277b9c + vncipher: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> 7be03225908aa599 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> a8e8d62eb6d78b6c ++vncipher: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> abef8cc0f8d5d7d0 ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> 55e7ded05c36658b ++vncipher: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> 7adba20b072a282f ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> 7b2c0fe45c36658b ++vncipher: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> 5fd31c18f8d5d7d0 ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> 7b2c0fe4b38628c8 ++vncipher: 00007fffffffffff @@ 0102030405060708 ==> 359e61e1b44edf06 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> ec338260e6209378 ++vncipher: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> c56e911144be2ff6 ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> 1cc3729016d06388 ++vncipher: 00007fffffffffff @@ 00007fffffffffff ==> 15612ff42ce15dbf ++ ffff000000000000 @@ ffff000000000000 ==> e1cc7a6efc318d6f ++vncipher: 00007fffffffffff @@ 0000800000000000 ==> c455013fd31ea240 ++ ffff000000000000 @@ 0000000000000000 ==> cf07ab5afc318d6f ++vncipher: 00007fffffffffff @@ ffffffffffffffff ==> e15dbf2c2ce15dbf ++ ffff000000000000 @@ 0000000000000051 ==> cf07ab5a1381c02c ++vncipher: 0000800000000000 @@ 0102030405060708 ==> 796e736035022f14 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> cfb37d6d48434c45 ++vncipher: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 899e8390c5f2dfe4 ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> 3f438d9db8b3bcb5 ++vncipher: 0000800000000000 @@ 00007fffffffffff ==> 59913d75adadadad ++ 0000000000000000 @@ ffff000000000000 ==> c24c856352525252 ++vncipher: 0000800000000000 @@ 0000800000000000 ==> 88a513be52525252 ++ 0000000000000000 @@ 0000000000000000 ==> ec87545752525252 ++vncipher: 0000800000000000 @@ ffffffffffffffff ==> adadadadadadadad ++ 0000000000000000 @@ 0000000000000051 ==> ec875457bde21f11 ++vncipher: ffffffffffffffff @@ 0102030405060708 ==> b4d291f3a6cf93f6 ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> ba54db13f4a1df88 ++vncipher: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> 44226103563f6306 ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> 4aa42be304512f78 ++vncipher: ffffffffffffffff @@ 00007fffffffffff ==> 942ddfe63e60114f ++ 0000000000000051 @@ ffff000000000000 ==> b7ab231deeb0c19f ++vncipher: ffffffffffffffff @@ 0000800000000000 ==> 4519f12dc19feeb0 ++ 0000000000000051 @@ 0000000000000000 ==> 9960f229eeb0c19f ++vncipher: ffffffffffffffff @@ ffffffffffffffff ==> 60114f3e3e60114f ++ 0000000000000051 @@ 0000000000000051 ==> 9960f22901008cdc + + vncipherlast: 0102030405060708 @@ 0102030405060708 ==> 08f19dbb336cd089 + 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 49afdef7d9ae363f + vncipherlast: 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> f8016d4bc39c2079 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> b95f2e07295ec6cf ++vncipherlast: 0102030405060708 @@ 00007fffffffffff ==> 09f3e140c995287e ++ 090a0b0c0e0d0e0f @@ ffff000000000000 ==> bf5ad5fbd7a33830 ++vncipherlast: 0102030405060708 @@ 0000800000000000 ==> 09f31ebf366ad781 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 ==> 40a5d5fbd7a33830 ++vncipherlast: 0102030405060708 @@ ffffffffffffffff ==> f60c6140c995287e ++ 090a0b0c0e0d0e0f @@ 0000000000000051 ==> 40a5d5fbd7a33861 + vncipherlast: f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> 2a2360e572020b5d + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 60dc7571021928b5 + vncipherlast: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> dad3901582f2fbad + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> 902c8581f2e9d845 ++vncipherlast: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff ==> 2b211c1e88fbf3aa ++ f9fafbfcfefdfeff @@ ffff000000000000 ==> 96297e7d0c1426ba ++vncipherlast: f1f2f3f4f5f6f7f8 @@ 0000800000000000 ==> 2b21e3e177040c55 ++ f9fafbfcfefdfeff @@ 0000000000000000 ==> 69d67e7d0c1426ba ++vncipherlast: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff ==> d4de9c1e88fbf3aa ++ f9fafbfcfefdfeff @@ 0000000000000051 ==> 69d67e7d0c1426eb ++vncipherlast: 00007fffffffffff @@ 0102030405060708 ==> 535051797854555a ++ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 7477605e5c707372 ++vncipherlast: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> a3a0a18988a4a5aa ++ ffff000000000000 @@ f9fafbfcfefdfeff ==> 848790aeac808382 ++vncipherlast: 00007fffffffffff @@ 00007fffffffffff ==> 52522d8282adadad ++ ffff000000000000 @@ ffff000000000000 ==> 82826b52527d7d7d ++vncipherlast: 00007fffffffffff @@ 0000800000000000 ==> 5252d27d7d525252 ++ ffff000000000000 @@ 0000000000000000 ==> 7d7d6b52527d7d7d ++vncipherlast: 00007fffffffffff @@ ffffffffffffffff ==> adadad8282adadad ++ ffff000000000000 @@ 0000000000000051 ==> 7d7d6b52527d7d2c ++vncipherlast: 0000800000000000 @@ 0102030405060708 ==> 535051565754555a ++ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 5b58315e5c5f5c5d ++vncipherlast: 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> a3a0a1a6a7a4a5aa ++ 0000000000000000 @@ f9fafbfcfefdfeff ==> aba8c1aeacafacad ++vncipherlast: 0000800000000000 @@ 00007fffffffffff ==> 52522dadadadadad ++ 0000000000000000 @@ ffff000000000000 ==> adad3a5252525252 ++vncipherlast: 0000800000000000 @@ 0000800000000000 ==> 5252d25252525252 ++ 0000000000000000 @@ 0000000000000000 ==> 52523a5252525252 ++vncipherlast: 0000800000000000 @@ ffffffffffffffff ==> adadadadadadadad ++ 0000000000000000 @@ 0000000000000051 ==> 52523a5252525203 ++vncipherlast: ffffffffffffffff @@ 0102030405060708 ==> 7c505179787b555a ++ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 5b77767c5c5f7372 ++vncipherlast: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> 8ca0a189888ba5aa ++ 0000000000000051 @@ f9fafbfcfefdfeff ==> ab87868cacaf8382 ++vncipherlast: ffffffffffffffff @@ 00007fffffffffff ==> 7d522d828282adad ++ 0000000000000051 @@ ffff000000000000 ==> ad827d7052527d7d ++vncipherlast: ffffffffffffffff @@ 0000800000000000 ==> 7d52d27d7d7d5252 ++ 0000000000000051 @@ 0000000000000000 ==> 527d7d7052527d7d ++vncipherlast: ffffffffffffffff @@ ffffffffffffffff ==> 82adad828282adad ++ 0000000000000051 @@ 0000000000000051 ==> 527d7d7052527d2c + + vmulouw: 01020304 05060708 090a0b0c 0e0d0e0f ==> 00193c6aa4917040 00c56e34124ba4e1 + vmulouw: 01020304 05060708 090a0b0c 0e0d0e0f ==> 04d39d63184f87c0 0dfee4d8b9c6e2f1 +@@ -273,18 +1222,81 @@ vpmsumw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> 0010001000100050 00150015001100 + + vpkudus: 000000007c118a2b, 00000000f1112345 @@ 000000007c118a2b, 00000000f1112345 ==> 7c118a2b f1112345 7c118a2b f1112345 + vpkudus: 000000007c118a2b, 00000000f1112345 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> 7c118a2b f1112345 ffffffff ffffffff ++vpkudus: 000000007c118a2b, 00000000f1112345 @@ 0000000000000000, 0000000000000000 ==> 7c118a2b f1112345 00000000 00000000 ++vpkudus: 000000007c118a2b, 00000000f1112345 @@ 0000000000000000, 0000000000000000 ==> 7c118a2b f1112345 00000000 00000000 ++vpkudus: 000000007c118a2b, 00000000f1112345 @@ 0000000000000000, 0000000000000031 ==> 7c118a2b f1112345 00000000 00000031 + vpkudus: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 000000007c118a2b, 00000000f1112345 ==> ffffffff ffffffff 7c118a2b f1112345 + vpkudus: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> ffffffff ffffffff ffffffff ffffffff ++vpkudus: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 0000000000000000, 0000000000000000 ==> ffffffff ffffffff 00000000 00000000 ++vpkudus: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 0000000000000000, 0000000000000000 ==> ffffffff ffffffff 00000000 00000000 ++vpkudus: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 0000000000000000, 0000000000000031 ==> ffffffff ffffffff 00000000 00000031 ++vpkudus: 0000000000000000, 0000000000000000 @@ 000000007c118a2b, 00000000f1112345 ==> 00000000 00000000 7c118a2b f1112345 ++vpkudus: 0000000000000000, 0000000000000000 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> 00000000 00000000 ffffffff ffffffff ++vpkudus: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000000 00000000 00000000 ++vpkudus: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000000 00000000 00000000 ++vpkudus: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000031 ==> 00000000 00000000 00000000 00000031 ++vpkudus: 0000000000000000, 0000000000000000 @@ 000000007c118a2b, 00000000f1112345 ==> 00000000 00000000 7c118a2b f1112345 ++vpkudus: 0000000000000000, 0000000000000000 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> 00000000 00000000 ffffffff ffffffff ++vpkudus: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000000 00000000 00000000 ++vpkudus: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000000 00000000 00000000 ++vpkudus: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000031 ==> 00000000 00000000 00000000 00000031 ++vpkudus: 0000000000000000, 0000000000000031 @@ 000000007c118a2b, 00000000f1112345 ==> 00000000 00000031 7c118a2b f1112345 ++vpkudus: 0000000000000000, 0000000000000031 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> 00000000 00000031 ffffffff ffffffff ++vpkudus: 0000000000000000, 0000000000000031 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000031 00000000 00000000 ++vpkudus: 0000000000000000, 0000000000000031 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000031 00000000 00000000 ++vpkudus: 0000000000000000, 0000000000000031 @@ 0000000000000000, 0000000000000031 ==> 00000000 00000031 00000000 00000031 + + vpksdus: 000000007c118a2b, 00000000f1112345 @@ 000000007c118a2b, 00000000f1112345 ==> 7c118a2b f1112345 7c118a2b f1112345 + vpksdus: 000000007c118a2b, 00000000f1112345 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> 7c118a2b f1112345 ffffffff 00000000 ++vpksdus: 000000007c118a2b, 00000000f1112345 @@ 0000000000000000, 0000000000000000 ==> 7c118a2b f1112345 00000000 00000000 ++vpksdus: 000000007c118a2b, 00000000f1112345 @@ 0000000000000000, 0000000000000000 ==> 7c118a2b f1112345 00000000 00000000 ++vpksdus: 000000007c118a2b, 00000000f1112345 @@ 0000000000000000, 0000000000000031 ==> 7c118a2b f1112345 00000000 00000031 + vpksdus: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 000000007c118a2b, 00000000f1112345 ==> ffffffff 00000000 7c118a2b f1112345 + vpksdus: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> ffffffff 00000000 ffffffff 00000000 ++vpksdus: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 0000000000000000, 0000000000000000 ==> ffffffff 00000000 00000000 00000000 ++vpksdus: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 0000000000000000, 0000000000000000 ==> ffffffff 00000000 00000000 00000000 ++vpksdus: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 0000000000000000, 0000000000000031 ==> ffffffff 00000000 00000000 00000031 ++vpksdus: 0000000000000000, 0000000000000000 @@ 000000007c118a2b, 00000000f1112345 ==> 00000000 00000000 7c118a2b f1112345 ++vpksdus: 0000000000000000, 0000000000000000 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> 00000000 00000000 ffffffff 00000000 ++vpksdus: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000000 00000000 00000000 ++vpksdus: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000000 00000000 00000000 ++vpksdus: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000031 ==> 00000000 00000000 00000000 00000031 ++vpksdus: 0000000000000000, 0000000000000000 @@ 000000007c118a2b, 00000000f1112345 ==> 00000000 00000000 7c118a2b f1112345 ++vpksdus: 0000000000000000, 0000000000000000 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> 00000000 00000000 ffffffff 00000000 ++vpksdus: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000000 00000000 00000000 ++vpksdus: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000000 00000000 00000000 ++vpksdus: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000031 ==> 00000000 00000000 00000000 00000031 ++vpksdus: 0000000000000000, 0000000000000031 @@ 000000007c118a2b, 00000000f1112345 ==> 00000000 00000031 7c118a2b f1112345 ++vpksdus: 0000000000000000, 0000000000000031 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> 00000000 00000031 ffffffff 00000000 ++vpksdus: 0000000000000000, 0000000000000031 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000031 00000000 00000000 ++vpksdus: 0000000000000000, 0000000000000031 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000031 00000000 00000000 ++vpksdus: 0000000000000000, 0000000000000031 @@ 0000000000000000, 0000000000000031 ==> 00000000 00000031 00000000 00000031 + + vpksdss: 000000007c118a2b, 00000000f1112345 @@ 000000007c118a2b, 00000000f1112345 ==> 7c118a2b 7fffffff 7c118a2b 7fffffff + vpksdss: 000000007c118a2b, 00000000f1112345 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> 7c118a2b 7fffffff 7fffffff 80000000 ++vpksdss: 000000007c118a2b, 00000000f1112345 @@ 0000000000000000, 0000000000000000 ==> 7c118a2b 7fffffff 00000000 00000000 ++vpksdss: 000000007c118a2b, 00000000f1112345 @@ 0000000000000000, 0000000000000000 ==> 7c118a2b 7fffffff 00000000 00000000 ++vpksdss: 000000007c118a2b, 00000000f1112345 @@ 0000000000000000, 0000000000000031 ==> 7c118a2b 7fffffff 00000000 00000031 + vpksdss: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 000000007c118a2b, 00000000f1112345 ==> 7fffffff 80000000 7c118a2b 7fffffff + vpksdss: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> 7fffffff 80000000 7fffffff 80000000 ++vpksdss: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 0000000000000000, 0000000000000000 ==> 7fffffff 80000000 00000000 00000000 ++vpksdss: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 0000000000000000, 0000000000000000 ==> 7fffffff 80000000 00000000 00000000 ++vpksdss: 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff @@ 0000000000000000, 0000000000000031 ==> 7fffffff 80000000 00000000 00000031 ++vpksdss: 0000000000000000, 0000000000000000 @@ 000000007c118a2b, 00000000f1112345 ==> 00000000 00000000 7c118a2b 7fffffff ++vpksdss: 0000000000000000, 0000000000000000 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> 00000000 00000000 7fffffff 80000000 ++vpksdss: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000000 00000000 00000000 ++vpksdss: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000000 00000000 00000000 ++vpksdss: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000031 ==> 00000000 00000000 00000000 00000031 ++vpksdss: 0000000000000000, 0000000000000000 @@ 000000007c118a2b, 00000000f1112345 ==> 00000000 00000000 7c118a2b 7fffffff ++vpksdss: 0000000000000000, 0000000000000000 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> 00000000 00000000 7fffffff 80000000 ++vpksdss: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000000 00000000 00000000 ++vpksdss: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000000 00000000 00000000 ++vpksdss: 0000000000000000, 0000000000000000 @@ 0000000000000000, 0000000000000031 ==> 00000000 00000000 00000000 00000031 ++vpksdss: 0000000000000000, 0000000000000031 @@ 000000007c118a2b, 00000000f1112345 ==> 00000000 00000031 7c118a2b 7fffffff ++vpksdss: 0000000000000000, 0000000000000031 @@ 01f2f3f4f5f6f7f8, f9fafbfcfefdfeff ==> 00000000 00000031 7fffffff 80000000 ++vpksdss: 0000000000000000, 0000000000000031 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000031 00000000 00000000 ++vpksdss: 0000000000000000, 0000000000000031 @@ 0000000000000000, 0000000000000000 ==> 00000000 00000031 00000000 00000000 ++vpksdss: 0000000000000000, 0000000000000031 @@ 0000000000000000, 0000000000000031 ==> 00000000 00000031 00000000 00000031 + + vupkhsw: 01020304 05060708 090a0b0c 0e0d0e0f ==> 0000000001020304 0000000005060708 + vupkhsw: f1f2f3f4 f5f6f7f8 f9fafbfc fefdfeff ==> fffffffff1f2f3f4 fffffffff5f6f7f8 +@@ -300,6 +1312,18 @@ vpermxor: 0102030405060708 @@ f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> f3f2f5f4 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> fbfafdfffffcfffe + vpermxor: 0102030405060708 @@ f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> fdfcfbfaf9f8f7f6 + 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> f5f4f3f1f1f2f1f0 ++vpermxor: 0102030405060708 @@ 00007fffffffffff @@ 0102030405060708 ==> 017efefefefefefe ++ 090a0b0c0e0d0e0f @@ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> fe01010101010101 ++vpermxor: 0102030405060708 @@ 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 0f70f0f0f0f0f0f0 ++ 090a0b0c0e0d0e0f @@ ffff000000000000 @@ f9fafbfcfefdfeff ==> f00f0f0f0f0f0f0f ++vpermxor: 0102030405060708 @@ 0000800000000000 @@ 0102030405060708 ==> 0181010101010101 ++ 090a0b0c0e0d0e0f @@ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 0101010101010101 ++vpermxor: 0102030405060708 @@ 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0f8f0f0f0f0f0f0f ++ 090a0b0c0e0d0e0f @@ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0f0f0f0f0f0f0f0f ++vpermxor: 0102030405060708 @@ ffffffffffffffff @@ 0102030405060708 ==> fefefefefefefe01 ++ 090a0b0c0e0d0e0f @@ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 0101010101010150 ++vpermxor: 0102030405060708 @@ ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> f0f0f0f0f0f0f00f ++ 090a0b0c0e0d0e0f @@ 0000000000000051 @@ f9fafbfcfefdfeff ==> 0f0f0f0f0f0f0f5e + vpermxor: f1f2f3f4f5f6f7f8 @@ 0102030405060708 @@ 0102030405060708 ==> f3f2f5f4f7f6f9f8 + f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> fbfafdfffffcfffe + vpermxor: f1f2f3f4f5f6f7f8 @@ 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> fdfcfbfaf9f8f7f6 +@@ -308,36 +1332,138 @@ vpermxor: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> 03020504 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 0b0a0d0f0f0c0f0e + vpermxor: f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> 0d0c0b0a09080706 + f9fafbfcfefdfeff @@ f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> 0504030101020100 ++vpermxor: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff @@ 0102030405060708 ==> f18e0e0e0e0e0e0e ++ f9fafbfcfefdfeff @@ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 0ef1f1f1f1f1f1f1 ++vpermxor: f1f2f3f4f5f6f7f8 @@ 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> ff80000000000000 ++ f9fafbfcfefdfeff @@ ffff000000000000 @@ f9fafbfcfefdfeff ==> 00ffffffffffffff ++vpermxor: f1f2f3f4f5f6f7f8 @@ 0000800000000000 @@ 0102030405060708 ==> f171f1f1f1f1f1f1 ++ f9fafbfcfefdfeff @@ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> f1f1f1f1f1f1f1f1 ++vpermxor: f1f2f3f4f5f6f7f8 @@ 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> ff7fffffffffffff ++ f9fafbfcfefdfeff @@ 0000000000000000 @@ f9fafbfcfefdfeff ==> ffffffffffffffff ++vpermxor: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff @@ 0102030405060708 ==> 0e0e0e0e0e0e0ef1 ++ f9fafbfcfefdfeff @@ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> f1f1f1f1f1f1f1a0 ++vpermxor: f1f2f3f4f5f6f7f8 @@ ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> 00000000000000ff ++ f9fafbfcfefdfeff @@ 0000000000000051 @@ f9fafbfcfefdfeff ==> ffffffffffffffae ++vpermxor: 00007fffffffffff @@ 0102030405060708 @@ 0102030405060708 ==> 0203040506070809 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 0a0b0c0e0e0d0e0f ++vpermxor: 00007fffffffffff @@ 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0203040506070809 ++ ffff000000000000 @@ 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 0a0b0c0e0e0d0e0f ++vpermxor: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> f2f3f4f5f6f7f8f9 ++ ffff000000000000 @@ f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> fafbfcfefefdfeff ++vpermxor: 00007fffffffffff @@ f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> f2f3f4f5f6f7f8f9 ++ ffff000000000000 @@ f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> fafbfcfefefdfeff ++vpermxor: 00007fffffffffff @@ 00007fffffffffff @@ 0102030405060708 ==> 007fffffffffffff ++ ffff000000000000 @@ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> ff00000000000000 ++vpermxor: 00007fffffffffff @@ 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 007fffffffffffff ++ ffff000000000000 @@ ffff000000000000 @@ f9fafbfcfefdfeff ==> ff00000000000000 ++vpermxor: 00007fffffffffff @@ 0000800000000000 @@ 0102030405060708 ==> 0080000000000000 ++ ffff000000000000 @@ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vpermxor: 00007fffffffffff @@ 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0080000000000000 ++ ffff000000000000 @@ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vpermxor: 00007fffffffffff @@ ffffffffffffffff @@ 0102030405060708 ==> ffffffffffffff00 ++ ffff000000000000 @@ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 0000000000000051 ++vpermxor: 00007fffffffffff @@ ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffff00 ++ ffff000000000000 @@ 0000000000000051 @@ f9fafbfcfefdfeff ==> 0000000000000051 ++vpermxor: 0000800000000000 @@ 0102030405060708 @@ 0102030405060708 ==> 0203040506070809 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> 0a0b0c0e0e0d0e0f ++vpermxor: 0000800000000000 @@ 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 0203040506070809 ++ 0000000000000000 @@ 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 0a0b0c0e0e0d0e0f ++vpermxor: 0000800000000000 @@ f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> f2f3f4f5f6f7f8f9 ++ 0000000000000000 @@ f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> fafbfcfefefdfeff ++vpermxor: 0000800000000000 @@ f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> f2f3f4f5f6f7f8f9 ++ 0000000000000000 @@ f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> fafbfcfefefdfeff ++vpermxor: 0000800000000000 @@ 00007fffffffffff @@ 0102030405060708 ==> 007fffffffffffff ++ 0000000000000000 @@ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> ff00000000000000 ++vpermxor: 0000800000000000 @@ 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 007fffffffffffff ++ 0000000000000000 @@ ffff000000000000 @@ f9fafbfcfefdfeff ==> ff00000000000000 ++vpermxor: 0000800000000000 @@ 0000800000000000 @@ 0102030405060708 ==> 0080000000000000 ++ 0000000000000000 @@ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> 0000000000000000 ++vpermxor: 0000800000000000 @@ 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 0080000000000000 ++ 0000000000000000 @@ 0000000000000000 @@ f9fafbfcfefdfeff ==> 0000000000000000 ++vpermxor: 0000800000000000 @@ ffffffffffffffff @@ 0102030405060708 ==> ffffffffffffff00 ++ 0000000000000000 @@ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> 0000000000000051 ++vpermxor: 0000800000000000 @@ ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> ffffffffffffff00 ++ 0000000000000000 @@ 0000000000000051 @@ f9fafbfcfefdfeff ==> 0000000000000051 ++vpermxor: ffffffffffffffff @@ 0102030405060708 @@ 0102030405060708 ==> fdfcfbfaf9f8f7f6 ++ 0000000000000051 @@ 090a0b0c0e0d0e0f @@ 090a0b0c0e0d0e0f ==> f5f4f3f1f1f2f1f0 ++vpermxor: ffffffffffffffff @@ 0102030405060708 @@ f1f2f3f4f5f6f7f8 ==> 5352555457565958 ++ 0000000000000051 @@ 090a0b0c0e0d0e0f @@ f9fafbfcfefdfeff ==> 5b5a5d5f5f5c5f5e ++vpermxor: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 @@ 0102030405060708 ==> 0d0c0b0a09080706 ++ 0000000000000051 @@ f9fafbfcfefdfeff @@ 090a0b0c0e0d0e0f ==> 0504030101020100 ++vpermxor: ffffffffffffffff @@ f1f2f3f4f5f6f7f8 @@ f1f2f3f4f5f6f7f8 ==> a3a2a5a4a7a6a9a8 ++ 0000000000000051 @@ f9fafbfcfefdfeff @@ f9fafbfcfefdfeff ==> abaaadafafacafae ++vpermxor: ffffffffffffffff @@ 00007fffffffffff @@ 0102030405060708 ==> ff80000000000000 ++ 0000000000000051 @@ ffff000000000000 @@ 090a0b0c0e0d0e0f ==> 00ffffffffffffff ++vpermxor: ffffffffffffffff @@ 00007fffffffffff @@ f1f2f3f4f5f6f7f8 ==> 512eaeaeaeaeaeae ++ 0000000000000051 @@ ffff000000000000 @@ f9fafbfcfefdfeff ==> ae51515151515151 ++vpermxor: ffffffffffffffff @@ 0000800000000000 @@ 0102030405060708 ==> ff7fffffffffffff ++ 0000000000000051 @@ 0000000000000000 @@ 090a0b0c0e0d0e0f ==> ffffffffffffffff ++vpermxor: ffffffffffffffff @@ 0000800000000000 @@ f1f2f3f4f5f6f7f8 ==> 51d1515151515151 ++ 0000000000000051 @@ 0000000000000000 @@ f9fafbfcfefdfeff ==> 5151515151515151 ++vpermxor: ffffffffffffffff @@ ffffffffffffffff @@ 0102030405060708 ==> 00000000000000ff ++ 0000000000000051 @@ 0000000000000051 @@ 090a0b0c0e0d0e0f ==> ffffffffffffffae ++vpermxor: ffffffffffffffff @@ ffffffffffffffff @@ f1f2f3f4f5f6f7f8 ==> aeaeaeaeaeaeae51 ++ 0000000000000051 @@ 0000000000000051 @@ f9fafbfcfefdfeff ==> 5151515151515100 + + vclzb: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> 07060605050505040404040404040404 + vclzb: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vclzb: 00007fffffffffff @@ ffff000000000000 ==> 08080100000000000000080808080808 ++vclzb: 0000800000000000 @@ 0000000000000000 ==> 08080008080808080808080808080808 ++vclzb: ffffffffffffffff @@ 0000000000000051 ==> 00000000000000000808080808080801 + + vclzw: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> 00000007000000050000000400000004 + vclzw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vclzw: 00007fffffffffff @@ ffff000000000000 ==> 00000011000000000000000000000020 ++vclzw: 0000800000000000 @@ 0000000000000000 ==> 00000010000000200000002000000020 ++vclzw: ffffffffffffffff @@ 0000000000000051 ==> 00000000000000000000002000000019 + + vclzh: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> 00070006000500050004000400040004 + vclzh: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vclzh: 00007fffffffffff @@ ffff000000000000 ==> 00100001000000000000001000100010 ++vclzh: 0000800000000000 @@ 0000000000000000 ==> 00100000001000100010001000100010 ++vclzh: ffffffffffffffff @@ 0000000000000051 ==> 00000000000000000010001000100009 + + vclzd: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> 00000000000000070000000000000004 + vclzd: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vclzd: 00007fffffffffff @@ ffff000000000000 ==> 00000000000000110000000000000000 ++vclzd: 0000800000000000 @@ 0000000000000000 ==> 00000000000000100000000000000040 ++vclzd: ffffffffffffffff @@ 0000000000000051 ==> 00000000000000000000000000000039 + + vpopcntb: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> 01010201020203010202030203030304 + vpopcntb: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 05050605060607050606070607070708 ++vpopcntb: 00007fffffffffff @@ ffff000000000000 ==> 00000708080808080808000000000000 ++vpopcntb: 0000800000000000 @@ 0000000000000000 ==> 00000100000000000000000000000000 ++vpopcntb: ffffffffffffffff @@ 0000000000000051 ==> 08080808080808080000000000000003 + + vpopcnth: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> 00020003000400040004000500060007 + vpopcnth: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 000a000b000c000c000c000d000e000f ++vpopcnth: 00007fffffffffff @@ ffff000000000000 ==> 0000000f001000100010000000000000 ++vpopcnth: 0000800000000000 @@ 0000000000000000 ==> 00000001000000000000000000000000 ++vpopcnth: ffffffffffffffff @@ 0000000000000051 ==> 00100010001000100000000000000003 + + vpopcntw: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> 0000000500000008000000090000000d + vpopcntw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 0000001500000018000000190000001d ++vpopcntw: 00007fffffffffff @@ ffff000000000000 ==> 0000000f000000200000001000000000 ++vpopcntw: 0000800000000000 @@ 0000000000000000 ==> 00000001000000000000000000000000 ++vpopcntw: ffffffffffffffff @@ 0000000000000051 ==> 00000020000000200000000000000003 + + vpopcntd: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> 000000000000000d0000000000000016 + vpopcntd: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 000000000000002d0000000000000036 ++vpopcntd: 00007fffffffffff @@ ffff000000000000 ==> 000000000000002f0000000000000010 ++vpopcntd: 0000800000000000 @@ 0000000000000000 ==> 00000000000000010000000000000000 ++vpopcntd: ffffffffffffffff @@ 0000000000000051 ==> 00000000000000400000000000000003 + + vsbox: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> 7c777bf26b6fc53001672bfeabd7ab76 + vsbox: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> a1890dbfe6426841992d0fb0bb54bb16 ++vsbox: 00007fffffffffff @@ ffff000000000000 ==> 6363d216161616161616636363636363 ++vsbox: 0000800000000000 @@ 0000000000000000 ==> 6363cd63636363636363636363636363 ++vsbox: ffffffffffffffff @@ 0000000000000051 ==> 161616161616161663636363636363d1 + + vgbbd: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> 00000000011e66aa00000000ff1f6ba5 + vgbbd: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> ffffffff011e66aaffffffffff1f6ba5 ++vgbbd: 00007fffffffffff @@ ffff000000000000 ==> 1f3f3f3f3f3f3f3fc0c0c0c0c0c0c0c0 ++vgbbd: 0000800000000000 @@ 0000000000000000 ==> 20000000000000000000000000000000 ++vgbbd: ffffffffffffffff @@ 0000000000000051 ==> ffffffffffffffff0001000100000001 + + vshasigmad: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> 088207870e8c098d || 8b9e1b9b13149015 + vshasigmad: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> c8f5100c7844a0fc || e9b5916d0131c581 +@@ -347,6 +1473,18 @@ vshasigmad: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 81eb6eee67e560e4 || 02f772 + vshasigmad: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 52af4a56221efaa6 || 73efcb375b6b9fdb + vshasigmad: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 8bf92f9ed2b06655 || 299d6bbd9e22f4c7 + vshasigmad: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 986700cc8f5613df || 7a3f676a2ef03935 ++vshasigmad: 00007fffffffffff @@ ffff000000000000 ==> 7f003f7fffffffff || 7eff810000000000 ++vshasigmad: 00007fffffffffff @@ ffff000000000000 ==> fffc1e000ffffff8 || fc07e3ffe0000007 ++vshasigmad: 00007fffffffffff @@ ffff000000000000 ==> fffffff03e07e0ff || 0000000fc1f03e00 ++vshasigmad: 00007fffffffffff @@ ffff000000000000 ==> fffc3ffe1f80003f || 0003c003c07fff80 ++vshasigmad: 0000800000000000 @@ 0000000000000000 ==> 0000418000000000 || 0000000000000000 ++vshasigmad: 0000800000000000 @@ 0000000000000000 ==> 0004020010000000 || 0000000000000000 ++vshasigmad: 0000800000000000 @@ 0000000000000000 ==> 0000000000082100 || 0000000000000000 ++vshasigmad: 0000800000000000 @@ 0000000000000000 ==> 0000000220000040 || 0000000000000000 ++vshasigmad: ffffffffffffffff @@ 0000000000000051 ==> 01ffffffffffffff || d100000000000028 ++vshasigmad: ffffffffffffffff @@ 0000000000000051 ==> 03ffffffffffffff || 000a200000000289 ++vshasigmad: ffffffffffffffff @@ 0000000000000051 ==> ffffffffffffffff || 00000504e2000000 ++vshasigmad: ffffffffffffffff @@ 0000000000000051 ==> ffffffffffffffff || 0150400028800000 + + vshasigmaw: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> 88e344269168cdae || 9bf057355c5e785e + vshasigmaw: 0102030405060708 @@ 090a0b0c0e0d0e0f ==> 41e2c021c36443a2 || 44e5c72626c5e584 +@@ -356,6 +1494,18 @@ vshasigmaw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 4b2087e552ab0e6d || 583394 + vshasigmaw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 27b89a7ba53e19f8 || 22bf9d7c409fbfde + vshasigmaw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 6814e0ad5965f19e || 0a7682cfffbb77ab + vshasigmaw: f1f2f3f4f5f6f7f8 @@ f9fafbfcfefdfeff ==> 54200fe9e7b2997b || 71052acc5efb57bb ++vshasigmaw: 00007fffffffffff @@ ffff000000000000 ==> e1ffcf001fffffff || de0021ff00000000 ++vshasigmaw: 00007fffffffffff @@ ffff000000000000 ==> 3000601f003fffff || 603f9fc000000000 ++vshasigmaw: 00007fffffffffff @@ ffff000000000000 ==> 3e07e3fcffffffff || c3f83c0700000000 ++vshasigmaw: 00007fffffffffff @@ ffff000000000000 ==> 03dffe70ffffffff || fc60039f00000000 ++vshasigmaw: 0000800000000000 @@ 0000000000000000 ==> 2000110000000000 || 0000000000000000 ++vshasigmaw: 0000800000000000 @@ 0000000000000000 ==> 5000002000000000 || 0000000000000000 ++vshasigmaw: 0000800000000000 @@ 0000000000000000 ==> 0200200400000000 || 0000000000000000 ++vshasigmaw: 0000800000000000 @@ 0000000000000000 ==> 0040021000000000 || 0000000000000000 ++vshasigmaw: ffffffffffffffff @@ 0000000000000051 ==> 1fffffff1fffffff || 00000000a214400a ++vshasigmaw: ffffffffffffffff @@ 0000000000000051 ==> 003fffff003fffff || 000000000022a000 ++vshasigmaw: ffffffffffffffff @@ 0000000000000051 ==> ffffffffffffffff || 0000000042894414 ++vshasigmaw: ffffffffffffffff @@ 0000000000000051 ==> ffffffffffffffff || 000000004e202881 + + bcdadd.: 8045090189321003 || 001122334556677d @@ 8045090189321003 || 001122334556677d ==> 6090180378642006 || 002244669113354d + bcdadd.: 8045090189321003 || 001122334556677d @@ 8045090189321003 || 001122334556677d ==> 6090180378642006 || 002244669113354d +@@ -425,63 +1575,336 @@ bcdsub.: 0000000000000000 || 0000000000000000 @@ 0000000000000000 || 00000000000 + + vaddcuq: 0102030405060708090a0b0c0e0d0e0f @@ 0102030405060708090a0b0c0e0d0e0f ==> 00000000000000000000000000000000 + vaddcuq: 0102030405060708090a0b0c0e0d0e0f @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vaddcuq: 0102030405060708090a0b0c0e0d0e0f @@ 00007fffffffffffffff000000000000 ==> 00000000000000000000000000000000 ++vaddcuq: 0102030405060708090a0b0c0e0d0e0f @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000000 ++vaddcuq: 0102030405060708090a0b0c0e0d0e0f @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000001 + vaddcuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 0102030405060708090a0b0c0e0d0e0f ==> 00000000000000000000000000000000 + vaddcuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000001 ++vaddcuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00007fffffffffffffff000000000000 ==> 00000000000000000000000000000000 ++vaddcuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000000 ++vaddcuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000001 ++vaddcuq: 00007fffffffffffffff000000000000 @@ 0102030405060708090a0b0c0e0d0e0f ==> 00000000000000000000000000000000 ++vaddcuq: 00007fffffffffffffff000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vaddcuq: 00007fffffffffffffff000000000000 @@ 00007fffffffffffffff000000000000 ==> 00000000000000000000000000000000 ++vaddcuq: 00007fffffffffffffff000000000000 @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000000 ++vaddcuq: 00007fffffffffffffff000000000000 @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000001 ++vaddcuq: 00008000000000000000000000000000 @@ 0102030405060708090a0b0c0e0d0e0f ==> 00000000000000000000000000000000 ++vaddcuq: 00008000000000000000000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vaddcuq: 00008000000000000000000000000000 @@ 00007fffffffffffffff000000000000 ==> 00000000000000000000000000000000 ++vaddcuq: 00008000000000000000000000000000 @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000000 ++vaddcuq: 00008000000000000000000000000000 @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000001 ++vaddcuq: ffffffffffffffff0000000000000051 @@ 0102030405060708090a0b0c0e0d0e0f ==> 00000000000000000000000000000001 ++vaddcuq: ffffffffffffffff0000000000000051 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000001 ++vaddcuq: ffffffffffffffff0000000000000051 @@ 00007fffffffffffffff000000000000 ==> 00000000000000000000000000000001 ++vaddcuq: ffffffffffffffff0000000000000051 @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000001 ++vaddcuq: ffffffffffffffff0000000000000051 @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000001 + + vadduqm: 0102030405060708090a0b0c0e0d0e0f @@ 0102030405060708090a0b0c0e0d0e0f ==> 020406080a0c0e10121416181c1a1c1e + vadduqm: 0102030405060708090a0b0c0e0d0e0f @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> f2f4f6f8fafcff01030507090d0b0d0e ++vadduqm: 0102030405060708090a0b0c0e0d0e0f @@ 00007fffffffffffffff000000000000 ==> 010283040506070809090b0c0e0d0e0f ++vadduqm: 0102030405060708090a0b0c0e0d0e0f @@ 00008000000000000000000000000000 ==> 0102830405060708090a0b0c0e0d0e0f ++vadduqm: 0102030405060708090a0b0c0e0d0e0f @@ ffffffffffffffff0000000000000051 ==> 0102030405060707090a0b0c0e0d0e60 + vadduqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 0102030405060708090a0b0c0e0d0e0f ==> f2f4f6f8fafcff01030507090d0b0d0e + vadduqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> e3e5e7e9ebedeff1f3f5f7f9fdfbfdfe ++vadduqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00007fffffffffffffff000000000000 ==> f1f373f4f5f6f7f8f9f9fbfcfefdfeff ++vadduqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00008000000000000000000000000000 ==> f1f373f4f5f6f7f8f9fafbfcfefdfeff ++vadduqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ ffffffffffffffff0000000000000051 ==> f1f2f3f4f5f6f7f7f9fafbfcfefdff50 ++vadduqm: 00007fffffffffffffff000000000000 @@ 0102030405060708090a0b0c0e0d0e0f ==> 010283040506070809090b0c0e0d0e0f ++vadduqm: 00007fffffffffffffff000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> f1f373f4f5f6f7f8f9f9fbfcfefdfeff ++vadduqm: 00007fffffffffffffff000000000000 @@ 00007fffffffffffffff000000000000 ==> 0000fffffffffffffffe000000000000 ++vadduqm: 00007fffffffffffffff000000000000 @@ 00008000000000000000000000000000 ==> 0000ffffffffffffffff000000000000 ++vadduqm: 00007fffffffffffffff000000000000 @@ ffffffffffffffff0000000000000051 ==> 00007ffffffffffeffff000000000051 ++vadduqm: 00008000000000000000000000000000 @@ 0102030405060708090a0b0c0e0d0e0f ==> 0102830405060708090a0b0c0e0d0e0f ++vadduqm: 00008000000000000000000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> f1f373f4f5f6f7f8f9fafbfcfefdfeff ++vadduqm: 00008000000000000000000000000000 @@ 00007fffffffffffffff000000000000 ==> 0000ffffffffffffffff000000000000 ++vadduqm: 00008000000000000000000000000000 @@ 00008000000000000000000000000000 ==> 00010000000000000000000000000000 ++vadduqm: 00008000000000000000000000000000 @@ ffffffffffffffff0000000000000051 ==> 00007fffffffffff0000000000000051 ++vadduqm: ffffffffffffffff0000000000000051 @@ 0102030405060708090a0b0c0e0d0e0f ==> 0102030405060707090a0b0c0e0d0e60 ++vadduqm: ffffffffffffffff0000000000000051 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> f1f2f3f4f5f6f7f7f9fafbfcfefdff50 ++vadduqm: ffffffffffffffff0000000000000051 @@ 00007fffffffffffffff000000000000 ==> 00007ffffffffffeffff000000000051 ++vadduqm: ffffffffffffffff0000000000000051 @@ 00008000000000000000000000000000 ==> 00007fffffffffff0000000000000051 ++vadduqm: ffffffffffffffff0000000000000051 @@ ffffffffffffffff0000000000000051 ==> fffffffffffffffe00000000000000a2 + + vsubcuq: 0102030405060708090a0b0c0e0d0e0f @@ 0102030405060708090a0b0c0e0d0e0f ==> 00000000000000000000000000000001 + vsubcuq: 0102030405060708090a0b0c0e0d0e0f @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vsubcuq: 0102030405060708090a0b0c0e0d0e0f @@ 00007fffffffffffffff000000000000 ==> 00000000000000000000000000000001 ++vsubcuq: 0102030405060708090a0b0c0e0d0e0f @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000001 ++vsubcuq: 0102030405060708090a0b0c0e0d0e0f @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000000 + vsubcuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 0102030405060708090a0b0c0e0d0e0f ==> 00000000000000000000000000000001 + vsubcuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000001 ++vsubcuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00007fffffffffffffff000000000000 ==> 00000000000000000000000000000001 ++vsubcuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000001 ++vsubcuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000000 ++vsubcuq: 00007fffffffffffffff000000000000 @@ 0102030405060708090a0b0c0e0d0e0f ==> 00000000000000000000000000000000 ++vsubcuq: 00007fffffffffffffff000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vsubcuq: 00007fffffffffffffff000000000000 @@ 00007fffffffffffffff000000000000 ==> 00000000000000000000000000000001 ++vsubcuq: 00007fffffffffffffff000000000000 @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000000 ++vsubcuq: 00007fffffffffffffff000000000000 @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000000 ++vsubcuq: 00008000000000000000000000000000 @@ 0102030405060708090a0b0c0e0d0e0f ==> 00000000000000000000000000000000 ++vsubcuq: 00008000000000000000000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vsubcuq: 00008000000000000000000000000000 @@ 00007fffffffffffffff000000000000 ==> 00000000000000000000000000000001 ++vsubcuq: 00008000000000000000000000000000 @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000001 ++vsubcuq: 00008000000000000000000000000000 @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000000 ++vsubcuq: ffffffffffffffff0000000000000051 @@ 0102030405060708090a0b0c0e0d0e0f ==> 00000000000000000000000000000001 ++vsubcuq: ffffffffffffffff0000000000000051 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000001 ++vsubcuq: ffffffffffffffff0000000000000051 @@ 00007fffffffffffffff000000000000 ==> 00000000000000000000000000000001 ++vsubcuq: ffffffffffffffff0000000000000051 @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000001 ++vsubcuq: ffffffffffffffff0000000000000051 @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000001 + + vsubuqm: 0102030405060708090a0b0c0e0d0e0f @@ 0102030405060708090a0b0c0e0d0e0f ==> 00000000000000000000000000000000 + vsubuqm: 0102030405060708090a0b0c0e0d0e0f @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f10 ++vsubuqm: 0102030405060708090a0b0c0e0d0e0f @@ 00007fffffffffffffff000000000000 ==> 0101830405060708090b0b0c0e0d0e0f ++vsubuqm: 0102030405060708090a0b0c0e0d0e0f @@ 00008000000000000000000000000000 ==> 0101830405060708090a0b0c0e0d0e0f ++vsubuqm: 0102030405060708090a0b0c0e0d0e0f @@ ffffffffffffffff0000000000000051 ==> 0102030405060709090a0b0c0e0d0dbe + vsubuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 0102030405060708090a0b0c0e0d0e0f ==> f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 + vsubuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vsubuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00007fffffffffffffff000000000000 ==> f1f273f4f5f6f7f8f9fbfbfcfefdfeff ++vsubuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00008000000000000000000000000000 ==> f1f273f4f5f6f7f8f9fafbfcfefdfeff ++vsubuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ ffffffffffffffff0000000000000051 ==> f1f2f3f4f5f6f7f9f9fafbfcfefdfeae ++vsubuqm: 00007fffffffffffffff000000000000 @@ 0102030405060708090a0b0c0e0d0e0f ==> fefe7cfbfaf9f8f7f6f4f4f3f1f2f1f1 ++vsubuqm: 00007fffffffffffffff000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 0e0d8c0b0a0908070604040301020101 ++vsubuqm: 00007fffffffffffffff000000000000 @@ 00007fffffffffffffff000000000000 ==> 00000000000000000000000000000000 ++vsubuqm: 00007fffffffffffffff000000000000 @@ 00008000000000000000000000000000 ==> ffffffffffffffffffff000000000000 ++vsubuqm: 00007fffffffffffffff000000000000 @@ ffffffffffffffff0000000000000051 ==> 0000800000000000fffeffffffffffaf ++vsubuqm: 00008000000000000000000000000000 @@ 0102030405060708090a0b0c0e0d0e0f ==> fefe7cfbfaf9f8f7f6f5f4f3f1f2f1f1 ++vsubuqm: 00008000000000000000000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 0e0d8c0b0a0908070605040301020101 ++vsubuqm: 00008000000000000000000000000000 @@ 00007fffffffffffffff000000000000 ==> 00000000000000000001000000000000 ++vsubuqm: 00008000000000000000000000000000 @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000000 ++vsubuqm: 00008000000000000000000000000000 @@ ffffffffffffffff0000000000000051 ==> 0000800000000000ffffffffffffffaf ++vsubuqm: ffffffffffffffff0000000000000051 @@ 0102030405060708090a0b0c0e0d0e0f ==> fefdfcfbfaf9f8f6f6f5f4f3f1f2f242 ++vsubuqm: ffffffffffffffff0000000000000051 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 0e0d0c0b0a0908060605040301020152 ++vsubuqm: ffffffffffffffff0000000000000051 @@ 00007fffffffffffffff000000000000 ==> ffff7fffffffffff0001000000000051 ++vsubuqm: ffffffffffffffff0000000000000051 @@ 00008000000000000000000000000000 ==> ffff7fffffffffff0000000000000051 ++vsubuqm: ffffffffffffffff0000000000000051 @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000000 + + vbpermq: 0102030405060708090a0b0c0e0d0e0f @@ 0102030405060708090a0b0c0e0d0e0f ==> 000000000000020a0000000000000000 + vbpermq: 0102030405060708090a0b0c0e0d0e0f @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vbpermq: 0102030405060708090a0b0c0e0d0e0f @@ 00007fffffffffffffff000000000000 ==> 00000000000020000000000000000000 ++vbpermq: 0102030405060708090a0b0c0e0d0e0f @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000000 ++vbpermq: 0102030405060708090a0b0c0e0d0e0f @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000000 + vbpermq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 0102030405060708090a0b0c0e0d0e0f ==> 000000000000e3ea0000000000000000 + vbpermq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vbpermq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00007fffffffffffffff000000000000 ==> 000000000000e03f0000000000000000 ++vbpermq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00008000000000000000000000000000 ==> 000000000000dfff0000000000000000 ++vbpermq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ ffffffffffffffff0000000000000051 ==> 00000000000000ff0000000000000000 ++vbpermq: 00007fffffffffffffff000000000000 @@ 0102030405060708090a0b0c0e0d0e0f ==> 00000000000000000000000000000000 ++vbpermq: 00007fffffffffffffff000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vbpermq: 00007fffffffffffffff000000000000 @@ 00007fffffffffffffff000000000000 ==> 00000000000000000000000000000000 ++vbpermq: 00007fffffffffffffff000000000000 @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000000 ++vbpermq: 00007fffffffffffffff000000000000 @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000000 ++vbpermq: 00008000000000000000000000000000 @@ 0102030405060708090a0b0c0e0d0e0f ==> 00000000000000000000000000000000 ++vbpermq: 00008000000000000000000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vbpermq: 00008000000000000000000000000000 @@ 00007fffffffffffffff000000000000 ==> 00000000000000000000000000000000 ++vbpermq: 00008000000000000000000000000000 @@ 00008000000000000000000000000000 ==> 00000000000000000000000000000000 ++vbpermq: 00008000000000000000000000000000 @@ ffffffffffffffff0000000000000051 ==> 00000000000000000000000000000000 ++vbpermq: ffffffffffffffff0000000000000051 @@ 0102030405060708090a0b0c0e0d0e0f ==> 000000000000ffff0000000000000000 ++vbpermq: ffffffffffffffff0000000000000051 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff ==> 00000000000000000000000000000000 ++vbpermq: ffffffffffffffff0000000000000051 @@ 00007fffffffffffffff000000000000 ==> 000000000000e03f0000000000000000 ++vbpermq: ffffffffffffffff0000000000000051 @@ 00008000000000000000000000000000 ==> 000000000000dfff0000000000000000 ++vbpermq: ffffffffffffffff0000000000000051 @@ ffffffffffffffff0000000000000051 ==> 00000000000000fe0000000000000000 + + vaddecuq: 0102030405060708090a0b0c0e0d0e0f @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 00000000000000000000000000000000 + vaddecuq: 0102030405060708090a0b0c0e0d0e0f @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 00000000000000000000000000000000 + vaddecuq: 0102030405060708090a0b0c0e0d0e0f @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 00000000000000000000000000000000 + vaddecuq: 0102030405060708090a0b0c0e0d0e0f @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 00000000000000000000000000000000 ++vaddecuq: 0102030405060708090a0b0c0e0d0e0f @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vaddecuq: 0102030405060708090a0b0c0e0d0e0f @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vaddecuq: 0102030405060708090a0b0c0e0d0e0f @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vaddecuq: 0102030405060708090a0b0c0e0d0e0f @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vaddecuq: 0102030405060708090a0b0c0e0d0e0f @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vaddecuq: 0102030405060708090a0b0c0e0d0e0f @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 00000000000000000000000000000001 + vaddecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 00000000000000000000000000000000 + vaddecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 00000000000000000000000000000000 + vaddecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 00000000000000000000000000000001 + vaddecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 00000000000000000000000000000001 ++vaddecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vaddecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vaddecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vaddecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vaddecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vaddecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vaddecuq: 00007fffffffffffffff000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 00000000000000000000000000000000 ++vaddecuq: 00007fffffffffffffff000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 00000000000000000000000000000000 ++vaddecuq: 00007fffffffffffffff000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 00000000000000000000000000000000 ++vaddecuq: 00007fffffffffffffff000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 00000000000000000000000000000000 ++vaddecuq: 00007fffffffffffffff000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vaddecuq: 00007fffffffffffffff000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vaddecuq: 00007fffffffffffffff000000000000 @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vaddecuq: 00007fffffffffffffff000000000000 @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vaddecuq: 00007fffffffffffffff000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vaddecuq: 00007fffffffffffffff000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vaddecuq: 00008000000000000000000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 00000000000000000000000000000000 ++vaddecuq: 00008000000000000000000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 00000000000000000000000000000000 ++vaddecuq: 00008000000000000000000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 00000000000000000000000000000000 ++vaddecuq: 00008000000000000000000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 00000000000000000000000000000000 ++vaddecuq: 00008000000000000000000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vaddecuq: 00008000000000000000000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vaddecuq: 00008000000000000000000000000000 @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vaddecuq: 00008000000000000000000000000000 @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vaddecuq: 00008000000000000000000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vaddecuq: 00008000000000000000000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vaddecuq: ffffffffffffffff0000000000000051 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 00000000000000000000000000000001 ++vaddecuq: ffffffffffffffff0000000000000051 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 00000000000000000000000000000001 ++vaddecuq: ffffffffffffffff0000000000000051 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 00000000000000000000000000000001 ++vaddecuq: ffffffffffffffff0000000000000051 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 00000000000000000000000000000001 ++vaddecuq: ffffffffffffffff0000000000000051 @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vaddecuq: ffffffffffffffff0000000000000051 @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vaddecuq: ffffffffffffffff0000000000000051 @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vaddecuq: ffffffffffffffff0000000000000051 @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vaddecuq: ffffffffffffffff0000000000000051 @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vaddecuq: ffffffffffffffff0000000000000051 @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 00000000000000000000000000000001 + + vaddeuqm: 0102030405060708090a0b0c0e0d0e0f @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 020406080a0c0e10121416181c1a1c1e + vaddeuqm: 0102030405060708090a0b0c0e0d0e0f @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 020406080a0c0e10121416181c1a1c1f + vaddeuqm: 0102030405060708090a0b0c0e0d0e0f @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> f2f4f6f8fafcff01030507090d0b0d0e + vaddeuqm: 0102030405060708090a0b0c0e0d0e0f @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> f2f4f6f8fafcff01030507090d0b0d0f ++vaddeuqm: 0102030405060708090a0b0c0e0d0e0f @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 010283040506070809090b0c0e0d0e0f ++vaddeuqm: 0102030405060708090a0b0c0e0d0e0f @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 010283040506070809090b0c0e0d0e10 ++vaddeuqm: 0102030405060708090a0b0c0e0d0e0f @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 0102830405060708090a0b0c0e0d0e0f ++vaddeuqm: 0102030405060708090a0b0c0e0d0e0f @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 0102830405060708090a0b0c0e0d0e10 ++vaddeuqm: 0102030405060708090a0b0c0e0d0e0f @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 0102030405060707090a0b0c0e0d0e60 ++vaddeuqm: 0102030405060708090a0b0c0e0d0e0f @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 0102030405060707090a0b0c0e0d0e61 + vaddeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> f2f4f6f8fafcff01030507090d0b0d0e + vaddeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> f2f4f6f8fafcff01030507090d0b0d0f + vaddeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> e3e5e7e9ebedeff1f3f5f7f9fdfbfdfe + vaddeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> e3e5e7e9ebedeff1f3f5f7f9fdfbfdff ++vaddeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> f1f373f4f5f6f7f8f9f9fbfcfefdfeff ++vaddeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> f1f373f4f5f6f7f8f9f9fbfcfefdff00 ++vaddeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00008000000000000000000000000000 @@ f000000000000000 ==> f1f373f4f5f6f7f8f9fafbfcfefdfeff ++vaddeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00008000000000000000000000000000 @@ f000000000000001 ==> f1f373f4f5f6f7f8f9fafbfcfefdff00 ++vaddeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> f1f2f3f4f5f6f7f7f9fafbfcfefdff50 ++vaddeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> f1f2f3f4f5f6f7f7f9fafbfcfefdff51 ++vaddeuqm: 00007fffffffffffffff000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 010283040506070809090b0c0e0d0e0f ++vaddeuqm: 00007fffffffffffffff000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 010283040506070809090b0c0e0d0e10 ++vaddeuqm: 00007fffffffffffffff000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> f1f373f4f5f6f7f8f9f9fbfcfefdfeff ++vaddeuqm: 00007fffffffffffffff000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> f1f373f4f5f6f7f8f9f9fbfcfefdff00 ++vaddeuqm: 00007fffffffffffffff000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 0000fffffffffffffffe000000000000 ++vaddeuqm: 00007fffffffffffffff000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 0000fffffffffffffffe000000000001 ++vaddeuqm: 00007fffffffffffffff000000000000 @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 0000ffffffffffffffff000000000000 ++vaddeuqm: 00007fffffffffffffff000000000000 @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 0000ffffffffffffffff000000000001 ++vaddeuqm: 00007fffffffffffffff000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 00007ffffffffffeffff000000000051 ++vaddeuqm: 00007fffffffffffffff000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 00007ffffffffffeffff000000000052 ++vaddeuqm: 00008000000000000000000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 0102830405060708090a0b0c0e0d0e0f ++vaddeuqm: 00008000000000000000000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 0102830405060708090a0b0c0e0d0e10 ++vaddeuqm: 00008000000000000000000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> f1f373f4f5f6f7f8f9fafbfcfefdfeff ++vaddeuqm: 00008000000000000000000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> f1f373f4f5f6f7f8f9fafbfcfefdff00 ++vaddeuqm: 00008000000000000000000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 0000ffffffffffffffff000000000000 ++vaddeuqm: 00008000000000000000000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 0000ffffffffffffffff000000000001 ++vaddeuqm: 00008000000000000000000000000000 @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 00010000000000000000000000000000 ++vaddeuqm: 00008000000000000000000000000000 @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 00010000000000000000000000000001 ++vaddeuqm: 00008000000000000000000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 00007fffffffffff0000000000000051 ++vaddeuqm: 00008000000000000000000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 00007fffffffffff0000000000000052 ++vaddeuqm: ffffffffffffffff0000000000000051 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 0102030405060707090a0b0c0e0d0e60 ++vaddeuqm: ffffffffffffffff0000000000000051 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 0102030405060707090a0b0c0e0d0e61 ++vaddeuqm: ffffffffffffffff0000000000000051 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> f1f2f3f4f5f6f7f7f9fafbfcfefdff50 ++vaddeuqm: ffffffffffffffff0000000000000051 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> f1f2f3f4f5f6f7f7f9fafbfcfefdff51 ++vaddeuqm: ffffffffffffffff0000000000000051 @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 00007ffffffffffeffff000000000051 ++vaddeuqm: ffffffffffffffff0000000000000051 @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 00007ffffffffffeffff000000000052 ++vaddeuqm: ffffffffffffffff0000000000000051 @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 00007fffffffffff0000000000000051 ++vaddeuqm: ffffffffffffffff0000000000000051 @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 00007fffffffffff0000000000000052 ++vaddeuqm: ffffffffffffffff0000000000000051 @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> fffffffffffffffe00000000000000a2 ++vaddeuqm: ffffffffffffffff0000000000000051 @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> fffffffffffffffe00000000000000a3 + + vsubecuq: 0102030405060708090a0b0c0e0d0e0f @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 00000000000000000000000000000000 + vsubecuq: 0102030405060708090a0b0c0e0d0e0f @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 00000000000000000000000000000001 + vsubecuq: 0102030405060708090a0b0c0e0d0e0f @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 00000000000000000000000000000000 + vsubecuq: 0102030405060708090a0b0c0e0d0e0f @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 00000000000000000000000000000000 ++vsubecuq: 0102030405060708090a0b0c0e0d0e0f @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vsubecuq: 0102030405060708090a0b0c0e0d0e0f @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vsubecuq: 0102030405060708090a0b0c0e0d0e0f @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vsubecuq: 0102030405060708090a0b0c0e0d0e0f @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vsubecuq: 0102030405060708090a0b0c0e0d0e0f @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vsubecuq: 0102030405060708090a0b0c0e0d0e0f @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 00000000000000000000000000000000 + vsubecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 00000000000000000000000000000001 + vsubecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 00000000000000000000000000000001 + vsubecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 00000000000000000000000000000000 + vsubecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 00000000000000000000000000000001 ++vsubecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vsubecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vsubecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vsubecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vsubecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vsubecuq: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vsubecuq: 00007fffffffffffffff000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 00000000000000000000000000000000 ++vsubecuq: 00007fffffffffffffff000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 00000000000000000000000000000000 ++vsubecuq: 00007fffffffffffffff000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 00000000000000000000000000000000 ++vsubecuq: 00007fffffffffffffff000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 00000000000000000000000000000000 ++vsubecuq: 00007fffffffffffffff000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vsubecuq: 00007fffffffffffffff000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vsubecuq: 00007fffffffffffffff000000000000 @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vsubecuq: 00007fffffffffffffff000000000000 @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vsubecuq: 00007fffffffffffffff000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vsubecuq: 00007fffffffffffffff000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vsubecuq: 00008000000000000000000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 00000000000000000000000000000000 ++vsubecuq: 00008000000000000000000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 00000000000000000000000000000000 ++vsubecuq: 00008000000000000000000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 00000000000000000000000000000000 ++vsubecuq: 00008000000000000000000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 00000000000000000000000000000000 ++vsubecuq: 00008000000000000000000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vsubecuq: 00008000000000000000000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vsubecuq: 00008000000000000000000000000000 @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vsubecuq: 00008000000000000000000000000000 @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vsubecuq: 00008000000000000000000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vsubecuq: 00008000000000000000000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vsubecuq: ffffffffffffffff0000000000000051 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> 00000000000000000000000000000001 ++vsubecuq: ffffffffffffffff0000000000000051 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 00000000000000000000000000000001 ++vsubecuq: ffffffffffffffff0000000000000051 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 00000000000000000000000000000001 ++vsubecuq: ffffffffffffffff0000000000000051 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 00000000000000000000000000000001 ++vsubecuq: ffffffffffffffff0000000000000051 @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vsubecuq: ffffffffffffffff0000000000000051 @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vsubecuq: ffffffffffffffff0000000000000051 @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 00000000000000000000000000000001 ++vsubecuq: ffffffffffffffff0000000000000051 @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 00000000000000000000000000000001 ++vsubecuq: ffffffffffffffff0000000000000051 @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 00000000000000000000000000000000 ++vsubecuq: ffffffffffffffff0000000000000051 @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 00000000000000000000000000000001 + + vsubeuqm: 0102030405060708090a0b0c0e0d0e0f @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> ffffffffffffffffffffffffffffffff + vsubeuqm: 0102030405060708090a0b0c0e0d0e0f @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> 00000000000000000000000000000000 + vsubeuqm: 0102030405060708090a0b0c0e0d0e0f @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f + vsubeuqm: 0102030405060708090a0b0c0e0d0e0f @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f10 ++vsubeuqm: 0102030405060708090a0b0c0e0d0e0f @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 0101830405060708090b0b0c0e0d0e0e ++vsubeuqm: 0102030405060708090a0b0c0e0d0e0f @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 0101830405060708090b0b0c0e0d0e0f ++vsubeuqm: 0102030405060708090a0b0c0e0d0e0f @@ 00008000000000000000000000000000 @@ f000000000000000 ==> 0101830405060708090a0b0c0e0d0e0e ++vsubeuqm: 0102030405060708090a0b0c0e0d0e0f @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 0101830405060708090a0b0c0e0d0e0f ++vsubeuqm: 0102030405060708090a0b0c0e0d0e0f @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 0102030405060709090a0b0c0e0d0dbd ++vsubeuqm: 0102030405060708090a0b0c0e0d0e0f @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 0102030405060709090a0b0c0e0d0dbe + vsubeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0ef + vsubeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 + vsubeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> ffffffffffffffffffffffffffffffff + vsubeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 00000000000000000000000000000000 ++vsubeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> f1f273f4f5f6f7f8f9fbfbfcfefdfefe ++vsubeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> f1f273f4f5f6f7f8f9fbfbfcfefdfeff ++vsubeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00008000000000000000000000000000 @@ f000000000000000 ==> f1f273f4f5f6f7f8f9fafbfcfefdfefe ++vsubeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ 00008000000000000000000000000000 @@ f000000000000001 ==> f1f273f4f5f6f7f8f9fafbfcfefdfeff ++vsubeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> f1f2f3f4f5f6f7f9f9fafbfcfefdfead ++vsubeuqm: f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> f1f2f3f4f5f6f7f9f9fafbfcfefdfeae ++vsubeuqm: 00007fffffffffffffff000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> fefe7cfbfaf9f8f7f6f4f4f3f1f2f1f0 ++vsubeuqm: 00007fffffffffffffff000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> fefe7cfbfaf9f8f7f6f4f4f3f1f2f1f1 ++vsubeuqm: 00007fffffffffffffff000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 0e0d8c0b0a0908070604040301020100 ++vsubeuqm: 00007fffffffffffffff000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 0e0d8c0b0a0908070604040301020101 ++vsubeuqm: 00007fffffffffffffff000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> ffffffffffffffffffffffffffffffff ++vsubeuqm: 00007fffffffffffffff000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vsubeuqm: 00007fffffffffffffff000000000000 @@ 00008000000000000000000000000000 @@ f000000000000000 ==> fffffffffffffffffffeffffffffffff ++vsubeuqm: 00007fffffffffffffff000000000000 @@ 00008000000000000000000000000000 @@ f000000000000001 ==> ffffffffffffffffffff000000000000 ++vsubeuqm: 00007fffffffffffffff000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 0000800000000000fffeffffffffffae ++vsubeuqm: 00007fffffffffffffff000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 0000800000000000fffeffffffffffaf ++vsubeuqm: 00008000000000000000000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> fefe7cfbfaf9f8f7f6f5f4f3f1f2f1f0 ++vsubeuqm: 00008000000000000000000000000000 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> fefe7cfbfaf9f8f7f6f5f4f3f1f2f1f1 ++vsubeuqm: 00008000000000000000000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 0e0d8c0b0a0908070605040301020100 ++vsubeuqm: 00008000000000000000000000000000 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 0e0d8c0b0a0908070605040301020101 ++vsubeuqm: 00008000000000000000000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> 00000000000000000000ffffffffffff ++vsubeuqm: 00008000000000000000000000000000 @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> 00000000000000000001000000000000 ++vsubeuqm: 00008000000000000000000000000000 @@ 00008000000000000000000000000000 @@ f000000000000000 ==> ffffffffffffffffffffffffffffffff ++vsubeuqm: 00008000000000000000000000000000 @@ 00008000000000000000000000000000 @@ f000000000000001 ==> 00000000000000000000000000000000 ++vsubeuqm: 00008000000000000000000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> 0000800000000000ffffffffffffffae ++vsubeuqm: 00008000000000000000000000000000 @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 0000800000000000ffffffffffffffaf ++vsubeuqm: ffffffffffffffff0000000000000051 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000000 ==> fefdfcfbfaf9f8f6f6f5f4f3f1f2f241 ++vsubeuqm: ffffffffffffffff0000000000000051 @@ 0102030405060708090a0b0c0e0d0e0f @@ f000000000000001 ==> fefdfcfbfaf9f8f6f6f5f4f3f1f2f242 ++vsubeuqm: ffffffffffffffff0000000000000051 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000000 ==> 0e0d0c0b0a0908060605040301020151 ++vsubeuqm: ffffffffffffffff0000000000000051 @@ f1f2f3f4f5f6f7f8f9fafbfcfefdfeff @@ f000000000000001 ==> 0e0d0c0b0a0908060605040301020152 ++vsubeuqm: ffffffffffffffff0000000000000051 @@ 00007fffffffffffffff000000000000 @@ f000000000000000 ==> ffff7fffffffffff0001000000000050 ++vsubeuqm: ffffffffffffffff0000000000000051 @@ 00007fffffffffffffff000000000000 @@ f000000000000001 ==> ffff7fffffffffff0001000000000051 ++vsubeuqm: ffffffffffffffff0000000000000051 @@ 00008000000000000000000000000000 @@ f000000000000000 ==> ffff7fffffffffff0000000000000050 ++vsubeuqm: ffffffffffffffff0000000000000051 @@ 00008000000000000000000000000000 @@ f000000000000001 ==> ffff7fffffffffff0000000000000051 ++vsubeuqm: ffffffffffffffff0000000000000051 @@ ffffffffffffffff0000000000000051 @@ f000000000000000 ==> ffffffffffffffffffffffffffffffff ++vsubeuqm: ffffffffffffffff0000000000000051 @@ ffffffffffffffff0000000000000051 @@ f000000000000001 ==> 00000000000000000000000000000000 + + All done. Tested 66 different instructions +diff --git a/none/tests/ppc64/test_isa_2_07_part1.c b/none/tests/ppc64/test_isa_2_07_part1.c +index be0a5ed..74424e8 100644 +--- a/none/tests/ppc64/test_isa_2_07_part1.c ++++ b/none/tests/ppc64/test_isa_2_07_part1.c +@@ -874,7 +874,7 @@ static int verbose = 0; + static int arg_list_size = 0; + static unsigned long long * vdargs = NULL; + static unsigned long long * vdargs_x = NULL; +-#define NB_VDARGS 4 ++#define NB_VDARGS 9 + + static void build_vdargs_table (void) + { +@@ -884,6 +884,11 @@ static void build_vdargs_table (void) + vdargs[1] = 0x090A0B0C0E0D0E0FULL; + vdargs[2] = 0xF1F2F3F4F5F6F7F8ULL; + vdargs[3] = 0xF9FAFBFCFEFDFEFFULL; ++ vdargs[4] = 0x00007FFFFFFFFFFFULL; ++ vdargs[5] = 0xFFFF000000000000ULL; ++ vdargs[6] = 0x0000800000000000ULL; ++ vdargs[7] = 0x0000000000000000ULL; ++ vdargs[8] = 0xFFFFFFFFFFFFFFFFULL; + + vdargs_x = memalign16(NB_VDARGS * sizeof(unsigned long long)); + vdargs_x[0] = 0x000000007c118a2bULL; diff --git a/SOURCES/valgrind-3.11.0-ppc64-separate-socketcalls.patch b/SOURCES/valgrind-3.11.0-ppc64-separate-socketcalls.patch new file mode 100644 index 0000000..d416511 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-ppc64-separate-socketcalls.patch @@ -0,0 +1,28 @@ +diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c +index 77668c7..6d5713b 100644 +--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c +@@ -1151,6 +1151,23 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_pwritev, sys_pwritev), // 321 + LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 322 + ++ LINXY(__NR_socket, sys_socket), // 326 ++ LINX_(__NR_bind, sys_bind), // 327 ++ LINX_(__NR_connect, sys_connect), // 328 ++ LINX_(__NR_listen, sys_listen), // 329 ++ LINXY(__NR_accept, sys_accept), // 330 ++ LINXY(__NR_getsockname, sys_getsockname), // 331 ++ LINXY(__NR_getpeername, sys_getpeername), // 332 ++ LINXY(__NR_socketpair, sys_socketpair), // 333 ++ LINX_(__NR_send, sys_send), // 334 ++ LINX_(__NR_sendto, sys_sendto), // 335 ++ LINXY(__NR_recv, sys_recv), // 336 ++ LINXY(__NR_recvfrom, sys_recvfrom), // 337 ++ LINX_(__NR_shutdown, sys_shutdown), // 338 ++ LINX_(__NR_setsockopt, sys_setsockopt), // 339 ++ LINXY(__NR_getsockopt, sys_getsockopt), // 340 ++ LINX_(__NR_sendmsg, sys_sendmsg), // 341 ++ LINXY(__NR_recvmsg, sys_recvmsg), // 342 + LINXY(__NR_recvmmsg, sys_recvmmsg), // 343 + LINXY(__NR_accept4, sys_accept4), // 344 + diff --git a/SOURCES/valgrind-3.11.0-ppc64-syscalls.patch b/SOURCES/valgrind-3.11.0-ppc64-syscalls.patch new file mode 100644 index 0000000..360c766 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-ppc64-syscalls.patch @@ -0,0 +1,40 @@ +commit 9a51385e9d032e9f66076ce2c0f1343e4caeec21 +Author: mjw +Date: Mon May 30 20:16:04 2016 +0000 + + Bug 363714 ppc64 missing syscalls sync, waitid and name_to/open_by_handle_at + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15888 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c +index 6d5713b..2a027f0 100644 +--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c +@@ -821,7 +821,7 @@ static SyscallTableEntry syscall_table[] = { + // _____(__NR_nice, sys_nice), // 34 + + // _____(__NR_ftime, sys_ftime), // 35 +-// _____(__NR_sync, sys_sync), // 36 ++ GENX_(__NR_sync, sys_sync), // 36 + GENX_(__NR_kill, sys_kill), // 37 + GENX_(__NR_rename, sys_rename), // 38 + GENX_(__NR_mkdir, sys_mkdir), // 39 +@@ -1102,7 +1102,7 @@ static SyscallTableEntry syscall_table[] = { + + LINX_(__NR_request_key, sys_request_key), // 270 + LINXY(__NR_keyctl, sys_keyctl), // 271 +-// _____(__NR_waitid, sys_waitid), // 272 ++ LINXY(__NR_waitid, sys_waitid), // 272 + LINX_(__NR_ioprio_set, sys_ioprio_set), // 273 + LINX_(__NR_ioprio_get, sys_ioprio_get), // 274 + +@@ -1170,7 +1170,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_recvmsg, sys_recvmsg), // 342 + LINXY(__NR_recvmmsg, sys_recvmmsg), // 343 + LINXY(__NR_accept4, sys_accept4), // 344 +- ++ LINXY(__NR_name_to_handle_at, sys_name_to_handle_at),// 345 ++ LINXY(__NR_open_by_handle_at, sys_open_by_handle_at),// 346 + LINXY(__NR_clock_adjtime, sys_clock_adjtime), // 347 + LINX_(__NR_syncfs, sys_syncfs), // 348 + LINXY(__NR_sendmmsg, sys_sendmmsg), // 349 diff --git a/SOURCES/valgrind-3.11.0-ppc64-vgdb-vr-regs.patch b/SOURCES/valgrind-3.11.0-ppc64-vgdb-vr-regs.patch new file mode 100644 index 0000000..036d5b6 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-ppc64-vgdb-vr-regs.patch @@ -0,0 +1,824 @@ +commit 42d961c3744b2afb236c4fd3d2b59eb61421b9a8 +Author: carll +Date: Thu Apr 21 18:21:26 2016 +0000 + + PPC64, Valgrind with GDB does not display 64-bit and 128-bit registers + correctly + + 1) Fix Endianess issue that was missed in the BE to LE port. GDB was + not displaying the contents of the 64-bit and 128-bit registers + correctly due to an Endianess issue. + + 2) Fix displaying the shadow registers for the 64-bit and 128-bit + registers. + + Bugzilla 360008 was opened for this issue. + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15864 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am +index d29f954..00d9fc7 100644 +--- a/coregrind/Makefile.am ++++ b/coregrind/Makefile.am +@@ -605,12 +605,17 @@ GDBSERVER_XML_FILES = \ + m_gdbserver/power64-core-valgrind-s1.xml \ + m_gdbserver/power64-core-valgrind-s2.xml \ + m_gdbserver/power64-core.xml \ ++ m_gdbserver/power64-core2-valgrind-s1.xml \ ++ m_gdbserver/power64-core2-valgrind-s2.xml \ + m_gdbserver/power64-linux-valgrind-s1.xml \ + m_gdbserver/power64-linux-valgrind-s2.xml \ + m_gdbserver/power64-linux.xml \ + m_gdbserver/power-altivec-valgrind-s1.xml \ + m_gdbserver/power-altivec-valgrind-s2.xml \ + m_gdbserver/power-altivec.xml \ ++ m_gdbserver/power-vsx-valgrind-s1.xml \ ++ m_gdbserver/power-vsx-valgrind-s2.xml \ ++ m_gdbserver/power-vsx.xml \ + m_gdbserver/power-core-valgrind-s1.xml \ + m_gdbserver/power-core-valgrind-s2.xml \ + m_gdbserver/power-core.xml \ +diff --git a/coregrind/m_gdbserver/power-altivec.xml b/coregrind/m_gdbserver/power-altivec.xml +index 45d31af..d416075 100644 +--- a/coregrind/m_gdbserver/power-altivec.xml ++++ b/coregrind/m_gdbserver/power-altivec.xml +@@ -19,7 +19,7 @@ + + + +- ++ + + + +diff --git a/coregrind/m_gdbserver/power-fpu-valgrind-s1.xml b/coregrind/m_gdbserver/power-fpu-valgrind-s1.xml +index 00d9108..a23d550 100644 +--- a/coregrind/m_gdbserver/power-fpu-valgrind-s1.xml ++++ b/coregrind/m_gdbserver/power-fpu-valgrind-s1.xml +@@ -7,7 +7,7 @@ + + + +- ++ + + + +@@ -40,5 +40,5 @@ + + + +- ++ + +diff --git a/coregrind/m_gdbserver/power-fpu-valgrind-s2.xml b/coregrind/m_gdbserver/power-fpu-valgrind-s2.xml +index a12fa6e..45e434c 100644 +--- a/coregrind/m_gdbserver/power-fpu-valgrind-s2.xml ++++ b/coregrind/m_gdbserver/power-fpu-valgrind-s2.xml +@@ -7,7 +7,7 @@ + + + +- ++ + + + +@@ -40,5 +40,5 @@ + + + +- ++ + +diff --git a/coregrind/m_gdbserver/power64-core-valgrind-s1.xml b/coregrind/m_gdbserver/power64-core-valgrind-s1.xml +index f6296bf..857e9da 100644 +--- a/coregrind/m_gdbserver/power64-core-valgrind-s1.xml ++++ b/coregrind/m_gdbserver/power64-core-valgrind-s1.xml +@@ -40,10 +40,29 @@ + + + +- ++ ++ ++ + +diff --git a/coregrind/m_gdbserver/power64-core-valgrind-s2.xml b/coregrind/m_gdbserver/power64-core-valgrind-s2.xml +index 663232e..3825c67 100644 +--- a/coregrind/m_gdbserver/power64-core-valgrind-s2.xml ++++ b/coregrind/m_gdbserver/power64-core-valgrind-s2.xml +@@ -40,10 +40,29 @@ + + + +- ++ ++ ++ + +diff --git a/coregrind/m_gdbserver/power64-core.xml b/coregrind/m_gdbserver/power64-core.xml +index e0a6ee3..c5cfb3b 100644 +--- a/coregrind/m_gdbserver/power64-core.xml ++++ b/coregrind/m_gdbserver/power64-core.xml +@@ -40,6 +40,13 @@ + + + ++ + + + +diff --git a/coregrind/m_gdbserver/power64-linux-valgrind-s1.xml b/coregrind/m_gdbserver/power64-linux-valgrind-s1.xml +index 7f1d0ac..736c1e7 100644 +--- a/coregrind/m_gdbserver/power64-linux-valgrind-s1.xml ++++ b/coregrind/m_gdbserver/power64-linux-valgrind-s1.xml +@@ -7,6 +7,6 @@ + + + +- ++ + + +diff --git a/coregrind/m_gdbserver/power64-linux-valgrind-s2.xml b/coregrind/m_gdbserver/power64-linux-valgrind-s2.xml +index 007bd04..626a59c 100644 +--- a/coregrind/m_gdbserver/power64-linux-valgrind-s2.xml ++++ b/coregrind/m_gdbserver/power64-linux-valgrind-s2.xml +@@ -7,6 +7,6 @@ + + + +- ++ + + +diff --git a/coregrind/m_gdbserver/powerpc-altivec64l-valgrind.xml b/coregrind/m_gdbserver/powerpc-altivec64l-valgrind.xml +index a2cd615..7760e3d 100644 +--- a/coregrind/m_gdbserver/powerpc-altivec64l-valgrind.xml ++++ b/coregrind/m_gdbserver/powerpc-altivec64l-valgrind.xml +@@ -16,12 +16,17 @@ + + + ++ + + ++ + + ++ + + ++ + + ++ + +diff --git a/coregrind/m_gdbserver/powerpc-altivec64l.xml b/coregrind/m_gdbserver/powerpc-altivec64l.xml +index d06dad9..3fc4fda 100644 +--- a/coregrind/m_gdbserver/powerpc-altivec64l.xml ++++ b/coregrind/m_gdbserver/powerpc-altivec64l.xml +@@ -16,4 +16,5 @@ + + + ++ + +diff --git a/coregrind/m_gdbserver/valgrind-low-ppc64.c b/coregrind/m_gdbserver/valgrind-low-ppc64.c +index 3bf90b1..3c6146c 100644 +--- a/coregrind/m_gdbserver/valgrind-low-ppc64.c ++++ b/coregrind/m_gdbserver/valgrind-low-ppc64.c +@@ -35,6 +35,51 @@ + + #include "libvex_guest_ppc64.h" + ++/* The PPC64 register layout with vs register support (Power 7 and beyond) ++ consists of 64 VSR registers of size 128-bits. The 32 floating point ++ registers fp map to the upper 64-bits of vsr[0] to vsr[31]. The 32 ++ vr[0] to vr[31] registers of size 128-bits map to vsr[31] to vsr[63]. The ++ lower 64-bits of the vsr[0] to vsr[31] registers are in the pseudo ++ registers vs[0]h to vs[31]h registers. These pseudo registers get printed ++ by GDB but there are no instructions that directly access these registers. ++ When GDB prints the vsr[0] to vsr[31] registers it combines the contents ++ of the floating point registers fp[0] to fp[31] and its corresponding ++ vs[0]h to vs[31]h registers to display the VSR contents. The vsr[32] ++ to vsr[63] contents are the same as the the vr[0] to vr[31] contents. ++ ++ GDB also prints fp[32] to fp[63]. These are simply the upper 64 bits of ++ vsr[32] to vsr[63] however, these are not "real" floating point registers ++ as none of the floating point instructions can access these registers. ++ ++ Register map. ++ MSB IBM bit numbering LSB ++ 0 63 64 127 ++ vsr[0] | fp[0] | vs[0]h | ++ vsr[1] | fp[1] | vs[1]h | ++ vsr[2] | fp[2] | vs[2]h | ++ ... ++ vsr[31] | fp[31] | vs[31]h | ++ vsr[32] | vr[0] | ++ vsr[33] | vr[1] | ++ ... ++ vsr[63] | vr[31] | ++ ++ Note, not shown above are the fake fp[32] to fp[63] that GDB prints ++ ++ Valgrind has two shadow registers for each real register denoted with ++ the suffix s1 and s2. When printing the contents of the shadow registers, ++ GDB does not explicitly print the shadow registers vsr[0] to vsr[63]. GDB ++ prints the shadow register contents of the 32 floating point registers as ++ fp[0]s1 to fp[31]s1 and fp[0]s2 to fp[31]s2. The shadow register contents ++ of vs[0]hs1 to vs[31]hs1 and vs[0]hs2 to vs[31]hs2 are also printed. The ++ user needs to construct the vsr[i]s1 shadow register contents by looking ++ at fp[i]s1 for the upper 64-bits and vs[i]hs1 for the lower 64-bits. The ++ vsr[i]s2 shadow register contents are constructed similarly. ++ ++ GDB prints the 128-bit shadow register contents of the 32 vr registers as ++ vr[0]s1 to vr[31]s1 and vr[0]s2 to vr[31]s2. These are also the value of the ++ VSR shadow registers vsr[32]s1 to vsr[63]s1 and vsr[32]s2 to vsr[63]s2. */ ++ + static struct reg regs[] = { + { "r0", 0, 64 }, + { "r1", 64, 64 }, +@@ -143,7 +188,40 @@ static struct reg regs[] = { + { "vr31", 8544, 128 }, + { "vscr", 8672, 32 }, + { "vrsave", 8704, 32 }, ++ { "vs0h", 8736, 64 }, ++ { "vs1h", 8800, 64 }, ++ { "vs2h", 8864, 64 }, ++ { "vs3h", 8928, 64 }, ++ { "vs4h", 8992, 64 }, ++ { "vs5h", 9056, 64 }, ++ { "vs6h", 9120, 64 }, ++ { "vs7h", 9184, 64 }, ++ { "vs8h", 9248, 64 }, ++ { "vs9h", 9312, 64 }, ++ { "vs10h", 9376, 64 }, ++ { "vs11h", 9440, 64 }, ++ { "vs12h", 9504, 64 }, ++ { "vs13h", 9568, 64 }, ++ { "vs14h", 9632, 64 }, ++ { "vs15h", 9696, 64 }, ++ { "vs16h", 9760, 64 }, ++ { "vs17h", 9824, 64 }, ++ { "vs18h", 9888, 64 }, ++ { "vs19h", 9952, 64 }, ++ { "vs20h", 10016, 64 }, ++ { "vs21h", 10080, 64 }, ++ { "vs22h", 10144, 64 }, ++ { "vs23h", 10208, 64 }, ++ { "vs24h", 10272, 64 }, ++ { "vs25h", 10336, 64 }, ++ { "vs26h", 10400, 64 }, ++ { "vs27h", 10464, 64 }, ++ { "vs28h", 10528, 64 }, ++ { "vs29h", 10592, 64 }, ++ { "vs30h", 10656, 64 }, ++ { "vs31h", 10720, 64 }, + }; ++ + static const char *expedite_regs[] = { "r1", "pc", 0 }; + #define num_regs (sizeof (regs) / sizeof (regs[0])) + +@@ -178,11 +256,42 @@ void transfer_register (ThreadId tid, int abs_regno, void * buf, + ThreadState* tst = VG_(get_ThreadState)(tid); + int set = abs_regno / num_regs; + int regno = abs_regno % num_regs; ++ int low_offset, high_offset; ++ + *mod = False; + + VexGuestPPC64State* ppc64 = (VexGuestPPC64State*) get_arch (set, tst); + +- switch (regno) { ++ ++#if defined (VG_LITTLEENDIAN) ++ /* Fetch the 64-bits for the VR registers (VSR[32] to VSR[63] stored as ++ * Little Endian. The 128-bit value is stored as an array of four 32-bit ++ * values. The lower 32-bits are in element 0 in Little Endian format. ++ */ ++ low_offset = 0; ++ ++ /* Fetch the upper 64-bits for the floating point register stored as ++ * Little Endian. The 128-bit value is stored as an array of four 32-bit ++ * values. The upper 32-bits are in element 3 in Little Endian format. ++ */ ++ high_offset = 2; ++#elif defined (VG_BIGENDIAN) ++ /* Fetch the 64-bits for the VR registers (VSR[32] to VSR[63] stored as ++ * Little Endian. The 128-bit value is stored as an array of four 32-bit ++ * values. The lower 32-bits are in element 3 in Big Endian format. ++ */ ++ low_offset = 2; ++ ++ /* Fetch the upper 64-bits for the floating point register stored as ++ * Little Endian. The 128-bit value is stored as an array of four 32-bit ++ * values. The upper 32-bits are in element 0 in Big Endian format. ++ */ ++ high_offset = 0; ++#else ++# error "Unknown endianness" ++#endif ++ ++ switch (regno) { + // numbers here have to match the order of regs above + // Attention: gdb order does not match valgrind order. + case 0: VG_(transfer) (&ppc64->guest_GPR0, buf, dir, size, mod); break; +@@ -217,44 +326,46 @@ void transfer_register (ThreadId tid, int abs_regno, void * buf, + case 29: VG_(transfer) (&ppc64->guest_GPR29, buf, dir, size, mod); break; + case 30: VG_(transfer) (&ppc64->guest_GPR30, buf, dir, size, mod); break; + case 31: VG_(transfer) (&ppc64->guest_GPR31, buf, dir, size, mod); break; +- case 32: VG_(transfer) (&ppc64->guest_VSR0, buf, dir, size, mod); break; +- case 33: VG_(transfer) (&ppc64->guest_VSR1, buf, dir, size, mod); break; +- case 34: VG_(transfer) (&ppc64->guest_VSR2, buf, dir, size, mod); break; +- case 35: VG_(transfer) (&ppc64->guest_VSR3, buf, dir, size, mod); break; +- case 36: VG_(transfer) (&ppc64->guest_VSR4, buf, dir, size, mod); break; +- case 37: VG_(transfer) (&ppc64->guest_VSR5, buf, dir, size, mod); break; +- case 38: VG_(transfer) (&ppc64->guest_VSR6, buf, dir, size, mod); break; +- case 39: VG_(transfer) (&ppc64->guest_VSR7, buf, dir, size, mod); break; +- case 40: VG_(transfer) (&ppc64->guest_VSR8, buf, dir, size, mod); break; +- case 41: VG_(transfer) (&ppc64->guest_VSR9, buf, dir, size, mod); break; +- case 42: VG_(transfer) (&ppc64->guest_VSR10, buf, dir, size, mod); break; +- case 43: VG_(transfer) (&ppc64->guest_VSR11, buf, dir, size, mod); break; +- case 44: VG_(transfer) (&ppc64->guest_VSR12, buf, dir, size, mod); break; +- case 45: VG_(transfer) (&ppc64->guest_VSR13, buf, dir, size, mod); break; +- case 46: VG_(transfer) (&ppc64->guest_VSR14, buf, dir, size, mod); break; +- case 47: VG_(transfer) (&ppc64->guest_VSR15, buf, dir, size, mod); break; +- case 48: VG_(transfer) (&ppc64->guest_VSR16, buf, dir, size, mod); break; +- case 49: VG_(transfer) (&ppc64->guest_VSR17, buf, dir, size, mod); break; +- case 50: VG_(transfer) (&ppc64->guest_VSR18, buf, dir, size, mod); break; +- case 51: VG_(transfer) (&ppc64->guest_VSR19, buf, dir, size, mod); break; +- case 52: VG_(transfer) (&ppc64->guest_VSR20, buf, dir, size, mod); break; +- case 53: VG_(transfer) (&ppc64->guest_VSR21, buf, dir, size, mod); break; +- case 54: VG_(transfer) (&ppc64->guest_VSR22, buf, dir, size, mod); break; +- case 55: VG_(transfer) (&ppc64->guest_VSR23, buf, dir, size, mod); break; +- case 56: VG_(transfer) (&ppc64->guest_VSR24, buf, dir, size, mod); break; +- case 57: VG_(transfer) (&ppc64->guest_VSR25, buf, dir, size, mod); break; +- case 58: VG_(transfer) (&ppc64->guest_VSR26, buf, dir, size, mod); break; +- case 59: VG_(transfer) (&ppc64->guest_VSR27, buf, dir, size, mod); break; +- case 60: VG_(transfer) (&ppc64->guest_VSR28, buf, dir, size, mod); break; +- case 61: VG_(transfer) (&ppc64->guest_VSR29, buf, dir, size, mod); break; +- case 62: VG_(transfer) (&ppc64->guest_VSR30, buf, dir, size, mod); break; +- case 63: VG_(transfer) (&ppc64->guest_VSR31, buf, dir, size, mod); break; ++ ++ case 32: VG_(transfer) (&ppc64->guest_VSR0[high_offset], buf, dir, size, mod); break; ++ case 33: VG_(transfer) (&ppc64->guest_VSR1[high_offset], buf, dir, size, mod); break; ++ case 34: VG_(transfer) (&ppc64->guest_VSR2[high_offset], buf, dir, size, mod); break; ++ case 35: VG_(transfer) (&ppc64->guest_VSR3[high_offset], buf, dir, size, mod); break; ++ case 36: VG_(transfer) (&ppc64->guest_VSR4[high_offset], buf, dir, size, mod); break; ++ case 37: VG_(transfer) (&ppc64->guest_VSR5[high_offset], buf, dir, size, mod); break; ++ case 38: VG_(transfer) (&ppc64->guest_VSR6[high_offset], buf, dir, size, mod); break; ++ case 39: VG_(transfer) (&ppc64->guest_VSR7[high_offset], buf, dir, size, mod); break; ++ case 40: VG_(transfer) (&ppc64->guest_VSR8[high_offset], buf, dir, size, mod); break; ++ case 41: VG_(transfer) (&ppc64->guest_VSR9[high_offset], buf, dir, size, mod); break; ++ case 42: VG_(transfer) (&ppc64->guest_VSR10[high_offset], buf, dir, size, mod); break; ++ case 43: VG_(transfer) (&ppc64->guest_VSR11[high_offset], buf, dir, size, mod); break; ++ case 44: VG_(transfer) (&ppc64->guest_VSR12[high_offset], buf, dir, size, mod); break; ++ case 45: VG_(transfer) (&ppc64->guest_VSR13[high_offset], buf, dir, size, mod); break; ++ case 46: VG_(transfer) (&ppc64->guest_VSR14[high_offset], buf, dir, size, mod); break; ++ case 47: VG_(transfer) (&ppc64->guest_VSR15[high_offset], buf, dir, size, mod); break; ++ case 48: VG_(transfer) (&ppc64->guest_VSR16[high_offset], buf, dir, size, mod); break; ++ case 49: VG_(transfer) (&ppc64->guest_VSR17[high_offset], buf, dir, size, mod); break; ++ case 50: VG_(transfer) (&ppc64->guest_VSR18[high_offset], buf, dir, size, mod); break; ++ case 51: VG_(transfer) (&ppc64->guest_VSR19[high_offset], buf, dir, size, mod); break; ++ case 52: VG_(transfer) (&ppc64->guest_VSR20[high_offset], buf, dir, size, mod); break; ++ case 53: VG_(transfer) (&ppc64->guest_VSR21[high_offset], buf, dir, size, mod); break; ++ case 54: VG_(transfer) (&ppc64->guest_VSR22[high_offset], buf, dir, size, mod); break; ++ case 55: VG_(transfer) (&ppc64->guest_VSR23[high_offset], buf, dir, size, mod); break; ++ case 56: VG_(transfer) (&ppc64->guest_VSR24[high_offset], buf, dir, size, mod); break; ++ case 57: VG_(transfer) (&ppc64->guest_VSR25[high_offset], buf, dir, size, mod); break; ++ case 58: VG_(transfer) (&ppc64->guest_VSR26[high_offset], buf, dir, size, mod); break; ++ case 59: VG_(transfer) (&ppc64->guest_VSR27[high_offset], buf, dir, size, mod); break; ++ case 60: VG_(transfer) (&ppc64->guest_VSR28[high_offset], buf, dir, size, mod); break; ++ case 61: VG_(transfer) (&ppc64->guest_VSR29[high_offset], buf, dir, size, mod); break; ++ case 62: VG_(transfer) (&ppc64->guest_VSR30[high_offset], buf, dir, size, mod); break; ++ case 63: VG_(transfer) (&ppc64->guest_VSR31[high_offset], buf, dir, size, mod); break; ++ + case 64: VG_(transfer) (&ppc64->guest_CIA, buf, dir, size, mod); break; + case 65: *mod = False; break; // VEX does not model Machine State Register + case 66: { + UInt cr = LibVEX_GuestPPC64_get_CR (ppc64); + if (dir == valgrind_to_gdbserver) { +- VG_(transfer) (&cr, buf, dir, size, mod); ++ VG_(transfer) (&cr, buf, dir, size, mod); + } else { + UInt newcr; + VG_(transfer) (&newcr, buf, dir, size, mod); +@@ -280,40 +391,79 @@ void transfer_register (ThreadId tid, int abs_regno, void * buf, + case 70: VG_(transfer) (&ppc64->guest_FPROUND, buf, dir, size, mod); break; + case 71: *mod = False; break; // GDBTD???? VEX { "orig_r3", 4448, 64 }, + case 72: *mod = False; break; // GDBTD???? VEX { "trap", 4512, 64 }, +- case 73: VG_(transfer) (&ppc64->guest_VSR32, buf, dir, size, mod); break; +- case 74: VG_(transfer) (&ppc64->guest_VSR33, buf, dir, size, mod); break; +- case 75: VG_(transfer) (&ppc64->guest_VSR34, buf, dir, size, mod); break; +- case 76: VG_(transfer) (&ppc64->guest_VSR35, buf, dir, size, mod); break; +- case 77: VG_(transfer) (&ppc64->guest_VSR36, buf, dir, size, mod); break; +- case 78: VG_(transfer) (&ppc64->guest_VSR37, buf, dir, size, mod); break; +- case 79: VG_(transfer) (&ppc64->guest_VSR38, buf, dir, size, mod); break; +- case 80: VG_(transfer) (&ppc64->guest_VSR39, buf, dir, size, mod); break; +- case 81: VG_(transfer) (&ppc64->guest_VSR40, buf, dir, size, mod); break; +- case 82: VG_(transfer) (&ppc64->guest_VSR41, buf, dir, size, mod); break; +- case 83: VG_(transfer) (&ppc64->guest_VSR42, buf, dir, size, mod); break; +- case 84: VG_(transfer) (&ppc64->guest_VSR43, buf, dir, size, mod); break; +- case 85: VG_(transfer) (&ppc64->guest_VSR44, buf, dir, size, mod); break; +- case 86: VG_(transfer) (&ppc64->guest_VSR45, buf, dir, size, mod); break; +- case 87: VG_(transfer) (&ppc64->guest_VSR46, buf, dir, size, mod); break; +- case 88: VG_(transfer) (&ppc64->guest_VSR47, buf, dir, size, mod); break; +- case 89: VG_(transfer) (&ppc64->guest_VSR48, buf, dir, size, mod); break; +- case 90: VG_(transfer) (&ppc64->guest_VSR49, buf, dir, size, mod); break; +- case 91: VG_(transfer) (&ppc64->guest_VSR50, buf, dir, size, mod); break; +- case 92: VG_(transfer) (&ppc64->guest_VSR51, buf, dir, size, mod); break; +- case 93: VG_(transfer) (&ppc64->guest_VSR52, buf, dir, size, mod); break; +- case 94: VG_(transfer) (&ppc64->guest_VSR53, buf, dir, size, mod); break; +- case 95: VG_(transfer) (&ppc64->guest_VSR54, buf, dir, size, mod); break; +- case 96: VG_(transfer) (&ppc64->guest_VSR55, buf, dir, size, mod); break; +- case 97: VG_(transfer) (&ppc64->guest_VSR56, buf, dir, size, mod); break; +- case 98: VG_(transfer) (&ppc64->guest_VSR57, buf, dir, size, mod); break; +- case 99: VG_(transfer) (&ppc64->guest_VSR58, buf, dir, size, mod); break; +- case 100: VG_(transfer) (&ppc64->guest_VSR59, buf, dir, size, mod); break; +- case 101: VG_(transfer) (&ppc64->guest_VSR60, buf, dir, size, mod); break; +- case 102: VG_(transfer) (&ppc64->guest_VSR61, buf, dir, size, mod); break; +- case 103: VG_(transfer) (&ppc64->guest_VSR62, buf, dir, size, mod); break; +- case 104: VG_(transfer) (&ppc64->guest_VSR63, buf, dir, size, mod); break; +- case 105: VG_(transfer) (&ppc64->guest_VSCR, buf, dir, size, mod); break; ++ ++ case 73: VG_(transfer) (&ppc64->guest_VSR32, buf, dir, size, mod); break; ++ case 74: VG_(transfer) (&ppc64->guest_VSR33, buf, dir, size, mod); break; ++ case 75: VG_(transfer) (&ppc64->guest_VSR34, buf, dir, size, mod); break; ++ case 76: VG_(transfer) (&ppc64->guest_VSR35, buf, dir, size, mod); break; ++ case 77: VG_(transfer) (&ppc64->guest_VSR36, buf, dir, size, mod); break; ++ case 78: VG_(transfer) (&ppc64->guest_VSR37, buf, dir, size, mod); break; ++ case 79: VG_(transfer) (&ppc64->guest_VSR38, buf, dir, size, mod); break; ++ case 80: VG_(transfer) (&ppc64->guest_VSR39, buf, dir, size, mod); break; ++ case 81: VG_(transfer) (&ppc64->guest_VSR40, buf, dir, size, mod); break; ++ case 82: VG_(transfer) (&ppc64->guest_VSR40, buf, dir, size, mod); break; ++ case 83: VG_(transfer) (&ppc64->guest_VSR42, buf, dir, size, mod); break; ++ case 84: VG_(transfer) (&ppc64->guest_VSR43, buf, dir, size, mod); break; ++ case 85: VG_(transfer) (&ppc64->guest_VSR44, buf, dir, size, mod); break; ++ case 86: VG_(transfer) (&ppc64->guest_VSR45, buf, dir, size, mod); break; ++ case 87: VG_(transfer) (&ppc64->guest_VSR46, buf, dir, size, mod); break; ++ case 88: VG_(transfer) (&ppc64->guest_VSR47, buf, dir, size, mod); break; ++ case 89: VG_(transfer) (&ppc64->guest_VSR48, buf, dir, size, mod); break; ++ case 90: VG_(transfer) (&ppc64->guest_VSR49, buf, dir, size, mod); break; ++ case 91: VG_(transfer) (&ppc64->guest_VSR50, buf, dir, size, mod); break; ++ case 92: VG_(transfer) (&ppc64->guest_VSR51, buf, dir, size, mod); break; ++ case 93: VG_(transfer) (&ppc64->guest_VSR52, buf, dir, size, mod); break; ++ case 94: VG_(transfer) (&ppc64->guest_VSR53, buf, dir, size, mod); break; ++ case 95: VG_(transfer) (&ppc64->guest_VSR54, buf, dir, size, mod); break; ++ case 96: VG_(transfer) (&ppc64->guest_VSR55, buf, dir, size, mod); break; ++ case 97: VG_(transfer) (&ppc64->guest_VSR56, buf, dir, size, mod); break; ++ case 98: VG_(transfer) (&ppc64->guest_VSR57, buf, dir, size, mod); break; ++ case 99: VG_(transfer) (&ppc64->guest_VSR58, buf, dir, size, mod); break; ++ case 100: VG_(transfer) (&ppc64->guest_VSR59, buf, dir, size, mod); break; ++ case 101: VG_(transfer) (&ppc64->guest_VSR60, buf, dir, size, mod); break; ++ case 102: VG_(transfer) (&ppc64->guest_VSR61, buf, dir, size, mod); break; ++ case 103: VG_(transfer) (&ppc64->guest_VSR62, buf, dir, size, mod); break; ++ case 104: VG_(transfer) (&ppc64->guest_VSR63, buf, dir, size, mod); break; ++ case 105: VG_(transfer) (&ppc64->guest_VSCR, buf, dir, size, mod); break; + case 106: VG_(transfer) (&ppc64->guest_VRSAVE, buf, dir, size, mod); break; ++ ++ /* Fetch the lower 64-bits of the VSR registers. GDB will combine the ++ * lower 64-bits of the VSR with the upper 64-bits it got fetching the ++ * corresponding floating point register to display the full 128-bit ++ * VSR value. ++ */ ++ case 107: VG_(transfer) (&ppc64->guest_VSR0[low_offset], buf, dir, size, mod); break; ++ case 108: VG_(transfer) (&ppc64->guest_VSR1[low_offset], buf, dir, size, mod); break; ++ case 109: VG_(transfer) (&ppc64->guest_VSR2[low_offset], buf, dir, size, mod); break; ++ case 110: VG_(transfer) (&ppc64->guest_VSR3[low_offset], buf, dir, size, mod); break; ++ case 111: VG_(transfer) (&ppc64->guest_VSR4[low_offset], buf, dir, size, mod); break; ++ case 112: VG_(transfer) (&ppc64->guest_VSR5[low_offset], buf, dir, size, mod); break; ++ case 113: VG_(transfer) (&ppc64->guest_VSR6[low_offset], buf, dir, size, mod); break; ++ case 114: VG_(transfer) (&ppc64->guest_VSR7[low_offset], buf, dir, size, mod); break; ++ case 115: VG_(transfer) (&ppc64->guest_VSR8[low_offset], buf, dir, size, mod); break; ++ case 116: VG_(transfer) (&ppc64->guest_VSR9[low_offset], buf, dir, size, mod); break; ++ case 117: VG_(transfer) (&ppc64->guest_VSR10[low_offset], buf, dir, size, mod); break; ++ case 118: VG_(transfer) (&ppc64->guest_VSR11[low_offset], buf, dir, size, mod); break; ++ case 119: VG_(transfer) (&ppc64->guest_VSR12[low_offset], buf, dir, size, mod); break; ++ case 120: VG_(transfer) (&ppc64->guest_VSR13[low_offset], buf, dir, size, mod); break; ++ case 121: VG_(transfer) (&ppc64->guest_VSR14[low_offset], buf, dir, size, mod); break; ++ case 122: VG_(transfer) (&ppc64->guest_VSR15[low_offset], buf, dir, size, mod); break; ++ case 123: VG_(transfer) (&ppc64->guest_VSR16[low_offset], buf, dir, size, mod); break; ++ case 124: VG_(transfer) (&ppc64->guest_VSR17[low_offset], buf, dir, size, mod); break; ++ case 125: VG_(transfer) (&ppc64->guest_VSR18[low_offset], buf, dir, size, mod); break; ++ case 126: VG_(transfer) (&ppc64->guest_VSR19[low_offset], buf, dir, size, mod); break; ++ case 127: VG_(transfer) (&ppc64->guest_VSR20[low_offset], buf, dir, size, mod); break; ++ case 128: VG_(transfer) (&ppc64->guest_VSR21[low_offset], buf, dir, size, mod); break; ++ case 129: VG_(transfer) (&ppc64->guest_VSR22[low_offset], buf, dir, size, mod); break; ++ case 130: VG_(transfer) (&ppc64->guest_VSR23[low_offset], buf, dir, size, mod); break; ++ case 131: VG_(transfer) (&ppc64->guest_VSR24[low_offset], buf, dir, size, mod); break; ++ case 132: VG_(transfer) (&ppc64->guest_VSR25[low_offset], buf, dir, size, mod); break; ++ case 133: VG_(transfer) (&ppc64->guest_VSR26[low_offset], buf, dir, size, mod); break; ++ case 134: VG_(transfer) (&ppc64->guest_VSR27[low_offset], buf, dir, size, mod); break; ++ case 135: VG_(transfer) (&ppc64->guest_VSR28[low_offset], buf, dir, size, mod); break; ++ case 136: VG_(transfer) (&ppc64->guest_VSR29[low_offset], buf, dir, size, mod); break; ++ case 137: VG_(transfer) (&ppc64->guest_VSR30[low_offset], buf, dir, size, mod); break; ++ case 138: VG_(transfer) (&ppc64->guest_VSR31[low_offset], buf, dir, size, mod); break; + default: vg_assert(0); + } + } +@@ -321,6 +471,14 @@ void transfer_register (ThreadId tid, int abs_regno, void * buf, + static + const char* target_xml (Bool shadow_mode) + { ++ /* NOTE, the current powerpc-altivec64l*.xml files includes the vsx ++ * registers. Power 6 and earlier power processors do not support the ++ * vsx registers. GDB has a bug in that it is only checking for ptrace ++ * support rather then checking the actual HW feature. Hence GDB on ++ * power 6 prints vsx registers that do not exist. Valgrind GDB support ++ * also has to include the vsx register definitions to be consistent with ++ * GDB. ++ */ + if (shadow_mode) { + return "powerpc-altivec64l-valgrind.xml"; + } else { + +commit 323a91bfd7dd10d52c77ff31ae6d6b8d0bb37f32 +Author: carll +Date: Fri Apr 22 15:03:46 2016 +0000 + + PPC64, Valgrind with GDB does not display 64-bit and 128-bit registers + correctly + + Forgot to add the new files to the previous commit 15864. + + coregrind/m_gdbserver/power64-core2-valgrind-s1.xml + coregrind/m_gdbserver/power64-core2-valgrind-s2.xml + coregrind/m_gdbserver/power-vsx-valgrind-s1.xml + coregrind/m_gdbserver/power-vsx-valgrind-s2.xml + coregrind/m_gdbserver/power-vsx.xml + + Bugzilla 360008 was opened for this issue. + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15866 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_gdbserver/power-vsx-valgrind-s1.xml b/coregrind/m_gdbserver/power-vsx-valgrind-s1.xml +new file mode 100644 +index 0000000..24730ff +--- /dev/null ++++ b/coregrind/m_gdbserver/power-vsx-valgrind-s1.xml +@@ -0,0 +1,44 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/coregrind/m_gdbserver/power-vsx-valgrind-s2.xml b/coregrind/m_gdbserver/power-vsx-valgrind-s2.xml +new file mode 100644 +index 0000000..8854e8f +--- /dev/null ++++ b/coregrind/m_gdbserver/power-vsx-valgrind-s2.xml +@@ -0,0 +1,44 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/coregrind/m_gdbserver/power-vsx.xml b/coregrind/m_gdbserver/power-vsx.xml +new file mode 100644 +index 0000000..411e35c +--- /dev/null ++++ b/coregrind/m_gdbserver/power-vsx.xml +@@ -0,0 +1,44 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/coregrind/m_gdbserver/power64-core2-valgrind-s1.xml b/coregrind/m_gdbserver/power64-core2-valgrind-s1.xml +new file mode 100644 +index 0000000..1012a2d +--- /dev/null ++++ b/coregrind/m_gdbserver/power64-core2-valgrind-s1.xml +@@ -0,0 +1,16 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/coregrind/m_gdbserver/power64-core2-valgrind-s2.xml b/coregrind/m_gdbserver/power64-core2-valgrind-s2.xml +new file mode 100644 +index 0000000..fa50bd4 +--- /dev/null ++++ b/coregrind/m_gdbserver/power64-core2-valgrind-s2.xml +@@ -0,0 +1,16 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +Only in valgrind-3.11.0: autom4te.cache +diff -ur valgrind-3.11.0.orig/coregrind/Makefile.in valgrind-3.11.0/coregrind/Makefile.in +--- valgrind-3.11.0.orig/coregrind/Makefile.in 2016-04-29 15:07:46.688655051 +0200 ++++ valgrind-3.11.0/coregrind/Makefile.in 2016-04-29 15:11:24.219880810 +0200 +@@ -1746,12 +1746,17 @@ + m_gdbserver/power64-core-valgrind-s1.xml \ + m_gdbserver/power64-core-valgrind-s2.xml \ + m_gdbserver/power64-core.xml \ ++ m_gdbserver/power64-core2-valgrind-s1.xml \ ++ m_gdbserver/power64-core2-valgrind-s2.xml \ + m_gdbserver/power64-linux-valgrind-s1.xml \ + m_gdbserver/power64-linux-valgrind-s2.xml \ + m_gdbserver/power64-linux.xml \ + m_gdbserver/power-altivec-valgrind-s1.xml \ + m_gdbserver/power-altivec-valgrind-s2.xml \ + m_gdbserver/power-altivec.xml \ ++ m_gdbserver/power-vsx-valgrind-s1.xml \ ++ m_gdbserver/power-vsx-valgrind-s2.xml \ ++ m_gdbserver/power-vsx.xml \ + m_gdbserver/power-core-valgrind-s1.xml \ + m_gdbserver/power-core-valgrind-s2.xml \ + m_gdbserver/power-core.xml \ diff --git a/SOURCES/valgrind-3.11.0-ppoll-mask.patch b/SOURCES/valgrind-3.11.0-ppoll-mask.patch new file mode 100644 index 0000000..720e54d --- /dev/null +++ b/SOURCES/valgrind-3.11.0-ppoll-mask.patch @@ -0,0 +1,950 @@ +commit 515c3b6de3eff6ddf88fd14a0084b8ad0c692553 +Author: iraisr +Date: Tue Mar 8 09:04:48 2016 +0000 + + Sanitize signal mask in ppoll and pselect syscalls + Reported and Linux patch contributed by Steven Smith + Fixes BZ#359871 + + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15823 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_syswrap/priv_syswrap-main.h b/coregrind/m_syswrap/priv_syswrap-main.h +index cabad7c..3164c81 100644 +--- a/coregrind/m_syswrap/priv_syswrap-main.h ++++ b/coregrind/m_syswrap/priv_syswrap-main.h +@@ -38,6 +38,9 @@ + extern + void ML_(fixup_guest_state_to_restart_syscall) ( ThreadArchState* arch ); + ++extern ++void VG_(sanitize_client_sigmask)(vki_sigset_t *mask); ++ + #if defined(VGO_darwin) + /* Longjmp to scheduler after client calls workq_ops(WQOPS_THREAD_RETURN)*/ + extern +diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c +index 7c88bc2..4a8344b 100644 +--- a/coregrind/m_syswrap/syswrap-amd64-linux.c ++++ b/coregrind/m_syswrap/syswrap-amd64-linux.c +@@ -1018,7 +1018,7 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_fchmodat, sys_fchmodat), // 268 + LINX_(__NR_faccessat, sys_faccessat), // 269 + +- LINX_(__NR_pselect6, sys_pselect6), // 270 ++ LINXY(__NR_pselect6, sys_pselect6), // 270 + LINXY(__NR_ppoll, sys_ppoll), // 271 + LINX_(__NR_unshare, sys_unshare), // 272 + LINX_(__NR_set_robust_list, sys_set_robust_list), // 273 +diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c +index 3ccad12..224070c 100644 +--- a/coregrind/m_syswrap/syswrap-arm-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm-linux.c +@@ -1188,7 +1188,7 @@ static SyscallTableEntry syscall_main_table[] = { + + LINX_(__NR_arm_fadvise64_64, sys_fadvise64_64), // 270 */(Linux?) + +- LINX_(__NR_pselect6, sys_pselect6), // 335 ++ LINXY(__NR_pselect6, sys_pselect6), // 335 + LINXY(__NR_ppoll, sys_ppoll), // 336 + + LINXY(__NR_epoll_pwait, sys_epoll_pwait), // 346 +diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c +index 8d3027d..abddff1 100644 +--- a/coregrind/m_syswrap/syswrap-arm64-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm64-linux.c +@@ -924,7 +924,7 @@ static SyscallTableEntry syscall_main_table[] = { + GENX_(__NR_writev, sys_writev), // 66 + GENXY(__NR_pread64, sys_pread64), // 67 + GENX_(__NR_pwrite64, sys_pwrite64), // 68 +- LINX_(__NR_pselect6, sys_pselect6), // 72 ++ LINXY(__NR_pselect6, sys_pselect6), // 72 + LINXY(__NR_ppoll, sys_ppoll), // 73 + LINXY(__NR_signalfd4, sys_signalfd4), // 74 + LINX_(__NR_readlinkat, sys_readlinkat), // 78 +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index f2d1076..6fdacda 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -62,6 +62,7 @@ + #include "priv_types_n_macros.h" + #include "priv_syswrap-generic.h" + #include "priv_syswrap-linux.h" ++#include "priv_syswrap-main.h" + #include "priv_syswrap-xen.h" + + // Run a thread from beginning to end and return the thread's +@@ -1272,9 +1273,18 @@ POST(sys_get_robust_list) + POST_MEM_WRITE(ARG3, sizeof(struct vki_size_t *)); + } + ++struct pselect_sized_sigset { ++ const vki_sigset_t *ss; ++ vki_size_t ss_len; ++}; ++struct pselect_adjusted_sigset { ++ struct pselect_sized_sigset ss; /* The actual syscall arg */ ++ vki_sigset_t adjusted_ss; ++}; ++ + PRE(sys_pselect6) + { +- *flags |= SfMayBlock; ++ *flags |= SfMayBlock | SfPostOnFail; + PRINT("sys_pselect6 ( %ld, %#lx, %#lx, %#lx, %#lx, %#lx )", + SARG1, ARG2, ARG3, ARG4, ARG5, ARG6); + PRE_REG_READ6(long, "pselect6", +@@ -1293,15 +1303,41 @@ PRE(sys_pselect6) + ARG4, ARG1/8 /* __FD_SETSIZE/8 */ ); + if (ARG5 != 0) + PRE_MEM_READ( "pselect6(timeout)", ARG5, sizeof(struct vki_timeval) ); +- if (ARG6 != 0) +- PRE_MEM_READ( "pselect6(sig)", ARG6, sizeof(void *)+sizeof(vki_size_t) ); ++ if (ARG6 != 0) { ++ const struct pselect_sized_sigset *pss = ++ (struct pselect_sized_sigset *)ARG6; ++ PRE_MEM_READ( "pselect6(sig)", ARG6, sizeof(*pss) ); ++ if (!ML_(safe_to_deref)(pss, sizeof(*pss))) { ++ ARG6 = 1; /* Something recognisable to POST() hook. */ ++ } else { ++ struct pselect_adjusted_sigset *pas; ++ pas = VG_(malloc)("syswrap.pselect6.1", sizeof(*pas)); ++ ARG6 = (Addr)pas; ++ pas->ss.ss = (void *)1; ++ pas->ss.ss_len = pss->ss_len; ++ if (pss->ss_len == sizeof(*pss->ss)) { ++ PRE_MEM_READ("pselect6(sig->ss)", (Addr)pss->ss, pss->ss_len); ++ if (ML_(safe_to_deref)(pss->ss, sizeof(*pss->ss))) { ++ pas->adjusted_ss = *pss->ss; ++ pas->ss.ss = &pas->adjusted_ss; ++ VG_(sanitize_client_sigmask)(&pas->adjusted_ss); ++ } ++ } ++ } ++ } ++} ++POST(sys_pselect6) ++{ ++ if (ARG6 != 0 && ARG6 != 1) { ++ VG_(free)((struct pselect_adjusted_sigset *)ARG6); ++ } + } + + PRE(sys_ppoll) + { + UInt i; + struct vki_pollfd* ufds = (struct vki_pollfd *)ARG1; +- *flags |= SfMayBlock; ++ *flags |= SfMayBlock | SfPostOnFail; + PRINT("sys_ppoll ( %#lx, %lu, %#lx, %#lx, %lu )\n", ARG1,ARG2,ARG3,ARG4,ARG5); + PRE_REG_READ5(long, "ppoll", + struct vki_pollfd *, ufds, unsigned int, nfds, +@@ -1319,18 +1355,33 @@ PRE(sys_ppoll) + + if (ARG3) + PRE_MEM_READ( "ppoll(tsp)", ARG3, sizeof(struct vki_timespec) ); +- if (ARG4) +- PRE_MEM_READ( "ppoll(sigmask)", ARG4, sizeof(vki_sigset_t) ); ++ if (ARG4 != 0 && sizeof(vki_sigset_t) == ARG5) { ++ const vki_sigset_t *guest_sigmask = (vki_sigset_t *)ARG4; ++ PRE_MEM_READ( "ppoll(sigmask)", ARG4, ARG5); ++ if (!ML_(safe_to_deref)(guest_sigmask, sizeof(*guest_sigmask))) { ++ ARG4 = 1; /* Something recognisable to POST() hook. */ ++ } else { ++ vki_sigset_t *vg_sigmask = ++ VG_(malloc)("syswrap.ppoll.1", sizeof(*vg_sigmask)); ++ ARG4 = (Addr)vg_sigmask; ++ *vg_sigmask = *guest_sigmask; ++ VG_(sanitize_client_sigmask)(vg_sigmask); ++ } ++ } + } + + POST(sys_ppoll) + { +- if (RES > 0) { ++ vg_assert(SUCCESS || FAILURE); ++ if (SUCCESS && (RES >= 0)) { + UInt i; + struct vki_pollfd* ufds = (struct vki_pollfd *)ARG1; + for (i = 0; i < ARG2; i++) + POST_MEM_WRITE( (Addr)(&ufds[i].revents), sizeof(ufds[i].revents) ); + } ++ if (ARG4 != 0 && ARG5 == sizeof(vki_sigset_t) && ARG4 != 1) { ++ VG_(free)((vki_sigset_t *) ARG4); ++ } + } + + +diff --git a/coregrind/m_syswrap/syswrap-main.c b/coregrind/m_syswrap/syswrap-main.c +index 054891f..d854194 100644 +--- a/coregrind/m_syswrap/syswrap-main.c ++++ b/coregrind/m_syswrap/syswrap-main.c +@@ -1657,7 +1657,7 @@ static const SyscallTableEntry* get_syscall_entry ( Int syscallno ) + /* Add and remove signals from mask so that we end up telling the + kernel the state we actually want rather than what the client + wants. */ +-static void sanitize_client_sigmask(vki_sigset_t *mask) ++void VG_(sanitize_client_sigmask)(vki_sigset_t *mask) + { + VG_(sigdelset)(mask, VKI_SIGKILL); + VG_(sigdelset)(mask, VKI_SIGSTOP); +@@ -1979,7 +1979,7 @@ void VG_(client_syscall) ( ThreadId tid, UInt trc ) + PRINT(" --> [async] ... \n"); + + mask = tst->sig_mask; +- sanitize_client_sigmask(&mask); ++ VG_(sanitize_client_sigmask)(&mask); + + /* Gack. More impedance matching. Copy the possibly + modified syscall args back into the guest state. */ +diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c +index 12d147d..7c5fbdb 100644 +--- a/coregrind/m_syswrap/syswrap-mips64-linux.c ++++ b/coregrind/m_syswrap/syswrap-mips64-linux.c +@@ -889,7 +889,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_ (__NR_readlinkat, sys_readlinkat), + LINX_ (__NR_fchmodat, sys_fchmodat), + LINX_ (__NR_faccessat, sys_faccessat), +- LINX_ (__NR_pselect6, sys_pselect6), ++ LINXY (__NR_pselect6, sys_pselect6), + LINXY (__NR_ppoll, sys_ppoll), + PLAX_ (__NR_unshare, sys_unshare), + PLAX_ (__NR_splice, sys_splice), +diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c +index 9ceaa15..379fcb3 100644 +--- a/coregrind/m_syswrap/syswrap-ppc32-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c +@@ -1194,7 +1194,7 @@ static SyscallTableEntry syscall_table[] = { + PLAXY(__NR_spu_run, sys_spu_run), // 278 + PLAX_(__NR_spu_create, sys_spu_create), // 279 + +- LINX_(__NR_pselect6, sys_pselect6), // 280 ++ LINXY(__NR_pselect6, sys_pselect6), // 280 + LINXY(__NR_ppoll, sys_ppoll), // 281 + + LINXY(__NR_openat, sys_openat), // 286 +diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c +index 15b8979..77668c7 100644 +--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c +@@ -1110,7 +1110,7 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_inotify_add_watch, sys_inotify_add_watch), // 276 + LINX_(__NR_inotify_rm_watch, sys_inotify_rm_watch), // 277 + +- LINX_(__NR_pselect6, sys_pselect6), // 280 ++ LINXY(__NR_pselect6, sys_pselect6), // 280 + LINXY(__NR_ppoll, sys_ppoll), // 281 + + LINXY(__NR_openat, sys_openat), // 286 +diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c +index 0513789..107a569 100644 +--- a/coregrind/m_syswrap/syswrap-s390x-linux.c ++++ b/coregrind/m_syswrap/syswrap-s390x-linux.c +@@ -992,7 +992,7 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_fchmodat, sys_fchmodat), // 299 + + LINX_(__NR_faccessat, sys_faccessat), // 300 +- LINX_(__NR_pselect6, sys_pselect6), // 301 ++ LINXY(__NR_pselect6, sys_pselect6), // 301 + LINXY(__NR_ppoll, sys_ppoll), // 302 + LINX_(__NR_unshare, sys_unshare), // 303 + LINX_(__NR_set_robust_list, sys_set_robust_list), // 304 +diff --git a/coregrind/m_syswrap/syswrap-solaris.c b/coregrind/m_syswrap/syswrap-solaris.c +index 7ac876f..a307f6c 100644 +--- a/coregrind/m_syswrap/syswrap-solaris.c ++++ b/coregrind/m_syswrap/syswrap-solaris.c +@@ -71,6 +71,7 @@ + + #include "priv_types_n_macros.h" + #include "priv_syswrap-generic.h" ++#include "priv_syswrap-main.h" + #include "priv_syswrap-solaris.h" + + /* Return the number of non-dead and daemon threads. +@@ -7327,7 +7328,7 @@ PRE(sys_pollsys) + UWord i; + struct vki_pollfd *ufds = (struct vki_pollfd *)ARG1; + +- *flags |= SfMayBlock; ++ *flags |= SfMayBlock | SfPostOnFail; + + PRINT("sys_pollsys ( %#lx, %lu, %#lx, %#lx )", ARG1, ARG2, ARG3, ARG4); + PRE_REG_READ4(long, "poll", pollfd_t *, fds, vki_nfds_t, nfds, +@@ -7343,18 +7344,37 @@ PRE(sys_pollsys) + + if (ARG3) + PRE_MEM_READ("poll(timeout)", ARG3, sizeof(vki_timespec_t)); +- if (ARG4) ++ ++ if (ARG4) { + PRE_MEM_READ("poll(set)", ARG4, sizeof(vki_sigset_t)); ++ ++ const vki_sigset_t *guest_sigmask = (vki_sigset_t *) ARG4; ++ if (!ML_(safe_to_deref)(guest_sigmask, sizeof(vki_sigset_t))) { ++ ARG4 = 1; /* Something recognisable to POST() hook. */ ++ } else { ++ vki_sigset_t *vg_sigmask = ++ VG_(malloc)("syswrap.pollsys.1", sizeof(vki_sigset_t)); ++ ARG4 = (Addr) vg_sigmask; ++ *vg_sigmask = *guest_sigmask; ++ VG_(sanitize_client_sigmask)(vg_sigmask); ++ } ++ } + } + + POST(sys_pollsys) + { +- if (RES >= 0) { ++ vg_assert(SUCCESS || FAILURE); ++ ++ if (SUCCESS && (RES >= 0)) { + UWord i; + vki_pollfd_t *ufds = (vki_pollfd_t*)ARG1; + for (i = 0; i < ARG2; i++) + POST_FIELD_WRITE(ufds[i].revents); + } ++ ++ if ((ARG4 != 0) && (ARG4 != 1)) { ++ VG_(free)((vki_sigset_t *) ARG4); ++ } + } + + PRE(sys_labelsys) +diff --git a/coregrind/m_syswrap/syswrap-tilegx-linux.c b/coregrind/m_syswrap/syswrap-tilegx-linux.c +index aceceb4..4845f79 100644 +--- a/coregrind/m_syswrap/syswrap-tilegx-linux.c ++++ b/coregrind/m_syswrap/syswrap-tilegx-linux.c +@@ -1202,7 +1202,7 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_preadv, sys_preadv), // 69 + LINX_(__NR_pwritev, sys_pwritev), // 70 + LINXY(__NR_sendfile, sys_sendfile), // 71 +- LINX_(__NR_pselect6, sys_pselect6), // 72 ++ LINXY(__NR_pselect6, sys_pselect6), // 72 + LINXY(__NR_ppoll, sys_ppoll), // 73 + LINXY(__NR_signalfd4, sys_signalfd4), // 74 + LINX_(__NR_splice, sys_splice), // 75 +diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c +index 3c80e6a..f1f97d7 100644 +--- a/coregrind/m_syswrap/syswrap-x86-linux.c ++++ b/coregrind/m_syswrap/syswrap-x86-linux.c +@@ -1766,7 +1766,7 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_readlinkat, sys_readlinkat), // 305 + LINX_(__NR_fchmodat, sys_fchmodat), // 306 + LINX_(__NR_faccessat, sys_faccessat), // 307 +- LINX_(__NR_pselect6, sys_pselect6), // 308 ++ LINXY(__NR_pselect6, sys_pselect6), // 308 + LINXY(__NR_ppoll, sys_ppoll), // 309 + + LINX_(__NR_unshare, sys_unshare), // 310 +diff --git a/none/tests/Makefile.am b/none/tests/Makefile.am +index 7eb2bf8..5d8e942 100644 +--- a/none/tests/Makefile.am ++++ b/none/tests/Makefile.am +@@ -142,12 +142,14 @@ EXTRA_DIST = \ + nestedfns.stderr.exp nestedfns.stdout.exp nestedfns.vgtest \ + nodir.stderr.exp nodir.vgtest \ + pending.stdout.exp pending.stderr.exp pending.vgtest \ ++ ppoll_alarm.stdout.exp ppoll_alarm.stderr.exp ppoll_alarm.vgtest \ + procfs-linux.stderr.exp-with-readlinkat \ + procfs-linux.stderr.exp-without-readlinkat \ + procfs-linux.vgtest \ + procfs-non-linux.vgtest \ + procfs-non-linux.stderr.exp-with-readlinkat \ + procfs-non-linux.stderr.exp-without-readlinkat \ ++ pselect_alarm.stdout.exp pselect_alarm.stderr.exp pselect_alarm.vgtest \ + pth_atfork1.stderr.exp pth_atfork1.stdout.exp pth_atfork1.vgtest \ + pth_blockedsig.stderr.exp \ + pth_blockedsig.stdout.exp pth_blockedsig.vgtest \ +@@ -215,7 +217,9 @@ check_PROGRAMS = \ + mmap_fcntl_bug \ + munmap_exe map_unaligned map_unmap mq \ + pending \ ++ ppoll_alarm \ + procfs-cmdline-exe \ ++ pselect_alarm \ + pth_atfork1 pth_blockedsig pth_cancel1 pth_cancel2 pth_cvsimple \ + pth_empty pth_exit pth_exit2 pth_mutexspeed pth_once pth_rwlock \ + pth_stackalign \ +@@ -289,6 +293,8 @@ libvexmultiarch_test_LDADD = \ + ../../VEX/libvexmultiarch-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a \ + ../../VEX/libvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a @LIB_UBSAN@ + libvexmultiarch_test_SOURCES = libvex_test.c ++ppoll_alarm_LDADD = -lpthread ++pselect_alarm_LDADD = -lpthread + pth_atfork1_LDADD = -lpthread + pth_blockedsig_LDADD = -lpthread + pth_cancel1_CFLAGS = $(AM_CFLAGS) -Wno-shadow +diff --git a/none/tests/ppoll_alarm.c b/none/tests/ppoll_alarm.c +new file mode 100644 +index 0000000..1b1794b +--- /dev/null ++++ b/none/tests/ppoll_alarm.c +@@ -0,0 +1,55 @@ ++/* Tries to exploit bug in ppoll mask handling: ++ https://bugs.kde.org/show_bug.cgi?id=359871 ++ where client program was able to successfully block VG_SIGVGKILL. */ ++ ++#define _GNU_SOURCE /* for ppoll */ ++#include ++#include ++#include ++#include ++#include ++ ++static int ready = 0; ++static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; ++static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; ++ ++static void * ++mythr(void *ignore) ++{ ++ pthread_mutex_lock(&mutex); ++ ready = 1; ++ pthread_cond_signal(&cond); ++ pthread_mutex_unlock(&mutex); ++ ++ sigset_t ss; ++ sigfillset(&ss); ++ while (1) { ++ struct timespec ts = {10000, 0}; ++ ppoll(NULL, 0, &ts, &ss); ++ } ++ ++ return NULL; ++} ++ ++int ++main() ++{ ++ pthread_t thr; ++ int ret = pthread_create(&thr, NULL, mythr, NULL); ++ if (ret != 0) { ++ fprintf(stderr, "pthread_create failed\n"); ++ return 1; ++ } ++ ++ pthread_mutex_lock(&mutex); ++ while (ready == 0) { ++ pthread_cond_wait(&cond, &mutex); ++ } ++ pthread_mutex_unlock(&mutex); ++ ++ alarm(1); /* Unhandled SIGALRM should cause exit. */ ++ while (1) ++ sleep(1); ++ ++ return 0; ++} +diff --git a/none/tests/ppoll_alarm.stderr.exp b/none/tests/ppoll_alarm.stderr.exp +new file mode 100644 +index 0000000..e69de29 +diff --git a/none/tests/ppoll_alarm.stdout.exp b/none/tests/ppoll_alarm.stdout.exp +new file mode 100644 +index 0000000..e69de29 +diff --git a/none/tests/ppoll_alarm.vgtest b/none/tests/ppoll_alarm.vgtest +new file mode 100644 +index 0000000..b1309d3 +--- /dev/null ++++ b/none/tests/ppoll_alarm.vgtest +@@ -0,0 +1,3 @@ ++prog: ppoll_alarm ++vgopts: -q ++stderr_filter: filter_stderr +diff --git a/none/tests/pselect_alarm.c b/none/tests/pselect_alarm.c +new file mode 100644 +index 0000000..7a68ec0 +--- /dev/null ++++ b/none/tests/pselect_alarm.c +@@ -0,0 +1,61 @@ ++/* Tries to exploit bug in pselect mask handling: ++ https://bugs.kde.org/show_bug.cgi?id=359871 ++ where client program was able to successfully block VG_SIGVGKILL. */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static int ready = 0; ++static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; ++static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; ++ ++static void * ++mythr(void *ignore) ++{ ++ pthread_mutex_lock(&mutex); ++ ready = 1; ++ pthread_cond_signal(&cond); ++ pthread_mutex_unlock(&mutex); ++ ++ sigset_t ss; ++ sigfillset(&ss); ++ while (1) { ++ struct timespec ts = {10000, 0}; ++ pselect(0, NULL, NULL, NULL, &ts, &ss); ++ } ++ ++ return NULL; ++} ++ ++int ++main() ++{ ++ pthread_t thr; ++ int ret = pthread_create(&thr, NULL, mythr, NULL); ++ if (ret != 0) { ++ fprintf(stderr, "pthread_create failed\n"); ++ return 1; ++ } ++ ++ pthread_mutex_lock(&mutex); ++ while (ready == 0) { ++ pthread_cond_wait(&cond, &mutex); ++ } ++ pthread_mutex_unlock(&mutex); ++ ++#if defined(VGO_linux) ++ assert(pselect(0, NULL, NULL, NULL, NULL, (sigset_t *)12) == -1); ++ assert(errno == EFAULT); ++#endif ++ ++ alarm(1); /* Unhandled SIGALRM should cause exit. */ ++ while (1) ++ sleep(1); ++ ++ return 0; ++} +diff --git a/none/tests/pselect_alarm.stderr.exp b/none/tests/pselect_alarm.stderr.exp +new file mode 100644 +index 0000000..e69de29 +diff --git a/none/tests/pselect_alarm.stdout.exp b/none/tests/pselect_alarm.stdout.exp +new file mode 100644 +index 0000000..e69de29 +diff --git a/none/tests/pselect_alarm.vgtest b/none/tests/pselect_alarm.vgtest +new file mode 100644 +index 0000000..84cc674 +--- /dev/null ++++ b/none/tests/pselect_alarm.vgtest +@@ -0,0 +1,3 @@ ++prog: pselect_alarm ++vgopts: -q ++stderr_filter: filter_stderr +diff --git a/tests/filter_stderr_basic b/tests/filter_stderr_basic +index 472cd8f..4b6e480 100755 +--- a/tests/filter_stderr_basic ++++ b/tests/filter_stderr_basic +@@ -46,7 +46,7 @@ sed "/warning: line info addresses out of order/d" | + # of the bash process. Newer bash versions redirect such messages properly. + # Suppress any redirected abnormal termination messages. You can find the + # complete list of messages in the bash source file siglist.c. +-perl -n -e 'print if !/^(Segmentation fault|Alarm clock|Aborted|Bus error)( \(core dumped\))?$/' | ++perl -n -e 'print if !/^(Segmentation fault|Alarm clock|Aborted|Bus error|Killed)( \(core dumped\))?$/' | + + # Similar as above, but for ksh on Solaris/illumos. + perl -n -e 'print if !/^(Memory fault|Killed) $/' | +Only in valgrind-3.11.0: autom4te.cache +diff -ru valgrind-3.11.0.orig/none/tests/Makefile.in valgrind-3.11.0/none/tests/Makefile.in +--- valgrind-3.11.0.orig/none/tests/Makefile.in 2016-03-09 20:07:53.451112914 +0100 ++++ valgrind-3.11.0/none/tests/Makefile.in 2016-03-09 20:09:44.281584703 +0100 +@@ -151,7 +151,8 @@ + libvexmultiarch_test$(EXEEXT) manythreads$(EXEEXT) \ + mmap_fcntl_bug$(EXEEXT) munmap_exe$(EXEEXT) \ + map_unaligned$(EXEEXT) map_unmap$(EXEEXT) mq$(EXEEXT) \ +- pending$(EXEEXT) procfs-cmdline-exe$(EXEEXT) \ ++ pending$(EXEEXT) ppoll_alarm$(EXEEXT) \ ++ procfs-cmdline-exe$(EXEEXT) pselect_alarm$(EXEEXT) \ + pth_atfork1$(EXEEXT) pth_blockedsig$(EXEEXT) \ + pth_cancel1$(EXEEXT) pth_cancel2$(EXEEXT) \ + pth_cvsimple$(EXEEXT) pth_empty$(EXEEXT) pth_exit$(EXEEXT) \ +@@ -329,12 +330,18 @@ + pending_SOURCES = pending.c + pending_OBJECTS = pending.$(OBJEXT) + pending_LDADD = $(LDADD) ++ppoll_alarm_SOURCES = ppoll_alarm.c ++ppoll_alarm_OBJECTS = ppoll_alarm.$(OBJEXT) ++ppoll_alarm_DEPENDENCIES = + process_vm_readv_writev_SOURCES = process_vm_readv_writev.c + process_vm_readv_writev_OBJECTS = process_vm_readv_writev.$(OBJEXT) + process_vm_readv_writev_LDADD = $(LDADD) + procfs_cmdline_exe_SOURCES = procfs-cmdline-exe.c + procfs_cmdline_exe_OBJECTS = procfs-cmdline-exe.$(OBJEXT) + procfs_cmdline_exe_LDADD = $(LDADD) ++pselect_alarm_SOURCES = pselect_alarm.c ++pselect_alarm_OBJECTS = pselect_alarm.$(OBJEXT) ++pselect_alarm_DEPENDENCIES = + pth_atfork1_SOURCES = pth_atfork1.c + pth_atfork1_OBJECTS = pth_atfork1.$(OBJEXT) + pth_atfork1_DEPENDENCIES = +@@ -527,18 +534,18 @@ + $(gxx304_SOURCES) ifunc.c ioctl_moans.c libvex_test.c \ + $(libvexmultiarch_test_SOURCES) manythreads.c map_unaligned.c \ + map_unmap.c mmap_fcntl_bug.c mq.c munmap_exe.c nestedfns.c \ +- pending.c process_vm_readv_writev.c procfs-cmdline-exe.c \ +- pth_atfork1.c pth_blockedsig.c pth_cancel1.c pth_cancel2.c \ +- pth_cvsimple.c pth_empty.c pth_exit.c pth_exit2.c \ +- pth_mutexspeed.c pth_once.c pth_rwlock.c pth_stackalign.c \ +- rcrl.c readline1.c require-text-symbol.c res_search.c resolv.c \ +- rlimit64_nofile.c rlimit_nofile.c selfrun.c sem.c semlimit.c \ +- sha1_test.c shortpush.c shorts.c sigstackgrowth.c \ +- stackgrowth.c syscall-restart1.c syscall-restart2.c syslog.c \ +- system.c thread-exits.c threaded-fork.c threadederrno.c \ +- timestamp.c $(tls_SOURCES) $(tls_so_SOURCES) \ +- $(tls2_so_SOURCES) unit_debuglog.c \ +- $(valgrind_cpp_test_SOURCES) vgprintf.c ++ pending.c ppoll_alarm.c process_vm_readv_writev.c \ ++ procfs-cmdline-exe.c pselect_alarm.c pth_atfork1.c \ ++ pth_blockedsig.c pth_cancel1.c pth_cancel2.c pth_cvsimple.c \ ++ pth_empty.c pth_exit.c pth_exit2.c pth_mutexspeed.c pth_once.c \ ++ pth_rwlock.c pth_stackalign.c rcrl.c readline1.c \ ++ require-text-symbol.c res_search.c resolv.c rlimit64_nofile.c \ ++ rlimit_nofile.c selfrun.c sem.c semlimit.c sha1_test.c \ ++ shortpush.c shorts.c sigstackgrowth.c stackgrowth.c \ ++ syscall-restart1.c syscall-restart2.c syslog.c system.c \ ++ thread-exits.c threaded-fork.c threadederrno.c timestamp.c \ ++ $(tls_SOURCES) $(tls_so_SOURCES) $(tls2_so_SOURCES) \ ++ unit_debuglog.c $(valgrind_cpp_test_SOURCES) vgprintf.c + DIST_SOURCES = ansi.c args.c async-sigs.c bitfield1.c bug129866.c \ + bug234814.c closeall.c $(coolo_sigaction_SOURCES) \ + coolo_strlen.c discard.c exec-sigmask.c execve.c faultstatus.c \ +@@ -548,18 +555,18 @@ + $(gxx304_SOURCES) ifunc.c ioctl_moans.c libvex_test.c \ + $(libvexmultiarch_test_SOURCES) manythreads.c map_unaligned.c \ + map_unmap.c mmap_fcntl_bug.c mq.c munmap_exe.c nestedfns.c \ +- pending.c process_vm_readv_writev.c procfs-cmdline-exe.c \ +- pth_atfork1.c pth_blockedsig.c pth_cancel1.c pth_cancel2.c \ +- pth_cvsimple.c pth_empty.c pth_exit.c pth_exit2.c \ +- pth_mutexspeed.c pth_once.c pth_rwlock.c pth_stackalign.c \ +- rcrl.c readline1.c require-text-symbol.c res_search.c resolv.c \ +- rlimit64_nofile.c rlimit_nofile.c selfrun.c sem.c semlimit.c \ +- sha1_test.c shortpush.c shorts.c sigstackgrowth.c \ +- stackgrowth.c syscall-restart1.c syscall-restart2.c syslog.c \ +- system.c thread-exits.c threaded-fork.c threadederrno.c \ +- timestamp.c $(tls_SOURCES) $(tls_so_SOURCES) \ +- $(tls2_so_SOURCES) unit_debuglog.c \ +- $(valgrind_cpp_test_SOURCES) vgprintf.c ++ pending.c ppoll_alarm.c process_vm_readv_writev.c \ ++ procfs-cmdline-exe.c pselect_alarm.c pth_atfork1.c \ ++ pth_blockedsig.c pth_cancel1.c pth_cancel2.c pth_cvsimple.c \ ++ pth_empty.c pth_exit.c pth_exit2.c pth_mutexspeed.c pth_once.c \ ++ pth_rwlock.c pth_stackalign.c rcrl.c readline1.c \ ++ require-text-symbol.c res_search.c resolv.c rlimit64_nofile.c \ ++ rlimit_nofile.c selfrun.c sem.c semlimit.c sha1_test.c \ ++ shortpush.c shorts.c sigstackgrowth.c stackgrowth.c \ ++ syscall-restart1.c syscall-restart2.c syslog.c system.c \ ++ thread-exits.c threaded-fork.c threadederrno.c timestamp.c \ ++ $(tls_SOURCES) $(tls_so_SOURCES) $(tls2_so_SOURCES) \ ++ unit_debuglog.c $(valgrind_cpp_test_SOURCES) vgprintf.c + RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ +@@ -1072,12 +1079,14 @@ + nestedfns.stderr.exp nestedfns.stdout.exp nestedfns.vgtest \ + nodir.stderr.exp nodir.vgtest \ + pending.stdout.exp pending.stderr.exp pending.vgtest \ ++ ppoll_alarm.stdout.exp ppoll_alarm.stderr.exp ppoll_alarm.vgtest \ + procfs-linux.stderr.exp-with-readlinkat \ + procfs-linux.stderr.exp-without-readlinkat \ + procfs-linux.vgtest \ + procfs-non-linux.vgtest \ + procfs-non-linux.stderr.exp-with-readlinkat \ + procfs-non-linux.stderr.exp-without-readlinkat \ ++ pselect_alarm.stdout.exp pselect_alarm.stderr.exp pselect_alarm.vgtest \ + pth_atfork1.stderr.exp pth_atfork1.stdout.exp pth_atfork1.vgtest \ + pth_blockedsig.stderr.exp \ + pth_blockedsig.stdout.exp pth_blockedsig.vgtest \ +@@ -1152,6 +1161,8 @@ + ../../VEX/libvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a @LIB_UBSAN@ + + libvexmultiarch_test_SOURCES = libvex_test.c ++ppoll_alarm_LDADD = -lpthread ++pselect_alarm_LDADD = -lpthread + pth_atfork1_LDADD = -lpthread + pth_blockedsig_LDADD = -lpthread + pth_cancel1_CFLAGS = $(AM_CFLAGS) -Wno-shadow +@@ -1390,6 +1401,10 @@ + @rm -f pending$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(pending_OBJECTS) $(pending_LDADD) $(LIBS) + ++ppoll_alarm$(EXEEXT): $(ppoll_alarm_OBJECTS) $(ppoll_alarm_DEPENDENCIES) $(EXTRA_ppoll_alarm_DEPENDENCIES) ++ @rm -f ppoll_alarm$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(ppoll_alarm_OBJECTS) $(ppoll_alarm_LDADD) $(LIBS) ++ + process_vm_readv_writev$(EXEEXT): $(process_vm_readv_writev_OBJECTS) $(process_vm_readv_writev_DEPENDENCIES) $(EXTRA_process_vm_readv_writev_DEPENDENCIES) + @rm -f process_vm_readv_writev$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(process_vm_readv_writev_OBJECTS) $(process_vm_readv_writev_LDADD) $(LIBS) +@@ -1398,6 +1413,10 @@ + @rm -f procfs-cmdline-exe$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(procfs_cmdline_exe_OBJECTS) $(procfs_cmdline_exe_LDADD) $(LIBS) + ++pselect_alarm$(EXEEXT): $(pselect_alarm_OBJECTS) $(pselect_alarm_DEPENDENCIES) $(EXTRA_pselect_alarm_DEPENDENCIES) ++ @rm -f pselect_alarm$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(pselect_alarm_OBJECTS) $(pselect_alarm_LDADD) $(LIBS) ++ + pth_atfork1$(EXEEXT): $(pth_atfork1_OBJECTS) $(pth_atfork1_DEPENDENCIES) $(EXTRA_pth_atfork1_DEPENDENCIES) + @rm -f pth_atfork1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(pth_atfork1_OBJECTS) $(pth_atfork1_LDADD) $(LIBS) +@@ -1607,8 +1626,10 @@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/munmap_exe.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nestedfns-nestedfns.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pending.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppoll_alarm.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process_vm_readv_writev.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/procfs-cmdline-exe.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pselect_alarm.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pth_atfork1.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pth_blockedsig.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pth_cancel1-pth_cancel1.Po@am__quote@ +commit 8c67aa7a7fb1a125e75937ad438d5f9a8fd20c5d +Author: mjw +Date: Tue Jun 21 19:58:21 2016 +0000 + + Bug 364413 pselect sycallwrapper mishandles NULL sigmask. + + Don't check or try to copy sigmask if it is NULL. The sigmask might be + given in a struct, where the length is non-zero, but the signal set + pointer is NULL. + + Testcase provided by Paul Eggert . + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15893 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index 24a5ae9..9ace4fd 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -1316,11 +1316,15 @@ PRE(sys_pselect6) + pas->ss.ss = (void *)1; + pas->ss.ss_len = pss->ss_len; + if (pss->ss_len == sizeof(*pss->ss)) { +- PRE_MEM_READ("pselect6(sig->ss)", (Addr)pss->ss, pss->ss_len); +- if (ML_(safe_to_deref)(pss->ss, sizeof(*pss->ss))) { +- pas->adjusted_ss = *pss->ss; +- pas->ss.ss = &pas->adjusted_ss; +- VG_(sanitize_client_sigmask)(&pas->adjusted_ss); ++ if (pss->ss == NULL) { ++ pas->ss.ss = NULL; ++ } else { ++ PRE_MEM_READ("pselect6(sig->ss)", (Addr)pss->ss, pss->ss_len); ++ if (ML_(safe_to_deref)(pss->ss, sizeof(*pss->ss))) { ++ pas->adjusted_ss = *pss->ss; ++ pas->ss.ss = &pas->adjusted_ss; ++ VG_(sanitize_client_sigmask)(&pas->adjusted_ss); ++ } + } + } + } +diff --git a/none/tests/Makefile.am b/none/tests/Makefile.am +index 0e11492..684c1af 100644 +--- a/none/tests/Makefile.am ++++ b/none/tests/Makefile.am +@@ -150,6 +150,8 @@ EXTRA_DIST = \ + procfs-non-linux.stderr.exp-with-readlinkat \ + procfs-non-linux.stderr.exp-without-readlinkat \ + pselect_alarm.stdout.exp pselect_alarm.stderr.exp pselect_alarm.vgtest \ ++ pselect_signask_null.vgtest \ ++ pselect_sigmask_null.stdout.exp pselect_sigmask_null.stderr.exp \ + pth_atfork1.stderr.exp pth_atfork1.stdout.exp pth_atfork1.vgtest \ + pth_blockedsig.stderr.exp \ + pth_blockedsig.stdout.exp pth_blockedsig.vgtest \ +@@ -222,6 +222,7 @@ + ppoll_alarm \ + procfs-cmdline-exe \ + pselect_alarm \ ++ pselect_sigmask_null \ + pth_atfork1 pth_blockedsig pth_cancel1 pth_cancel2 pth_cvsimple \ + pth_empty pth_exit pth_exit2 pth_mutexspeed pth_once pth_rwlock \ + pth_stackalign \ +diff --git a/none/tests/pselect_sigmask_null.c b/none/tests/pselect_sigmask_null.c +new file mode 100644 +index 0000000..34bd584 +--- /dev/null ++++ b/none/tests/pselect_sigmask_null.c +@@ -0,0 +1,26 @@ ++/* Make sure handling of NULL sigmask is correct. ++ https://bugs.kde.org/show_bug.cgi?id=XXX ++ We might try to make a copy and adjust the mask. ++ Testcase provided by Paul Eggert */ ++ ++#include ++#include ++#include ++ ++int ++main (void) ++{ ++ struct timespec timeout; ++ timeout.tv_sec = 1; ++ timeout.tv_nsec = 0; ++ switch (pselect (0, 0, 0, 0, &timeout, 0)) ++ { ++ default: ++ abort (); ++ case -1: ++ perror ("pselect"); ++ return 1; ++ case 0: ++ return 0; ++ } ++} +diff --git a/none/tests/pselect_sigmask_null.stderr.exp b/none/tests/pselect_sigmask_null.stderr.exp +new file mode 100644 +index 0000000..e69de29 +diff --git a/none/tests/pselect_sigmask_null.stdout.exp b/none/tests/pselect_sigmask_null.stdout.exp +new file mode 100644 +index 0000000..e69de29 +diff --git a/none/tests/pselect_sigmask_null.vgtest b/none/tests/pselect_sigmask_null.vgtest +new file mode 100644 +index 0000000..e59688c +--- /dev/null ++++ b/none/tests/pselect_sigmask_null.vgtest +@@ -0,0 +1,2 @@ ++prog: pselect_sigmask_null ++vgopts: -q + +commit d41bebeb1e561ddfac17d9be65b29aa5bb3ebaf8 +Author: mjw +Date: Tue Jun 21 21:06:27 2016 +0000 + + Bug 364413 followup - fix signask -> sigmask typo in EXTRA_DIST + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15894 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/none/tests/Makefile.am b/none/tests/Makefile.am +index 684c1af..7059e67 100644 +--- a/none/tests/Makefile.am ++++ b/none/tests/Makefile.am +@@ -150,7 +150,7 @@ EXTRA_DIST = \ + procfs-non-linux.stderr.exp-with-readlinkat \ + procfs-non-linux.stderr.exp-without-readlinkat \ + pselect_alarm.stdout.exp pselect_alarm.stderr.exp pselect_alarm.vgtest \ +- pselect_signask_null.vgtest \ ++ pselect_sigmask_null.vgtest \ + pselect_sigmask_null.stdout.exp pselect_sigmask_null.stderr.exp \ + pth_atfork1.stderr.exp pth_atfork1.stdout.exp pth_atfork1.vgtest \ + pth_blockedsig.stderr.exp \ +Only in valgrind-3.11.0: autom4te.cache +diff -ur valgrind-3.11.0.orig/none/tests/Makefile.in valgrind-3.11.0/none/tests/Makefile.in +--- valgrind-3.11.0.orig/none/tests/Makefile.in 2016-06-22 01:12:05.241643238 +0200 ++++ valgrind-3.11.0/none/tests/Makefile.in 2016-06-22 01:16:22.545150491 +0200 +@@ -153,12 +153,12 @@ + map_unaligned$(EXEEXT) map_unmap$(EXEEXT) mq$(EXEEXT) \ + pending$(EXEEXT) ppoll_alarm$(EXEEXT) \ + procfs-cmdline-exe$(EXEEXT) pselect_alarm$(EXEEXT) \ +- pth_atfork1$(EXEEXT) pth_blockedsig$(EXEEXT) \ +- pth_cancel1$(EXEEXT) pth_cancel2$(EXEEXT) \ +- pth_cvsimple$(EXEEXT) pth_empty$(EXEEXT) pth_exit$(EXEEXT) \ +- pth_exit2$(EXEEXT) pth_mutexspeed$(EXEEXT) pth_once$(EXEEXT) \ +- pth_rwlock$(EXEEXT) pth_stackalign$(EXEEXT) rcrl$(EXEEXT) \ +- readline1$(EXEEXT) require-text-symbol$(EXEEXT) \ ++ pselect_sigmask_null$(EXEEXT) pth_atfork1$(EXEEXT) \ ++ pth_blockedsig$(EXEEXT) pth_cancel1$(EXEEXT) \ ++ pth_cancel2$(EXEEXT) pth_cvsimple$(EXEEXT) pth_empty$(EXEEXT) \ ++ pth_exit$(EXEEXT) pth_exit2$(EXEEXT) pth_mutexspeed$(EXEEXT) \ ++ pth_once$(EXEEXT) pth_rwlock$(EXEEXT) pth_stackalign$(EXEEXT) \ ++ rcrl$(EXEEXT) readline1$(EXEEXT) require-text-symbol$(EXEEXT) \ + res_search$(EXEEXT) resolv$(EXEEXT) rlimit_nofile$(EXEEXT) \ + selfrun$(EXEEXT) sem$(EXEEXT) semlimit$(EXEEXT) \ + sha1_test$(EXEEXT) shortpush$(EXEEXT) shorts$(EXEEXT) \ +@@ -342,6 +342,9 @@ + pselect_alarm_SOURCES = pselect_alarm.c + pselect_alarm_OBJECTS = pselect_alarm.$(OBJEXT) + pselect_alarm_DEPENDENCIES = ++pselect_sigmask_null_SOURCES = pselect_sigmask_null.c ++pselect_sigmask_null_OBJECTS = pselect_sigmask_null.$(OBJEXT) ++pselect_sigmask_null_LDADD = $(LDADD) + pth_atfork1_SOURCES = pth_atfork1.c + pth_atfork1_OBJECTS = pth_atfork1.$(OBJEXT) + pth_atfork1_DEPENDENCIES = +@@ -535,17 +538,18 @@ + $(libvexmultiarch_test_SOURCES) manythreads.c map_unaligned.c \ + map_unmap.c mmap_fcntl_bug.c mq.c munmap_exe.c nestedfns.c \ + pending.c ppoll_alarm.c process_vm_readv_writev.c \ +- procfs-cmdline-exe.c pselect_alarm.c pth_atfork1.c \ +- pth_blockedsig.c pth_cancel1.c pth_cancel2.c pth_cvsimple.c \ +- pth_empty.c pth_exit.c pth_exit2.c pth_mutexspeed.c pth_once.c \ +- pth_rwlock.c pth_stackalign.c rcrl.c readline1.c \ +- require-text-symbol.c res_search.c resolv.c rlimit64_nofile.c \ +- rlimit_nofile.c selfrun.c sem.c semlimit.c sha1_test.c \ +- shortpush.c shorts.c sigstackgrowth.c stackgrowth.c \ +- syscall-restart1.c syscall-restart2.c syslog.c system.c \ +- thread-exits.c threaded-fork.c threadederrno.c timestamp.c \ +- $(tls_SOURCES) $(tls_so_SOURCES) $(tls2_so_SOURCES) \ +- unit_debuglog.c $(valgrind_cpp_test_SOURCES) vgprintf.c ++ procfs-cmdline-exe.c pselect_alarm.c pselect_sigmask_null.c \ ++ pth_atfork1.c pth_blockedsig.c pth_cancel1.c pth_cancel2.c \ ++ pth_cvsimple.c pth_empty.c pth_exit.c pth_exit2.c \ ++ pth_mutexspeed.c pth_once.c pth_rwlock.c pth_stackalign.c \ ++ rcrl.c readline1.c require-text-symbol.c res_search.c resolv.c \ ++ rlimit64_nofile.c rlimit_nofile.c selfrun.c sem.c semlimit.c \ ++ sha1_test.c shortpush.c shorts.c sigstackgrowth.c \ ++ stackgrowth.c syscall-restart1.c syscall-restart2.c syslog.c \ ++ system.c thread-exits.c threaded-fork.c threadederrno.c \ ++ timestamp.c $(tls_SOURCES) $(tls_so_SOURCES) \ ++ $(tls2_so_SOURCES) unit_debuglog.c \ ++ $(valgrind_cpp_test_SOURCES) vgprintf.c + DIST_SOURCES = ansi.c args.c async-sigs.c bitfield1.c bug129866.c \ + bug234814.c closeall.c $(coolo_sigaction_SOURCES) \ + coolo_strlen.c discard.c exec-sigmask.c execve.c faultstatus.c \ +@@ -556,17 +560,18 @@ + $(libvexmultiarch_test_SOURCES) manythreads.c map_unaligned.c \ + map_unmap.c mmap_fcntl_bug.c mq.c munmap_exe.c nestedfns.c \ + pending.c ppoll_alarm.c process_vm_readv_writev.c \ +- procfs-cmdline-exe.c pselect_alarm.c pth_atfork1.c \ +- pth_blockedsig.c pth_cancel1.c pth_cancel2.c pth_cvsimple.c \ +- pth_empty.c pth_exit.c pth_exit2.c pth_mutexspeed.c pth_once.c \ +- pth_rwlock.c pth_stackalign.c rcrl.c readline1.c \ +- require-text-symbol.c res_search.c resolv.c rlimit64_nofile.c \ +- rlimit_nofile.c selfrun.c sem.c semlimit.c sha1_test.c \ +- shortpush.c shorts.c sigstackgrowth.c stackgrowth.c \ +- syscall-restart1.c syscall-restart2.c syslog.c system.c \ +- thread-exits.c threaded-fork.c threadederrno.c timestamp.c \ +- $(tls_SOURCES) $(tls_so_SOURCES) $(tls2_so_SOURCES) \ +- unit_debuglog.c $(valgrind_cpp_test_SOURCES) vgprintf.c ++ procfs-cmdline-exe.c pselect_alarm.c pselect_sigmask_null.c \ ++ pth_atfork1.c pth_blockedsig.c pth_cancel1.c pth_cancel2.c \ ++ pth_cvsimple.c pth_empty.c pth_exit.c pth_exit2.c \ ++ pth_mutexspeed.c pth_once.c pth_rwlock.c pth_stackalign.c \ ++ rcrl.c readline1.c require-text-symbol.c res_search.c resolv.c \ ++ rlimit64_nofile.c rlimit_nofile.c selfrun.c sem.c semlimit.c \ ++ sha1_test.c shortpush.c shorts.c sigstackgrowth.c \ ++ stackgrowth.c syscall-restart1.c syscall-restart2.c syslog.c \ ++ system.c thread-exits.c threaded-fork.c threadederrno.c \ ++ timestamp.c $(tls_SOURCES) $(tls_so_SOURCES) \ ++ $(tls2_so_SOURCES) unit_debuglog.c \ ++ $(valgrind_cpp_test_SOURCES) vgprintf.c + RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ +@@ -1087,6 +1092,8 @@ + procfs-non-linux.stderr.exp-with-readlinkat \ + procfs-non-linux.stderr.exp-without-readlinkat \ + pselect_alarm.stdout.exp pselect_alarm.stderr.exp pselect_alarm.vgtest \ ++ pselect_sigmask_null.vgtest \ ++ pselect_sigmask_null.stdout.exp pselect_sigmask_null.stderr.exp \ + pth_atfork1.stderr.exp pth_atfork1.stdout.exp pth_atfork1.vgtest \ + pth_blockedsig.stderr.exp \ + pth_blockedsig.stdout.exp pth_blockedsig.vgtest \ +@@ -1417,6 +1424,10 @@ + @rm -f pselect_alarm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(pselect_alarm_OBJECTS) $(pselect_alarm_LDADD) $(LIBS) + ++pselect_sigmask_null$(EXEEXT): $(pselect_sigmask_null_OBJECTS) $(pselect_sigmask_null_DEPENDENCIES) $(EXTRA_pselect_sigmask_null_DEPENDENCIES) ++ @rm -f pselect_sigmask_null$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(pselect_sigmask_null_OBJECTS) $(pselect_sigmask_null_LDADD) $(LIBS) ++ + pth_atfork1$(EXEEXT): $(pth_atfork1_OBJECTS) $(pth_atfork1_DEPENDENCIES) $(EXTRA_pth_atfork1_DEPENDENCIES) + @rm -f pth_atfork1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(pth_atfork1_OBJECTS) $(pth_atfork1_LDADD) $(LIBS) +@@ -1630,6 +1641,7 @@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process_vm_readv_writev.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/procfs-cmdline-exe.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pselect_alarm.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pselect_sigmask_null.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pth_atfork1.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pth_blockedsig.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pth_cancel1-pth_cancel1.Po@am__quote@ diff --git a/SOURCES/valgrind-3.11.0-pthread_barrier.patch b/SOURCES/valgrind-3.11.0-pthread_barrier.patch new file mode 100644 index 0000000..5942115 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-pthread_barrier.patch @@ -0,0 +1,757 @@ +commit f4d91a5df8b749c6cdfec25e38a44c02c90ad4be +Author: Mark Wielaard +Date: Tue Jan 19 15:13:47 2016 +0100 + + Bug #358213 helgrind/drd pthread_barrier tests vs new glibc implementation + + glibc 2.23 will have a new pthread_barrier implementation. + This implementation reacts differently on bad usage of barriers. + Because of this the bar_bad testcase will hang indefinitely. + In particular pthread_barrier_destroy will hang when there are + still other threads waiting on a barrier. To solve this we add + extra threads to will "unblock" the hanging destroy by sleeping + for a while and then also waiting on the barrier, which will unblock + the destroy operation. Or if this is the last test, just exit + the whole program since we are done anyway. Also newer glibc is + more picky about destroying uninitialized barriers, we would crash + when zero filling, so we now one fill. Which doesn't crash, but + depending on glibc version might return an error or hang. Since + depending on version we now get slightly different error reports + there are now alternative exp files. + + Tested against glibc 2.17, glibc 2.22 and glibc 2.23-prerelease. + +diff --git a/drd/tests/Makefile.am b/drd/tests/Makefile.am +index 2885391..cfd74d0 100644 +--- a/drd/tests/Makefile.am ++++ b/drd/tests/Makefile.am +@@ -81,8 +81,10 @@ EXTRA_DIST = \ + atomic_var.stderr.exp \ + atomic_var.vgtest \ + bar_bad.stderr.exp \ ++ bar_bad.stderr.exp-nohang \ + bar_bad.vgtest \ + bar_bad_xml.stderr.exp \ ++ bar_bad_xml.stderr.exp-nohang \ + bar_bad_xml.vgtest \ + bar_trivial.stderr.exp \ + bar_trivial.stdout.exp \ +diff --git a/drd/tests/bar_bad.stderr.exp b/drd/tests/bar_bad.stderr.exp +index 75f121f..3581b08 100644 +--- a/drd/tests/bar_bad.stderr.exp ++++ b/drd/tests/bar_bad.stderr.exp +@@ -34,16 +34,5 @@ barrier 0x........ was first observed at: + + + destroy a barrier that was never initialised +-Not a barrier +- at 0x........: pthread_barrier_destroy (drd_pthread_intercepts.c:?) +- by 0x........: main (bar_bad.c:?) +- +-Destruction of barrier that is being waited upon: barrier 0x........ +- at 0x........: free (vg_replace_malloc.c:...) +- by 0x........: main (bar_bad.c:?) +-barrier 0x........ was first observed at: +- at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) +- by 0x........: main (bar_bad.c:?) +- + +-ERROR SUMMARY: 7 errors from 6 contexts (suppressed: 0 from 0) ++ERROR SUMMARY: 5 errors from 4 contexts (suppressed: 0 from 0) +diff --git a/drd/tests/bar_bad.stderr.exp-nohang b/drd/tests/bar_bad.stderr.exp-nohang +new file mode 100644 +index 0000000..44f9651 +--- /dev/null ++++ b/drd/tests/bar_bad.stderr.exp-nohang +@@ -0,0 +1,42 @@ ++ ++ ++initialise a barrier with zero count ++pthread_barrier_init: 'count' argument is zero: barrier 0x........ ++ at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++ ++ ++initialise a barrier twice ++Barrier reinitialization: barrier 0x........ ++ at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++barrier 0x........ was first observed at: ++ at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++ ++ ++initialise a barrier which has threads waiting on it ++Barrier reinitialization: barrier 0x........ ++ at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++barrier 0x........ was first observed at: ++ at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++ ++ ++destroy a barrier that has waiting threads ++Destruction of a barrier with active waiters: barrier 0x........ ++ at 0x........: pthread_barrier_destroy (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++barrier 0x........ was first observed at: ++ at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++ ++ ++destroy a barrier that was never initialised ++Not a barrier ++ at 0x........: pthread_barrier_destroy (drd_pthread_intercepts.c:?) ++ by 0x........: main (bar_bad.c:?) ++ ++ ++ERROR SUMMARY: 6 errors from 5 contexts (suppressed: 0 from 0) +diff --git a/drd/tests/bar_bad_xml.stderr.exp b/drd/tests/bar_bad_xml.stderr.exp +index acb9656..8539f75 100644 +--- a/drd/tests/bar_bad_xml.stderr.exp ++++ b/drd/tests/bar_bad_xml.stderr.exp +@@ -204,78 +204,6 @@ destroy a barrier that has waiting threads + + + destroy a barrier that was never initialised +- +- 0x........ +- ... +- GenericErr +- Not a barrier +- +- +- 0x........ +- ... +- pthread_barrier_destroy +- ... +- drd_pthread_intercepts.c +- ... +- +- +- 0x........ +- ... +- main +- ... +- bar_bad.c +- ... +- +- +- +- +- +- 0x........ +- ... +- BarrierErr +- Destruction of barrier that is being waited upon: barrier 0x........ +- +- +- 0x........ +- ... +- free +- ... +- vg_replace_malloc.c +- ... +- +- +- 0x........ +- ... +- main +- ... +- bar_bad.c +- ... +- +- +- +- barrier +-
0x........
+- +- +- 0x........ +- ... +- pthread_barrier_init +- ... +- drd_pthread_intercepts.c +- ... +- +- +- 0x........ +- ... +- main +- ... +- bar_bad.c +- ... +- +- +-
+-
+- + + + FINISHED +@@ -299,14 +227,6 @@ destroy a barrier that was never initialised + ... + 0x........ + +- +- ... +- 0x........ +- +- +- ... +- 0x........ +- + + + ... +diff --git a/drd/tests/bar_bad_xml.stderr.exp-nohang b/drd/tests/bar_bad_xml.stderr.exp-nohang +new file mode 100644 +index 0000000..a47cd60 +--- /dev/null ++++ b/drd/tests/bar_bad_xml.stderr.exp-nohang +@@ -0,0 +1,264 @@ ++ ++ ++ ++ ++4 ++drd ++ ++ ++ ... ++ ... ++ ... ++ ... ++ ++ ++... ++... ++drd ++ ++ ++ ... ++ ++ ./../../helgrind/tests/bar_bad ++ ++ ++ ++ ++ RUNNING ++ ++ ++ ++ ++initialise a barrier with zero count ++ ++ 0x........ ++ ... ++ BarrierErr ++ pthread_barrier_init: 'count' argument is zero: barrier 0x........ ++ ++ ++ 0x........ ++ ... ++ pthread_barrier_init ++ ... ++ drd_pthread_intercepts.c ++ ... ++ ++ ++ 0x........ ++ ... ++ main ++ ... ++ bar_bad.c ++ ... ++ ++ ++ ++ ++ ++initialise a barrier twice ++ ++ 0x........ ++ ... ++ BarrierErr ++ Barrier reinitialization: barrier 0x........ ++ ++ ++ 0x........ ++ ... ++ pthread_barrier_init ++ ... ++ drd_pthread_intercepts.c ++ ... ++ ++ ++ 0x........ ++ ... ++ main ++ ... ++ bar_bad.c ++ ... ++ ++ ++ ++ barrier ++
0x........
++ ++ ++ 0x........ ++ ... ++ pthread_barrier_init ++ ... ++ drd_pthread_intercepts.c ++ ... ++ ++ ++ 0x........ ++ ... ++ main ++ ... ++ bar_bad.c ++ ... ++ ++ ++
++
++ ++ ++initialise a barrier which has threads waiting on it ++ ++ 0x........ ++ ... ++ BarrierErr ++ Barrier reinitialization: barrier 0x........ ++ ++ ++ 0x........ ++ ... ++ pthread_barrier_init ++ ... ++ drd_pthread_intercepts.c ++ ... ++ ++ ++ 0x........ ++ ... ++ main ++ ... ++ bar_bad.c ++ ... ++ ++ ++ ++ barrier ++
0x........
++ ++ ++ 0x........ ++ ... ++ pthread_barrier_init ++ ... ++ drd_pthread_intercepts.c ++ ... ++ ++ ++ 0x........ ++ ... ++ main ++ ... ++ bar_bad.c ++ ... ++ ++ ++
++
++ ++ ++destroy a barrier that has waiting threads ++ ++ 0x........ ++ ... ++ BarrierErr ++ Destruction of a barrier with active waiters: barrier 0x........ ++ ++ ++ 0x........ ++ ... ++ pthread_barrier_destroy ++ ... ++ drd_pthread_intercepts.c ++ ... ++ ++ ++ 0x........ ++ ... ++ main ++ ... ++ bar_bad.c ++ ... ++ ++ ++ ++ barrier ++
0x........
++ ++ ++ 0x........ ++ ... ++ pthread_barrier_init ++ ... ++ drd_pthread_intercepts.c ++ ... ++ ++ ++ 0x........ ++ ... ++ main ++ ... ++ bar_bad.c ++ ... ++ ++ ++
++
++ ++ ++destroy a barrier that was never initialised ++ ++ 0x........ ++ ... ++ GenericErr ++ Not a barrier ++ ++ ++ 0x........ ++ ... ++ pthread_barrier_destroy ++ ... ++ drd_pthread_intercepts.c ++ ... ++ ++ ++ 0x........ ++ ... ++ main ++ ... ++ bar_bad.c ++ ... ++ ++ ++ ++ ++ ++ ++ FINISHED ++ ++ ++ ++ ++ ++ ... ++ 0x........ ++ ++ ++ ... ++ 0x........ ++ ++ ++ ... ++ 0x........ ++ ++ ++ ... ++ 0x........ ++ ++ ++ ... ++ 0x........ ++ ++ ++ ++... ++ ++
++ +diff --git a/helgrind/tests/Makefile.am b/helgrind/tests/Makefile.am +index 8a0d6e6..df82169 100644 +--- a/helgrind/tests/Makefile.am ++++ b/helgrind/tests/Makefile.am +@@ -19,6 +19,7 @@ EXTRA_DIST = \ + cond_timedwait_test.vgtest cond_timedwait_test.stdout.exp \ + cond_timedwait_test.stderr.exp \ + bar_bad.vgtest bar_bad.stdout.exp bar_bad.stderr.exp \ ++ bar_bad.stderr.exp-destroy-hang \ + bar_trivial.vgtest bar_trivial.stdout.exp bar_trivial.stderr.exp \ + free_is_write.vgtest free_is_write.stdout.exp \ + free_is_write.stderr.exp \ +diff --git a/helgrind/tests/bar_bad.c b/helgrind/tests/bar_bad.c +index dd6079c..424ae2f 100644 +--- a/helgrind/tests/bar_bad.c ++++ b/helgrind/tests/bar_bad.c +@@ -15,23 +15,27 @@ void* child1 ( void* arg ) + return NULL; + } + ++void *sleep1 ( void* arg ) ++{ ++ /* Long sleep, we hope to never trigger. */ ++ sleep (6); ++ pthread_barrier_wait ( (pthread_barrier_t*)arg ); ++ return NULL; ++} ++ ++void *exit1 ( void* arg ) ++{ ++ /* Sleep a bit, then exit, we are done. */ ++ sleep (1); ++ exit (0); ++ return NULL; ++} ++ + int main ( void ) + { + pthread_barrier_t *bar1, *bar2, *bar3, *bar4, *bar5; +- pthread_t thr1, thr2; + int r; +- +- /* possibly set up a watchdog timer thread here. */ +- +- +- +- +- +- +- +- +- +- ++ pthread_t thr1, thr2, slp1, slp2, ext1; + + /* initialise a barrier with a zero count */ + fprintf(stderr, "\ninitialise a barrier with zero count\n"); +@@ -49,6 +53,9 @@ int main ( void ) + fprintf(stderr, "\ninitialise a barrier which has threads waiting on it\n"); + bar3 = malloc(sizeof(pthread_barrier_t)); + pthread_barrier_init(bar3, NULL, 2); ++ /* create a thread, whose purpose is to "unblock" the barrier after ++ some sleeping in case it keeps being blocked. */ ++ pthread_create(&slp1, NULL, sleep1, (void*)bar3); + /* create a thread, whose only purpose is to block on the barrier */ + pthread_create(&thr1, NULL, child1, (void*)bar3); + /* guarantee that it gets there first */ +@@ -61,6 +68,12 @@ int main ( void ) + /* once again, create a thread, whose only purpose is to block. */ + bar4 = malloc(sizeof(pthread_barrier_t)); + pthread_barrier_init(bar4, NULL, 2); ++ /* create a thread, whose purpose is to "unblock" the barrier after ++ some sleeping in case it keeps being blocked. We hope it isn't ++ needed, but if it is, because pthread_barier_destroy hangs ++ and we will get an extra warning about the barrier being already ++ destroyed. */ ++ pthread_create(&slp2, NULL, sleep1, (void*)bar4); + /* create a thread, whose only purpose is to block on the barrier */ + pthread_create(&thr2, NULL, child1, (void*)bar4); + /* guarantee that it gets there first */ +@@ -70,13 +83,16 @@ int main ( void ) + + /* destroy a barrier that was never initialised. This is a bit + tricky, in that we have to fill the barrier with bytes which +- ensure that the pthread_barrier_destroy call doesn't hang for +- some reason. Zero-fill seems to work ok on amd64-linux (glibc ++ ensure that the pthread_barrier_destroy call doesn't crash for ++ some reason. One-fill seems to work ok on amd64-linux (glibc + 2.8). */ + fprintf(stderr, "\ndestroy a barrier that was never initialised\n"); ++ /* Create a thread that just exits the process after some sleep. ++ We are really done at this point, even if we hang. */ ++ pthread_create(&ext1, NULL, exit1, NULL); + bar5 = malloc(sizeof(pthread_barrier_t)); + assert(bar5); +- memset(bar5, 0, sizeof(*bar5)); ++ memset(bar5, 1, sizeof(*bar5)); + pthread_barrier_destroy(bar5); + + /* now we need to clean up the mess .. */ +@@ -85,5 +101,6 @@ int main ( void ) + + free(bar1); free(bar2); free(bar3); free(bar4); free(bar5); + +- return 0; ++ /* Use exit, we want to kill any "sleeper threads". */ ++ exit (0); + } +diff --git a/helgrind/tests/bar_bad.stderr.exp b/helgrind/tests/bar_bad.stderr.exp +index 74af4fa..d0901b2 100644 +--- a/helgrind/tests/bar_bad.stderr.exp ++++ b/helgrind/tests/bar_bad.stderr.exp +@@ -8,14 +8,14 @@ Thread #x is the program's root thread + + Thread #x: pthread_barrier_init: 'count' argument is zero + at 0x........: pthread_barrier_init (hg_intercepts.c:...) +- by 0x........: main (bar_bad.c:39) ++ by 0x........: main (bar_bad.c:43) + + ---------------------------------------------------------------- + + Thread #x's call to pthread_barrier_init failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_barrier_init (hg_intercepts.c:...) +- by 0x........: main (bar_bad.c:39) ++ by 0x........: main (bar_bad.c:43) + + + initialise a barrier twice +@@ -23,7 +23,7 @@ initialise a barrier twice + + Thread #x: pthread_barrier_init: barrier is already initialised + at 0x........: pthread_barrier_init (hg_intercepts.c:...) +- by 0x........: main (bar_bad.c:45) ++ by 0x........: main (bar_bad.c:49) + + + initialise a barrier which has threads waiting on it +@@ -31,13 +31,13 @@ initialise a barrier which has threads waiting on it + + Thread #x: pthread_barrier_init: barrier is already initialised + at 0x........: pthread_barrier_init (hg_intercepts.c:...) +- by 0x........: main (bar_bad.c:57) ++ by 0x........: main (bar_bad.c:64) + + ---------------------------------------------------------------- + + Thread #x: pthread_barrier_init: threads are waiting at barrier + at 0x........: pthread_barrier_init (hg_intercepts.c:...) +- by 0x........: main (bar_bad.c:57) ++ by 0x........: main (bar_bad.c:64) + + + destroy a barrier that has waiting threads +@@ -45,14 +45,14 @@ destroy a barrier that has waiting threads + + Thread #x: pthread_barrier_destroy: threads are waiting at barrier + at 0x........: pthread_barrier_destroy (hg_intercepts.c:...) +- by 0x........: main (bar_bad.c:69) ++ by 0x........: main (bar_bad.c:82) + + ---------------------------------------------------------------- + + Thread #x's call to pthread_barrier_destroy failed + with error code 16 (EBUSY: Device or resource busy) + at 0x........: pthread_barrier_destroy (hg_intercepts.c:...) +- by 0x........: main (bar_bad.c:69) ++ by 0x........: main (bar_bad.c:82) + + + destroy a barrier that was never initialised +@@ -60,5 +60,5 @@ destroy a barrier that was never initialised + + Thread #x: pthread_barrier_destroy: barrier was never initialised + at 0x........: pthread_barrier_destroy (hg_intercepts.c:...) +- by 0x........: main (bar_bad.c:80) ++ by 0x........: main (bar_bad.c:96) + +diff --git a/helgrind/tests/bar_bad.stderr.exp-destroy-hang b/helgrind/tests/bar_bad.stderr.exp-destroy-hang +new file mode 100644 +index 0000000..ddf5624 +--- /dev/null ++++ b/helgrind/tests/bar_bad.stderr.exp-destroy-hang +@@ -0,0 +1,72 @@ ++ ++initialise a barrier with zero count ++---Thread-Announcement------------------------------------------ ++ ++Thread #x is the program's root thread ++ ++---------------------------------------------------------------- ++ ++Thread #x: pthread_barrier_init: 'count' argument is zero ++ at 0x........: pthread_barrier_init (hg_intercepts.c:...) ++ by 0x........: main (bar_bad.c:43) ++ ++---------------------------------------------------------------- ++ ++Thread #x's call to pthread_barrier_init failed ++ with error code 22 (EINVAL: Invalid argument) ++ at 0x........: pthread_barrier_init (hg_intercepts.c:...) ++ by 0x........: main (bar_bad.c:43) ++ ++ ++initialise a barrier twice ++---------------------------------------------------------------- ++ ++Thread #x: pthread_barrier_init: barrier is already initialised ++ at 0x........: pthread_barrier_init (hg_intercepts.c:...) ++ by 0x........: main (bar_bad.c:49) ++ ++ ++initialise a barrier which has threads waiting on it ++---------------------------------------------------------------- ++ ++Thread #x: pthread_barrier_init: barrier is already initialised ++ at 0x........: pthread_barrier_init (hg_intercepts.c:...) ++ by 0x........: main (bar_bad.c:64) ++ ++---------------------------------------------------------------- ++ ++Thread #x: pthread_barrier_init: threads are waiting at barrier ++ at 0x........: pthread_barrier_init (hg_intercepts.c:...) ++ by 0x........: main (bar_bad.c:64) ++ ++ ++destroy a barrier that has waiting threads ++---------------------------------------------------------------- ++ ++Thread #x: pthread_barrier_destroy: threads are waiting at barrier ++ at 0x........: pthread_barrier_destroy (hg_intercepts.c:...) ++ by 0x........: main (bar_bad.c:82) ++ ++---Thread-Announcement------------------------------------------ ++ ++Thread #x was created ++ ... ++ by 0x........: pthread_create@* (hg_intercepts.c:...) ++ by 0x........: main (bar_bad.c:76) ++ ++---------------------------------------------------------------- ++ ++Thread #x: pthread_barrier_wait: barrier is uninitialised ++ at 0x........: pthread_barrier_wait (hg_intercepts.c:...) ++ by 0x........: sleep1 (bar_bad.c:22) ++ by 0x........: mythread_wrapper (hg_intercepts.c:...) ++ ... ++ ++ ++destroy a barrier that was never initialised ++---------------------------------------------------------------- ++ ++Thread #x: pthread_barrier_destroy: barrier was never initialised ++ at 0x........: pthread_barrier_destroy (hg_intercepts.c:...) ++ by 0x........: main (bar_bad.c:96) ++ +diff -ur valgrind-3.11.0.orig/drd/tests/Makefile.in valgrind-3.11.0/drd/tests/Makefile.in +--- valgrind-3.11.0.orig/drd/tests/Makefile.in 2016-01-25 21:16:13.095563405 +0100 ++++ valgrind-3.11.0/drd/tests/Makefile.in 2016-01-25 21:17:33.386330569 +0100 +@@ -1084,8 +1084,10 @@ + atomic_var.stderr.exp \ + atomic_var.vgtest \ + bar_bad.stderr.exp \ ++ bar_bad.stderr.exp-nohang \ + bar_bad.vgtest \ + bar_bad_xml.stderr.exp \ ++ bar_bad_xml.stderr.exp-nohang \ + bar_bad_xml.vgtest \ + bar_trivial.stderr.exp \ + bar_trivial.stdout.exp \ +diff -ur valgrind-3.11.0.orig/helgrind/tests/Makefile.in valgrind-3.11.0/helgrind/tests/Makefile.in +--- valgrind-3.11.0.orig/helgrind/tests/Makefile.in 2016-01-25 21:16:12.883564020 +0100 ++++ valgrind-3.11.0/helgrind/tests/Makefile.in 2016-01-25 21:17:34.266328017 +0100 +@@ -835,6 +835,7 @@ + cond_timedwait_test.vgtest cond_timedwait_test.stdout.exp \ + cond_timedwait_test.stderr.exp \ + bar_bad.vgtest bar_bad.stdout.exp bar_bad.stderr.exp \ ++ bar_bad.stderr.exp-destroy-hang \ + bar_trivial.vgtest bar_trivial.stdout.exp bar_trivial.stderr.exp \ + free_is_write.vgtest free_is_write.stdout.exp \ + free_is_write.stderr.exp \ diff --git a/SOURCES/valgrind-3.11.0-pthread_spin_destroy.patch b/SOURCES/valgrind-3.11.0-pthread_spin_destroy.patch new file mode 100644 index 0000000..1e83e18 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-pthread_spin_destroy.patch @@ -0,0 +1,1244 @@ +commit c69445c1e07425e827ce936d7c416f7972b51aa2 +Author: iraisr +Date: Tue Jan 12 20:31:15 2016 +0000 + + Fix typo in Helgrind's wrapper of pthread_spin_destroy(). + Patch provided by: Jason Dillaman . + Fixes BZ #357871. + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15756 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/helgrind/hg_intercepts.c b/helgrind/hg_intercepts.c +index fd53208..ff36e93 100644 +--- a/helgrind/hg_intercepts.c ++++ b/helgrind/hg_intercepts.c +@@ -1854,13 +1854,13 @@ static int pthread_spin_destroy_WRK(pthread_spinlock_t *lock) + return ret; + } + #if defined(VGO_linux) +- PTH_FUNC(int, pthreadZuspinZusdestroy, // pthread_spin_destroy ++ PTH_FUNC(int, pthreadZuspinZudestroy, // pthread_spin_destroy + pthread_spinlock_t *lock) { + return pthread_spin_destroy_WRK(lock); + } + #elif defined(VGO_darwin) + #elif defined(VGO_solaris) +- PTH_FUNC(int, pthreadZuspinZusdestroy, // pthread_spin_destroy ++ PTH_FUNC(int, pthreadZuspinZudestroy, // pthread_spin_destroy + pthread_spinlock_t *lock) { + return pthread_spin_destroy_WRK(lock); + } +diff --git a/helgrind/tests/tc20_verifywrap.c b/helgrind/tests/tc20_verifywrap.c +index f71c7f8..c110000 100644 +--- a/helgrind/tests/tc20_verifywrap.c ++++ b/helgrind/tests/tc20_verifywrap.c +@@ -29,6 +29,11 @@ + #endif + #endif /* __sun__ */ + ++typedef union { ++ pthread_spinlock_t spinlock; ++ pthread_rwlock_t rwlock; ++} spin_rw_lock; ++ + short unprotected = 0; + + void* lazy_child ( void* v ) { +@@ -236,6 +241,20 @@ int main ( void ) + r= pthread_rwlock_init( &rwl3, NULL ); assert(!r); + r= pthread_rwlock_rdlock( &rwl3 ); assert(!r); + ++ /* --------- pthread_spin_* --------- */ ++ ++ fprintf(stderr, ++ "\n---------------- pthread_spin_* ----------------\n\n"); ++ ++ /* The following sequence verifies correct wrapping of pthread_spin_init() ++ and pthread_spin_destroy(). */ ++ spin_rw_lock srwl1; ++ pthread_spin_init(&srwl1.spinlock, PTHREAD_PROCESS_PRIVATE); ++ pthread_spin_destroy(&srwl1.spinlock); ++ ++ pthread_rwlock_init(&srwl1.rwlock, NULL); ++ pthread_rwlock_destroy(&srwl1.rwlock); ++ + /* ------------- sem_* ------------- */ + + /* This is pretty lame, and duplicates tc18_semabuse.c. */ +diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp b/helgrind/tests/tc20_verifywrap.stderr.exp +index d9019d4..372daea 100644 +--- a/helgrind/tests/tc20_verifywrap.stderr.exp ++++ b/helgrind/tests/tc20_verifywrap.stderr.exp +@@ -14,21 +14,21 @@ Thread #x is the program's root thread + Thread #x was created + ... + by 0x........: pthread_create@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:81) ++ by 0x........: main (tc20_verifywrap.c:86) + + ---------------------------------------------------------------- + + Possible data race during write of size 2 at 0x........ by thread #x + Locks held: none +- at 0x........: main (tc20_verifywrap.c:83) ++ at 0x........: main (tc20_verifywrap.c:88) + + This conflicts with a previous write of size 2 by thread #x + Locks held: none +- at 0x........: racy_child (tc20_verifywrap.c:39) ++ at 0x........: racy_child (tc20_verifywrap.c:44) + by 0x........: mythread_wrapper (hg_intercepts.c:...) + ... + Location 0x........ is 0 bytes inside global var "unprotected" +- declared at tc20_verifywrap.c:32 ++ declared at tc20_verifywrap.c:37 + + ---------------------------------------------------------------- + +@@ -36,7 +36,7 @@ Thread #x's call to pthread_join failed + with error code 35 (EDEADLK: Resource deadlock would occur) + at 0x........: pthread_join_WRK (hg_intercepts.c:...) + by 0x........: pthread_join (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:88) ++ by 0x........: main (tc20_verifywrap.c:93) + + + ---------------- pthread_mutex_lock et al ---------------- +@@ -46,14 +46,14 @@ Thread #x's call to pthread_join failed + Thread #x's call to pthread_mutex_init failed + with error code 95 (EOPNOTSUPP: Operation not supported on transport endpoint) + at 0x........: pthread_mutex_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:102) ++ by 0x........: main (tc20_verifywrap.c:107) + + ---------------------------------------------------------------- + + Thread #x: pthread_mutex_destroy of a locked mutex + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -61,7 +61,7 @@ Thread #x's call to pthread_mutex_destroy failed + with error code 16 (EBUSY: Device or resource busy) + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -69,7 +69,7 @@ Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_lock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_lock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:118) ++ by 0x........: main (tc20_verifywrap.c:123) + + ---------------------------------------------------------------- + +@@ -77,7 +77,7 @@ Thread #x's call to pthread_mutex_trylock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_trylock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_trylock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:126) ++ by 0x........: main (tc20_verifywrap.c:131) + + ---------------------------------------------------------------- + +@@ -85,14 +85,14 @@ Thread #x's call to pthread_mutex_timedlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:131) ++ by 0x........: main (tc20_verifywrap.c:136) + + ---------------------------------------------------------------- + + Thread #x unlocked an invalid lock at 0x........ + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + ---------------------------------------------------------------- + +@@ -100,7 +100,7 @@ Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + + ---------------- pthread_cond_wait et al ---------------- +@@ -110,7 +110,7 @@ Thread #x's call to pthread_mutex_unlock failed + Thread #x: pthread_cond_{timed}wait called with un-held mutex + at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + +@@ -118,14 +118,14 @@ Thread #x's call to pthread_cond_wait failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + + Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread + at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_signal@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:162) ++ by 0x........: main (tc20_verifywrap.c:167) + + + FIXME: can't figure out how to verify wrap of pthread_cond_signal +@@ -135,7 +135,7 @@ FIXME: can't figure out how to verify wrap of pthread_cond_signal + Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread + at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:168) ++ by 0x........: main (tc20_verifywrap.c:173) + + + FIXME: can't figure out how to verify wrap of pthread_broadcast_signal +@@ -145,7 +145,7 @@ FIXME: can't figure out how to verify wrap of pthread_broadcast_signal + Thread #x: pthread_cond_{timed}wait called with un-held mutex + at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + ---------------------------------------------------------------- + +@@ -153,7 +153,7 @@ Thread #x's call to pthread_cond_timedwait failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + + ---------------- pthread_rwlock_* ---------------- +@@ -164,13 +164,13 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:189) ++ by 0x........: main (tc20_verifywrap.c:194) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:188) ++ by 0x........: main (tc20_verifywrap.c:193) + Location 0x........ is 0 bytes inside local var "rwl" +- declared at tc20_verifywrap.c:52, in frame #x of thread x ++ declared at tc20_verifywrap.c:57, in frame #x of thread x + + + (1) no error on next line +@@ -182,13 +182,13 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:206) ++ by 0x........: main (tc20_verifywrap.c:211) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:196) ++ by 0x........: main (tc20_verifywrap.c:201) + Location 0x........ is 0 bytes inside local var "rwl2" +- declared at tc20_verifywrap.c:53, in frame #x of thread x ++ declared at tc20_verifywrap.c:58, in frame #x of thread x + + + (4) no error on next line +@@ -202,14 +202,17 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:227) ++ by 0x........: main (tc20_verifywrap.c:232) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:196) ++ by 0x........: main (tc20_verifywrap.c:201) + Location 0x........ is 0 bytes inside local var "rwl2" +- declared at tc20_verifywrap.c:53, in frame #x of thread x ++ declared at tc20_verifywrap.c:58, in frame #x of thread x ++ ++ + ++---------------- pthread_spin_* ---------------- + + + ---------------- sem_* ---------------- +@@ -220,7 +223,7 @@ Thread #x's call to sem_init failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: sem_init_WRK (hg_intercepts.c:...) + by 0x........: sem_init@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:248) ++ by 0x........: main (tc20_verifywrap.c:267) + + + FIXME: can't figure out how to verify wrap of sem_destroy +@@ -230,7 +233,7 @@ FIXME: can't figure out how to verify wrap of sem_destroy + Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post + at 0x........: sem_wait_WRK (hg_intercepts.c:...) + by 0x........: sem_wait (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:262) ++ by 0x........: main (tc20_verifywrap.c:281) + + ---------------------------------------------------------------- + +@@ -239,7 +242,7 @@ Thread #x's call to sem_post failed + at 0x........: sem_post_WRK (hg_intercepts.c:...) + by 0x........: sem_post (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:265) ++ by 0x........: main (tc20_verifywrap.c:284) + + + FIXME: can't figure out how to verify wrap of sem_post +diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.18 b/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.18 +index f109673..b823d40 100644 +--- a/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.18 ++++ b/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.18 +@@ -14,21 +14,21 @@ Thread #x is the program's root thread + Thread #x was created + ... + by 0x........: pthread_create@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:81) ++ by 0x........: main (tc20_verifywrap.c:86) + + ---------------------------------------------------------------- + + Possible data race during write of size 2 at 0x........ by thread #x + Locks held: none +- at 0x........: main (tc20_verifywrap.c:83) ++ at 0x........: main (tc20_verifywrap.c:88) + + This conflicts with a previous write of size 2 by thread #x + Locks held: none +- at 0x........: racy_child (tc20_verifywrap.c:39) ++ at 0x........: racy_child (tc20_verifywrap.c:44) + by 0x........: mythread_wrapper (hg_intercepts.c:...) + ... + Location 0x........ is 0 bytes inside global var "unprotected" +- declared at tc20_verifywrap.c:32 ++ declared at tc20_verifywrap.c:37 + + ---------------------------------------------------------------- + +@@ -36,7 +36,7 @@ Thread #x's call to pthread_join failed + with error code 35 (EDEADLK: Resource deadlock would occur) + at 0x........: pthread_join_WRK (hg_intercepts.c:...) + by 0x........: pthread_join (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:88) ++ by 0x........: main (tc20_verifywrap.c:93) + + + ---------------- pthread_mutex_lock et al ---------------- +@@ -46,14 +46,14 @@ Thread #x's call to pthread_join failed + Thread #x's call to pthread_mutex_init failed + with error code 95 (EOPNOTSUPP: Operation not supported on transport endpoint) + at 0x........: pthread_mutex_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:102) ++ by 0x........: main (tc20_verifywrap.c:107) + + ---------------------------------------------------------------- + + Thread #x: pthread_mutex_destroy of a locked mutex + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -61,7 +61,7 @@ Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_lock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_lock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:118) ++ by 0x........: main (tc20_verifywrap.c:123) + + ---------------------------------------------------------------- + +@@ -69,7 +69,7 @@ Thread #x's call to pthread_mutex_trylock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_trylock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_trylock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:126) ++ by 0x........: main (tc20_verifywrap.c:131) + + ---------------------------------------------------------------- + +@@ -77,14 +77,14 @@ Thread #x's call to pthread_mutex_timedlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:131) ++ by 0x........: main (tc20_verifywrap.c:136) + + ---------------------------------------------------------------- + + Thread #x unlocked an invalid lock at 0x........ + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + ---------------------------------------------------------------- + +@@ -92,7 +92,7 @@ Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + + ---------------- pthread_cond_wait et al ---------------- +@@ -102,7 +102,7 @@ Thread #x's call to pthread_mutex_unlock failed + Thread #x: pthread_cond_{timed}wait called with un-held mutex + at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + +@@ -110,14 +110,14 @@ Thread #x's call to pthread_cond_wait failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + + Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread + at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_signal@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:162) ++ by 0x........: main (tc20_verifywrap.c:167) + + + FIXME: can't figure out how to verify wrap of pthread_cond_signal +@@ -127,7 +127,7 @@ FIXME: can't figure out how to verify wrap of pthread_cond_signal + Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread + at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:168) ++ by 0x........: main (tc20_verifywrap.c:173) + + + FIXME: can't figure out how to verify wrap of pthread_broadcast_signal +@@ -137,7 +137,7 @@ FIXME: can't figure out how to verify wrap of pthread_broadcast_signal + Thread #x: pthread_cond_{timed}wait called with un-held mutex + at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + ---------------------------------------------------------------- + +@@ -145,7 +145,7 @@ Thread #x's call to pthread_cond_timedwait failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + + ---------------- pthread_rwlock_* ---------------- +@@ -156,11 +156,11 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:189) ++ by 0x........: main (tc20_verifywrap.c:194) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:188) ++ by 0x........: main (tc20_verifywrap.c:193) + + (1) no error on next line + (2) no error on next line +@@ -171,11 +171,11 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:206) ++ by 0x........: main (tc20_verifywrap.c:211) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:196) ++ by 0x........: main (tc20_verifywrap.c:201) + + (4) no error on next line + (5) no error on next line +@@ -187,11 +187,15 @@ Thread #x unlocked a not-locked lock at 0x........ + Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:227) ++ by 0x........: main (tc20_verifywrap.c:232) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:196) ++ by 0x........: main (tc20_verifywrap.c:201) ++ ++ ++ ++---------------- pthread_spin_* ---------------- + + + ---------------- sem_* ---------------- +@@ -202,7 +206,7 @@ Thread #x's call to sem_init failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: sem_init_WRK (hg_intercepts.c:...) + by 0x........: sem_init@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:243) ++ by 0x........: main (tc20_verifywrap.c:267) + + + FIXME: can't figure out how to verify wrap of sem_destroy +@@ -212,7 +216,7 @@ FIXME: can't figure out how to verify wrap of sem_destroy + Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post + at 0x........: sem_wait_WRK (hg_intercepts.c:...) + by 0x........: sem_wait (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:257) ++ by 0x........: main (tc20_verifywrap.c:281) + + ---------------------------------------------------------------- + +@@ -220,7 +224,7 @@ Thread #x's call to sem_post failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: sem_post_WRK (hg_intercepts.c:...) + by 0x........: sem_post (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:260) ++ by 0x........: main (tc20_verifywrap.c:284) + + + FIXME: can't figure out how to verify wrap of sem_post +diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.21 b/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.21 +index 7f4eb21..2a2ee9b 100644 +--- a/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.21 ++++ b/helgrind/tests/tc20_verifywrap.stderr.exp-glibc-2.21 +@@ -14,21 +14,21 @@ Thread #x is the program's root thread + Thread #x was created + ... + by 0x........: pthread_create@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:81) ++ by 0x........: main (tc20_verifywrap.c:86) + + ---------------------------------------------------------------- + + Possible data race during write of size 2 at 0x........ by thread #x + Locks held: none +- at 0x........: main (tc20_verifywrap.c:83) ++ at 0x........: main (tc20_verifywrap.c:88) + + This conflicts with a previous write of size 2 by thread #x + Locks held: none +- at 0x........: racy_child (tc20_verifywrap.c:39) ++ at 0x........: racy_child (tc20_verifywrap.c:44) + by 0x........: mythread_wrapper (hg_intercepts.c:...) + ... + Location 0x........ is 0 bytes inside global var "unprotected" +- declared at tc20_verifywrap.c:32 ++ declared at tc20_verifywrap.c:37 + + ---------------------------------------------------------------- + +@@ -36,7 +36,7 @@ Thread #x's call to pthread_join failed + with error code 35 (EDEADLK: Resource deadlock would occur) + at 0x........: pthread_join_WRK (hg_intercepts.c:...) + by 0x........: pthread_join (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:88) ++ by 0x........: main (tc20_verifywrap.c:93) + + + ---------------- pthread_mutex_lock et al ---------------- +@@ -46,14 +46,14 @@ Thread #x's call to pthread_join failed + Thread #x's call to pthread_mutex_init failed + with error code 95 (EOPNOTSUPP: Operation not supported on transport endpoint) + at 0x........: pthread_mutex_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:102) ++ by 0x........: main (tc20_verifywrap.c:107) + + ---------------------------------------------------------------- + + Thread #x: pthread_mutex_destroy of a locked mutex + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -61,7 +61,7 @@ Thread #x's call to pthread_mutex_destroy failed + with error code 16 (EBUSY: Device or resource busy) + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -69,7 +69,7 @@ Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_lock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_lock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:118) ++ by 0x........: main (tc20_verifywrap.c:123) + + ---------------------------------------------------------------- + +@@ -77,7 +77,7 @@ Thread #x's call to pthread_mutex_trylock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_trylock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_trylock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:126) ++ by 0x........: main (tc20_verifywrap.c:131) + + ---------------------------------------------------------------- + +@@ -85,14 +85,14 @@ Thread #x's call to pthread_mutex_timedlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:131) ++ by 0x........: main (tc20_verifywrap.c:136) + + ---------------------------------------------------------------- + + Thread #x unlocked an invalid lock at 0x........ + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + ---------------------------------------------------------------- + +@@ -100,7 +100,7 @@ Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + + ---------------- pthread_cond_wait et al ---------------- +@@ -110,7 +110,7 @@ Thread #x's call to pthread_mutex_unlock failed + Thread #x: pthread_cond_{timed}wait called with un-held mutex + at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + +@@ -118,14 +118,14 @@ Thread #x's call to pthread_cond_wait failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + + Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread + at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_signal@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:162) ++ by 0x........: main (tc20_verifywrap.c:167) + + + FIXME: can't figure out how to verify wrap of pthread_cond_signal +@@ -135,7 +135,7 @@ FIXME: can't figure out how to verify wrap of pthread_cond_signal + Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread + at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:168) ++ by 0x........: main (tc20_verifywrap.c:173) + + + FIXME: can't figure out how to verify wrap of pthread_broadcast_signal +@@ -145,7 +145,7 @@ FIXME: can't figure out how to verify wrap of pthread_broadcast_signal + Thread #x: pthread_cond_{timed}wait called with un-held mutex + at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + ---------------------------------------------------------------- + +@@ -153,7 +153,7 @@ Thread #x's call to pthread_cond_timedwait failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + + ---------------- pthread_rwlock_* ---------------- +@@ -164,13 +164,13 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:189) ++ by 0x........: main (tc20_verifywrap.c:194) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:188) ++ by 0x........: main (tc20_verifywrap.c:193) + Location 0x........ is 0 bytes inside local var "rwl" +- declared at tc20_verifywrap.c:52, in frame #x of thread x ++ declared at tc20_verifywrap.c:57, in frame #x of thread x + + + (1) no error on next line +@@ -182,13 +182,13 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:206) ++ by 0x........: main (tc20_verifywrap.c:211) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:196) ++ by 0x........: main (tc20_verifywrap.c:201) + Location 0x........ is 0 bytes inside local var "rwl2" +- declared at tc20_verifywrap.c:53, in frame #x of thread x ++ declared at tc20_verifywrap.c:58, in frame #x of thread x + + + (4) no error on next line +@@ -202,14 +202,17 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:227) ++ by 0x........: main (tc20_verifywrap.c:232) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:196) ++ by 0x........: main (tc20_verifywrap.c:201) + Location 0x........ is 0 bytes inside local var "rwl2" +- declared at tc20_verifywrap.c:53, in frame #x of thread x ++ declared at tc20_verifywrap.c:58, in frame #x of thread x ++ ++ + ++---------------- pthread_spin_* ---------------- + + + ---------------- sem_* ---------------- +@@ -220,7 +223,7 @@ Thread #x's call to sem_init failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: sem_init_WRK (hg_intercepts.c:...) + by 0x........: sem_init@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:248) ++ by 0x........: main (tc20_verifywrap.c:267) + + + FIXME: can't figure out how to verify wrap of sem_destroy +@@ -230,7 +233,7 @@ FIXME: can't figure out how to verify wrap of sem_destroy + Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post + at 0x........: sem_wait_WRK (hg_intercepts.c:...) + by 0x........: sem_wait (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:262) ++ by 0x........: main (tc20_verifywrap.c:281) + + + FIXME: can't figure out how to verify wrap of sem_post +diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-s390x b/helgrind/tests/tc20_verifywrap.stderr.exp-s390x +index 3f60f79..f19215e 100644 +--- a/helgrind/tests/tc20_verifywrap.stderr.exp-s390x ++++ b/helgrind/tests/tc20_verifywrap.stderr.exp-s390x +@@ -15,22 +15,22 @@ Thread #x was created + ... + by 0x........: pthread_create_WRK (hg_intercepts.c:...) + by 0x........: pthread_create@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:81) ++ by 0x........: main (tc20_verifywrap.c:86) + + ---------------------------------------------------------------- + + Possible data race during write of size 2 at 0x........ by thread #x + Locks held: none +- at 0x........: main (tc20_verifywrap.c:83) ++ at 0x........: main (tc20_verifywrap.c:88) + + This conflicts with a previous write of size 2 by thread #x + Locks held: none +- at 0x........: racy_child (tc20_verifywrap.c:39) ++ at 0x........: racy_child (tc20_verifywrap.c:44) + by 0x........: mythread_wrapper (hg_intercepts.c:...) + ... + + Location 0x........ is 0 bytes inside global var "unprotected" +-declared at tc20_verifywrap.c:32 ++declared at tc20_verifywrap.c:37 + + ---------------------------------------------------------------- + +@@ -38,7 +38,7 @@ Thread #x's call to pthread_join failed + with error code 35 (EDEADLK: Resource deadlock would occur) + at 0x........: pthread_join_WRK (hg_intercepts.c:...) + by 0x........: pthread_join (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:88) ++ by 0x........: main (tc20_verifywrap.c:93) + + + ---------------- pthread_mutex_lock et al ---------------- +@@ -48,14 +48,14 @@ Thread #x's call to pthread_join failed + Thread #x's call to pthread_mutex_init failed + with error code 95 (EOPNOTSUPP: Operation not supported on transport endpoint) + at 0x........: pthread_mutex_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:102) ++ by 0x........: main (tc20_verifywrap.c:107) + + ---------------------------------------------------------------- + + Thread #x: pthread_mutex_destroy of a locked mutex + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -63,7 +63,7 @@ Thread #x's call to pthread_mutex_destroy failed + with error code 16 (EBUSY: Device or resource busy) + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -71,7 +71,7 @@ Thread #x's call to pthread_mutex_lock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_lock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_lock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:118) ++ by 0x........: main (tc20_verifywrap.c:123) + + ---------------------------------------------------------------- + +@@ -79,7 +79,7 @@ Thread #x's call to pthread_mutex_trylock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_trylock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_trylock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:126) ++ by 0x........: main (tc20_verifywrap.c:131) + + ---------------------------------------------------------------- + +@@ -87,14 +87,14 @@ Thread #x's call to pthread_mutex_timedlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:131) ++ by 0x........: main (tc20_verifywrap.c:136) + + ---------------------------------------------------------------- + + Thread #x unlocked an invalid lock at 0x........ + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + ---------------------------------------------------------------- + +@@ -102,7 +102,7 @@ Thread #x's call to pthread_mutex_unlock failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + + ---------------- pthread_cond_wait et al ---------------- +@@ -112,7 +112,7 @@ Thread #x's call to pthread_mutex_unlock failed + Thread #x: pthread_cond_{timed}wait called with un-held mutex + at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + +@@ -120,14 +120,14 @@ Thread #x's call to pthread_cond_wait failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + + Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread + at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_signal@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:162) ++ by 0x........: main (tc20_verifywrap.c:167) + + + FIXME: can't figure out how to verify wrap of pthread_cond_signal +@@ -137,7 +137,7 @@ FIXME: can't figure out how to verify wrap of pthread_cond_signal + Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread + at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:168) ++ by 0x........: main (tc20_verifywrap.c:173) + + + FIXME: can't figure out how to verify wrap of pthread_broadcast_signal +@@ -147,7 +147,7 @@ FIXME: can't figure out how to verify wrap of pthread_broadcast_signal + Thread #x: pthread_cond_{timed}wait called with un-held mutex + at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + ---------------------------------------------------------------- + +@@ -155,7 +155,7 @@ Thread #x's call to pthread_cond_timedwait failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + + ---------------- pthread_rwlock_* ---------------- +@@ -166,11 +166,11 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:189) ++ by 0x........: main (tc20_verifywrap.c:194) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:188) ++ by 0x........: main (tc20_verifywrap.c:193) + + (1) no error on next line + (2) no error on next line +@@ -181,11 +181,11 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:206) ++ by 0x........: main (tc20_verifywrap.c:211) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:196) ++ by 0x........: main (tc20_verifywrap.c:201) + + (4) no error on next line + (5) no error on next line +@@ -198,11 +198,15 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:227) ++ by 0x........: main (tc20_verifywrap.c:232) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:196) ++ by 0x........: main (tc20_verifywrap.c:201) ++ ++ ++ ++---------------- pthread_spin_* ---------------- + + + ---------------- sem_* ---------------- +@@ -213,7 +217,7 @@ Thread #x's call to sem_init failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: sem_init_WRK (hg_intercepts.c:...) + by 0x........: sem_init@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:243) ++ by 0x........: main (tc20_verifywrap.c:267) + + + FIXME: can't figure out how to verify wrap of sem_destroy +@@ -223,7 +227,7 @@ FIXME: can't figure out how to verify wrap of sem_destroy + Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post + at 0x........: sem_wait_WRK (hg_intercepts.c:...) + by 0x........: sem_wait (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:257) ++ by 0x........: main (tc20_verifywrap.c:281) + + + FIXME: can't figure out how to verify wrap of sem_post +diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-solaris b/helgrind/tests/tc20_verifywrap.stderr.exp-solaris +index 921ebf5..072cc18 100644 +--- a/helgrind/tests/tc20_verifywrap.stderr.exp-solaris ++++ b/helgrind/tests/tc20_verifywrap.stderr.exp-solaris +@@ -14,21 +14,21 @@ Thread #x is the program's root thread + Thread #x was created + ... + by 0x........: pthread_create@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:81) ++ by 0x........: main (tc20_verifywrap.c:86) + + ---------------------------------------------------------------- + + Possible data race during write of size 2 at 0x........ by thread #x + Locks held: none +- at 0x........: main (tc20_verifywrap.c:83) ++ at 0x........: main (tc20_verifywrap.c:88) + + This conflicts with a previous write of size 2 by thread #x + Locks held: none +- at 0x........: racy_child (tc20_verifywrap.c:39) ++ at 0x........: racy_child (tc20_verifywrap.c:44) + by 0x........: mythread_wrapper (hg_intercepts.c:...) + ... + Location 0x........ is 0 bytes inside global var "unprotected" +- declared at tc20_verifywrap.c:32 ++ declared at tc20_verifywrap.c:37 + + ---------------------------------------------------------------- + +@@ -36,7 +36,7 @@ Thread #x's call to pthread_join failed + with error code 45 (EDEADLK: Resource deadlock would occur) + at 0x........: pthread_join_WRK (hg_intercepts.c:...) + by 0x........: pthread_join (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:88) ++ by 0x........: main (tc20_verifywrap.c:93) + + + ---------------- pthread_mutex_lock et al ---------------- +@@ -46,14 +46,14 @@ Thread #x's call to pthread_join failed + Thread #x's call to mutex_init failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: pthread_mutex_init (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:102) ++ by 0x........: main (tc20_verifywrap.c:107) + + ---------------------------------------------------------------- + + Thread #x: pthread_mutex_destroy of a locked mutex + at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:112) ++ by 0x........: main (tc20_verifywrap.c:117) + + ---------------------------------------------------------------- + +@@ -61,7 +61,7 @@ Thread #x's call to pthread_mutex_lock failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: mutex_lock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_lock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:118) ++ by 0x........: main (tc20_verifywrap.c:123) + + ---------------------------------------------------------------- + +@@ -69,7 +69,7 @@ Thread #x's call to pthread_mutex_trylock failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: mutex_trylock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_trylock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:126) ++ by 0x........: main (tc20_verifywrap.c:131) + + ---------------------------------------------------------------- + +@@ -77,14 +77,14 @@ Thread #x's call to pthread_mutex_timedlock failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:131) ++ by 0x........: main (tc20_verifywrap.c:136) + + ---------------------------------------------------------------- + + Thread #x unlocked an invalid lock at 0x........ + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + ---------------------------------------------------------------- + +@@ -92,7 +92,7 @@ Thread #x's call to pthread_mutex_unlock failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:135) ++ by 0x........: main (tc20_verifywrap.c:140) + + + ---------------- pthread_cond_wait et al ---------------- +@@ -102,7 +102,7 @@ Thread #x's call to pthread_mutex_unlock failed + Thread #x: pthread_cond_{timed}wait called with un-held mutex + at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + +@@ -110,14 +110,14 @@ Thread #x's call to pthread_cond_wait failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:157) ++ by 0x........: main (tc20_verifywrap.c:162) + + ---------------------------------------------------------------- + + Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread + at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_signal@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:162) ++ by 0x........: main (tc20_verifywrap.c:167) + + + FIXME: can't figure out how to verify wrap of pthread_cond_signal +@@ -127,7 +127,7 @@ FIXME: can't figure out how to verify wrap of pthread_cond_signal + Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread + at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:168) ++ by 0x........: main (tc20_verifywrap.c:173) + + + FIXME: can't figure out how to verify wrap of pthread_broadcast_signal +@@ -137,7 +137,7 @@ FIXME: can't figure out how to verify wrap of pthread_broadcast_signal + Thread #x: pthread_cond_{timed}wait called with un-held mutex + at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + ---------------------------------------------------------------- + +@@ -145,7 +145,7 @@ Thread #x's call to pthread_cond_timedwait failed + with error code 1 (EPERM: Operation not permitted) + at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) + by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) +- by 0x........: main (tc20_verifywrap.c:175) ++ by 0x........: main (tc20_verifywrap.c:180) + + + ---------------- pthread_rwlock_* ---------------- +@@ -156,13 +156,13 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:189) ++ by 0x........: main (tc20_verifywrap.c:194) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:188) ++ by 0x........: main (tc20_verifywrap.c:193) + Location 0x........ is 0 bytes inside rwl.__pthread_rwlock_readers, +- declared at tc20_verifywrap.c:52, in frame #x of thread x ++ declared at tc20_verifywrap.c:57, in frame #x of thread x + + + ---------------------------------------------------------------- +@@ -172,7 +172,7 @@ Thread #x's call to pthread_rwlock_unlock failed + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:189) ++ by 0x........: main (tc20_verifywrap.c:194) + + (1) no error on next line + (2) no error on next line +@@ -183,13 +183,13 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:206) ++ by 0x........: main (tc20_verifywrap.c:211) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:196) ++ by 0x........: main (tc20_verifywrap.c:201) + Location 0x........ is 0 bytes inside rwl2.__pthread_rwlock_readers, +- declared at tc20_verifywrap.c:53, in frame #x of thread x ++ declared at tc20_verifywrap.c:58, in frame #x of thread x + + + ---------------------------------------------------------------- +@@ -199,7 +199,7 @@ Thread #x's call to pthread_rwlock_unlock failed + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:206) ++ by 0x........: main (tc20_verifywrap.c:211) + + (4) no error on next line + (5) no error on next line +@@ -212,13 +212,13 @@ Thread #x unlocked a not-locked lock at 0x........ + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:227) ++ by 0x........: main (tc20_verifywrap.c:232) + Lock at 0x........ was first observed + at 0x........: pthread_rwlock_init (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:196) ++ by 0x........: main (tc20_verifywrap.c:201) + Location 0x........ is 0 bytes inside rwl2.__pthread_rwlock_readers, +- declared at tc20_verifywrap.c:53, in frame #x of thread x ++ declared at tc20_verifywrap.c:58, in frame #x of thread x + + + ---------------------------------------------------------------- +@@ -228,7 +228,11 @@ Thread #x's call to pthread_rwlock_unlock failed + at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) + by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:227) ++ by 0x........: main (tc20_verifywrap.c:232) ++ ++ ++ ++---------------- pthread_spin_* ---------------- + + + ---------------- sem_* ---------------- +@@ -239,7 +243,7 @@ Thread #x's call to sema_init failed + with error code 22 (EINVAL: Invalid argument) + at 0x........: sema_init (hg_intercepts.c:...) + ... +- by 0x........: main (tc20_verifywrap.c:248) ++ by 0x........: main (tc20_verifywrap.c:267) + + + FIXME: can't figure out how to verify wrap of sem_destroy diff --git a/SOURCES/valgrind-3.11.0-rexw-cvtps2pd.patch b/SOURCES/valgrind-3.11.0-rexw-cvtps2pd.patch new file mode 100644 index 0000000..12cef42 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-rexw-cvtps2pd.patch @@ -0,0 +1,76 @@ +diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c +index 98596d2..06552e8 100644 +--- a/VEX/priv/guest_amd64_toIR.c ++++ b/VEX/priv/guest_amd64_toIR.c +@@ -13396,7 +13396,8 @@ Long dis_ESC_0F__SSE2 ( Bool* decode_OK, + case 0x5A: + /* 0F 5A = CVTPS2PD -- convert 2 x F32 in low half mem/xmm to 2 x + F64 in xmm(G). */ +- if (haveNo66noF2noF3(pfx) && sz == 4) { ++ if (haveNo66noF2noF3(pfx) ++ && (sz == 4 || /* ignore redundant REX.W */ sz == 8)) { + delta = dis_CVTPS2PD_128( vbi, pfx, delta, False/*!isAvx*/ ); + goto decode_success; + } +diff --git a/none/tests/amd64/redundantRexW.c b/none/tests/amd64/redundantRexW.c +index e189267..0a50c3b 100644 +--- a/none/tests/amd64/redundantRexW.c ++++ b/none/tests/amd64/redundantRexW.c +@@ -596,6 +596,23 @@ int main ( void ) + after_test( "rex.WB subsd -0x8(%r13),%xmm1", regs, mem ); + } + ++ /* cvtps2pd mem, reg 48 0f 5a 07 rex.W cvtps2pd (%rdi),%xmm0 */ ++ { ++ before_test( regs, mem ); ++ __asm__ __volatile__( ++ "movq %0, %%r14\n" ++ "\tmovq %1, %%r15\n" ++ LOAD_XMMREGS_from_r14 ++ "\tmovq %%r15, %%rdi\n" ++ "\t.byte 0x48,0x0f,0x5a,0x07\n" ++ SAVE_XMMREGS_to_r14 ++ : /*out*/ : /*in*/ "r"(regs), "r"( -0 + (char*)&mem->dqw[2] ) ++ : /*trash*/ "r14","r15","memory", XMMREGS, ++ "rdi" ++ ); ++ after_test( "rex.W cvtps2pd (%rdi),%xmm0", regs, mem ); ++ } ++ + free(regs); + free(mem); + return 0; +diff --git a/none/tests/amd64/redundantRexW.stdout.exp b/none/tests/amd64/redundantRexW.stdout.exp +index dd1697a..94b255a 100644 +--- a/none/tests/amd64/redundantRexW.stdout.exp ++++ b/none/tests/amd64/redundantRexW.stdout.exp +@@ -648,3 +648,29 @@ after "rex.WB subsd -0x8(%r13),%xmm1" (xmms in order [15..0]) { + %xmm15 ................................ + } + ++after "rex.W cvtps2pd (%rdi),%xmm0" (dqws in order [15 .. 0]) { ++ [0] ................................ ++ [1] ................................ ++ [2] ................................ ++ [3] ................................ ++ [4] ................................ ++} ++after "rex.W cvtps2pd (%rdi),%xmm0" (xmms in order [15..0]) { ++ %xmm 0 113a1c7d5554535213bd9cffd4535251 ++ %xmm 1 ................................ ++ %xmm 2 ................................ ++ %xmm 3 ................................ ++ %xmm 4 ................................ ++ %xmm 5 ................................ ++ %xmm 6 ................................ ++ %xmm 7 ................................ ++ %xmm 8 ................................ ++ %xmm 9 ................................ ++ %xmm10 ................................ ++ %xmm11 ................................ ++ %xmm12 ................................ ++ %xmm13 ................................ ++ %xmm14 ................................ ++ %xmm15 ................................ ++} ++ diff --git a/SOURCES/valgrind-3.11.0-rlimit_data.patch b/SOURCES/valgrind-3.11.0-rlimit_data.patch new file mode 100644 index 0000000..8c1c1fd --- /dev/null +++ b/SOURCES/valgrind-3.11.0-rlimit_data.patch @@ -0,0 +1,116 @@ +diff --git a/coregrind/m_libcproc.c b/coregrind/m_libcproc.c +index f314b55..a30f7dc 100644 +--- a/coregrind/m_libcproc.c ++++ b/coregrind/m_libcproc.c +@@ -450,9 +450,6 @@ void VG_(execv) ( const HChar* filename, const HChar** argv ) + HChar** envp; + SysRes res; + +- /* restore the DATA rlimit for the child */ +- VG_(setrlimit)(VKI_RLIMIT_DATA, &VG_(client_rlimit_data)); +- + envp = VG_(env_clone)(VG_(client_envp)); + VG_(env_remove_valgrind_env_stuff)( envp, True /*ro_strings*/, NULL ); + +@@ -511,17 +508,9 @@ Int VG_(spawn) ( const HChar *filename, const HChar **argv ) + # undef COPY_CHAR_TO_ARGENV + # undef COPY_STRING_TOARGENV + +- /* HACK: Temporarily restore the DATA rlimit for spawned child. */ +- VG_(setrlimit)(VKI_RLIMIT_DATA, &VG_(client_rlimit_data)); +- + SysRes res = VG_(do_syscall5)(__NR_spawn, (UWord) filename, (UWord) NULL, 0, + (UWord) argenv, argenv_size); + +- /* Restore DATA rlimit back to its previous value set in m_main.c. */ +- struct vki_rlimit zero = { 0, 0 }; +- zero.rlim_max = VG_(client_rlimit_data).rlim_max; +- VG_(setrlimit)(VKI_RLIMIT_DATA, &zero); +- + VG_(free)(argenv); + for (HChar **p = envp; *p != NULL; p++) { + VG_(free)(*p); +diff --git a/coregrind/m_main.c b/coregrind/m_main.c +index 1821c94..9b659ae 100644 +--- a/coregrind/m_main.c ++++ b/coregrind/m_main.c +@@ -1627,7 +1627,6 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp ) + Bool logging_to_fd = False; + const HChar* xml_fname_unexpanded = NULL; + Int loglevel, i; +- struct vki_rlimit zero = { 0, 0 }; + XArray* addr2dihandle = NULL; + + //============================================================ +@@ -1800,13 +1799,15 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp ) + VG_(debugLog)(1, "main", "... %s\n", VG_(name_of_launcher)); + + //-------------------------------------------------------------- +- // Get the current process datasize rlimit, and set it to zero. +- // This prevents any internal uses of brk() from having any effect. +- // We remember the old value so we can restore it on exec, so that +- // child processes will have a reasonable brk value. ++ // We used to set the process datasize rlimit to zero to prevent ++ // any internal use of brk() from having any effect. But later ++ // linux kernels redefine RLIMIT_DATA as the size of any data ++ // areas, including some dynamic mmap memory allocations. ++ // See bug #357833 for the commit that went into linux 4.5 ++ // changing the definition of RLIMIT_DATA. So don't mess with ++ // RLIMIT_DATA here now anymore. Just remember it for use in ++ // the syscall wrappers. + VG_(getrlimit)(VKI_RLIMIT_DATA, &VG_(client_rlimit_data)); +- zero.rlim_max = VG_(client_rlimit_data).rlim_max; +- VG_(setrlimit)(VKI_RLIMIT_DATA, &zero); + + // Get the current process stack rlimit. + VG_(getrlimit)(VKI_RLIMIT_STACK, &VG_(client_rlimit_stack)); +diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c +index aa60d67..061c1e1 100644 +--- a/coregrind/m_syswrap/syswrap-generic.c ++++ b/coregrind/m_syswrap/syswrap-generic.c +@@ -3014,9 +3014,6 @@ PRE(sys_execve) + vg_assert(j == tot_args+1); + } + +- /* restore the DATA rlimit for the child */ +- VG_(setrlimit)(VKI_RLIMIT_DATA, &VG_(client_rlimit_data)); +- + /* + Set the signal state up for exec. + +diff --git a/coregrind/m_syswrap/syswrap-solaris.c b/coregrind/m_syswrap/syswrap-solaris.c +index 4e2662c..c700b59 100644 +--- a/coregrind/m_syswrap/syswrap-solaris.c ++++ b/coregrind/m_syswrap/syswrap-solaris.c +@@ -1589,21 +1589,12 @@ PRE(sys_spawn) + #undef COPY_CHAR_TO_ARGENV + #undef COPY_STRING_TOARGENV + +- /* HACK: Temporarily restore the DATA rlimit for spawned child. +- This is a terrible hack to provide sensible brk limit for child. */ +- VG_(setrlimit)(VKI_RLIMIT_DATA, &VG_(client_rlimit_data)); +- + /* Actual spawn() syscall. */ + SysRes res = VG_(do_syscall5)(__NR_spawn, (UWord) path, (UWord) attrs, + attrs_size, (UWord) argenv, argenv_size); + SET_STATUS_from_SysRes(res); + VG_(free)(argenv); + +- /* Restore DATA rlimit back to its previous value set in m_main.c. */ +- struct vki_rlimit zero = { 0, 0 }; +- zero.rlim_max = VG_(client_rlimit_data).rlim_max; +- VG_(setrlimit)(VKI_RLIMIT_DATA, &zero); +- + if (SUCCESS) { + PRINT(" spawn: process %d spawned child %ld\n", VG_(getpid)(), RES); + } +@@ -3794,9 +3785,6 @@ PRE(sys_execve) + VG_(sigprocmask)(VKI_SIG_SETMASK, &tst->sig_mask, NULL); + } + +- /* Restore the DATA rlimit for the child. */ +- VG_(setrlimit)(VKI_RLIMIT_DATA, &VG_(client_rlimit_data)); +- + /* Debug-only printing. */ + if (0) { + HChar **cpp; diff --git a/SOURCES/valgrind-3.11.0-s390-hwcap.patch b/SOURCES/valgrind-3.11.0-s390-hwcap.patch new file mode 100644 index 0000000..4413a8e --- /dev/null +++ b/SOURCES/valgrind-3.11.0-s390-hwcap.patch @@ -0,0 +1,70 @@ +On a zEC12 or z13, a glibc with lock elision enabled infers from HWCAP +that the prerequisites for lock elision are met. Then it may use TBEGIN +and other transactional-execution instructions which are not implemented +by Valgrind. Likewise, the upcoming glibc 2.23 will exploit vector +instructions if they are advertised by HWCAP; and those are currently +not implemented by Valgrind either. In general, the increased use of +ifunc may lead to more such cases in the future. + +This patch suppresses the advertising of those hardware features via +HWCAP which are either not known to Valgrind or currently unsupported. + +Patch by Andreas Arnez (arnez@linux.vnet.ibm.com). +Fixes BZ #353680. + +Modified: trunk/README.s390 +============================================================================== +--- trunk/README.s390 (original) ++++ trunk/README.s390 Mon Oct 12 21:35:56 2015 +@@ -22,6 +22,9 @@ + - Some gcc versions use mvc to copy 4/8 byte values. This will affect + certain debug messages. For example, memcheck will complain about + 4 one-byte reads/writes instead of just a single read/write. ++- The transactional-execution facility is not supported; it is masked ++ off from HWCAP. ++- The vector facility is not supported; it is masked off from HWCAP. + + + Hardware facilities + +Modified: trunk/coregrind/m_initimg/initimg-linux.c +============================================================================== +--- trunk/coregrind/m_initimg/initimg-linux.c (original) ++++ trunk/coregrind/m_initimg/initimg-linux.c Mon Oct 12 21:35:56 2015 +@@ -701,6 +701,12 @@ + in syswrap-arm-linux.c rather than to base this on + conditional compilation. */ + } ++# elif defined(VGP_s390x_linux) ++ { ++ /* Advertise hardware features "below" TE only. TE and VXRS ++ (and anything above) are not supported by Valgrind. */ ++ auxv->u.a_val &= VKI_HWCAP_S390_TE - 1; ++ } + # endif + break; + # if defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux) + +Modified: trunk/include/vki/vki-s390x-linux.h +============================================================================== +--- trunk/include/vki/vki-s390x-linux.h (original) ++++ trunk/include/vki/vki-s390x-linux.h Mon Oct 12 21:35:56 2015 +@@ -800,12 +800,15 @@ + #define VKI_PTRACE_POKEUSR_AREA 0x5001 + + //---------------------------------------------------------------------- +-// From linux-2.6.16.60/include/asm-s390/elf.h ++// From linux-3.18/include/asm-s390/elf.h + //---------------------------------------------------------------------- + + typedef vki_s390_fp_regs vki_elf_fpregset_t; + typedef vki_s390_regs vki_elf_gregset_t; + ++#define VKI_HWCAP_S390_TE 1024 ++#define VKI_HWCAP_S390_VXRS 2048 ++ + + //---------------------------------------------------------------------- + // From linux-2.6.16.60/include/asm-s390/ucontext.h + + diff --git a/SOURCES/valgrind-3.11.0-s390-separate-socketcalls.patch b/SOURCES/valgrind-3.11.0-s390-separate-socketcalls.patch new file mode 100644 index 0000000..96e0ef6 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-s390-separate-socketcalls.patch @@ -0,0 +1,79 @@ +commit d9201968186f799b9a2c0793a29029819372a072 +Author: mjw +Date: Tue Feb 23 15:19:49 2016 +0000 + + Bug 359703 s390: wire up separate socketcalls system calls + + The linux 4.3 s390 kernel has separate system calls that were originally + hidden behind the socketcall multiplexer system call. Newer glibc versions + will use these direct system calls instead of socketcall when available. + Causing several regtest failures. + + This fix simply wires up the split out system calls directly to the + existing syswrap handlers for s390. + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15802 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c +index e919b8f..0513789 100644 +--- a/coregrind/m_syswrap/syswrap-s390x-linux.c ++++ b/coregrind/m_syswrap/syswrap-s390x-linux.c +@@ -1051,7 +1051,25 @@ static SyscallTableEntry syscall_table[] = { + // ?????(__NR_seccomp, ), // 348 + LINXY(__NR_getrandom, sys_getrandom), // 349 + +- LINXY(__NR_memfd_create, sys_memfd_create) // 350 ++ LINXY(__NR_memfd_create, sys_memfd_create), // 350 ++ ++ LINXY(__NR_recvmmsg, sys_recvmmsg), // 357 ++ LINXY(__NR_sendmmsg, sys_sendmmsg), // 358 ++ LINXY(__NR_socket, sys_socket), // 359 ++ LINXY(__NR_socketpair, sys_socketpair), // 360 ++ LINX_(__NR_bind, sys_bind), // 361 ++ LINX_(__NR_connect, sys_connect), // 362 ++ LINX_(__NR_listen, sys_listen), // 363 ++ LINXY(__NR_accept4, sys_accept4), // 364 ++ LINXY(__NR_getsockopt, sys_getsockopt), // 365 ++ LINX_(__NR_setsockopt, sys_setsockopt), // 366 ++ LINXY(__NR_getsockname, sys_getsockname), // 367 ++ LINXY(__NR_getpeername, sys_getpeername), // 368 ++ LINX_(__NR_sendto, sys_sendto), // 369 ++ LINX_(__NR_sendmsg, sys_sendmsg), // 270 ++ LINXY(__NR_recvfrom, sys_recvfrom), // 371 ++ LINXY(__NR_recvmsg, sys_recvmsg), // 372 ++ LINX_(__NR_shutdown, sys_shutdown) // 373 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/include/vki/vki-scnums-s390x-linux.h b/include/vki/vki-scnums-s390x-linux.h +index 2a4a8f1..0187045 100644 +--- a/include/vki/vki-scnums-s390x-linux.h ++++ b/include/vki/vki-scnums-s390x-linux.h +@@ -316,7 +316,26 @@ + #define __NR_seccomp 348 + #define __NR_getrandom 349 + #define __NR_memfd_create 350 +-#define NR_syscalls 351 ++ ++#define __NR_recvmmsg 357 ++#define __NR_sendmmsg 358 ++#define __NR_socket 359 ++#define __NR_socketpair 360 ++#define __NR_bind 361 ++#define __NR_connect 362 ++#define __NR_listen 363 ++#define __NR_accept4 364 ++#define __NR_getsockopt 365 ++#define __NR_setsockopt 366 ++#define __NR_getsockname 367 ++#define __NR_getpeername 368 ++#define __NR_sendto 369 ++#define __NR_sendmsg 370 ++#define __NR_recvfrom 371 ++#define __NR_recvmsg 372 ++#define __NR_shutdown 373 ++ ++#define NR_syscalls 374 + + /* + * There are some system calls that are not present on 64 bit, some diff --git a/SOURCES/valgrind-3.11.0-s390x-popcnt.patch b/SOURCES/valgrind-3.11.0-s390x-popcnt.patch new file mode 100644 index 0000000..935d9fd --- /dev/null +++ b/SOURCES/valgrind-3.11.0-s390x-popcnt.patch @@ -0,0 +1,63 @@ +commit 4b825ef5dcf064fd0f05323e7edd538ce02ac146 +Author: florian +Date: Wed Feb 17 19:57:01 2016 +0000 + + s390: Implement popcnt insn. Part of fixing BZ #359289. + Patch by Andreas Arnez (arnez@linux.vnet.ibm.com) + + + git-svn-id: svn://svn.valgrind.org/vex/trunk@3210 8f6e269a-dfd6-0310-a8e1-e2731360e62c + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index 116a606..5e6acd4 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -12938,6 +12938,38 @@ s390_irgen_FLOGR(UChar r1, UChar r2) + } + + static const HChar * ++s390_irgen_POPCNT(UChar r1, UChar r2) ++{ ++ Int i; ++ IRTemp val = newTemp(Ity_I64); ++ IRTemp mask[3]; ++ ++ assign(val, get_gpr_dw0(r2)); ++ for (i = 0; i < 3; i++) { ++ mask[i] = newTemp(Ity_I64); ++ } ++ assign(mask[0], mkU64(0x5555555555555555ULL)); ++ assign(mask[1], mkU64(0x3333333333333333ULL)); ++ assign(mask[2], mkU64(0x0F0F0F0F0F0F0F0FULL)); ++ for (i = 0; i < 3; i++) { ++ IRTemp tmp = newTemp(Ity_I64); ++ ++ assign(tmp, ++ binop(Iop_Add64, ++ binop(Iop_And64, ++ mkexpr(val), ++ mkexpr(mask[i])), ++ binop(Iop_And64, ++ binop(Iop_Shr64, mkexpr(val), mkU8(1 << i)), ++ mkexpr(mask[i])))); ++ val = tmp; ++ } ++ s390_cc_thunk_putZ(S390_CC_OP_BITWISE, val); ++ put_gpr_dw0(r1, mkexpr(val)); ++ return "popcnt"; ++} ++ ++static const HChar * + s390_irgen_STCK(IRTemp op2addr) + { + IRDirty *d; +@@ -14999,7 +15031,8 @@ s390_decode_4byte_and_irgen(const UChar *bytes) + ovl.fmt.RRE.r2); goto ok; + case 0xb9df: s390_format_RRE_RR(s390_irgen_CLHLR, ovl.fmt.RRE.r1, + ovl.fmt.RRE.r2); goto ok; +- case 0xb9e1: /* POPCNT */ goto unimplemented; ++ case 0xb9e1: s390_format_RRE_RR(s390_irgen_POPCNT, ovl.fmt.RRE.r1, ++ ovl.fmt.RRE.r2); goto ok; + case 0xb9e2: s390_format_RRF_U0RR(s390_irgen_LOCGR, ovl.fmt.RRF3.r3, + ovl.fmt.RRF3.r1, ovl.fmt.RRF3.r2, + S390_XMNM_LOCGR); goto ok; diff --git a/SOURCES/valgrind-3.11.0-s390x-risbgn.patch b/SOURCES/valgrind-3.11.0-s390x-risbgn.patch new file mode 100644 index 0000000..def0fe2 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-s390x-risbgn.patch @@ -0,0 +1,1741 @@ +commit 9ee91e10656ec648cdb6922fb5237659d944d6a9 +Author: cborntra +Date: Thu Apr 7 18:54:53 2016 +0000 + + Bug 361226 VEX part: s390x: risbgn (EC59) not implemented + + + git-svn-id: svn://svn.valgrind.org/vex/trunk@3216 8f6e269a-dfd6-0310-a8e1-e2731360e62c + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index 5e6acd4..a587d2e 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -7578,7 +7578,8 @@ s390_irgen_ROSBG(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5) + } + + static const HChar * +-s390_irgen_RISBG(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5) ++s390_irgen_RISBGx(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5, ++ Bool set_cc) + { + UChar from; + UChar to; +@@ -7612,9 +7613,24 @@ s390_irgen_RISBG(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5) + put_gpr_dw0(r1, binop(Iop_And64, mkexpr(op2), mkU64(mask))); + } + assign(result, get_gpr_dw0(r1)); +- s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, result); ++ if (set_cc) { ++ s390_cc_thunk_putS(S390_CC_OP_LOAD_AND_TEST, result); ++ return "risbg"; ++ } ++ ++ return "risbgn"; ++} ++ ++static const HChar * ++s390_irgen_RISBG(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5) ++{ ++ return s390_irgen_RISBGx(r1, r2, i3, i4, i5, True); ++} + +- return "risbg"; ++static const HChar * ++s390_irgen_RISBGN(UChar r1, UChar r2, UChar i3, UChar i4, UChar i5) ++{ ++ return s390_irgen_RISBGx(r1, r2, i3, i4, i5, False); + } + + static const HChar * +@@ -16059,7 +16075,13 @@ s390_decode_6byte_and_irgen(const UChar *bytes) + ovl.fmt.RIE_RRUUU.i4, + ovl.fmt.RIE_RRUUU.i5); + goto ok; +- case 0xec0000000059ULL: /* RISBGN */ goto unimplemented; ++ case 0xec0000000059ULL: s390_format_RIE_RRUUU(s390_irgen_RISBGN, ++ ovl.fmt.RIE_RRUUU.r1, ++ ovl.fmt.RIE_RRUUU.r2, ++ ovl.fmt.RIE_RRUUU.i3, ++ ovl.fmt.RIE_RRUUU.i4, ++ ovl.fmt.RIE_RRUUU.i5); ++ goto ok; + case 0xec000000005dULL: /* RISBHG */ goto unimplemented; + case 0xec0000000064ULL: s390_format_RIE_RRPU(s390_irgen_CGRJ, + ovl.fmt.RIE_RRPU.r1, +commit 6a1772b2d1e47f19fb31d28218be8cacb5b72bca +Author: cborntra +Date: Thu Apr 7 18:55:25 2016 +0000 + + Bug 361226 valgrind part: s390x: risbgn (EC59) not implemented + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15852 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/none/tests/s390x/opcodes.h b/none/tests/s390x/opcodes.h +index 0c5b737..e1fb3ef 100644 +--- a/none/tests/s390x/opcodes.h ++++ b/none/tests/s390x/opcodes.h +@@ -329,6 +329,7 @@ + #define RNSBG(r1,r2,i3,i4,i5) RIE_RRUUU(ec,r1,r2,i3,i4,i5,54) + #define ROSBG(r1,r2,i3,i4,i5) RIE_RRUUU(ec,r1,r2,i3,i4,i5,56) + #define RXSBG(r1,r2,i3,i4,i5) RIE_RRUUU(ec,r1,r2,i3,i4,i5,57) ++#define RISBGN(r1,r2,i3,i4,i5) RIE_RRUUU(ec,r1,r2,i3,i4,i5,59) + #define SFPC(r1) RRE_R0(b384,r1) + #define SGRK(r3,r1,r2) RRF_R0RR2(b9e9,r3,0,r1,r2) + #define SHHHR(r3,r1,r2) RRF_R0RR2(b9c9,r3,0,r1,r2) +diff --git a/none/tests/s390x/rxsbg.c b/none/tests/s390x/rxsbg.c +index 6e15325..f6ab4cd 100644 +--- a/none/tests/s390x/rxsbg.c ++++ b/none/tests/s390x/rxsbg.c +@@ -6,11 +6,12 @@ + register unsigned long r1 asm ("1") = _r1; \ + register unsigned long r2 asm ("2") = _r2; \ + int cc; \ +- asm volatile( insn(1,2, i3, i4, i5) \ ++ asm volatile( "clgr 1,2\n" \ ++ insn(1,2, i3, i4, i5) \ + "ipm %1\n" \ + "srl %1,28\n" \ + : "+d" (r1), "=d" (cc) \ +- : "d" (r1), "d" (r2) \ ++ : "d" (r1), "d" (r2) \ + : "cc"); \ + printf(#insn " r1(==%16.16lX),r2(==%16.16lX),0x" #i3 ",0x" #i4 ",0x" #i5 " = %16.16lX (cc=%d)\n", _r1, _r2, r1, cc); \ + }) +@@ -73,6 +74,7 @@ int main() + i5sweep(RNSBG); + i5sweep(ROSBG); + i5sweep(RXSBG); ++ i5sweep(RISBGN); + + return 0; + } +diff --git a/none/tests/s390x/rxsbg.stdout.exp b/none/tests/s390x/rxsbg.stdout.exp +index 9f1d918..4bab353 100644 +--- a/none/tests/s390x/rxsbg.stdout.exp ++++ b/none/tests/s390x/rxsbg.stdout.exp +@@ -6478,3 +6478,1623 @@ RXSBG r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x3f = FFFFFFFFFFF + RXSBG r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x3f = 0000000000000000 (cc=1) + RXSBG r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x3f = 0000FFFFCCCCAAAA (cc=1) + RXSBG r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x00,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x00,0x00 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x00,0x00 = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x00,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x00,0x00 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x00,0x00 = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x00 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x00 = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x00,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x00,0x00 = 0000F00000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x00,0x00 = 7FFFF00000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x00,0x00 = 00000CCCFFFF0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x00,0x00 = 0000FCCCFFFF0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x00,0x00 = 7FFFFCCCFFFF0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x00 = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x00 = 8000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x00,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x00,0x00 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x00,0x00 = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x00,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x00,0x00 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x00,0x00 = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x00 = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x00 = 8000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x00,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x00,0x00 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x00,0x00 = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x00,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x00,0x00 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x00,0x00 = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x00 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x00 = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x00,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x00,0x00 = 0000FFFF80000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x00,0x00 = 7FFFFFFF80000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x00,0x00 = 000000007FFF0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x00,0x00 = 0000FFFFFFFF0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x00,0x00 = 7FFFFFFFFFFF0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x00 = 800000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x00 = 8000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x00,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x00,0x00 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x00,0x00 = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x00,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x00,0x00 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x00,0x00 = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x00 = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x00 = 8000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x2a,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x2a,0x00 = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x2a,0x00 = 00000000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x2a,0x00 = 5555CCCCFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x2a,0x00 = 5555CCCCFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x2a,0x00 = 5555CCCCFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x00 = FFFFFFFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x00 = FFFFFFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x2a,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x2a,0x00 = 0000F000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x2a,0x00 = FFFFF000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x2a,0x00 = 00000CCCFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x2a,0x00 = 0000FCCCFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x2a,0x00 = FFFFFCCCFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x00 = 00000FFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x00 = 0000FFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x2a,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x2a,0x00 = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x2a,0x00 = 00000000001FFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x00 = 5555CCCCFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x00 = 5555CCCCFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x00 = 5555CCCCFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x00 = FFFFFFFFFFE00001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x00 = FFFFFFFFFFECAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x2a,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x2a,0x00 = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x2a,0x00 = 00000000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x2a,0x00 = 5555CCCCFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x2a,0x00 = 5555CCCCFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x2a,0x00 = 5555CCCCFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x00 = FFFFFFFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x00 = FFFFFFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x2a,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x2a,0x00 = 0000FFFF800CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x2a,0x00 = FFFFFFFF801FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x00 = 000000007FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x00 = 0000FFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x00 = FFFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x00 = 000000007FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x00 = 0000FFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x2a,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x2a,0x00 = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x2a,0x00 = 00000000001FFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x00 = 5555CCCCFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x00 = 5555CCCCFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x00 = 5555CCCCFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x00 = FFFFFFFFFFE00001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x00 = FFFFFFFFFFECAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x3f,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x3f,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x3f,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x3f,0x00 = 5555CCCCFFFF0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x3f,0x00 = 5555CCCCFFFF0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x3f,0x00 = 5555CCCCFFFF0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x00 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x00 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x3f,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x3f,0x00 = 0000F00000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x3f,0x00 = FFFFF00000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x3f,0x00 = 00000CCCFFFF0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x3f,0x00 = 0000FCCCFFFF0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x3f,0x00 = FFFFFCCCFFFF0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x00 = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x00 = 0000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x3f,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x3f,0x00 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x3f,0x00 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x00 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x00 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x00 = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x00 = 0000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x3f,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x3f,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x3f,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x3f,0x00 = 5555CCCCFFFF0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x3f,0x00 = 5555CCCCFFFF0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x3f,0x00 = 5555CCCCFFFF0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x00 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x00 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x3f,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x3f,0x00 = 0000FFFF80000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x3f,0x00 = FFFFFFFF80000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x00 = 000000007FFF0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x00 = 0000FFFFFFFF0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x00 = FFFFFFFFFFFF0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x00 = 000000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x00 = 0000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x3f,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x3f,0x00 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x3f,0x00 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x00 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x00 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x00 = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x00 = 0000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x80,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x80,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x80,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x00 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x00 = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x00 = 8000000000000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x80,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x80,0x00 = 00000CCCFFFF0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x80,0x00 = 00000CCCFFFF0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x80,0x00 = 00000CCCFFFF0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x00 = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x00 = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x00 = 80000FFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x80,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x80,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x80,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x00 = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x00 = 8000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x00 = 8000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x80,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x80,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x80,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x00 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x00 = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x00 = 8000000000000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x80,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x80,0x00 = 000000007FFF0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x80,0x00 = 000000007FFF0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x80,0x00 = 000000007FFF0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x00 = 800000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x00 = 800000007FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x00 = 800000007FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x80,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x80,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x80,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x80,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x00 = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x00 = 8000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x00 = 8000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x9e,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x9e,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x9e,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x9e,0x00 = 5555CCCC00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x9e,0x00 = 5555CCCC00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x9e,0x00 = 5555CCCC00000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x00 = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x00 = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x00 = FFFFFFFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x9e,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x9e,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x9e,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x9e,0x00 = 00000CCC00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x9e,0x00 = 00000CCC00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x9e,0x00 = 00000CCC00000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x00 = 00000FFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x00 = 00000FFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x00 = 00000FFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x9e,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x9e,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x9e,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x00 = 5555CCCC00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x00 = 5555CCCC00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x00 = 5555CCCC00000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x00 = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x00 = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x00 = FFFFFFFE00000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x9e,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x9e,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x9e,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x9e,0x00 = 5555CCCC00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x9e,0x00 = 5555CCCC00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x9e,0x00 = 5555CCCC00000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x00 = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x00 = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x00 = FFFFFFFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x9e,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x9e,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x9e,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x00 = 5555CCCC7FFF0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x00 = 5555CCCC7FFF0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x00 = 5555CCCC7FFF0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x00 = FFFFFFFE7FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x00 = FFFFFFFE7FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x00 = FFFFFFFE7FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x9e,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x9e,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x9e,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x00 = 5555CCCC00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x00 = 5555CCCC00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x00 = 5555CCCC00000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x00 = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x00 = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x00 = FFFFFFFE00000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0xbf,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0xbf,0x00 = 5555CCCCFFFF0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0xbf,0x00 = 5555CCCCFFFF0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0xbf,0x00 = 5555CCCCFFFF0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x00 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x00 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0xbf,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0xbf,0x00 = 00000CCCFFFF0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0xbf,0x00 = 00000CCCFFFF0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0xbf,0x00 = 00000CCCFFFF0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x00 = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x00 = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x00 = 00000FFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0xbf,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x00 = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x00 = 0000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x00 = 0000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0xbf,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0xbf,0x00 = 5555CCCCFFFF0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0xbf,0x00 = 5555CCCCFFFF0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0xbf,0x00 = 5555CCCCFFFF0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x00 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x00 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x00 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0xbf,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x00 = 000000007FFF0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x00 = 000000007FFF0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x00 = 000000007FFF0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x00 = 000000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x00 = 000000007FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x00 = 000000007FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0xbf,0x00 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x00 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x00 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x00 = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x00 = 0000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x00 = 0000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x00,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x00,0x01 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x00,0x01 = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x00,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x00,0x01 = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x00,0x01 = FFFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x01 = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x00,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x00,0x01 = 0000F00000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x00,0x01 = 7FFFF00000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x00,0x01 = 80000999FFFE0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x00,0x01 = 8000F999FFFE0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x00,0x01 = FFFFF999FFFE0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x01 = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x01 = 8000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x00,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x00,0x01 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x00,0x01 = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x00,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x00,0x01 = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x00,0x01 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x01 = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x01 = 8000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x00,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x00,0x01 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x00,0x01 = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x00,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x00,0x01 = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x00,0x01 = FFFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x01 = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x00,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x00,0x01 = 0000FFFF80000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x00,0x01 = 7FFFFFFF80000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x00,0x01 = 800000007FFE0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x00,0x01 = 8000FFFFFFFE0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x00,0x01 = FFFFFFFFFFFE0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x01 = 800000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x01 = 8000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x00,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x00,0x01 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x00,0x01 = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x00,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x00,0x01 = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x00,0x01 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x01 = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x01 = 8000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x2a,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x2a,0x01 = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x2a,0x01 = 00000000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x2a,0x01 = AAAB9999FFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x2a,0x01 = AAAB9999FFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x2a,0x01 = AAAB9999FFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x01 = FFFFFFFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x01 = FFFFFFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x2a,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x2a,0x01 = 0000F000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x2a,0x01 = FFFFF000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x2a,0x01 = 00000999FFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x2a,0x01 = 0000F999FFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x2a,0x01 = FFFFF999FFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x01 = 00000FFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x01 = 0000FFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x2a,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x2a,0x01 = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x2a,0x01 = 00000000001FFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x01 = AAAB9999FFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x01 = AAAB9999FFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x01 = AAAB9999FFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x01 = FFFFFFFFFFE00001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x01 = FFFFFFFFFFECAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x2a,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x2a,0x01 = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x2a,0x01 = 00000000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x2a,0x01 = AAAB9999FFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x2a,0x01 = AAAB9999FFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x2a,0x01 = AAAB9999FFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x01 = FFFFFFFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x01 = FFFFFFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x2a,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x2a,0x01 = 0000FFFF800CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x2a,0x01 = FFFFFFFF801FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x01 = 000000007FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x01 = 0000FFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x01 = FFFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x01 = 000000007FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x01 = 0000FFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x2a,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x2a,0x01 = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x2a,0x01 = 00000000001FFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x01 = AAAB9999FFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x01 = AAAB9999FFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x01 = AAAB9999FFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x01 = FFFFFFFFFFE00001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x01 = FFFFFFFFFFECAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x3f,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x3f,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x3f,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x3f,0x01 = AAAB9999FFFE0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x3f,0x01 = AAAB9999FFFE0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x3f,0x01 = AAAB9999FFFE0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x01 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x01 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x3f,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x3f,0x01 = 0000F00000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x3f,0x01 = FFFFF00000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x3f,0x01 = 00000999FFFE0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x3f,0x01 = 0000F999FFFE0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x3f,0x01 = FFFFF999FFFE0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x01 = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x01 = 0000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x3f,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x3f,0x01 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x3f,0x01 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x01 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x01 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x01 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x01 = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x01 = 0000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x3f,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x3f,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x3f,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x3f,0x01 = AAAB9999FFFE0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x3f,0x01 = AAAB9999FFFE0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x3f,0x01 = AAAB9999FFFE0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x01 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x01 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x3f,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x3f,0x01 = 0000FFFF80000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x3f,0x01 = FFFFFFFF80000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x01 = 000000007FFE0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x01 = 0000FFFFFFFE0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x01 = FFFFFFFFFFFE0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x01 = 000000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x01 = 0000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x3f,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x3f,0x01 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x3f,0x01 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x01 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x01 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x01 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x01 = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x01 = 0000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x80,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x80,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x80,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x80,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x80,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x80,0x01 = 8000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x01 = 8000000000000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x80,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x80,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x80,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x80,0x01 = 80000999FFFE0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x80,0x01 = 80000999FFFE0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x80,0x01 = 80000999FFFE0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x01 = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x01 = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x01 = 80000FFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x80,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x80,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x80,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x80,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x80,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x80,0x01 = 8000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x01 = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x01 = 8000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x01 = 8000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x80,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x80,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x80,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x80,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x80,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x80,0x01 = 8000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x01 = 8000000000000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x80,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x80,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x80,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x80,0x01 = 800000007FFE0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x80,0x01 = 800000007FFE0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x80,0x01 = 800000007FFE0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x01 = 800000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x01 = 800000007FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x01 = 800000007FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x80,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x80,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x80,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x80,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x80,0x01 = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x80,0x01 = 8000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x01 = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x01 = 8000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x01 = 8000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x9e,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x9e,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x9e,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x9e,0x01 = AAAB999800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x9e,0x01 = AAAB999800000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x9e,0x01 = AAAB999800000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x01 = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x01 = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x01 = FFFFFFFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x9e,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x9e,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x9e,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x9e,0x01 = 0000099800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x9e,0x01 = 0000099800000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x9e,0x01 = 0000099800000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x01 = 00000FFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x01 = 00000FFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x01 = 00000FFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x9e,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x9e,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x9e,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x01 = AAAB999800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x01 = AAAB999800000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x01 = AAAB999800000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x01 = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x01 = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x01 = FFFFFFFE00000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x9e,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x9e,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x9e,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x9e,0x01 = AAAB999800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x9e,0x01 = AAAB999800000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x9e,0x01 = AAAB999800000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x01 = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x01 = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x01 = FFFFFFFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x9e,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x9e,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x9e,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x01 = AAAB99987FFE0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x01 = AAAB99987FFE0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x01 = AAAB99987FFE0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x01 = FFFFFFFE7FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x01 = FFFFFFFE7FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x01 = FFFFFFFE7FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x9e,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x9e,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x9e,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x01 = AAAB999800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x01 = AAAB999800000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x01 = AAAB999800000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x01 = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x01 = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x01 = FFFFFFFE00000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0xbf,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0xbf,0x01 = AAAB9999FFFE0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0xbf,0x01 = AAAB9999FFFE0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0xbf,0x01 = AAAB9999FFFE0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x01 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x01 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0xbf,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0xbf,0x01 = 00000999FFFE0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0xbf,0x01 = 00000999FFFE0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0xbf,0x01 = 00000999FFFE0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x01 = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x01 = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x01 = 00000FFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0xbf,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x01 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x01 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x01 = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x01 = 0000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x01 = 0000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0xbf,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0xbf,0x01 = AAAB9999FFFE0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0xbf,0x01 = AAAB9999FFFE0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0xbf,0x01 = AAAB9999FFFE0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x01 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x01 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x01 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0xbf,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x01 = 000000007FFE0000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x01 = 000000007FFE0000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x01 = 000000007FFE0000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x01 = 000000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x01 = 000000007FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x01 = 000000007FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0xbf,0x01 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x01 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x01 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x01 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x01 = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x01 = 0000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x01 = 0000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x00,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x00,0x13 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x00,0x13 = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x00,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x00,0x13 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x00,0x13 = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x13 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x13 = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x00,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x00,0x13 = 0000F00000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x00,0x13 = 7FFFF00000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x00,0x13 = 00000FF80002AAAE (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x00,0x13 = 0000FFF80002AAAE (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x00,0x13 = 7FFFFFF80002AAAE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x13 = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x13 = 8000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x00,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x00,0x13 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x00,0x13 = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x00,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x00,0x13 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x00,0x13 = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x13 = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x13 = 8000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x00,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x00,0x13 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x00,0x13 = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x00,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x00,0x13 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x00,0x13 = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x13 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x13 = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x00,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x00,0x13 = 0000FFFF80000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x00,0x13 = 7FFFFFFF80000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x00,0x13 = 000000000002AAAE (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x00,0x13 = 0000FFFF8002AAAE (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x00,0x13 = 7FFFFFFF8002AAAE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x13 = 800000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x13 = 8000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x00,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x00,0x13 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x00,0x13 = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x00,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x00,0x13 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x00,0x13 = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x13 = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x13 = 8000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x2a,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x2a,0x13 = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x2a,0x13 = 00000000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x2a,0x13 = 6667FFF800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x2a,0x13 = 6667FFF8000CAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x2a,0x13 = 6667FFF8001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x13 = FFFFFFFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x13 = FFFFFFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x2a,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x2a,0x13 = 0000F000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x2a,0x13 = FFFFF000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x2a,0x13 = 00000FF800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x2a,0x13 = 0000FFF8000CAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x2a,0x13 = FFFFFFF8001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x13 = 00000FFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x13 = 0000FFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x2a,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x2a,0x13 = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x2a,0x13 = 00000000001FFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x13 = 6667FFF800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x13 = 6667FFF8000CAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x13 = 6667FFF8001FFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x13 = FFFFFFFFFFE00001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x13 = FFFFFFFFFFECAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x2a,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x2a,0x13 = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x2a,0x13 = 00000000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x2a,0x13 = 6667FFF800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x2a,0x13 = 6667FFF8000CAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x2a,0x13 = 6667FFF8001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x13 = FFFFFFFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x13 = FFFFFFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x2a,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x2a,0x13 = 0000FFFF800CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x2a,0x13 = FFFFFFFF801FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x13 = 0000FFFF800CAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x13 = FFFFFFFF801FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x13 = 000000007FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x13 = 0000FFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x2a,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x2a,0x13 = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x2a,0x13 = 00000000001FFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x13 = 6667FFF800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x13 = 6667FFF8000CAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x13 = 6667FFF8001FFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x13 = FFFFFFFFFFE00001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x13 = FFFFFFFFFFECAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x3f,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x3f,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x3f,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x3f,0x13 = 6667FFF80002AAAE (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x3f,0x13 = 6667FFF80002AAAE (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x3f,0x13 = 6667FFF80002AAAE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x13 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x13 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x3f,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x3f,0x13 = 0000F00000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x3f,0x13 = FFFFF00000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x3f,0x13 = 00000FF80002AAAE (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x3f,0x13 = 0000FFF80002AAAE (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x3f,0x13 = FFFFFFF80002AAAE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x13 = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x13 = 0000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x3f,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x3f,0x13 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x3f,0x13 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x13 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x13 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x13 = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x13 = 0000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x3f,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x3f,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x3f,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x3f,0x13 = 6667FFF80002AAAE (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x3f,0x13 = 6667FFF80002AAAE (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x3f,0x13 = 6667FFF80002AAAE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x13 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x13 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x3f,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x3f,0x13 = 0000FFFF80000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x3f,0x13 = FFFFFFFF80000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x13 = 000000000002AAAE (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x13 = 0000FFFF8002AAAE (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x13 = FFFFFFFF8002AAAE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x13 = 000000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x13 = 0000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x3f,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x3f,0x13 = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x3f,0x13 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x13 = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x13 = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x13 = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x13 = 0000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x80,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x80,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x80,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x13 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x13 = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x13 = 8000000000000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x80,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x80,0x13 = 00000FF80002AAAE (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x80,0x13 = 00000FF80002AAAE (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x80,0x13 = 00000FF80002AAAE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x13 = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x13 = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x13 = 80000FFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x80,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x80,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x80,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x13 = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x13 = 8000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x13 = 8000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x80,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x80,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x80,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x13 = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x13 = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x13 = 8000000000000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x80,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x80,0x13 = 000000000002AAAE (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x80,0x13 = 000000000002AAAE (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x80,0x13 = 000000000002AAAE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x13 = 800000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x13 = 800000007FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x13 = 800000007FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x80,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x80,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x80,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x80,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x13 = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x13 = 8000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x13 = 8000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x9e,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x9e,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x9e,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x9e,0x13 = 6667FFF800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x9e,0x13 = 6667FFF800000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x9e,0x13 = 6667FFF800000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x13 = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x13 = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x13 = FFFFFFFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x9e,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x9e,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x9e,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x9e,0x13 = 00000FF800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x9e,0x13 = 00000FF800000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x9e,0x13 = 00000FF800000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x13 = 00000FFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x13 = 00000FFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x13 = 00000FFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x9e,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x9e,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x9e,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x13 = 6667FFF800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x13 = 6667FFF800000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x13 = 6667FFF800000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x13 = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x13 = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x13 = FFFFFFFE00000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x9e,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x9e,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x9e,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x9e,0x13 = 6667FFF800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x9e,0x13 = 6667FFF800000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x9e,0x13 = 6667FFF800000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x13 = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x13 = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x13 = FFFFFFFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x9e,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x9e,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x9e,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x13 = 6667FFF80002AAAE (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x13 = 6667FFF80002AAAE (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x13 = 6667FFF80002AAAE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x13 = FFFFFFFE7FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x13 = FFFFFFFE7FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x13 = FFFFFFFE7FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x9e,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x9e,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x9e,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x13 = 6667FFF800000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x13 = 6667FFF800000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x13 = 6667FFF800000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x13 = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x13 = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x13 = FFFFFFFE00000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0xbf,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0xbf,0x13 = 6667FFF80002AAAE (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0xbf,0x13 = 6667FFF80002AAAE (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0xbf,0x13 = 6667FFF80002AAAE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x13 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x13 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0xbf,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0xbf,0x13 = 00000FF80002AAAE (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0xbf,0x13 = 00000FF80002AAAE (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0xbf,0x13 = 00000FF80002AAAE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x13 = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x13 = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x13 = 00000FFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0xbf,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x13 = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x13 = 0000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x13 = 0000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0xbf,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0xbf,0x13 = 6667FFF80002AAAE (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0xbf,0x13 = 6667FFF80002AAAE (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0xbf,0x13 = 6667FFF80002AAAE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x13 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x13 = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x13 = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0xbf,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x13 = 000000000002AAAE (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x13 = 000000000002AAAE (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x13 = 000000000002AAAE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x13 = 000000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x13 = 000000007FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x13 = 000000007FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0xbf,0x13 = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x13 = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x13 = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x13 = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x13 = 0000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x13 = 0000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x00,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x00,0x3e = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x00,0x3e = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x00,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x00,0x3e = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x00,0x3e = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x3e = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x3e = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x00,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x00,0x3e = 0000F00000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x00,0x3e = 7FFFF00000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x00,0x3e = 000003333FFFC000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x00,0x3e = 0000F3333FFFC000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x00,0x3e = 7FFFF3333FFFC000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x3e = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x3e = 8000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x00,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x00,0x3e = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x00,0x3e = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x00,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x00,0x3e = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x00,0x3e = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x3e = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x3e = 8000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x00,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x00,0x3e = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x00,0x3e = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x00,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x00,0x3e = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x00,0x3e = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x3e = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x3e = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x00,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x00,0x3e = 0000FFFF80000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x00,0x3e = 7FFFFFFF80000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x00,0x3e = 000000003FFFC000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x00,0x3e = 0000FFFFBFFFC000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x00,0x3e = 7FFFFFFFBFFFC000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x3e = 800000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x3e = 8000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x00,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x00,0x3e = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x00,0x3e = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x00,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x00,0x3e = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x00,0x3e = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x3e = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x3e = 8000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x2a,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x2a,0x3e = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x2a,0x3e = 00000000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x2a,0x3e = 155573333FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x2a,0x3e = 155573333FECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x2a,0x3e = 155573333FFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x3e = FFFFFFFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x3e = FFFFFFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x2a,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x2a,0x3e = 0000F000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x2a,0x3e = FFFFF000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x2a,0x3e = 000003333FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x2a,0x3e = 0000F3333FECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x2a,0x3e = FFFFF3333FFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x3e = 00000FFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x3e = 0000FFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x2a,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x2a,0x3e = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x2a,0x3e = 00000000001FFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x3e = 155573333FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x3e = 155573333FECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x3e = 155573333FFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x3e = FFFFFFFFFFE00001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x3e = FFFFFFFFFFECAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x2a,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x2a,0x3e = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x2a,0x3e = 00000000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x2a,0x3e = 155573333FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x2a,0x3e = 155573333FECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x2a,0x3e = 155573333FFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x3e = FFFFFFFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x3e = FFFFFFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x2a,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x2a,0x3e = 0000FFFF800CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x2a,0x3e = FFFFFFFF801FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x3e = 000000003FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x3e = 0000FFFFBFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x3e = FFFFFFFFBFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x3e = 000000007FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x3e = 0000FFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x2a,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x2a,0x3e = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x2a,0x3e = 00000000001FFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x3e = 155573333FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x3e = 155573333FECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x3e = 155573333FFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x3e = FFFFFFFFFFE00001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x3e = FFFFFFFFFFECAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x3f,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x3f,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x3f,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x3f,0x3e = 155573333FFFC000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x3f,0x3e = 155573333FFFC000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x3f,0x3e = 155573333FFFC000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x3e = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x3e = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x3f,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x3f,0x3e = 0000F00000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x3f,0x3e = FFFFF00000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x3f,0x3e = 000003333FFFC000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x3f,0x3e = 0000F3333FFFC000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x3f,0x3e = FFFFF3333FFFC000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x3e = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x3e = 0000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x3f,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x3f,0x3e = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x3f,0x3e = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x3e = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x3e = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x3e = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x3e = 0000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x3f,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x3f,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x3f,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x3f,0x3e = 155573333FFFC000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x3f,0x3e = 155573333FFFC000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x3f,0x3e = 155573333FFFC000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x3e = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x3e = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x3f,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x3f,0x3e = 0000FFFF80000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x3f,0x3e = FFFFFFFF80000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x3e = 000000003FFFC000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x3e = 0000FFFFBFFFC000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x3e = FFFFFFFFBFFFC000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x3e = 000000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x3e = 0000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x3f,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x3f,0x3e = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x3f,0x3e = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x3e = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x3e = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x3e = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x3e = 0000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x80,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x80,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x80,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x3e = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x3e = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x3e = 8000000000000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x80,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x80,0x3e = 000003333FFFC000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x80,0x3e = 000003333FFFC000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x80,0x3e = 000003333FFFC000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x3e = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x3e = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x3e = 80000FFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x80,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x80,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x80,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x3e = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x3e = 8000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x3e = 8000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x80,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x80,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x80,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x3e = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x3e = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x3e = 8000000000000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x80,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x80,0x3e = 000000003FFFC000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x80,0x3e = 000000003FFFC000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x80,0x3e = 000000003FFFC000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x3e = 800000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x3e = 800000007FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x3e = 800000007FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x80,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x80,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x80,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x80,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x3e = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x3e = 8000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x3e = 8000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x9e,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x9e,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x9e,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x9e,0x3e = 1555733200000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x9e,0x3e = 1555733200000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x9e,0x3e = 1555733200000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x3e = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x3e = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x3e = FFFFFFFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x9e,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x9e,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x9e,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x9e,0x3e = 0000033200000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x9e,0x3e = 0000033200000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x9e,0x3e = 0000033200000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x3e = 00000FFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x3e = 00000FFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x3e = 00000FFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x9e,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x9e,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x9e,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x3e = 1555733200000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x3e = 1555733200000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x3e = 1555733200000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x3e = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x3e = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x3e = FFFFFFFE00000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x9e,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x9e,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x9e,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x9e,0x3e = 1555733200000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x9e,0x3e = 1555733200000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x9e,0x3e = 1555733200000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x3e = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x3e = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x3e = FFFFFFFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x9e,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x9e,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x9e,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x3e = 155573323FFFC000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x3e = 155573323FFFC000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x3e = 155573323FFFC000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x3e = FFFFFFFE7FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x3e = FFFFFFFE7FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x3e = FFFFFFFE7FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x9e,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x9e,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x9e,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x3e = 1555733200000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x3e = 1555733200000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x3e = 1555733200000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x3e = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x3e = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x3e = FFFFFFFE00000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0xbf,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0xbf,0x3e = 155573333FFFC000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0xbf,0x3e = 155573333FFFC000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0xbf,0x3e = 155573333FFFC000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x3e = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x3e = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0xbf,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0xbf,0x3e = 000003333FFFC000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0xbf,0x3e = 000003333FFFC000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0xbf,0x3e = 000003333FFFC000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x3e = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x3e = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x3e = 00000FFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0xbf,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x3e = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x3e = 0000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x3e = 0000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0xbf,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0xbf,0x3e = 155573333FFFC000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0xbf,0x3e = 155573333FFFC000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0xbf,0x3e = 155573333FFFC000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x3e = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x3e = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x3e = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0xbf,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x3e = 000000003FFFC000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x3e = 000000003FFFC000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x3e = 000000003FFFC000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x3e = 000000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x3e = 000000007FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x3e = 000000007FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0xbf,0x3e = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x3e = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x3e = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x3e = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x3e = 0000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x3e = 0000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x00,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x00,0x3f = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x00,0x3f = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x00,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x00,0x3f = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x00,0x3f = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x3f = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x3f = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x00,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x00,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x00,0x3f = 0000F00000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x00,0x3f = 7FFFF00000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x00,0x3f = 000006667FFF8000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x00,0x3f = 0000F6667FFF8000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x00,0x3f = 7FFFF6667FFF8000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x3f = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x3f = 8000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x00,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x00,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x00,0x3f = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x00,0x3f = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x00,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x00,0x3f = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x00,0x3f = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x3f = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x3f = 8000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x00,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x00,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x00,0x3f = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x00,0x3f = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x00,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x00,0x3f = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x00,0x3f = 7FFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x3f = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x3f = 8000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x00,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x00,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x00,0x3f = 0000FFFF80000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x00,0x3f = 7FFFFFFF80000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x00,0x3f = 000000007FFF8000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x00,0x3f = 0000FFFFFFFF8000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x00,0x3f = 7FFFFFFFFFFF8000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x3f = 800000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x3f = 8000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x00,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x00,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x00,0x3f = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x00,0x3f = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x00,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x00,0x3f = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x00,0x3f = 7FFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x3f = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x3f = 8000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x00,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x2a,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x2a,0x3f = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x2a,0x3f = 00000000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x2a,0x3f = 2AAAE6667FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x2a,0x3f = 2AAAE6667FECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x2a,0x3f = 2AAAE6667FFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x3f = FFFFFFFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x3f = FFFFFFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x2a,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x2a,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x2a,0x3f = 0000F000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x2a,0x3f = FFFFF000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x2a,0x3f = 000006667FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x2a,0x3f = 0000F6667FECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x2a,0x3f = FFFFF6667FFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x3f = 00000FFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x3f = 0000FFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x2a,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x2a,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x2a,0x3f = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x2a,0x3f = 00000000001FFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x3f = 2AAAE6667FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x3f = 2AAAE6667FECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x2a,0x3f = 2AAAE6667FFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x3f = FFFFFFFFFFE00001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x3f = FFFFFFFFFFECAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x2a,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x2a,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x2a,0x3f = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x2a,0x3f = 00000000001FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x2a,0x3f = 2AAAE6667FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x2a,0x3f = 2AAAE6667FECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x2a,0x3f = 2AAAE6667FFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x3f = FFFFFFFFFFE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x3f = FFFFFFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x2a,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x2a,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x2a,0x3f = 0000FFFF800CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x2a,0x3f = FFFFFFFF801FFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x3f = 000000007FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x3f = 0000FFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x2a,0x3f = FFFFFFFFFFFFFFFF (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x3f = 000000007FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x3f = 0000FFFFFFECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x2a,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x2a,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x2a,0x3f = 00000000000CAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x2a,0x3f = 00000000001FFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x3f = 2AAAE6667FE00000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x3f = 2AAAE6667FECAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x2a,0x3f = 2AAAE6667FFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x3f = FFFFFFFFFFE00001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x3f = FFFFFFFFFFECAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x2a,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x3f,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x3f,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x3f,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x3f,0x3f = 2AAAE6667FFF8000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x3f,0x3f = 2AAAE6667FFF8000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x3f,0x3f = 2AAAE6667FFF8000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x3f = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x3f = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x3f,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x3f,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x3f,0x3f = 0000F00000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x3f,0x3f = FFFFF00000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x3f,0x3f = 000006667FFF8000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x3f,0x3f = 0000F6667FFF8000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x3f,0x3f = FFFFF6667FFF8000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x3f = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x3f = 0000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x3f,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x3f,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x3f,0x3f = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x3f,0x3f = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x3f = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x3f,0x3f = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x3f = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x3f = 0000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x3f,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x3f,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x3f,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x3f,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x3f,0x3f = 2AAAE6667FFF8000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x3f,0x3f = 2AAAE6667FFF8000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x3f,0x3f = 2AAAE6667FFF8000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x3f = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x3f = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x3f,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x3f,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x3f,0x3f = 0000FFFF80000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x3f,0x3f = FFFFFFFF80000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x3f = 000000007FFF8000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x3f = 0000FFFFFFFF8000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x3f,0x3f = FFFFFFFFFFFF8000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x3f = 000000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x3f = 0000FFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x3f,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x3f,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x3f,0x3f = 0000FFFFCCCCAAAA (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x3f,0x3f = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x3f = 0000FFFFCCCCAAAA (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x3f,0x3f = FFFFFFFFFFFFFFFE (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x3f = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x3f = 0000FFFFCCCCAAAB (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x3f,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x80,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x80,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x80,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x3f = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x3f = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x80,0x3f = 8000000000000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x80,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x80,0x3f = 000006667FFF8000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x80,0x3f = 000006667FFF8000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x80,0x3f = 000006667FFF8000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x3f = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x3f = 80000FFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x80,0x3f = 80000FFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x80,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x80,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x80,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x3f = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x3f = 8000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x80,0x3f = 8000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x80,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x80,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x80,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x3f = 8000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x3f = 8000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x80,0x3f = 8000000000000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x80,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x80,0x3f = 000000007FFF8000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x80,0x3f = 000000007FFF8000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x80,0x3f = 000000007FFF8000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x3f = 800000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x3f = 800000007FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x80,0x3f = 800000007FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x80,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x80,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x80,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x80,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x3f = 8000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x3f = 8000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x80,0x3f = 8000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0x9e,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0x9e,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0x9e,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0x9e,0x3f = 2AAAE66600000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0x9e,0x3f = 2AAAE66600000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0x9e,0x3f = 2AAAE66600000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x3f = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x3f = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0x9e,0x3f = FFFFFFFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0x9e,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0x9e,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0x9e,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0x9e,0x3f = 0000066600000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0x9e,0x3f = 0000066600000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0x9e,0x3f = 0000066600000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x3f = 00000FFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x3f = 00000FFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0x9e,0x3f = 00000FFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0x9e,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0x9e,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0x9e,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x3f = 2AAAE66600000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x3f = 2AAAE66600000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0x9e,0x3f = 2AAAE66600000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x3f = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x3f = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0x9e,0x3f = FFFFFFFE00000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0x9e,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0x9e,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0x9e,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0x9e,0x3f = 2AAAE66600000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0x9e,0x3f = 2AAAE66600000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0x9e,0x3f = 2AAAE66600000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x3f = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x3f = FFFFFFFE00000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0x9e,0x3f = FFFFFFFE00000000 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0x9e,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0x9e,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0x9e,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x3f = 2AAAE6667FFF8000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x3f = 2AAAE6667FFF8000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0x9e,0x3f = 2AAAE6667FFF8000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x3f = FFFFFFFE7FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x3f = FFFFFFFE7FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0x9e,0x3f = FFFFFFFE7FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0x9e,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0x9e,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0x9e,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x3f = 2AAAE66600000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x3f = 2AAAE66600000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0x9e,0x3f = 2AAAE66600000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x3f = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x3f = FFFFFFFE00000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0x9e,0x3f = FFFFFFFE00000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x00,0xbf,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x00,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x00,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x00,0xbf,0x3f = 2AAAE6667FFF8000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x00,0xbf,0x3f = 2AAAE6667FFF8000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x00,0xbf,0x3f = 2AAAE6667FFF8000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x3f = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x3f = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x00,0xbf,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x14,0xbf,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x14,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x14,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x14,0xbf,0x3f = 000006667FFF8000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x14,0xbf,0x3f = 000006667FFF8000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x14,0xbf,0x3f = 000006667FFF8000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x3f = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x3f = 00000FFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x14,0xbf,0x3f = 00000FFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x3f,0xbf,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x3f,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x3f,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x3f,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x3f = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x3f = 0000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x3f,0xbf,0x3f = 0000000000000001 (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0x80,0xbf,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0x80,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0x80,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0x80,0xbf,0x3f = 2AAAE6667FFF8000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0x80,0xbf,0x3f = 2AAAE6667FFF8000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0x80,0xbf,0x3f = 2AAAE6667FFF8000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x3f = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x3f = FFFFFFFFFFFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0x80,0xbf,0x3f = FFFFFFFFFFFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xa1,0xbf,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xa1,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xa1,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x3f = 000000007FFF8000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x3f = 000000007FFF8000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xa1,0xbf,0x3f = 000000007FFF8000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x3f = 000000007FFFFFFF (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x3f = 000000007FFFFFFF (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xa1,0xbf,0x3f = 000000007FFFFFFF (cc=0) ++RISBGN r1(==0000000000000000),r2(==0000000000000000),0xbf,0xbf,0x3f = 0000000000000000 (cc=0) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==0000000000000000),0xbf,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==0000000000000000),0xbf,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x3f = 0000000000000000 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==5555CCCCFFFF0000),0xbf,0xbf,0x3f = 0000000000000000 (cc=2) ++RISBGN r1(==0000000000000000),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x3f = 0000000000000001 (cc=1) ++RISBGN r1(==0000FFFFCCCCAAAA),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x3f = 0000000000000001 (cc=1) ++RISBGN r1(==FFFFFFFFFFFFFFFF),r2(==FFFFFFFFFFFFFFFF),0xbf,0xbf,0x3f = 0000000000000001 (cc=0) diff --git a/SOURCES/valgrind-3.11.0-socketcall-x86-linux.patch b/SOURCES/valgrind-3.11.0-socketcall-x86-linux.patch new file mode 100644 index 0000000..fe30d0f --- /dev/null +++ b/SOURCES/valgrind-3.11.0-socketcall-x86-linux.patch @@ -0,0 +1,70 @@ +commit 266d48ed3aa5f5a6c422805d56abc5a32b90c09c +Author: mjw +Date: Wed Jan 20 22:24:43 2016 +0000 + + Bug #358030 Support direct socket calls on x86 32bit (new in linux 4.3) + + Patch by ronald.wahl@raritan.com. + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15764 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c +index 24d7dc1..3c80e6a 100644 +--- a/coregrind/m_syswrap/syswrap-x86-linux.c ++++ b/coregrind/m_syswrap/syswrap-x86-linux.c +@@ -1824,8 +1824,23 @@ static SyscallTableEntry syscall_table[] = { + // LIN__(__NR_seccomp, sys_ni_syscall), // 354 + + LINXY(__NR_getrandom, sys_getrandom), // 355 +- LINXY(__NR_memfd_create, sys_memfd_create) // 356 +-// LIN__(__NR_bpf, sys_ni_syscall) // 357 ++ LINXY(__NR_memfd_create, sys_memfd_create), // 356 ++// LIN__(__NR_bpf, sys_ni_syscall), // 357 ++ LINXY(__NR_socket, sys_socket), // 359 ++ LINXY(__NR_socketpair, sys_socketpair), // 360 ++ LINX_(__NR_bind, sys_bind), // 361 ++ LINX_(__NR_connect, sys_connect), // 362 ++ LINX_(__NR_listen, sys_listen), // 363 ++ LINXY(__NR_accept4, sys_accept4), // 364 ++ LINXY(__NR_getsockopt, sys_getsockopt), // 365 ++ LINX_(__NR_setsockopt, sys_setsockopt), // 366 ++ LINXY(__NR_getsockname, sys_getsockname), // 367 ++ LINXY(__NR_getpeername, sys_getpeername), // 368 ++ LINX_(__NR_sendto, sys_sendto), // 369 ++ LINX_(__NR_sendmsg, sys_sendmsg), // 370 ++ LINXY(__NR_recvfrom, sys_recvfrom), // 371 ++ LINXY(__NR_recvmsg, sys_recvmsg), // 372 ++ LINX_(__NR_shutdown, sys_shutdown) // 373 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/include/vki/vki-scnums-x86-linux.h b/include/vki/vki-scnums-x86-linux.h +index 5479b3e..a4e75a7 100644 +--- a/include/vki/vki-scnums-x86-linux.h ++++ b/include/vki/vki-scnums-x86-linux.h +@@ -392,6 +392,25 @@ + #define __NR_getrandom 355 + #define __NR_memfd_create 356 + #define __NR_bpf 357 ++#define __NR_execveat 358 ++#define __NR_socket 359 ++#define __NR_socketpair 360 ++#define __NR_bind 361 ++#define __NR_connect 362 ++#define __NR_listen 363 ++#define __NR_accept4 364 ++#define __NR_getsockopt 365 ++#define __NR_setsockopt 366 ++#define __NR_getsockname 367 ++#define __NR_getpeername 368 ++#define __NR_sendto 369 ++#define __NR_sendmsg 370 ++#define __NR_recvfrom 371 ++#define __NR_recvmsg 372 ++#define __NR_shutdown 373 ++#define __NR_userfaultfd 374 ++#define __NR_membarrier 375 ++#define __NR_mlock2 376 + + #endif /* __VKI_SCNUMS_X86_LINUX_H */ + diff --git a/SOURCES/valgrind-3.11.0-wrapmalloc.patch b/SOURCES/valgrind-3.11.0-wrapmalloc.patch new file mode 100644 index 0000000..064163f --- /dev/null +++ b/SOURCES/valgrind-3.11.0-wrapmalloc.patch @@ -0,0 +1,1176 @@ +commit 13693666bd9fc7be37a907302e5d3d4f4b2c9358 +Author: mjw +Date: Sun Nov 15 16:50:43 2015 +0000 + + BZ#355188 valgrind should intercept all malloc related global functions. + + This implements the interception of all globally public allocation + functions by default. It works by adding a flag to the spec to say the + interception only applies to global functions. Which is set for the + somalloc spec. The librarypath to match is set to "*" unless the user + overrides it. Then each DiSym keeps track of whether the symbol is local + or global. For a spec which has isGlobal set only isGlobal symbols will + match. + + Note that because of padding to keep the addresses in DiSym aligned the + addition of the extra bool isGlobal doesn't actually grow the struct. + The comments explain how the struct could be made more compact on 32bit + systems, but this isn't as easy on 64bit systems. So I didn't try to do + that in this patch. + + For ELF symbols keeping track of which are global is trivial. For pdb I + had to guess and made only the "Public" symbols global. I don't know + how/if macho keeps track of global symbols or not. For now I just mark + all of them local (which just means things work as previously on platforms + that use machos, no non-system symbols are matches by default for somalloc + unless the user explicitly tells which library name to match). + + Included are two testcases for shared libraries (wrapmalloc) and staticly + linked (wrapmallocstatic) malloc/free overrides that depend on the new + default. One existing testcase (new_override) was adjusted to explicitly + not use the new somalloc default because it depends on a user defined + new implementation that has side-effects and should explicitly not be + intercepted. + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15726 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c +index 6f11cd2..4dc1129 100644 +--- a/coregrind/m_debuginfo/debuginfo.c ++++ b/coregrind/m_debuginfo/debuginfo.c +@@ -4306,7 +4306,8 @@ void VG_(DebugInfo_syms_getidx) ( const DebugInfo *si, + /*OUT*/const HChar** pri_name, + /*OUT*/const HChar*** sec_names, + /*OUT*/Bool* isText, +- /*OUT*/Bool* isIFunc ) ++ /*OUT*/Bool* isIFunc, ++ /*OUT*/Bool* isGlobal ) + { + vg_assert(idx >= 0 && idx < si->symtab_used); + if (avmas) *avmas = si->symtab[idx].avmas; +@@ -4315,6 +4316,7 @@ void VG_(DebugInfo_syms_getidx) ( const DebugInfo *si, + if (sec_names) *sec_names = si->symtab[idx].sec_names; + if (isText) *isText = si->symtab[idx].isText; + if (isIFunc) *isIFunc = si->symtab[idx].isIFunc; ++ if (isGlobal) *isGlobal = si->symtab[idx].isGlobal; + } + + +diff --git a/coregrind/m_debuginfo/priv_storage.h b/coregrind/m_debuginfo/priv_storage.h +index aa1d9f9..a43720a 100644 +--- a/coregrind/m_debuginfo/priv_storage.h ++++ b/coregrind/m_debuginfo/priv_storage.h +@@ -75,14 +75,18 @@ typedef + the macros defined in pub_core_debuginfo.h */ + const HChar* pri_name; /* primary name, never NULL */ + const HChar** sec_names; /* NULL, or a NULL term'd array of other names */ +- // XXX: this could be shrunk (on 32-bit platforms) by using 30 +- // bits for the size and 1 bit each for isText and isIFunc. If you +- // do this, make sure that all assignments to the latter two use +- // 0 or 1 (or True or False), and that a positive number larger +- // than 1 is never used to represent True. ++ // XXX: DiSym could be shrunk (on 32-bit platforms to exactly 16 ++ // bytes, on 64-bit platforms the first 3 pointers already add ++ // up to 24 bytes, so size plus bits will extend to 32 bytes ++ // anyway) by using 29 bits for the size and 1 bit each for ++ // isText, isIFunc and isGlobal. If you do this, make sure that ++ // all assignments to the latter two use 0 or 1 (or True or ++ // False), and that a positive number larger than 1 is never ++ // used to represent True. + UInt size; /* size in bytes */ + Bool isText; + Bool isIFunc; /* symbol is an indirect function? */ ++ Bool isGlobal; /* Is this symbol globally visible? */ + } + DiSym; + +diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c +index 0861725..3820965 100644 +--- a/coregrind/m_debuginfo/readelf.c ++++ b/coregrind/m_debuginfo/readelf.c +@@ -241,7 +241,8 @@ Bool get_elf_symbol_info ( + Bool* from_opd_out, /* ppc64be-linux only: did we deref an + .opd entry? */ + Bool* is_text_out, /* is this a text symbol? */ +- Bool* is_ifunc /* is this a STT_GNU_IFUNC function ?*/ ++ Bool* is_ifunc_out, /* is this a STT_GNU_IFUNC function ?*/ ++ Bool* is_global_out /* is this a global symbol ?*/ + ) + { + Bool plausible; +@@ -259,7 +260,8 @@ Bool get_elf_symbol_info ( + SET_TOCPTR_AVMA(*sym_avmas_out, 0); /* default to unknown/inapplicable */ + SET_LOCAL_EP_AVMA(*sym_avmas_out, 0); /* default to unknown/inapplicable */ + *from_opd_out = False; +- *is_ifunc = False; ++ *is_ifunc_out = False; ++ *is_global_out = False; + + /* Get the symbol size, but restrict it to fit in a signed 32 bit + int. Also, deal with the stupid case of negative size by making +@@ -373,10 +375,14 @@ Bool get_elf_symbol_info ( + /* Check for indirect functions. */ + if (*is_text_out + && ELFXX_ST_TYPE(sym->st_info) == STT_GNU_IFUNC) { +- *is_ifunc = True; ++ *is_ifunc_out = True; + } + # endif + ++ if (ELFXX_ST_BIND(sym->st_info) == STB_GLOBAL) { ++ *is_global_out = True; ++ } ++ + # if defined(VGP_ppc64be_linux) + /* Allow STT_NOTYPE in the very special case where we're running on + ppc64be-linux and the symbol is one which the .opd-chasing hack +@@ -777,6 +783,7 @@ void read_elf_symtab__normal( + SymAVMAs sym_avmas_really; + Int sym_size = 0; + Bool from_opd = False, is_text = False, is_ifunc = False; ++ Bool is_global = False; + DiOffT sym_name_really = DiOffT_INVALID; + sym_avmas_really.main = 0; + SET_TOCPTR_AVMA(sym_avmas_really, 0); +@@ -787,7 +794,7 @@ void read_elf_symtab__normal( + &sym_name_really, + &sym_avmas_really, + &sym_size, +- &from_opd, &is_text, &is_ifunc)) { ++ &from_opd, &is_text, &is_ifunc, &is_global)) { + + DiSym disym; + VG_(memset)(&disym, 0, sizeof(disym)); +@@ -799,6 +806,7 @@ void read_elf_symtab__normal( + disym.size = sym_size; + disym.isText = is_text; + disym.isIFunc = is_ifunc; ++ disym.isGlobal = is_global; + if (cstr) { ML_(dinfo_free)(cstr); cstr = NULL; } + vg_assert(disym.pri_name); + vg_assert(GET_TOCPTR_AVMA(disym.avmas) == 0); +@@ -847,6 +855,7 @@ typedef + Bool from_opd; + Bool is_text; + Bool is_ifunc; ++ Bool is_global; + } + TempSym; + +@@ -911,6 +920,7 @@ void read_elf_symtab__ppc64be_linux( + SymAVMAs sym_avmas_really; + Int sym_size = 0; + Bool from_opd = False, is_text = False, is_ifunc = False; ++ Bool is_global = False; + DiOffT sym_name_really = DiOffT_INVALID; + DiSym disym; + VG_(memset)(&disym, 0, sizeof(disym)); +@@ -923,7 +933,7 @@ void read_elf_symtab__ppc64be_linux( + &sym_name_really, + &sym_avmas_really, + &sym_size, +- &from_opd, &is_text, &is_ifunc)) { ++ &from_opd, &is_text, &is_ifunc, &is_global)) { + + /* Check if we've seen this (name,addr) key before. */ + key.addr = sym_avmas_really.main; +@@ -996,6 +1006,7 @@ void read_elf_symtab__ppc64be_linux( + elem->from_opd = from_opd; + elem->is_text = is_text; + elem->is_ifunc = is_ifunc; ++ elem->is_global = is_global; + VG_(OSetGen_Insert)(oset, elem); + if (di->trace_symtab) { + HChar* str = ML_(img_strdup)(escn_strtab->img, "di.respl.2", +@@ -1034,14 +1045,17 @@ void read_elf_symtab__ppc64be_linux( + disym.size = elem->size; + disym.isText = elem->is_text; + disym.isIFunc = elem->is_ifunc; ++ disym.isGlobal = elem->is_global; + if (cstr) { ML_(dinfo_free)(cstr); cstr = NULL; } + vg_assert(disym.pri_name != NULL); + + ML_(addSym) ( di, &disym ); + if (di->trace_symtab) { +- VG_(printf)(" rec(%c) [%4ld]: " ++ VG_(printf)(" rec(%c%c%c) [%4ld]: " + " val %#010lx, toc %#010lx, sz %4d %s\n", + disym.isText ? 't' : 'd', ++ disym.isIFunc ? 'i' : '-', ++ disym.isGlobal ? 'g' : 'l', + i, + disym.avmas.main, + GET_TOCPTR_AVMA(disym.avmas), +diff --git a/coregrind/m_debuginfo/readmacho.c b/coregrind/m_debuginfo/readmacho.c +index 98ab048..3d406a4 100644 +--- a/coregrind/m_debuginfo/readmacho.c ++++ b/coregrind/m_debuginfo/readmacho.c +@@ -365,6 +365,7 @@ void read_symtab( /*OUT*/XArray* /* DiSym */ syms, + di->text_avma+di->text_size - sym_addr; + disym.isText = True; + disym.isIFunc = False; ++ disym.isGlobal = False; + // Lots of user function names get prepended with an underscore. Eg. the + // function 'f' becomes the symbol '_f'. And the "below main" + // function is called "start". So we skip the leading underscore, and +diff --git a/coregrind/m_debuginfo/readpdb.c b/coregrind/m_debuginfo/readpdb.c +index 8b63e95..1ebf863 100644 +--- a/coregrind/m_debuginfo/readpdb.c ++++ b/coregrind/m_debuginfo/readpdb.c +@@ -1272,6 +1272,7 @@ static ULong DEBUG_SnarfCodeView( + // FIXME: .namelen is sizeof(.data) including .name[] + vsym.isText = (sym->generic.id == S_PUB_V1); + vsym.isIFunc = False; ++ vsym.isGlobal = True; + ML_(addSym)( di, &vsym ); + n_syms_read++; + } +@@ -1299,6 +1300,7 @@ static ULong DEBUG_SnarfCodeView( + vsym.isText = !!(IMAGE_SCN_CNT_CODE + & sectp[sym->data_v2.segment-1].Characteristics); + vsym.isIFunc = False; ++ vsym.isGlobal = True; + ML_(addSym)( di, &vsym ); + n_syms_read++; + } +@@ -1332,6 +1334,7 @@ static ULong DEBUG_SnarfCodeView( + vsym.isText = !!(IMAGE_SCN_CNT_CODE + & sectp[sym->data_v2.segment-1].Characteristics); + vsym.isIFunc = False; ++ vsym.isGlobal = True; + ML_(addSym)( di, &vsym ); + n_syms_read++; + } +@@ -1365,6 +1368,7 @@ static ULong DEBUG_SnarfCodeView( + vsym.size = sym->proc_v1.proc_len; + vsym.isText = True; + vsym.isIFunc = False; ++ vsym.isGlobal = sym->generic.id == S_GPROC_V1; + if (debug) + VG_(umsg)(" Adding function %s addr=%#lx length=%u\n", + symname, vsym.avmas.main, vsym.size ); +@@ -1386,6 +1390,7 @@ static ULong DEBUG_SnarfCodeView( + vsym.size = sym->proc_v2.proc_len; + vsym.isText = True; + vsym.isIFunc = False; ++ vsym.isGlobal = sym->generic.id == S_GPROC_V2; + if (debug) + VG_(umsg)(" Adding function %s addr=%#lx length=%u\n", + symname, vsym.avmas.main, vsym.size ); +@@ -1408,6 +1413,7 @@ static ULong DEBUG_SnarfCodeView( + vsym.size = sym->proc_v3.proc_len; + vsym.isText = 1; + vsym.isIFunc = False; ++ vsym.isGlobal = sym->generic.id == S_GPROC_V3; + ML_(addSym)( di, &vsym ); + n_syms_read++; + } +diff --git a/coregrind/m_debuginfo/storage.c b/coregrind/m_debuginfo/storage.c +index 45bc135..7b2e26a 100644 +--- a/coregrind/m_debuginfo/storage.c ++++ b/coregrind/m_debuginfo/storage.c +@@ -98,10 +98,11 @@ void ML_(ppSym) ( Int idx, const DiSym* sym ) + vg_assert(sym->pri_name); + if (sec_names) + vg_assert(sec_names); +- VG_(printf)( "%5d: %c%c %#8lx .. %#8lx (%u) %s%s", ++ VG_(printf)( "%5d: %c%c%c %#8lx .. %#8lx (%u) %s%s", + idx, + sym->isText ? 'T' : '-', + sym->isIFunc ? 'I' : '-', ++ sym->isGlobal ? 'G' : '-', + sym->avmas.main, + sym->avmas.main + sym->size - 1, sym->size, + sym->pri_name, sec_names ? " " : "" ); +@@ -1646,7 +1647,7 @@ static void canonicaliseSymtab ( struct _DebugInfo* di ) + Word i, j, n_truncated; + Addr sta1, sta2, end1, end2, toc1, toc2; + const HChar *pri1, *pri2, **sec1, **sec2; +- Bool ist1, ist2, isf1, isf2; ++ Bool ist1, ist2, isf1, isf2, isg1, isg2; + + # define SWAP(ty,aa,bb) \ + do { ty tt = (aa); (aa) = (bb); (bb) = tt; } while (0) +@@ -1693,6 +1694,8 @@ static void canonicaliseSymtab ( struct _DebugInfo* di ) + } + /* mark w as an IFunc if either w or r are */ + di->symtab[w].isIFunc = di->symtab[w].isIFunc || di->symtab[r].isIFunc; ++ /* likewise for global symbols */ ++ di->symtab[w].isGlobal = di->symtab[w].isGlobal || di->symtab[r].isGlobal; + /* and use ::pri_names to indicate this slot is no longer in use */ + di->symtab[r].pri_name = NULL; + if (di->symtab[r].sec_names) { +@@ -1796,6 +1799,7 @@ static void canonicaliseSymtab ( struct _DebugInfo* di ) + sec1 = di->symtab[i].sec_names; + ist1 = di->symtab[i].isText; + isf1 = di->symtab[i].isIFunc; ++ isg1 = di->symtab[i].isGlobal; + + sta2 = di->symtab[i+1].avmas.main; + end2 = sta2 + di->symtab[i+1].size - 1; +@@ -1805,6 +1809,7 @@ static void canonicaliseSymtab ( struct _DebugInfo* di ) + sec2 = di->symtab[i+1].sec_names; + ist2 = di->symtab[i+1].isText; + isf2 = di->symtab[i+1].isIFunc; ++ isg2 = di->symtab[i+1].isGlobal; + + if (sta1 < sta2) { + end1 = sta2 - 1; +@@ -1814,7 +1819,7 @@ static void canonicaliseSymtab ( struct _DebugInfo* di ) + sta1 = end2 + 1; + SWAP(Addr,sta1,sta2); SWAP(Addr,end1,end2); SWAP(Addr,toc1,toc2); + SWAP(const HChar*,pri1,pri2); SWAP(const HChar**,sec1,sec2); +- SWAP(Bool,ist1,ist2); SWAP(Bool,isf1,isf2); ++ SWAP(Bool,ist1,ist2); SWAP(Bool,isf1,isf2); SWAP(Bool, isg1, isg2); + } else + if (end1 < end2) { + sta2 = end1 + 1; +@@ -1831,6 +1836,7 @@ static void canonicaliseSymtab ( struct _DebugInfo* di ) + di->symtab[i].sec_names = sec1; + di->symtab[i].isText = ist1; + di->symtab[i].isIFunc = isf1; ++ di->symtab[i].isGlobal = isg1; + + di->symtab[i+1].avmas.main = sta2; + di->symtab[i+1].size = end2 - sta2 + 1; +@@ -1840,6 +1846,7 @@ static void canonicaliseSymtab ( struct _DebugInfo* di ) + di->symtab[i+1].sec_names = sec2; + di->symtab[i+1].isText = ist2; + di->symtab[i+1].isIFunc = isf2; ++ di->symtab[i+1].isGlobal = isg2; + + vg_assert(sta1 <= sta2); + vg_assert(di->symtab[i].size > 0); +diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c +index 7e4df8d..3d3f70a 100644 +--- a/coregrind/m_redir.c ++++ b/coregrind/m_redir.c +@@ -233,6 +233,7 @@ typedef + HChar* from_fnpatt; /* from fnname pattern */ + Addr to_addr; /* where redirecting to */ + Bool isWrap; /* wrap or replacement? */ ++ Bool isGlobal; /* must the symbol to replace be global? */ + Int becTag; /* 0 through 9999. Behavioural equivalance class tag. + If two wrappers have the same (non-zero) tag, they + are promising that they behave identically. */ +@@ -388,7 +389,7 @@ static HChar const* advance_to_comma ( HChar const* c ) { + + void VG_(redir_notify_new_DebugInfo)( const DebugInfo* newdi ) + { +- Bool ok, isWrap; ++ Bool ok, isWrap, isGlobal; + Int i, nsyms, becTag, becPrio; + Spec* specList; + Spec* spec; +@@ -518,13 +519,14 @@ void VG_(redir_notify_new_DebugInfo)( const DebugInfo* newdi ) + for (i = 0; i < nsyms; i++) { + VG_(DebugInfo_syms_getidx)( newdi, i, &sym_avmas, + NULL, &sym_name_pri, &sym_names_sec, +- &isText, NULL ); ++ &isText, NULL, NULL ); + /* Set up to conveniently iterate over all names for this symbol. */ + const HChar* twoslots[2]; + const HChar** names_init = + alloc_symname_array(sym_name_pri, sym_names_sec, &twoslots[0]); + const HChar** names; + for (names = names_init; *names; names++) { ++ isGlobal = False; + ok = VG_(maybe_Z_demangle)( *names, + &demangled_sopatt, + &demangled_fnpatt, +@@ -579,15 +581,12 @@ void VG_(redir_notify_new_DebugInfo)( const DebugInfo* newdi ) + have a matching lib synonym, then replace the sopatt. + Otherwise, just ignore this redirection spec. */ + +- if (!VG_(clo_soname_synonyms)) +- continue; // No synonyms => skip the redir. +- + /* Search for a matching synonym=newname*/ + SizeT const sopatt_syn_len + = VG_(strlen)(demangled_sopatt+VG_SO_SYN_PREFIX_LEN); + HChar const* last = VG_(clo_soname_synonyms); + +- while (*last) { ++ while (last != NULL && *last) { + HChar const* first = last; + last = advance_to_equal(first); + +@@ -611,6 +610,17 @@ void VG_(redir_notify_new_DebugInfo)( const DebugInfo* newdi ) + last++; + } + ++ // If the user didn't set it then somalloc is special. We ++ // want to match public/global symbols that match the ++ // fnpatt everywhere. ++ if (replaced_sopatt == NULL ++ && VG_(strcmp) ( demangled_sopatt, SO_SYN_MALLOC_NAME ) == 0) ++ { ++ replaced_sopatt = VG_(strdup)("m_redir.rnnD.1", "*"); ++ demangled_sopatt = replaced_sopatt; ++ isGlobal = True; ++ } ++ + // If we have not replaced the sopatt, then skip the redir. + if (replaced_sopatt == NULL) + continue; +@@ -621,6 +631,7 @@ void VG_(redir_notify_new_DebugInfo)( const DebugInfo* newdi ) + spec->from_fnpatt = dinfo_strdup("redir.rnnD.3", demangled_fnpatt); + spec->to_addr = sym_avmas.main; + spec->isWrap = isWrap; ++ spec->isGlobal = isGlobal; + spec->becTag = becTag; + spec->becPrio = becPrio; + /* check we're not adding manifestly stupid destinations */ +@@ -653,7 +664,7 @@ void VG_(redir_notify_new_DebugInfo)( const DebugInfo* newdi ) + for (i = 0; i < nsyms; i++) { + VG_(DebugInfo_syms_getidx)( newdi, i, &sym_avmas, + NULL, &sym_name_pri, &sym_names_sec, +- &isText, NULL ); ++ &isText, NULL, NULL ); + const HChar* twoslots[2]; + const HChar** names_init = + alloc_symname_array(sym_name_pri, sym_names_sec, &twoslots[0]); +@@ -785,7 +796,7 @@ void generate_and_add_actives ( + ) + { + Spec* sp; +- Bool anyMark, isText, isIFunc; ++ Bool anyMark, isText, isIFunc, isGlobal; + Active act; + Int nsyms, i; + SymAVMAs sym_avmas; +@@ -813,7 +824,7 @@ void generate_and_add_actives ( + for (i = 0; i < nsyms; i++) { + VG_(DebugInfo_syms_getidx)( di, i, &sym_avmas, + NULL, &sym_name_pri, &sym_names_sec, +- &isText, &isIFunc ); ++ &isText, &isIFunc, &isGlobal ); + const HChar* twoslots[2]; + const HChar** names_init = + alloc_symname_array(sym_name_pri, sym_names_sec, &twoslots[0]); +@@ -827,7 +838,8 @@ void generate_and_add_actives ( + for (sp = specs; sp; sp = sp->next) { + if (!sp->mark) + continue; /* soname doesn't match */ +- if (VG_(string_match)( sp->from_fnpatt, *names )) { ++ if (VG_(string_match)( sp->from_fnpatt, *names ) ++ && (sp->isGlobal == False || isGlobal == True)) { + /* got a new binding. Add to collection. */ + act.from_addr = sym_avmas.main; + act.to_addr = sp->to_addr; +@@ -1220,6 +1232,7 @@ static void add_hardwired_spec (const HChar* sopatt, const HChar* fnpatt, + spec->from_fnpatt = CONST_CAST(HChar *,fnpatt); + spec->to_addr = to_addr; + spec->isWrap = False; ++ spec->isGlobal = False; + spec->mandatory = mandatory; + /* VARIABLE PARTS */ + spec->mark = False; /* not significant */ +@@ -1719,7 +1732,7 @@ static void handle_require_text_symbols ( const DebugInfo* di ) + const HChar** sym_names_sec = NULL; + VG_(DebugInfo_syms_getidx)( di, j, NULL, + NULL, &sym_name_pri, &sym_names_sec, +- &isText, NULL ); ++ &isText, NULL, NULL ); + const HChar* twoslots[2]; + const HChar** names_init = + alloc_symname_array(sym_name_pri, sym_names_sec, &twoslots[0]); +@@ -1773,10 +1786,11 @@ static void handle_require_text_symbols ( const DebugInfo* di ) + static void show_spec ( const HChar* left, const Spec* spec ) + { + VG_(message)( Vg_DebugMsg, +- "%s%-25s %-30s %s-> (%04d.%d) 0x%08lx\n", ++ "%s%-25s %-30s %s%s-> (%04d.%d) 0x%08lx\n", + left, + spec->from_sopatt, spec->from_fnpatt, + spec->isWrap ? "W" : "R", ++ spec->isGlobal ? "G" : "L", + spec->becTag, spec->becPrio, + spec->to_addr ); + } +diff --git a/coregrind/m_replacemalloc/vg_replace_malloc.c b/coregrind/m_replacemalloc/vg_replace_malloc.c +index ccac130..3c79c8a 100644 +--- a/coregrind/m_replacemalloc/vg_replace_malloc.c ++++ b/coregrind/m_replacemalloc/vg_replace_malloc.c +@@ -291,7 +291,6 @@ static void init(void); + // For some lines, we will also define a replacement function + // whose only purpose is to be a soname synonym place holder + // that can be replaced using --soname-synonyms. +-#define SO_SYN_MALLOC VG_SO_SYN(somalloc) + + // malloc + #if defined(VGO_linux) +diff --git a/coregrind/pub_core_debuginfo.h b/coregrind/pub_core_debuginfo.h +index b698f2c..8f26f25 100644 +--- a/coregrind/pub_core_debuginfo.h ++++ b/coregrind/pub_core_debuginfo.h +@@ -216,7 +216,8 @@ void VG_(DebugInfo_syms_getidx) ( const DebugInfo *di, + /*OUT*/const HChar** pri_name, + /*OUT*/const HChar*** sec_names, + /*OUT*/Bool* isText, +- /*OUT*/Bool* isIFunc ); ++ /*OUT*/Bool* isIFunc, ++ /*OUT*/Bool* isGlobal ); + /* ppc64-linux only: find the TOC pointer (R2 value) that should be in + force at the entry point address of the function containing + guest_code_addr. Returns 0 if not known. */ +diff --git a/docs/xml/manual-core.xml b/docs/xml/manual-core.xml +index edda8a1..c80aab0 100644 +--- a/docs/xml/manual-core.xml ++++ b/docs/xml/manual-core.xml +@@ -2315,18 +2315,26 @@ need to use them. + +
+ +- When a shared library is loaded, Valgrind checks for +- functions in the library that must be replaced or wrapped. +- For example, Memcheck replaces all malloc related +- functions (malloc, free, calloc, ...) with its own versions. +- Such replacements are done by default only in shared libraries whose +- soname matches a predefined soname pattern (e.g. +- libc.so* on linux). +- By default, no replacement is done for a statically linked +- library or for alternative libraries such as tcmalloc. ++ When a shared library is loaded, Valgrind checks for ++ functions in the library that must be replaced or wrapped. For ++ example, Memcheck replaces some string and memory functions ++ (strchr, strlen, strcpy, memchr, memcpy, memmove, etc.) with its ++ own versions. Such replacements are normally done only in shared ++ libraries whose soname matches a predefined soname pattern (e.g. ++ libc.so* on linux). By default, no ++ replacement is done for a statically linked library or for ++ alternative libraries, except for the allocation functions ++ (malloc, free, calloc, memalign, realloc, operator new, operator ++ delete, etc.) Such allocation functions are intercepted by ++ default in any shared library or in the executable if they are ++ exported as global symbols. This means that if a replacement ++ allocation library such as tcmalloc is found, its functions are ++ also intercepted by default. ++ + In some cases, the replacements allow + to specify one additional +- synonym pattern, giving flexibility in the replacement. ++ synonym pattern, giving flexibility in the replacement. Or to ++ prevent interception of all public allocation symbols. + + Currently, this flexibility is only allowed for the + malloc related functions, using the +@@ -2339,27 +2347,31 @@ need to use them. + + + Alternate malloc library: to replace the malloc +- related functions in an alternate library with +- soname mymalloclib.so, give the ++ related functions in a specific alternate library with ++ soname mymalloclib.so (and not in any ++ others), give the + option . + A pattern can be used to match multiple libraries sonames. + For + example, +- will match the soname of all variants of the tcmalloc library +- (native, debug, profiled, ... tcmalloc variants). ++ will match the soname of all variants of the tcmalloc ++ library (native, debug, profiled, ... tcmalloc ++ variants). + Note: the soname of a elf shared library can be + retrieved using the readelf utility. + + + + +- Replacements in a statically linked library are done by +- using the NONE pattern. For example, if +- you link with libtcmalloc.a, memcheck +- will properly work when you give the +- option . Note +- that a NONE pattern will match the main executable and any +- shared library having no soname. ++ Replacements in a statically linked library are done ++ by using the NONE pattern. For example, ++ if you link with libtcmalloc.a, and only ++ want to intercept the malloc related functions in the ++ executable (and standard libraries) themselves, but not any ++ other shared libraries, you can give the ++ option . ++ Note that a NONE pattern will match the main executable and ++ any shared library having no soname. + + + +@@ -2369,6 +2381,17 @@ need to use them. + + + ++ ++ To only intercept allocation symbols in the default ++ system libraries, but not in any other shared library or the ++ executable defining public malloc or operator new related ++ functions use a non-existing library name ++ like ++ (where nouserintercepts can be any ++ non-existing library name). ++ ++ ++ + + +
+diff --git a/include/pub_tool_redir.h b/include/pub_tool_redir.h +index bac00d7..21d186b 100644 +--- a/include/pub_tool_redir.h ++++ b/include/pub_tool_redir.h +@@ -345,6 +345,12 @@ + #define VG_SO_SYN_PREFIX "VgSoSyn" + #define VG_SO_SYN_PREFIX_LEN 7 + ++// Special soname synonym place holder for the malloc symbols that can ++// be replaced using --soname-synonyms. Otherwise will match all ++// public symbols in any shared library/executable. ++#define SO_SYN_MALLOC VG_SO_SYN(somalloc) ++#define SO_SYN_MALLOC_NAME "VgSoSynsomalloc" ++ + #endif // __PUB_TOOL_REDIR_H + + /*--------------------------------------------------------------------*/ +diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am +index 68d9ca1..0f34127 100644 +--- a/memcheck/tests/Makefile.am ++++ b/memcheck/tests/Makefile.am +@@ -291,6 +291,9 @@ EXTRA_DIST = \ + wrap7.vgtest wrap7.stdout.exp wrap7.stderr.exp \ + wrap8.vgtest wrap8.stdout.exp wrap8.stderr.exp \ + wrap8.stdout.exp-ppc64 wrap8.stderr.exp-ppc64 \ ++ wrapmalloc.vgtest wrapmalloc.stdout.exp wrapmalloc.stderr.exp \ ++ wrapmallocstatic.vgtest wrapmallocstatic.stdout.exp \ ++ wrapmallocstatic.stderr.exp \ + writev1.stderr.exp writev1.stderr.exp-solaris writev1.vgtest \ + xml1.stderr.exp xml1.stdout.exp xml1.vgtest xml1.stderr.exp-s390x-mvc \ + threadname.vgtest threadname.stderr.exp \ +@@ -375,6 +378,7 @@ check_PROGRAMS = \ + wcs \ + xml1 \ + wrap1 wrap2 wrap3 wrap4 wrap5 wrap6 wrap7 wrap7so.so wrap8 \ ++ wrapmalloc wrapmallocso.so wrapmallocstatic \ + writev1 + + if !SOLARIS_SUN_STUDIO_AS +@@ -570,4 +574,26 @@ else + -Wl,-soname -Wl,wrap7so.so + endif + ++# Build shared object for wrapmalloc ++wrapmalloc_SOURCES = wrapmalloc.c ++wrapmalloc_DEPENDENCIES = wrapmallocso.so ++if VGCONF_OS_IS_DARWIN ++ wrapmalloc_LDADD = `pwd`/wrapmallocso.so ++ wrapmalloc_LDFLAGS = $(AM_FLAG_M3264_PRI) ++else ++ wrapmalloc_LDADD = wrapmallocso.so ++ wrapmalloc_LDFLAGS = $(AM_FLAG_M3264_PRI) \ ++ -Wl,-rpath,$(top_builddir)/memcheck/tests ++endif ++ ++wrapmallocso_so_SOURCES = wrapmallocso.c ++wrapmallocso_so_CFLAGS = $(AM_CFLAGS) -fpic ++if VGCONF_OS_IS_DARWIN ++ wrapmallocso_so_LDFLAGS = -fpic $(AM_FLAG_M3264_PRI) -dynamic \ ++ -dynamiclib -all_load ++else ++ wrapmallocso_so_LDFLAGS = -fpic $(AM_FLAG_M3264_PRI) -shared \ ++ -Wl,-soname -Wl,wrapmallocso.so ++endif ++ + xml1_CFLAGS = $(AM_CFLAGS) -D_GNU_SOURCE +diff --git a/memcheck/tests/new_override.vgtest b/memcheck/tests/new_override.vgtest +index 50e6240..435e330 100644 +--- a/memcheck/tests/new_override.vgtest ++++ b/memcheck/tests/new_override.vgtest +@@ -1,2 +1,6 @@ + prog: new_override ++# Don't override the user defined somalloc functions in this test. ++# The test depends on some side effects and initializing memory done by ++# the user overidden operator new. ++vgopts: --soname-synonyms=somalloc=nouseroverride + stderr_filter: filter_allocs +diff --git a/memcheck/tests/wrapmalloc.c b/memcheck/tests/wrapmalloc.c +new file mode 100644 +index 0000000..2307e77 +--- /dev/null ++++ b/memcheck/tests/wrapmalloc.c +@@ -0,0 +1,14 @@ ++#include ++#include ++ ++/* Test that a program that has malloc/free interposed in a shared ++ library is also intercepted. */ ++ ++int main ( void ) ++{ ++ printf ("start\n"); ++ void *p = malloc (1024); ++ free (p); ++ printf ("done\n"); ++ return 0; ++} +diff --git a/memcheck/tests/wrapmalloc.stderr.exp b/memcheck/tests/wrapmalloc.stderr.exp +new file mode 100644 +index 0000000..d937776 +--- /dev/null ++++ b/memcheck/tests/wrapmalloc.stderr.exp +@@ -0,0 +1,10 @@ ++ ++ ++HEAP SUMMARY: ++ in use at exit: 0 bytes in 0 blocks ++ total heap usage: 1 allocs, 1 frees, 1,024 bytes allocated ++ ++For a detailed leak analysis, rerun with: --leak-check=full ++ ++For counts of detected and suppressed errors, rerun with: -v ++ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) +diff --git a/memcheck/tests/wrapmalloc.stdout.exp b/memcheck/tests/wrapmalloc.stdout.exp +new file mode 100644 +index 0000000..60b5fd2 +--- /dev/null ++++ b/memcheck/tests/wrapmalloc.stdout.exp +@@ -0,0 +1,2 @@ ++start ++done +diff --git a/memcheck/tests/wrapmalloc.vgtest b/memcheck/tests/wrapmalloc.vgtest +new file mode 100644 +index 0000000..a6dff4e +--- /dev/null ++++ b/memcheck/tests/wrapmalloc.vgtest +@@ -0,0 +1,2 @@ ++prog: wrapmalloc ++ +diff --git a/memcheck/tests/wrapmallocso.c b/memcheck/tests/wrapmallocso.c +new file mode 100644 +index 0000000..985ce56 +--- /dev/null ++++ b/memcheck/tests/wrapmallocso.c +@@ -0,0 +1,17 @@ ++#include ++#include ++ ++/* Fake malloc/free functions that just print something. When run ++ under memcheck these functions will be intercepted and not print ++ anything. */ ++ ++void *malloc ( size_t size ) ++{ ++ printf ("malloc\n"); ++ return NULL; ++} ++ ++void free (void *ptr) ++{ ++ printf ("free\n"); ++} +diff --git a/memcheck/tests/wrapmallocstatic.c b/memcheck/tests/wrapmallocstatic.c +new file mode 100644 +index 0000000..be6573b +--- /dev/null ++++ b/memcheck/tests/wrapmallocstatic.c +@@ -0,0 +1,29 @@ ++#include ++#include ++ ++/* Test that a program that has malloc/free interposed in the ++ executable is also intercepted. */ ++ ++int main ( void ) ++{ ++ printf ("start\n"); ++ void *p = malloc (1024); ++ free (p); ++ printf ("done\n"); ++ return 0; ++} ++ ++/* Fake malloc/free functions that just print something. When run ++ under memcheck these functions will be intercepted and not print ++ anything. */ ++ ++void *malloc ( size_t size ) ++{ ++ printf ("malloc\n"); ++ return NULL; ++} ++ ++void free (void *ptr) ++{ ++ printf ("free\n"); ++} +diff --git a/memcheck/tests/wrapmallocstatic.stderr.exp b/memcheck/tests/wrapmallocstatic.stderr.exp +new file mode 100644 +index 0000000..d937776 +--- /dev/null ++++ b/memcheck/tests/wrapmallocstatic.stderr.exp +@@ -0,0 +1,10 @@ ++ ++ ++HEAP SUMMARY: ++ in use at exit: 0 bytes in 0 blocks ++ total heap usage: 1 allocs, 1 frees, 1,024 bytes allocated ++ ++For a detailed leak analysis, rerun with: --leak-check=full ++ ++For counts of detected and suppressed errors, rerun with: -v ++ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) +diff --git a/memcheck/tests/wrapmallocstatic.stdout.exp b/memcheck/tests/wrapmallocstatic.stdout.exp +new file mode 100644 +index 0000000..60b5fd2 +--- /dev/null ++++ b/memcheck/tests/wrapmallocstatic.stdout.exp +@@ -0,0 +1,2 @@ ++start ++done +diff --git a/memcheck/tests/wrapmallocstatic.vgtest b/memcheck/tests/wrapmallocstatic.vgtest +new file mode 100644 +index 0000000..7b3c068 +--- /dev/null ++++ b/memcheck/tests/wrapmallocstatic.vgtest +@@ -0,0 +1,2 @@ ++prog: wrapmallocstatic ++ +diff -ur valgrind-3.11.0.orig/memcheck/tests/Makefile.in valgrind-3.11.0/memcheck/tests/Makefile.in +--- valgrind-3.11.0.orig/memcheck/tests/Makefile.in 2015-11-15 18:08:05.457930383 +0100 ++++ valgrind-3.11.0/memcheck/tests/Makefile.in 2015-11-15 18:14:10.828008973 +0100 +@@ -185,7 +185,8 @@ + vcpu_fnfns$(EXEEXT) wcs$(EXEEXT) xml1$(EXEEXT) wrap1$(EXEEXT) \ + wrap2$(EXEEXT) wrap3$(EXEEXT) wrap4$(EXEEXT) wrap5$(EXEEXT) \ + wrap6$(EXEEXT) wrap7$(EXEEXT) wrap7so.so$(EXEEXT) \ +- wrap8$(EXEEXT) writev1$(EXEEXT) $(am__EXEEXT_1) \ ++ wrap8$(EXEEXT) wrapmalloc$(EXEEXT) wrapmallocso.so$(EXEEXT) \ ++ wrapmallocstatic$(EXEEXT) writev1$(EXEEXT) $(am__EXEEXT_1) \ + $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \ + $(am__EXEEXT_5) + +@@ -736,6 +737,18 @@ + wrap8_SOURCES = wrap8.c + wrap8_OBJECTS = wrap8.$(OBJEXT) + wrap8_LDADD = $(LDADD) ++am_wrapmalloc_OBJECTS = wrapmalloc.$(OBJEXT) ++wrapmalloc_OBJECTS = $(am_wrapmalloc_OBJECTS) ++wrapmalloc_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(wrapmalloc_LDFLAGS) \ ++ $(LDFLAGS) -o $@ ++am_wrapmallocso_so_OBJECTS = wrapmallocso_so-wrapmallocso.$(OBJEXT) ++wrapmallocso_so_OBJECTS = $(am_wrapmallocso_so_OBJECTS) ++wrapmallocso_so_LDADD = $(LDADD) ++wrapmallocso_so_LINK = $(CCLD) $(wrapmallocso_so_CFLAGS) $(CFLAGS) \ ++ $(wrapmallocso_so_LDFLAGS) $(LDFLAGS) -o $@ ++wrapmallocstatic_SOURCES = wrapmallocstatic.c ++wrapmallocstatic_OBJECTS = wrapmallocstatic.$(OBJEXT) ++wrapmallocstatic_LDADD = $(LDADD) + writev1_SOURCES = writev1.c + writev1_OBJECTS = writev1.$(OBJEXT) + writev1_LDADD = $(LDADD) +@@ -826,7 +839,8 @@ + $(varinfo5_SOURCES) $(varinfo5so_so_SOURCES) varinfo6.c \ + varinforestrict.c vcpu_fbench.c vcpu_fnfns.c wcs.c wrap1.c \ + wrap2.c wrap3.c wrap4.c wrap5.c wrap6.c $(wrap7_SOURCES) \ +- $(wrap7so_so_SOURCES) wrap8.c writev1.c xml1.c ++ $(wrap7so_so_SOURCES) wrap8.c $(wrapmalloc_SOURCES) \ ++ $(wrapmallocso_so_SOURCES) wrapmallocstatic.c writev1.c xml1.c + DIST_SOURCES = accounting.c addressable.c atomic_incs.c badaddrvalue.c \ + badfree.c badjump.c badjump2.c badloop.c badpoll.c badrw.c \ + big_blocks_freed_list.c brk2.c buflen_check.c bug155125.c \ +@@ -863,7 +877,8 @@ + $(varinfo5_SOURCES) $(varinfo5so_so_SOURCES) varinfo6.c \ + varinforestrict.c vcpu_fbench.c vcpu_fnfns.c wcs.c wrap1.c \ + wrap2.c wrap3.c wrap4.c wrap5.c wrap6.c $(wrap7_SOURCES) \ +- $(wrap7so_so_SOURCES) wrap8.c writev1.c xml1.c ++ $(wrap7so_so_SOURCES) wrap8.c $(wrapmalloc_SOURCES) \ ++ $(wrapmallocso_so_SOURCES) wrapmallocstatic.c writev1.c xml1.c + RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ +@@ -1544,6 +1559,9 @@ + wrap7.vgtest wrap7.stdout.exp wrap7.stderr.exp \ + wrap8.vgtest wrap8.stdout.exp wrap8.stderr.exp \ + wrap8.stdout.exp-ppc64 wrap8.stderr.exp-ppc64 \ ++ wrapmalloc.vgtest wrapmalloc.stdout.exp wrapmalloc.stderr.exp \ ++ wrapmallocstatic.vgtest wrapmallocstatic.stdout.exp \ ++ wrapmallocstatic.stderr.exp \ + writev1.stderr.exp writev1.stderr.exp-solaris writev1.vgtest \ + xml1.stderr.exp xml1.stdout.exp xml1.vgtest xml1.stderr.exp-s390x-mvc \ + threadname.vgtest threadname.stderr.exp \ +@@ -1662,6 +1680,24 @@ + @VGCONF_OS_IS_DARWIN_TRUE@wrap7so_so_LDFLAGS = -fpic $(AM_FLAG_M3264_PRI) -dynamic \ + @VGCONF_OS_IS_DARWIN_TRUE@ -dynamiclib -all_load + ++ ++# Build shared object for wrapmalloc ++wrapmalloc_SOURCES = wrapmalloc.c ++wrapmalloc_DEPENDENCIES = wrapmallocso.so ++@VGCONF_OS_IS_DARWIN_FALSE@wrapmalloc_LDADD = wrapmallocso.so ++@VGCONF_OS_IS_DARWIN_TRUE@wrapmalloc_LDADD = `pwd`/wrapmallocso.so ++@VGCONF_OS_IS_DARWIN_FALSE@wrapmalloc_LDFLAGS = $(AM_FLAG_M3264_PRI) \ ++@VGCONF_OS_IS_DARWIN_FALSE@ -Wl,-rpath,$(top_builddir)/memcheck/tests ++ ++@VGCONF_OS_IS_DARWIN_TRUE@wrapmalloc_LDFLAGS = $(AM_FLAG_M3264_PRI) ++wrapmallocso_so_SOURCES = wrapmallocso.c ++wrapmallocso_so_CFLAGS = $(AM_CFLAGS) -fpic ++@VGCONF_OS_IS_DARWIN_FALSE@wrapmallocso_so_LDFLAGS = -fpic $(AM_FLAG_M3264_PRI) -shared \ ++@VGCONF_OS_IS_DARWIN_FALSE@ -Wl,-soname -Wl,wrapmallocso.so ++ ++@VGCONF_OS_IS_DARWIN_TRUE@wrapmallocso_so_LDFLAGS = -fpic $(AM_FLAG_M3264_PRI) -dynamic \ ++@VGCONF_OS_IS_DARWIN_TRUE@ -dynamiclib -all_load ++ + xml1_CFLAGS = $(AM_CFLAGS) -D_GNU_SOURCE + all: all-recursive + +@@ -2286,6 +2322,18 @@ + @rm -f wrap8$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(wrap8_OBJECTS) $(wrap8_LDADD) $(LIBS) + ++wrapmalloc$(EXEEXT): $(wrapmalloc_OBJECTS) $(wrapmalloc_DEPENDENCIES) $(EXTRA_wrapmalloc_DEPENDENCIES) ++ @rm -f wrapmalloc$(EXEEXT) ++ $(AM_V_CCLD)$(wrapmalloc_LINK) $(wrapmalloc_OBJECTS) $(wrapmalloc_LDADD) $(LIBS) ++ ++wrapmallocso.so$(EXEEXT): $(wrapmallocso_so_OBJECTS) $(wrapmallocso_so_DEPENDENCIES) $(EXTRA_wrapmallocso_so_DEPENDENCIES) ++ @rm -f wrapmallocso.so$(EXEEXT) ++ $(AM_V_CCLD)$(wrapmallocso_so_LINK) $(wrapmallocso_so_OBJECTS) $(wrapmallocso_so_LDADD) $(LIBS) ++ ++wrapmallocstatic$(EXEEXT): $(wrapmallocstatic_OBJECTS) $(wrapmallocstatic_DEPENDENCIES) $(EXTRA_wrapmallocstatic_DEPENDENCIES) ++ @rm -f wrapmallocstatic$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(wrapmallocstatic_OBJECTS) $(wrapmallocstatic_LDADD) $(LIBS) ++ + writev1$(EXEEXT): $(writev1_OBJECTS) $(writev1_DEPENDENCIES) $(EXTRA_writev1_DEPENDENCIES) + @rm -f writev1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(writev1_OBJECTS) $(writev1_LDADD) $(LIBS) +@@ -2446,6 +2494,9 @@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrap7.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrap7so_so-wrap7so.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrap8.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrapmalloc.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrapmallocso_so-wrapmallocso.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrapmallocstatic.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writev1.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml1-xml1.Po@am__quote@ + +@@ -3011,6 +3062,20 @@ + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wrap7so_so_CFLAGS) $(CFLAGS) -c -o wrap7so_so-wrap7so.obj `if test -f 'wrap7so.c'; then $(CYGPATH_W) 'wrap7so.c'; else $(CYGPATH_W) '$(srcdir)/wrap7so.c'; fi` + ++wrapmallocso_so-wrapmallocso.o: wrapmallocso.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wrapmallocso_so_CFLAGS) $(CFLAGS) -MT wrapmallocso_so-wrapmallocso.o -MD -MP -MF $(DEPDIR)/wrapmallocso_so-wrapmallocso.Tpo -c -o wrapmallocso_so-wrapmallocso.o `test -f 'wrapmallocso.c' || echo '$(srcdir)/'`wrapmallocso.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wrapmallocso_so-wrapmallocso.Tpo $(DEPDIR)/wrapmallocso_so-wrapmallocso.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wrapmallocso.c' object='wrapmallocso_so-wrapmallocso.o' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wrapmallocso_so_CFLAGS) $(CFLAGS) -c -o wrapmallocso_so-wrapmallocso.o `test -f 'wrapmallocso.c' || echo '$(srcdir)/'`wrapmallocso.c ++ ++wrapmallocso_so-wrapmallocso.obj: wrapmallocso.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wrapmallocso_so_CFLAGS) $(CFLAGS) -MT wrapmallocso_so-wrapmallocso.obj -MD -MP -MF $(DEPDIR)/wrapmallocso_so-wrapmallocso.Tpo -c -o wrapmallocso_so-wrapmallocso.obj `if test -f 'wrapmallocso.c'; then $(CYGPATH_W) 'wrapmallocso.c'; else $(CYGPATH_W) '$(srcdir)/wrapmallocso.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wrapmallocso_so-wrapmallocso.Tpo $(DEPDIR)/wrapmallocso_so-wrapmallocso.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wrapmallocso.c' object='wrapmallocso_so-wrapmallocso.obj' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wrapmallocso_so_CFLAGS) $(CFLAGS) -c -o wrapmallocso_so-wrapmallocso.obj `if test -f 'wrapmallocso.c'; then $(CYGPATH_W) 'wrapmallocso.c'; else $(CYGPATH_W) '$(srcdir)/wrapmallocso.c'; fi` ++ + xml1-xml1.o: xml1.c + @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xml1_CFLAGS) $(CFLAGS) -MT xml1-xml1.o -MD -MP -MF $(DEPDIR)/xml1-xml1.Tpo -c -o xml1-xml1.o `test -f 'xml1.c' || echo '$(srcdir)/'`xml1.c + @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xml1-xml1.Tpo $(DEPDIR)/xml1-xml1.Po +commit d35c2c3197a0ae8398228d19578e1dfcb8401c5f +Author: iraisr +Date: Wed Nov 18 04:13:12 2015 +0000 + + Expected stderr of test cases wrapmalloc and wrapmallocstatic are overconstrained. + Fixes BZ#355455. + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15727 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/memcheck/tests/wrapmalloc.stderr.exp b/memcheck/tests/wrapmalloc.stderr.exp +index d937776..e69de29 100644 +--- a/memcheck/tests/wrapmalloc.stderr.exp ++++ b/memcheck/tests/wrapmalloc.stderr.exp +@@ -1,10 +0,0 @@ +- +- +-HEAP SUMMARY: +- in use at exit: 0 bytes in 0 blocks +- total heap usage: 1 allocs, 1 frees, 1,024 bytes allocated +- +-For a detailed leak analysis, rerun with: --leak-check=full +- +-For counts of detected and suppressed errors, rerun with: -v +-ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) +diff --git a/memcheck/tests/wrapmalloc.vgtest b/memcheck/tests/wrapmalloc.vgtest +index a6dff4e..c22f241 100644 +--- a/memcheck/tests/wrapmalloc.vgtest ++++ b/memcheck/tests/wrapmalloc.vgtest +@@ -1,2 +1,2 @@ + prog: wrapmalloc +- ++vgopts: -q +diff --git a/memcheck/tests/wrapmallocstatic.stderr.exp b/memcheck/tests/wrapmallocstatic.stderr.exp +index d937776..e69de29 100644 +--- a/memcheck/tests/wrapmallocstatic.stderr.exp ++++ b/memcheck/tests/wrapmallocstatic.stderr.exp +@@ -1,10 +0,0 @@ +- +- +-HEAP SUMMARY: +- in use at exit: 0 bytes in 0 blocks +- total heap usage: 1 allocs, 1 frees, 1,024 bytes allocated +- +-For a detailed leak analysis, rerun with: --leak-check=full +- +-For counts of detected and suppressed errors, rerun with: -v +-ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) +diff --git a/memcheck/tests/wrapmallocstatic.vgtest b/memcheck/tests/wrapmallocstatic.vgtest +index 7b3c068..f040756 100644 +--- a/memcheck/tests/wrapmallocstatic.vgtest ++++ b/memcheck/tests/wrapmallocstatic.vgtest +@@ -1,2 +1,2 @@ + prog: wrapmallocstatic +- ++vgopts: -q + +commit 194731c49eb7d448503a5e8625dd39779c2c9f8b +Author: iraisr +Date: Wed Nov 18 20:38:37 2015 +0000 + + When searching for global public symbols (like for the somalloc + synonym symbols), exclude the dynamic (runtime) linker as it is very + special. + Fixes BZ#355454 + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15728 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c +index 3d3f70a..dcf1fb4 100644 +--- a/coregrind/m_redir.c ++++ b/coregrind/m_redir.c +@@ -809,8 +809,19 @@ void generate_and_add_actives ( + anyMark = False; + for (sp = specs; sp; sp = sp->next) { + sp->done = False; +- sp->mark = VG_(string_match)( sp->from_sopatt, +- VG_(DebugInfo_get_soname)(di) ); ++ const HChar *soname = VG_(DebugInfo_get_soname)(di); ++ ++ /* When searching for global public symbols (like for the somalloc ++ synonym symbols), exclude the dynamic (runtime) linker as it is very ++ special. See https://bugs.kde.org/show_bug.cgi?id=355454 */ ++ if ((VG_(strcmp)(sp->from_sopatt, "*") == 0) && ++ (sp->isGlobal == True) && ++ VG_(is_soname_ld_so)(soname)) { ++ sp->mark = False; ++ continue; ++ } ++ ++ sp->mark = VG_(string_match)( sp->from_sopatt, soname ); + anyMark = anyMark || sp->mark; + } + +@@ -1179,6 +1190,29 @@ Addr VG_(redir_do_lookup) ( Addr orig, Bool* isWrap ) + return r->to_addr; + } + ++/* Does the soname represent a dynamic (runtime) linker? ++ Considers various VG_U_LD* entries from pub_tool_redir.h. */ ++Bool VG_(is_soname_ld_so) (const HChar *soname) ++{ ++# if defined(VGO_linux) ++ if (VG_STREQ(soname, VG_U_LD_LINUX_SO_3)) return True; ++ if (VG_STREQ(soname, VG_U_LD_LINUX_SO_2)) return True; ++ if (VG_STREQ(soname, VG_U_LD_LINUX_X86_64_SO_2)) return True; ++ if (VG_STREQ(soname, VG_U_LD64_SO_1)) return True; ++ if (VG_STREQ(soname, VG_U_LD64_SO_2)) return True; ++ if (VG_STREQ(soname, VG_U_LD_SO_1)) return True; ++ if (VG_STREQ(soname, VG_U_LD_LINUX_AARCH64_SO_1)) return True; ++ if (VG_STREQ(soname, VG_U_LD_LINUX_ARMHF_SO_3)) return True; ++# elif defined(VGO_darwin) ++ if (VG_STREQ(soname, VG_U_DYLD)) return True; ++# elif defined(VGO_solaris) ++ if (VG_STREQ(soname, VG_U_LD_SO_1)) return True; ++# else ++# error "Unsupported OS" ++# endif ++ ++ return False; ++} + + /*------------------------------------------------------------*/ + /*--- INITIALISATION ---*/ +diff --git a/docs/xml/manual-core.xml b/docs/xml/manual-core.xml +index c80aab0..758e2f4 100644 +--- a/docs/xml/manual-core.xml ++++ b/docs/xml/manual-core.xml +@@ -2322,7 +2322,7 @@ need to use them. + own versions. Such replacements are normally done only in shared + libraries whose soname matches a predefined soname pattern (e.g. + libc.so* on linux). By default, no +- replacement is done for a statically linked library or for ++ replacement is done for a statically linked binary or for + alternative libraries, except for the allocation functions + (malloc, free, calloc, memalign, realloc, operator new, operator + delete, etc.) Such allocation functions are intercepted by +@@ -2392,6 +2392,13 @@ need to use them. + + + ++ ++ Shared library of the dynamic (runtime) linker is excluded from ++ searching for global public symbols, such as those for the malloc ++ related functions (identified by somalloc synonym). ++ ++ ++ + + + +diff --git a/helgrind/hg_main.c b/helgrind/hg_main.c +index ae6eec0..9aed05a 100644 +--- a/helgrind/hg_main.c ++++ b/helgrind/hg_main.c +@@ -4589,7 +4589,6 @@ static Bool is_in_dynamic_linker_shared_object( Addr ga ) + { + DebugInfo* dinfo; + const HChar* soname; +- if (0) return False; + + dinfo = VG_(find_DebugInfo)( ga ); + if (!dinfo) return False; +@@ -4598,23 +4597,7 @@ static Bool is_in_dynamic_linker_shared_object( Addr ga ) + tl_assert(soname); + if (0) VG_(printf)("%s\n", soname); + +-# if defined(VGO_linux) +- if (VG_STREQ(soname, VG_U_LD_LINUX_SO_3)) return True; +- if (VG_STREQ(soname, VG_U_LD_LINUX_SO_2)) return True; +- if (VG_STREQ(soname, VG_U_LD_LINUX_X86_64_SO_2)) return True; +- if (VG_STREQ(soname, VG_U_LD64_SO_1)) return True; +- if (VG_STREQ(soname, VG_U_LD64_SO_2)) return True; +- if (VG_STREQ(soname, VG_U_LD_SO_1)) return True; +- if (VG_STREQ(soname, VG_U_LD_LINUX_AARCH64_SO_1)) return True; +- if (VG_STREQ(soname, VG_U_LD_LINUX_ARMHF_SO_3)) return True; +-# elif defined(VGO_darwin) +- if (VG_STREQ(soname, VG_U_DYLD)) return True; +-# elif defined(VGO_solaris) +- if (VG_STREQ(soname, VG_U_LD_SO_1)) return True; +-# else +-# error "Unsupported OS" +-# endif +- return False; ++ return VG_(is_soname_ld_so)(soname); + } + + static +diff --git a/include/pub_tool_redir.h b/include/pub_tool_redir.h +index 21d186b..aa879d6 100644 +--- a/include/pub_tool_redir.h ++++ b/include/pub_tool_redir.h +@@ -351,6 +351,8 @@ + #define SO_SYN_MALLOC VG_SO_SYN(somalloc) + #define SO_SYN_MALLOC_NAME "VgSoSynsomalloc" + ++Bool VG_(is_soname_ld_so) (const HChar *soname); ++ + #endif // __PUB_TOOL_REDIR_H + + /*--------------------------------------------------------------------*/ diff --git a/SOURCES/valgrind-3.11.0-x86_unwind.patch b/SOURCES/valgrind-3.11.0-x86_unwind.patch new file mode 100644 index 0000000..f6b62bb --- /dev/null +++ b/SOURCES/valgrind-3.11.0-x86_unwind.patch @@ -0,0 +1,167 @@ +commit f250c4d3241c156f8e65398e2af76e3e2ee1ccb5 +Author: philippe +Date: Wed Nov 18 20:56:55 2015 +0000 + + Fix incorrect (or infinite loop) unwind on RHEL7 x86 32 bits. + + On RHEL7 x86 32 bits, Valgrind unwinder cannot properly unwind + the stack just after a thread creation : the unwinder always retrieves + the same pc/sp/bp. + See below for an example. + This has as consequences that some stack traces are bigger than + needed (i.e. they always fill up the ips array). If + --merge-recursive-frames is given, then the unwinder enters in an + infinite loop (as identical frames will be merged, and the ips array + will never be filled in). + Thi patch adds an additional exit condition : after unwinding + a frame, if the previous sp is >= new sp, then unwinding stops. + Patch has been tested on debian 8/x86, RHEL7/x86. + + + + 0x0417db67 <+55>: mov 0x18(%esp),%ebx + 0x0417db6b <+59>: mov 0x28(%esp),%edi + 0x0417db6f <+63>: mov $0x78,%eax + 0x0417db74 <+68>: mov %ebx,(%ecx) + 0x0417db76 <+70>: int $0x80 + => 0x0417db78 <+72>: pop %edi + 0x0417db79 <+73>: pop %esi + 0x0417db7a <+74>: pop %ebx + 0x0417db7b <+75>: test %eax,%eax + + Valgrind stacktrace gives: + ==21261== at 0x417DB78: clone (clone.S:110) + ==21261== by 0x424702F: ??? + ==21261== by 0x424702F: ??? + ==21261== by 0x424702F: ??? + ==21261== by 0x424702F: ??? + ==21261== by 0x424702F: ??? + ==21261== by 0x424702F: ??? + ==21261== by 0x424702F: ??? + ... + (till the array of ips is full) + + while gdb stacktrace gives: + (gdb) bt + #0 clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:110 + #1 0x00000000 in ?? () + (gdb) p $pc + $2 = (void (*)()) 0x417db78 + (gdb) + + + With the fix, valgrind gives: + ==21261== at 0x417DB78: clone (clone.S:110) + ==21261== by 0x424702F: ??? + which looks more reasonable. + + + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15729 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_stacktrace.c b/coregrind/m_stacktrace.c +index 8c1e9a4..137e780 100644 +--- a/coregrind/m_stacktrace.c ++++ b/coregrind/m_stacktrace.c +@@ -350,6 +350,8 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known, + uregs.xbp <= fp_max - 1 * sizeof(UWord)/*see comment below*/ && + VG_IS_4_ALIGNED(uregs.xbp)) + { ++ Addr old_xsp; ++ + /* fp looks sane, so use it. */ + uregs.xip = (((UWord*)uregs.xbp)[1]); + // We stop if we hit a zero (the traditional end-of-stack +@@ -382,6 +384,7 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known, + } + } + ++ old_xsp = uregs.xsp; + uregs.xsp = uregs.xbp + sizeof(Addr) /*saved %ebp*/ + + sizeof(Addr) /*ra*/; + uregs.xbp = (((UWord*)uregs.xbp)[0]); +@@ -393,6 +396,12 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known, + if (debug) VG_(printf)(" cache FPUNWIND >2\n"); + if (debug) unwind_case = "FO"; + if (do_stats) stats.FO++; ++ if (old_xsp >= uregs.xsp) { ++ if (debug) ++ VG_(printf) (" FO end of stack old_xsp %p >= xsp %p\n", ++ (void*)old_xsp, (void*)uregs.xsp); ++ break; ++ } + } else { + fp_CF_verif_cache [hash] = xip_verified ^ CFUNWIND; + if (debug) VG_(printf)(" cache CFUNWIND >2\n"); +@@ -406,6 +415,12 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known, + } else { + if (debug) unwind_case = "FF"; + if (do_stats) stats.FF++; ++ if (old_xsp >= uregs.xsp) { ++ if (debug) ++ VG_(printf) (" FF end of stack old_xsp %p >= xsp %p\n", ++ (void*)old_xsp, (void*)uregs.xsp); ++ break; ++ } + } + goto unwind_done; + } else { +commit 4520d562975820aced0fda6ed503379f337da66e +Author: philippe +Date: Wed Feb 17 22:41:14 2016 +0000 + + Fix incorrect (or infinite loop) unwind on RHEL7 amd64 64 bits. + + Same kind of problems as explained and fixed in revision 15720: + In some cases, unwinding always retrieves the same pc/sp/bp. + + Fix for 64 bits is similar: stop unwinding if the previous sp is >= new sp + + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15794 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_stacktrace.c b/coregrind/m_stacktrace.c +index 137e780..ef4984c 100644 +--- a/coregrind/m_stacktrace.c ++++ b/coregrind/m_stacktrace.c +@@ -607,16 +607,25 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known, + * next function which is completely wrong. + */ + while (True) { ++ Addr old_xsp; + + if (i >= max_n_ips) + break; + ++ old_xsp = uregs.xsp; ++ + /* Try to derive a new (ip,sp,fp) triple from the current set. */ + + /* First off, see if there is any CFI info to hand which can + be used. */ + if ( VG_(use_CF_info)( &uregs, fp_min, fp_max ) ) { + if (0 == uregs.xip || 1 == uregs.xip) break; ++ if (old_xsp >= uregs.xsp) { ++ if (debug) ++ VG_(printf) (" CF end of stack old_xsp %p >= xsp %p\n", ++ (void*)old_xsp, (void*)uregs.xsp); ++ break; ++ } + if (sps) sps[i] = uregs.xsp; + if (fps) fps[i] = uregs.xbp; + ips[i++] = uregs.xip - 1; /* -1: refer to calling insn, not the RA */ +@@ -646,6 +655,12 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known, + if (0 == uregs.xip || 1 == uregs.xip) break; + uregs.xsp = uregs.xbp + sizeof(Addr) /*saved %rbp*/ + + sizeof(Addr) /*ra*/; ++ if (old_xsp >= uregs.xsp) { ++ if (debug) ++ VG_(printf) (" FF end of stack old_xsp %p >= xsp %p\n", ++ (void*)old_xsp, (void*)uregs.xsp); ++ break; ++ } + uregs.xbp = (((UWord*)uregs.xbp)[0]); + if (sps) sps[i] = uregs.xsp; + if (fps) fps[i] = uregs.xbp; diff --git a/SOURCES/valgrind-3.11.0-z13s.patch b/SOURCES/valgrind-3.11.0-z13s.patch new file mode 100644 index 0000000..7e7e1c2 --- /dev/null +++ b/SOURCES/valgrind-3.11.0-z13s.patch @@ -0,0 +1,56 @@ +commit 3b6e36f530120f5e30d8a81d26e04018a8d0784f +Author: florian +Date: Tue Feb 16 21:14:47 2016 +0000 + + s390: Add machine model z13s + + + git-svn-id: svn://svn.valgrind.org/vex/trunk@3208 8f6e269a-dfd6-0310-a8e1-e2731360e62c + +diff --git a/VEX/pub/libvex.h b/pub/libvex.h +index b2bd476..4dd23e6 100644 +--- a/VEX/pub/libvex.h ++++ b/VEX/pub/libvex.h +@@ -141,7 +141,8 @@ typedef + #define VEX_S390X_MODEL_ZEC12 10 + #define VEX_S390X_MODEL_ZBC12 11 + #define VEX_S390X_MODEL_Z13 12 +-#define VEX_S390X_MODEL_UNKNOWN 13 /* always last in list */ ++#define VEX_S390X_MODEL_Z13S 13 ++#define VEX_S390X_MODEL_UNKNOWN 14 /* always last in list */ + #define VEX_S390X_MODEL_MASK 0x3F + + #define VEX_HWCAPS_S390X_LDISP (1<<6) /* Long-displacement facility */ +commit e6d40c0b4d4e8a7007a6f2fc0c2f0aac50aba274 +Author: florian +Date: Tue Feb 16 21:15:32 2016 +0000 + + s390: Recognise machine model z13s (2965). + + + git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15789 a5019735-40e9-0310-863c-91ae7b9d1cf9 + +diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c +index cd4606b..ae8b929 100644 +--- a/coregrind/m_machine.c ++++ b/coregrind/m_machine.c +@@ -616,6 +616,7 @@ static UInt VG_(get_machine_model)(void) + { "2827", VEX_S390X_MODEL_ZEC12 }, + { "2828", VEX_S390X_MODEL_ZBC12 }, + { "2964", VEX_S390X_MODEL_Z13 }, ++ { "2965", VEX_S390X_MODEL_Z13S }, + }; + + Int model, n, fh; +diff --git a/tests/s390x_features.c b/tests/s390x_features.c +index de34a98..bc671c6 100644 +--- a/tests/s390x_features.c ++++ b/tests/s390x_features.c +@@ -89,6 +89,7 @@ model_info models[] = { + { "2827", "zEC12" }, + { "2828", "zBC12" }, + { "2964", "z13" }, ++ { "2965", "z13s" }, + }; + + diff --git a/SOURCES/valgrind-3.9.0-cachegrind-improvements.patch b/SOURCES/valgrind-3.9.0-cachegrind-improvements.patch index 3432c55..c2680b1 100644 --- a/SOURCES/valgrind-3.9.0-cachegrind-improvements.patch +++ b/SOURCES/valgrind-3.9.0-cachegrind-improvements.patch @@ -8,7 +8,7 @@ Int sets_min_1; Int line_size_bits; Int tag_shift; -- HChar desc_line[128]; +- HChar desc_line[128]; /* large enough */ UWord* tags; -} cache_t2; + HChar desc_line[128]; diff --git a/SOURCES/valgrind-3.9.0-ppc-fppo.patch b/SOURCES/valgrind-3.9.0-ppc-fppo.patch deleted file mode 100644 index cb33270..0000000 --- a/SOURCES/valgrind-3.9.0-ppc-fppo.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- valgrind-3.10.0.BETA1/configure.orig 2014-09-02 13:49:58.125269536 +0200 -+++ valgrind-3.10.0.BETA1/configure 2014-09-02 13:54:08.188701144 +0200 -@@ -8978,9 +8978,8 @@ - fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test x$ac_have_as_ppc_fpPO = xyes ; then -- --$as_echo "#define HAVE_AS_PPC_FPPO 1" >>confdefs.h -- -+ { $as_echo "$as_me:${as_lineno-$LINENO}: HAVE_AS_PPC_FPPO found, but ignoring." >&5 -+$as_echo "$as_me: HAVE_AS_PPC_FPPO found, but ignoring." >&6;} - fi - - ---- valgrind-3.10.0.BETA1/config.h.in.orig 2014-09-02 12:34:44.000000000 +0200 -+++ valgrind-3.10.0.BETA1/config.h.in 2014-09-02 13:48:03.331525994 +0200 -@@ -93,9 +93,6 @@ - /* Define to 1 if you have the header file. */ - #undef HAVE_ASM_UNISTD_H - --/* Define to 1 if as supports floating point phased out category. */ --#undef HAVE_AS_PPC_FPPO -- - /* Define to 1 if as supports mtocrf/mfocrf. */ - #undef HAVE_AS_PPC_MFTOCRF - ---- valgrind-3.10.0.BETA1/configure.ac.orig 2014-09-02 14:01:04.443754937 +0200 -+++ valgrind-3.10.0.BETA1/configure.ac 2014-09-02 14:01:16.483727639 +0200 -@@ -2022,7 +2022,7 @@ - AC_MSG_RESULT([no]) - ]) - if test x$ac_have_as_ppc_fpPO = xyes ; then -- AC_DEFINE(HAVE_AS_PPC_FPPO, 1, [Define to 1 if as supports floating point phased out category.]) -+ AC_MSG_NOTICE([HAVE_AS_PPC_FPPO found, but ignoring.]) - fi - - diff --git a/SOURCES/valgrind-3.9.0-stat_h.patch b/SOURCES/valgrind-3.9.0-stat_h.patch deleted file mode 100644 index 628dd79..0000000 --- a/SOURCES/valgrind-3.9.0-stat_h.patch +++ /dev/null @@ -1,48 +0,0 @@ ---- valgrind/include/vki/vki-amd64-linux.h.jj 2009-08-19 09:37:07.000000000 -0400 -+++ valgrind/include/vki/vki-amd64-linux.h 2010-01-20 04:41:52.662552000 -0500 -@@ -328,6 +328,9 @@ struct vki_stat { - long st_blksize; - long st_blocks; /* Number 512-byte blocks allocated. */ - -+#undef st_atime -+#undef st_mtime -+#undef st_ctime - unsigned long st_atime; - unsigned long st_atime_nsec; - unsigned long st_mtime; ---- valgrind/include/vki/vki-x86-linux.h.jj 2009-08-19 09:37:07.000000000 -0400 -+++ valgrind/include/vki/vki-x86-linux.h 2010-01-20 04:42:19.649995000 -0500 -@@ -366,6 +366,9 @@ struct vki_stat { - unsigned long st_size; - unsigned long st_blksize; - unsigned long st_blocks; -+#undef st_atime -+#undef st_mtime -+#undef st_ctime - unsigned long st_atime; - unsigned long st_atime_nsec; - unsigned long st_mtime; ---- valgrind/include/vki/vki-ppc32-linux.h.jj 2009-08-19 09:37:07.000000000 -0400 -+++ valgrind/include/vki/vki-ppc32-linux.h 2010-01-20 04:42:44.861651000 -0500 -@@ -410,6 +410,9 @@ struct vki_stat { - long st_size; - unsigned long st_blksize; - unsigned long st_blocks; -+#undef st_atime -+#undef st_mtime -+#undef st_ctime - unsigned long st_atime; - unsigned long st_atime_nsec; - unsigned long st_mtime; ---- valgrind/include/vki/vki-ppc64-linux.h.jj 2009-08-19 09:37:07.000000000 -0400 -+++ valgrind/include/vki/vki-ppc64-linux.h 2010-01-20 04:43:05.579922000 -0500 -@@ -446,6 +446,9 @@ struct vki_stat { - long st_size; - unsigned long st_blksize; - unsigned long st_blocks; -+#undef st_atime -+#undef st_mtime -+#undef st_ctime - unsigned long st_atime; - unsigned long st_atime_nsec; - unsigned long st_mtime; diff --git a/SPECS/valgrind.spec b/SPECS/valgrind.spec index 9b139cc..972a1ce 100644 --- a/SPECS/valgrind.spec +++ b/SPECS/valgrind.spec @@ -2,8 +2,8 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind -Version: 3.10.0 -Release: 16%{?dist} +Version: 3.11.0 +Release: 24%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -38,10 +38,11 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) %global build_openmpi 0 %endif -# Don't run dwz or generate minisymtab, valgrind doesn't handle compressed -# DWARF very well and it might read its own vgpreload libraries. Generating -# minisymtabs doesn't really work for the staticly linked tools. -%define _find_debuginfo_dwz_opts %{nil} +# Generating minisymtabs doesn't really work for the staticly linked +# tools. Note (below) that we don't strip the vgpreload libraries at all +# because valgrind might read and need the debuginfo in those (client) +# libraries for better error reporting and sometimes correctly unwinding. +# So those will already have their full symbol table. %undefine _include_minidebuginfo Source0: http://www.valgrind.org/downloads/valgrind-%{version}.tar.bz2 @@ -52,74 +53,124 @@ Patch1: valgrind-3.9.0-cachegrind-improvements.patch # KDE#211352 - helgrind races in helgrind's own mythread_wrapper Patch2: valgrind-3.9.0-helgrind-race-supp.patch -# undef st_atime, st_mtime and st_ctime. Unknown why this is (still?) needed. -Patch3: valgrind-3.9.0-stat_h.patch - # Make ld.so supressions slightly less specific. -Patch4: valgrind-3.9.0-ldso-supp.patch +Patch3: valgrind-3.9.0-ldso-supp.patch + +# KDE#353083 arm64 doesn't implement various xattr system calls. +Patch4: valgrind-3.11.0-arm64-xattr.patch + +# KDE#353084 arm64 doesn't support sigpending system call. +Patch5: valgrind-3.11.0-arm64-sigpending.patch + +# KDE#353370 don't advertise RDRAND in cpuid for Core-i7-4910-like avx2 +Patch6: valgrind-3.11.0-no-rdrand.patch + +# KDE#278744 cvtps2pd with redundant RexW +Patch7: valgrind-3.11.0-rexw-cvtps2pd.patch + +# KDE#353680 Crash with certain glibc versions due to non-implemented TBEGIN +Patch8: valgrind-3.11.0-s390-hwcap.patch + +# KDE#355188 valgrind should intercept all malloc related global functions +Patch9: valgrind-3.11.0-wrapmalloc.patch + +# RHBZ#1283774 - Valgrind: FATAL: aspacem assertion failed +Patch10: valgrind-3.11.0-aspacemgr.patch + +# KDE#358213 - helgrind bar_bad testcase hangs with new glibc pthread barrier +Patch11: valgrind-3.11.0-pthread_barrier.patch + +# KDE#357833 - Valgrind is broken on recent linux kernel (RLIMIT_DATA) +Patch12: valgrind-3.11.0-rlimit_data.patch + +# KDE#357887 VG_(fclose) ought to close the file, you silly. +Patch13: valgrind-3.11.0-fclose.patch + +# KDE#357871 Fix helgrind wrapper of pthread_spin_destroy +Patch14: valgrind-3.11.0-pthread_spin_destroy.patch -# Recognize and warn about usage of old (broken) ppc32 magic instr preamble. -# https://bugs.kde.org/show_bug.cgi?id=278808#c6 -Patch5: valgrind-3.10.0-old-ppc32-instr-magic.patch +# KDE#358030 Support direct socket calls on x86 32bit (new in linux 4.3) +Patch15: valgrind-3.11.0-socketcall-x86-linux.patch -# KDE#339853 arm64 times syscall unknown -# KDE#339856 arm64 unhandled getsid/setsid syscalls. -# KDE#339940 arm64 unhandled syscall: 83 (sys_fdatasync) -# KDE#340028 unhandled syscalls for arm64 (msync, pread64, setreuid, setregid) -# KDE#340236 arm64 mknodat (33), fchdir (50), chroot (51), fchownat (54) -# KDE#340630 arm64 fchmod (52) and fchown (55) syscalls not recognized. -# KDE#340922 arm64: unhandled getgroups/setgroups syscalls. -Patch6: valgrind-3.10.0-aarch64-syscalls.patch +# KDE#356044 Dwarf line info reader misinterprets is_stmt register +Patch16: valgrind-3.11.0-is_stmt.patch -# KDE#339858 arm64 recognize dmb sy. Data Memory Barrier full SYstem variant. -Patch7: valgrind-3.10.0-aarch64-dmb-sy.patch +# Fix incorrect (or infinite loop) unwind on RHEL7 x86 32 bits. (svn r15729) +# Fix incorrect (or infinite loop) unwind on RHEL7 amd64 64 bits. (svn r15794) +Patch17: valgrind-3.11.0-x86_unwind.patch -# KDE#339926 Implement frintx d_d and s_s. -Patch8: valgrind-3.10.0-aarch64-frint.patch +# KDE#358478 drd/tests/std_thread.cpp doesn't build with GCC6 +Patch18: valgrind-3.11.0-drd_std_thread.patch -# KDE#339927 Implement fcvtmu x_d. -Patch9: valgrind-3.10.0-fcvtmu.patch +# KDE#359201 futex syscall skips argument 5 if op is FUTEX_WAIT_BITSET +Patch19: valgrind-3.11.0-futex.patch -# KDE#340509 Implement FCVTAS W_S and FCVTAU W_S. -# KDE#340632 arm64: unhandled instruction fcvtas -Patch10: valgrind-3.10.0-aarch64-fcvta.patch +# KDE#359289 s390: Implement popcnt insn. +Patch20: valgrind-3.11.0-s390x-popcnt.patch -# KDE#342795 Internal glibc __GI_mempcpy call should be intercepted -Patch11: valgrind-3.10.1-mempcpy.patch +# KDE#359703 s390: wire up separate socketcalls system calls +Patch21: valgrind-3.11.0-s390-separate-socketcalls.patch -# KDE#343802 - s390x memcheck reports spurious conditional jump -Patch12: valgrind-3.10-s390-spechelper.patch +# KDE#359733 amd64 implement ld.so strchr/index override like x86 +Patch22: valgrind-3.11.0-amd64-ld-index.patch -# KDE#342038, KDE#343732, KDE#343733, KDE#344007, KDE#344307, KDE##351140 -# mbind, get_mempolicy, set_mempolicy, flock, setgid, msgget, msgctl, -# msgrcv, msgsnd, accept4, mount, umount2, setuid, setresgid -Patch13: valgrind-3.10.1-aarch64-syscalls.patch +# KDE#359871 Incorrect mask handling in ppoll +Patch23: valgrind-3.11.0-ppoll-mask.patch -# KDE#344007 ppc64 missing accept4 syscall -Patch14: valgrind-3.10.1-ppc64-accept4.patch +# KDE#359503 - Add missing syscalls for aarch64 (arm64) +Patch24: valgrind-3.11.0-arm64-more-syscalls.patch -# KDE#344279 - syscall sendmmsg on arm64 (269) and ppc32/64 (349) unhandled -# KDE#344295 - syscall recvmmsg on arm64 (243) and ppc32/64 (343) unhandled -# KDE#344318 - socketcall should wrap recvmmsg and sendmmsg -Patch15: valgrind-3.10.1-send-recv-mmsg.patch +# Workaround for KDE#345307 - still reachable memory in libstdc++ from gcc 5 +Patch25: valgrind-3.11.0-libstdc++-supp.patch -# Upstream valgrind svn r15133 -Patch16: valgrind-3.10-1-ppc64-sigpending.patch +# KDE#360519 - none/tests/arm64/memory.vgtest might fail with newer gcc +Patch26: valgrind-3.11.0-arm64-ldr-literal-test.patch -# KDE#349941 di_notify_mmap might create wrong start/size DebugInfoMapping -Patch17: valgrind-3.10.1-di_notify_mmap.patch +# KDE#360425 - arm64 unsupported instruction ldpsw +Patch27: valgrind-3.11.0-arm64-ldpsw.patch -# KDE#342841 s390x unrecognized instruction fiebra -Patch18: valgrind-3.10.1-s390x-fiebra.patch +# KDE#345307 - still reachable memory in libstdc++ from gcc 6 +# Note that workaround (patch25) is still needed for gcc 5 +Patch28: valgrind-3.11.0-cxx-freeres.patch -# KDE#344499 Fix compilation for Linux kernel >= 4. -Patch19: valgrind-3.10.1-kernel-4.0.patch +# KDE#361354 - ppc64[le]: wire up separate socketcalls system calls +Patch29: valgrind-3.11.0-ppc64-separate-socketcalls.patch -# KDE#345695 Add POWERPC support for AT_DCACHESIZE and HWCAP2 -Patch20: valgrind-3.10.1-ppc64-hwcap2.patch +# KDE#356393 - valgrind (vex) crashes because isZeroU happened +Patch30: valgrind-3.11.0-isZeroU.patch -# KDE#351873 Newer gcc doesn't allow __builtin_tabortdc[i] in ppc32 mode -Patch21: valgrind-3.10.1-ppc32-tabortdc.patch +# KDE#359472 - PPC vsubuqm instruction doesn't always give the correct result +Patch31: valgrind-3.11.0-ppc64-128bit-mod-carry.patch + +# KDE#212352 - vex amd64 unhandled opc_aux = 0x 2, first_opcode == 0xDC (FCOM) +Patch32: valgrind-3.11.0-amd64-fcom.patch + +# s390: Recognise machine model z13s (2965) +Patch33: valgrind-3.11.0-z13s.patch + +# Update gdbserver_tests filter for newer GDB version. +Patch34: valgrind-3.11.0-gdb-test-filters.patch + +# KDE#361226 s390x: risbgn (EC59) not implemented +Patch35: valgrind-3.11.0-s390x-risbgn.patch + +# KDE#359133 m_deduppoolalloc.c:258 (vgPlain_allocEltDedupPA): Assertion failed +Patch36: valgrind-3.11.0-deduppoolalloc.patch + +# KDE#360035 - POWER PC bcdadd and bcdsubtract generate non-zero shadow bits +Patch37: valgrind-3.11.0-ppc-bcd-addsub.patch + +# KDE#360008 - ppc64 vr registers not printed correctly with vgdb +Patch38: valgrind-3.11.0-ppc64-vgdb-vr-regs.patch + +# KDE#363705 arm64 missing syscall name_to_handle_at and open_by_handle_at +Patch39: valgrind-3.11.0-arm64-handle_at.patch + +# KDE#363714 ppc64 missing syscalls sync, waitid and name_to/open_by_handle_at +Patch40: valgrind-3.11.0-ppc64-syscalls.patch + +# KDE#359952 - Enable PCMPxSTRx cases 0x70 and 0x19. +Patch42: valgrind-3.11.0-pcmpxstrx-0x70-0x19.patch # RHEL7 specific patches. @@ -127,7 +178,7 @@ Patch21: valgrind-3.10.1-ppc32-tabortdc.patch # The result might differ on ppc vs ppc64 and config.h ends up as # public header under /usr/include/valgrind causing multilib problems. # The result would only be used for two test cases. -Patch7001: valgrind-3.9.0-ppc-fppo.patch +Patch7001: valgrind-3.11.0-ppc-fppo.patch %if %{build_multilib} # Ensure glibc{,-devel} is installed for both multilib arches @@ -156,6 +207,12 @@ BuildRequires: %{?scl_prefix}binutils # gdbserver_tests/filter_make_empty uses ps in test BuildRequires: procps +# Some testcases require g++ to build +BuildRequires: gcc-c++ + +# check_headers_and_includes uses Getopt::Long +BuildRequires: perl(Getopt::Long) + %{?scl:Requires:%scl_runtime} ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64 @@ -183,10 +240,6 @@ ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64 %define valarch ppc64le %define valsecarch %{nil} %endif -%ifarch ppc64le -%define valarch ppc64le -%define valsecarch %{nil} -%endif %ifarch s390x %define valarch s390x %define valsecarch %{nil} @@ -199,10 +252,6 @@ ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64 %define valarch arm64 %define valsecarch %{nil} %endif -%ifarch aarch64 -%define valarch arm64 -%define valsecarch %{nil} -%endif %description Valgrind is a tool to help you find memory-management problems in your @@ -256,6 +305,30 @@ Valgrind User Manual for details. %patch19 -p1 %patch20 -p1 %patch21 -p1 +%patch22 -p1 +%patch23 -p1 +%patch24 -p1 + +# New filter (from patch24) needs to be executable. +chmod 755 memcheck/tests/arm64-linux/filter_stderr + +%patch25 -p1 +%patch26 -p1 +%patch27 -p1 +%patch28 -p1 +%patch29 -p1 +%patch30 -p1 +%patch31 -p1 +%patch32 -p1 +%patch33 -p1 +%patch34 -p1 +%patch35 -p1 +%patch36 -p1 +%patch37 -p1 +%patch38 -p1 +%patch39 -p1 +%patch40 -p1 +%patch42 -p1 # RHEL7 specific patches %patch7001 -p1 @@ -288,7 +361,8 @@ CC="gcc -B `pwd`/shared/libgcc/" # compiled with -O2 unless explicitely requested. Same for any -mcpu flag. # Ideally we will change this to only be done for the non-primary build # and the test suite. -OPTFLAGS="`echo " %{optflags} " | sed 's/ -m\(64\|3[21]\) / /g;s/ -fexceptions / /g;s/ -fstack-protector / / g;s/ -Wp,-D_FORTIFY_SOURCE=2 / /g;s/ -O2 / /g;s/ -mcpu=\([a-z0-9]\+\) / /g;s/^ //;s/ $//'`" +%undefine _hardened_build +OPTFLAGS="`echo " %{optflags} " | sed 's/ -m\(64\|3[21]\) / /g;s/ -fexceptions / /g;s/ -fstack-protector\([-a-z]*\) / / g;s/ -Wp,-D_FORTIFY_SOURCE=2 / /g;s/ -O2 / /g;s/ -mcpu=\([a-z0-9]\+\) / /g;s/^ //;s/ $//'`" %configure CC="$CC" CFLAGS="$OPTFLAGS" CXXFLAGS="$OPTFLAGS" \ %if %{build_openmpi} --with-mpicc=%{mpiccpath} \ @@ -322,6 +396,19 @@ mkdir docs/installed mv $RPM_BUILD_ROOT%{_datadir}/doc/valgrind/* docs/installed/ rm -f docs/installed/*.ps +# We want the MPI wrapper installed under the openmpi libdir so the script +# generating the MPI library requires picks them up and sets up the right +# openmpi libmpi.so requires. Install symlinks in the original/upstream +# location for backwards compatibility. +%if %{build_openmpi} +pushd $RPM_BUILD_ROOT%{_libdir} +mkdir -p openmpi/valgrind +cd valgrind +mv libmpiwrap-%{valarch}-linux.so ../openmpi/valgrind/ +ln -s ../openmpi/valgrind/libmpiwrap-%{valarch}-linux.so +popd +%endif + %if "%{valsecarch}" != "" pushd $RPM_BUILD_ROOT%{_libdir}/valgrind/ rm -f *-%{valsecarch}-* || : @@ -337,7 +424,7 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/valgrind/*.supp.in %ifarch %{ix86} x86_64 # To avoid multilib clashes in between i?86 and x86_64, # tweak installed a little bit. -for i in HAVE_PTHREAD_CREATE_GLIBC_2_0 HAVE_PTRACE_GETREGS \ +for i in HAVE_PTHREAD_CREATE_GLIBC_2_0 HAVE_PTRACE_GETREGS HAVE_AS_AMD64_FXSAVE64 \ %if 0%{?rhel} == 5 HAVE_BUILTIN_ATOMIC HAVE_BUILTIN_ATOMIC_CXX \ %endif @@ -347,7 +434,18 @@ for i in HAVE_PTHREAD_CREATE_GLIBC_2_0 HAVE_PTRACE_GETREGS \ done %endif +# We don't want debuginfo generated for the vgpreload libraries. +# Turn off execute bit so they aren't included in the debuginfo.list. +# We'll turn the execute bit on again in %%files. +chmod 644 $RPM_BUILD_ROOT%{_libdir}/valgrind/vgpreload*-%{valarch}-*so + %check +# Make sure some info about the system is in the build.log +uname -a +rpm -q glibc gcc %{?scl_prefix}binutils %{?scl_prefix}gdb +LD_SHOW_AUXV=1 /bin/true +cat /proc/cpuinfo + # Make sure a basic binary runs. ./vg-in-place /bin/true @@ -358,7 +456,13 @@ done make %{?_smp_mflags} CFLAGS="" check || : echo ===============TESTING=================== +# On arm the gdb integration tests hang for unknown reasons. +# Only run the main tools tests. +%ifarch %{arm} +./close_fds make nonexp-regtest || : +%else ./close_fds make regtest || : +%endif # Make sure test failures show up in build.log # Gather up the diffs (at most the first 20 lines for each one) @@ -388,8 +492,20 @@ echo ===============END TESTING=============== %doc docs/installed/html docs/installed/*.pdf %{_bindir}/* %dir %{_libdir}/valgrind +# Install everything in the libdir except the .so and .a files. +# The vgpreload so files might file mode adjustment (see below). +# The libmpiwrap so files go in the valgrind-openmpi package. +# The .a archives go into the valgrind-devel package. %{_libdir}/valgrind/*[^ao] -%{_libdir}/valgrind/[^l]*o +# Turn on executable bit again for vgpreload libraries. +# Was disabled in %%install to prevent debuginfo stripping. +%attr(0755,root,root) %{_libdir}/valgrind/vgpreload*-%{valarch}-*so +# And install the symlinks to the secarch files if the exist. +# These are separate from the above because %%attr doesn't work +# on symlinks. +%if "%{valsecarch}" != "" +%{_libdir}/valgrind/vgpreload*-%{valsecarch}-*so +%endif %{_mandir}/man1/* %files devel @@ -403,11 +519,31 @@ echo ===============END TESTING=============== %files openmpi %defattr(-,root,root) %dir %{_libdir}/valgrind +%{_libdir}/openmpi/valgrind/libmpiwrap*.so %{_libdir}/valgrind/libmpiwrap*.so %endif %changelog -* Thu Aug 28 2015 Mark Wielaard - 3.10.0-16 +* Thu Jul 21 2016 Mark Wielaard - 3.11.0-24 +- Add valgrind-3.11.0-pcmpxstrx-0x70-0x19.patch (#1354557) + +* Tue Jun 21 2016 Mark Wielaard - 3.11.0-23 +- Update valgrind-3.11.0-ppoll-mask.patch (#1347626) + +* Mon May 30 2016 Mark Wielaard - 3.11.0-22 +- Add valgrind-3.11.0-arm64-handle_at.patch +- Add valgrind-3.11.0-ppc64-syscalls.patch + +* Fri Apr 29 2016 Mark Wielaard - 3.11.0-21 +- Add valgrind-3.11.0-deduppoolalloc.patch (#1328347) +- Add valgrind-3.11.0-ppc-bcd-addsub.patch (#1331738) +- Add valgrind-3.11.0-ppc64-vgdb-vr-regs.patch (#1331774) + +* Fri Apr 15 2016 Mark Wielaard - 3.11.0-20 +- Rebase to fedora 3.11.0 + (#1316512 #1306844 #1305962 #1298888 #1296318 #1271754 #1265566 #1265557) + +* Fri Aug 28 2015 Mark Wielaard - 3.10.0-16 - Patch both 32 and 64 in valgrind-3.10.1-ppc32-tabortdc.patch (#1257623) * Thu Aug 27 2015 Mark Wielaard - 3.10.0-15