Accepting request 386244 from devel:tools
Automatic submission by obs-autosubmit OBS-URL: https://build.opensuse.org/request/show/386244 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/valgrind?expand=0&rev=98
This commit is contained in:
commit
a180107264
70
r15702.diff
Normal file
70
r15702.diff
Normal file
@ -0,0 +1,70 @@
|
||||
------------------------------------------------------------------------
|
||||
r15702 | florian | 2015-10-12 22:35:56 +0200 (Mo, 12. Okt 2015) | 14 Zeilen
|
||||
|
||||
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.
|
||||
|
||||
------------------------------------------------------------------------
|
||||
Index: include/vki/vki-s390x-linux.h
|
||||
===================================================================
|
||||
--- include/vki/vki-s390x-linux.h.orig
|
||||
+++ include/vki/vki-s390x-linux.h
|
||||
@@ -800,12 +800,15 @@ typedef struct
|
||||
#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
|
||||
Index: coregrind/m_initimg/initimg-linux.c
|
||||
===================================================================
|
||||
--- coregrind/m_initimg/initimg-linux.c.orig
|
||||
+++ coregrind/m_initimg/initimg-linux.c
|
||||
@@ -701,6 +701,12 @@ Addr setup_client_stack( void* init_sp,
|
||||
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)
|
||||
Index: README.s390
|
||||
===================================================================
|
||||
--- README.s390.orig
|
||||
+++ README.s390
|
||||
@@ -22,6 +22,9 @@ Limitations
|
||||
- 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
|
104
r15792.diff
Normal file
104
r15792.diff
Normal file
@ -0,0 +1,104 @@
|
||||
------------------------------------------------------------------------
|
||||
r15792 | florian | 2016-02-17 21:00:59 +0100 (Mi, 17. Feb 2016) | 4 Zeilen
|
||||
|
||||
s390: Fix BZ #359289, adding support for popcnt insn.
|
||||
Companion patch is VEX r3210.
|
||||
Patch by Andreas Arnez (arnez@linux.vnet.ibm.com).
|
||||
|
||||
------------------------------------------------------------------------
|
||||
Index: tests/s390x_features.c
|
||||
===================================================================
|
||||
--- tests/s390x_features.c.orig
|
||||
+++ tests/s390x_features.c
|
||||
@@ -231,6 +231,8 @@ static int go(char *feature, char *cpu)
|
||||
match = facilities & FAC_BIT(42);
|
||||
} else if (strcmp(feature, "s390x-pfpo") == 0 ) {
|
||||
match = facilities & FAC_BIT(44);
|
||||
+ } else if (strcmp(feature, "s390x-highw") == 0 ) {
|
||||
+ match = facilities & FAC_BIT(45);
|
||||
} else {
|
||||
return 2; // Unrecognised feature.
|
||||
}
|
||||
Index: none/tests/s390x/popcnt.stderr.exp
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ none/tests/s390x/popcnt.stderr.exp
|
||||
@@ -0,0 +1,2 @@
|
||||
+
|
||||
+
|
||||
Index: none/tests/s390x/Makefile.am
|
||||
===================================================================
|
||||
--- none/tests/s390x/Makefile.am.orig
|
||||
+++ none/tests/s390x/Makefile.am
|
||||
@@ -11,7 +11,7 @@ INSN_TESTS = clc clcle cvb cvd icm lpr t
|
||||
ex_sig ex_clone cu14 cu14_1 cu41 fpconv ecag fpext_warn \
|
||||
rounding-1 rounding-2 rounding-3 rounding-4 rounding-5 bfp-1 \
|
||||
bfp-2 bfp-3 bfp-4 srnm srnmb comp-1 comp-2 exrl tmll tm stmg \
|
||||
- ex clst mvc test_fork test_sig rounding-6 rxsbg\
|
||||
+ ex clst mvc test_fork test_sig rounding-6 rxsbg popcnt \
|
||||
spechelper-alr spechelper-algr \
|
||||
spechelper-slr spechelper-slgr \
|
||||
spechelper-cr spechelper-clr \
|
||||
Index: none/tests/s390x/opcodes.h
|
||||
===================================================================
|
||||
--- none/tests/s390x/opcodes.h.orig
|
||||
+++ none/tests/s390x/opcodes.h
|
||||
@@ -324,6 +324,7 @@
|
||||
#define OY(r1,x2,b2,dl2,dh2) RXY_RRRD(e3,r1,x2,b2,dl2,dh2,56)
|
||||
#define PFD(r1,x2,b2,dl2,dh2) RXY_URRD(e3,r1,x2,b2,dl2,dh2,36)
|
||||
#define PFDRL(r1,i2) RIL_UP(c6,r1,2,i2)
|
||||
+#define POPCNT(r1,r2) RRE_RR(b9e1,00,r1,r2)
|
||||
#define RISBG(r1,r2,i3,i4,i5) RIE_RRUUU(ec,r1,r2,i3,i4,i5,55)
|
||||
#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)
|
||||
Index: none/tests/s390x/popcnt.stdout.exp
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ none/tests/s390x/popcnt.stdout.exp
|
||||
@@ -0,0 +1,5 @@
|
||||
+popcnt 0 -> 0 cc=0
|
||||
+popcnt 1 -> 1 cc=1
|
||||
+popcnt 8000000000000000 -> 100000000000000 cc=1
|
||||
+popcnt ffffffffffffffff -> 808080808080808 cc=1
|
||||
+popcnt ff427e3800556bcd -> 802060300040505 cc=1
|
||||
Index: none/tests/s390x/popcnt.vgtest
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ none/tests/s390x/popcnt.vgtest
|
||||
@@ -0,0 +1 @@
|
||||
+prog: popcnt
|
||||
Index: none/tests/s390x/popcnt.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ none/tests/s390x/popcnt.c
|
||||
@@ -0,0 +1,30 @@
|
||||
+#include <stdio.h>
|
||||
+#include <stdint.h>
|
||||
+
|
||||
+
|
||||
+static void check_popcnt(uint64_t in, uint64_t expected_result,
|
||||
+ int expected_cc)
|
||||
+{
|
||||
+ uint64_t out = ~expected_result;
|
||||
+ int cc = ~expected_cc;
|
||||
+
|
||||
+ asm volatile(".insn rre, 0xb9e10000, %[out], %[in]\n\t"
|
||||
+ "ipm %[cc]\n\t"
|
||||
+ "srl %[cc],28\n\t"
|
||||
+ : [cc]"=d" (cc), [out]"=d" (out)
|
||||
+ : [in]"d" (in)
|
||||
+ : "cc");
|
||||
+ printf("popcnt %16lx -> %16lx %s cc=%d %s\n",
|
||||
+ in, out, (out == expected_result ? " " : "ERR"),
|
||||
+ cc, (cc == expected_cc ? " " : "ERR"));
|
||||
+}
|
||||
+
|
||||
+int main()
|
||||
+{
|
||||
+ check_popcnt(0, 0, 0);
|
||||
+ check_popcnt(1, 1, 1);
|
||||
+ check_popcnt(0x8000000000000000ULL, 0x0100000000000000ULL, 1);
|
||||
+ check_popcnt(0xffffffffffffffffULL, 0x0808080808080808ULL, 1);
|
||||
+ check_popcnt(0xff427e3800556bcdULL, 0x0802060300040505ULL, 1);
|
||||
+ return 0;
|
||||
+}
|
76
r15802.diff
Normal file
76
r15802.diff
Normal file
@ -0,0 +1,76 @@
|
||||
------------------------------------------------------------------------
|
||||
r15802 | mjw | 2016-02-23 16:19:49 +0100 (Di, 23. Feb 2016) | 9 Zeilen
|
||||
|
||||
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.
|
||||
------------------------------------------------------------------------
|
||||
Index: include/vki/vki-scnums-s390x-linux.h
|
||||
===================================================================
|
||||
--- include/vki/vki-scnums-s390x-linux.h (Revision 15801)
|
||||
+++ include/vki/vki-scnums-s390x-linux.h (Revision 15802)
|
||||
@@ -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
|
||||
Index: coregrind/m_syswrap/syswrap-s390x-linux.c
|
||||
===================================================================
|
||||
--- coregrind/m_syswrap/syswrap-s390x-linux.c (Revision 15801)
|
||||
+++ coregrind/m_syswrap/syswrap-s390x-linux.c (Revision 15802)
|
||||
@@ -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 )
|
@ -1,3 +1,8 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 1 10:37:37 UTC 2016 - dmueller@suse.com
|
||||
|
||||
- add r15702.diff, r15792.diff, vex-r3210.diff, r15802.diff (fate#319608)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Feb 22 14:21:40 UTC 2016 - schwab@suse.de
|
||||
|
||||
|
@ -38,6 +38,10 @@ Patch1: jit-register-unregister.diff
|
||||
Patch2: armv6-support.diff
|
||||
Patch4: gcc5.patch
|
||||
Patch5: svn-r15766.patch
|
||||
Patch6: r15702.diff
|
||||
Patch7: r15792.diff
|
||||
Patch8: r15802.diff
|
||||
Patch100: vex-r3210.diff
|
||||
BuildRequires: automake
|
||||
BuildRequires: docbook-xsl-stylesheets
|
||||
BuildRequires: docbook_4
|
||||
@ -114,6 +118,10 @@ but it has been successfully used to optimize several KDE applications.
|
||||
%patch2
|
||||
%patch4
|
||||
%patch5
|
||||
%patch6
|
||||
%patch7
|
||||
%patch8
|
||||
%patch100
|
||||
|
||||
%build
|
||||
export FLAGS="%{optflags}"
|
||||
|
69
vex-r3210.diff
Normal file
69
vex-r3210.diff
Normal file
@ -0,0 +1,69 @@
|
||||
------------------------------------------------------------------------
|
||||
r3210 | florian | 2016-02-17 20:57:01 +0100 (Mi, 17. Feb 2016) | 3 Zeilen
|
||||
|
||||
s390: Implement popcnt insn. Part of fixing BZ #359289.
|
||||
Patch by Andreas Arnez (arnez@linux.vnet.ibm.com)
|
||||
|
||||
------------------------------------------------------------------------
|
||||
Index: priv/guest_s390_toIR.c
|
||||
===================================================================
|
||||
--- VEX/priv/guest_s390_toIR.c (Revision 3209)
|
||||
+++ VEX/priv/guest_s390_toIR.c (Revision 3210)
|
||||
@@ -8,7 +8,7 @@
|
||||
This file is part of Valgrind, a dynamic binary instrumentation
|
||||
framework.
|
||||
|
||||
- Copyright IBM Corp. 2010-2015
|
||||
+ Copyright IBM Corp. 2010-2016
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -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
|
||||
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;
|
Loading…
Reference in New Issue
Block a user