You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
1
|
2
|
3
|
|
4
(1) |
5
(1) |
6
(5) |
7
|
8
|
9
|
10
|
|
11
|
12
|
13
|
14
(3) |
15
(2) |
16
(3) |
17
|
|
18
|
19
(2) |
20
(7) |
21
(2) |
22
(7) |
23
|
24
|
|
25
(2) |
26
|
27
|
28
(1) |
29
|
30
(2) |
|
|
From: Andreas A. <ar...@so...> - 2018-11-14 15:29:38
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=50bd2282bce101012a5668b670cb185375600d2d commit 50bd2282bce101012a5668b670cb185375600d2d Author: Andreas Arnez <ar...@li...> Date: Thu Oct 18 17:51:57 2018 +0200 Bug 397187 s390x: Add vector register support for vgdb On s390x machines with a vector facility, Valgrind's gdbserver didn't represent the vector registers. This is fixed. Diff: --- NEWS | 1 + coregrind/Makefile.am | 5 ++ coregrind/m_gdbserver/s390-vx-valgrind-s1.xml | 43 ++++++++++ coregrind/m_gdbserver/s390-vx-valgrind-s2.xml | 43 ++++++++++ coregrind/m_gdbserver/s390-vx.xml | 59 ++++++++++++++ coregrind/m_gdbserver/s390x-vx-linux-valgrind.xml | 28 +++++++ coregrind/m_gdbserver/s390x-vx-linux.xml | 18 +++++ coregrind/m_gdbserver/valgrind-low-s390x.c | 97 +++++++++++++++++++++-- 8 files changed, 288 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index e0917e2..2fa2c86 100644 --- a/NEWS +++ b/NEWS @@ -49,6 +49,7 @@ where XXXXXX is the bug number as listed below. 399322 Improve callgrind_annotate output 400490 s390x: VRs allocated as if separate from FPRs 400491 s390x: Operand of LOCH treated as unsigned integer +397187 z13 vector register support for vgdb gdbserver Release 3.14.0 (9 October 2018) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am index 8de1996..94030fd 100644 --- a/coregrind/Makefile.am +++ b/coregrind/Makefile.am @@ -685,6 +685,11 @@ GDBSERVER_XML_FILES = \ m_gdbserver/s390x-linux64-valgrind-s1.xml \ m_gdbserver/s390x-linux64-valgrind-s2.xml \ m_gdbserver/s390x-linux64.xml \ + m_gdbserver/s390-vx-valgrind-s1.xml \ + m_gdbserver/s390-vx-valgrind-s2.xml \ + m_gdbserver/s390-vx.xml \ + m_gdbserver/s390x-vx-linux-valgrind.xml \ + m_gdbserver/s390x-vx-linux.xml \ m_gdbserver/mips-cp0-valgrind-s1.xml \ m_gdbserver/mips-cp0-valgrind-s2.xml \ m_gdbserver/mips-cp0.xml \ diff --git a/coregrind/m_gdbserver/s390-vx-valgrind-s1.xml b/coregrind/m_gdbserver/s390-vx-valgrind-s1.xml new file mode 100644 index 0000000..ca461b3 --- /dev/null +++ b/coregrind/m_gdbserver/s390-vx-valgrind-s1.xml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> +<!-- Copyright (C) 2015-2018 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. --> + +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> +<feature name="org.gnu.gdb.s390.vx-valgrind-s1"> + <reg name="v0ls1" bitsize="64" type="uint64"/> + <reg name="v1ls1" bitsize="64" type="uint64"/> + <reg name="v2ls1" bitsize="64" type="uint64"/> + <reg name="v3ls1" bitsize="64" type="uint64"/> + <reg name="v4ls1" bitsize="64" type="uint64"/> + <reg name="v5ls1" bitsize="64" type="uint64"/> + <reg name="v6ls1" bitsize="64" type="uint64"/> + <reg name="v7ls1" bitsize="64" type="uint64"/> + <reg name="v8ls1" bitsize="64" type="uint64"/> + <reg name="v9ls1" bitsize="64" type="uint64"/> + <reg name="v10ls1" bitsize="64" type="uint64"/> + <reg name="v11ls1" bitsize="64" type="uint64"/> + <reg name="v12ls1" bitsize="64" type="uint64"/> + <reg name="v13ls1" bitsize="64" type="uint64"/> + <reg name="v14ls1" bitsize="64" type="uint64"/> + <reg name="v15ls1" bitsize="64" type="uint64"/> + + <reg name="v16s1" bitsize="128" type="uint128"/> + <reg name="v17s1" bitsize="128" type="uint128"/> + <reg name="v18s1" bitsize="128" type="uint128"/> + <reg name="v19s1" bitsize="128" type="uint128"/> + <reg name="v20s1" bitsize="128" type="uint128"/> + <reg name="v21s1" bitsize="128" type="uint128"/> + <reg name="v22s1" bitsize="128" type="uint128"/> + <reg name="v23s1" bitsize="128" type="uint128"/> + <reg name="v24s1" bitsize="128" type="uint128"/> + <reg name="v25s1" bitsize="128" type="uint128"/> + <reg name="v26s1" bitsize="128" type="uint128"/> + <reg name="v27s1" bitsize="128" type="uint128"/> + <reg name="v28s1" bitsize="128" type="uint128"/> + <reg name="v29s1" bitsize="128" type="uint128"/> + <reg name="v30s1" bitsize="128" type="uint128"/> + <reg name="v31s1" bitsize="128" type="uint128"/> +</feature> diff --git a/coregrind/m_gdbserver/s390-vx-valgrind-s2.xml b/coregrind/m_gdbserver/s390-vx-valgrind-s2.xml new file mode 100644 index 0000000..eccbd8d --- /dev/null +++ b/coregrind/m_gdbserver/s390-vx-valgrind-s2.xml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> +<!-- Copyright (C) 2015-2018 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. --> + +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> +<feature name="org.gnu.gdb.s390.vx-valgrind-s2"> + <reg name="v0ls2" bitsize="64" type="uint64"/> + <reg name="v1ls2" bitsize="64" type="uint64"/> + <reg name="v2ls2" bitsize="64" type="uint64"/> + <reg name="v3ls2" bitsize="64" type="uint64"/> + <reg name="v4ls2" bitsize="64" type="uint64"/> + <reg name="v5ls2" bitsize="64" type="uint64"/> + <reg name="v6ls2" bitsize="64" type="uint64"/> + <reg name="v7ls2" bitsize="64" type="uint64"/> + <reg name="v8ls2" bitsize="64" type="uint64"/> + <reg name="v9ls2" bitsize="64" type="uint64"/> + <reg name="v10ls2" bitsize="64" type="uint64"/> + <reg name="v11ls2" bitsize="64" type="uint64"/> + <reg name="v12ls2" bitsize="64" type="uint64"/> + <reg name="v13ls2" bitsize="64" type="uint64"/> + <reg name="v14ls2" bitsize="64" type="uint64"/> + <reg name="v15ls2" bitsize="64" type="uint64"/> + + <reg name="v16s2" bitsize="128" type="uint128"/> + <reg name="v17s2" bitsize="128" type="uint128"/> + <reg name="v18s2" bitsize="128" type="uint128"/> + <reg name="v19s2" bitsize="128" type="uint128"/> + <reg name="v20s2" bitsize="128" type="uint128"/> + <reg name="v21s2" bitsize="128" type="uint128"/> + <reg name="v22s2" bitsize="128" type="uint128"/> + <reg name="v23s2" bitsize="128" type="uint128"/> + <reg name="v24s2" bitsize="128" type="uint128"/> + <reg name="v25s2" bitsize="128" type="uint128"/> + <reg name="v26s2" bitsize="128" type="uint128"/> + <reg name="v27s2" bitsize="128" type="uint128"/> + <reg name="v28s2" bitsize="128" type="uint128"/> + <reg name="v29s2" bitsize="128" type="uint128"/> + <reg name="v30s2" bitsize="128" type="uint128"/> + <reg name="v31s2" bitsize="128" type="uint128"/> +</feature> diff --git a/coregrind/m_gdbserver/s390-vx.xml b/coregrind/m_gdbserver/s390-vx.xml new file mode 100644 index 0000000..2a16873 --- /dev/null +++ b/coregrind/m_gdbserver/s390-vx.xml @@ -0,0 +1,59 @@ +<?xml version="1.0"?> +<!-- Copyright (C) 2015-2018 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. --> + +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> +<feature name="org.gnu.gdb.s390.vx"> + <vector id="v4f" type="ieee_single" count="4"/> + <vector id="v2d" type="ieee_double" count="2"/> + <vector id="v16i8" type="int8" count="16"/> + <vector id="v8i16" type="int16" count="8"/> + <vector id="v4i32" type="int32" count="4"/> + <vector id="v2i64" type="int64" count="2"/> + <union id="vec128"> + <field name="v4_float" type="v4f"/> + <field name="v2_double" type="v2d"/> + <field name="v16_int8" type="v16i8"/> + <field name="v8_int16" type="v8i16"/> + <field name="v4_int32" type="v4i32"/> + <field name="v2_int64" type="v2i64"/> + <field name="uint128" type="uint128"/> + </union> + + <reg name="v0l" bitsize="64" type="uint64"/> + <reg name="v1l" bitsize="64" type="uint64"/> + <reg name="v2l" bitsize="64" type="uint64"/> + <reg name="v3l" bitsize="64" type="uint64"/> + <reg name="v4l" bitsize="64" type="uint64"/> + <reg name="v5l" bitsize="64" type="uint64"/> + <reg name="v6l" bitsize="64" type="uint64"/> + <reg name="v7l" bitsize="64" type="uint64"/> + <reg name="v8l" bitsize="64" type="uint64"/> + <reg name="v9l" bitsize="64" type="uint64"/> + <reg name="v10l" bitsize="64" type="uint64"/> + <reg name="v11l" bitsize="64" type="uint64"/> + <reg name="v12l" bitsize="64" type="uint64"/> + <reg name="v13l" bitsize="64" type="uint64"/> + <reg name="v14l" bitsize="64" type="uint64"/> + <reg name="v15l" bitsize="64" type="uint64"/> + + <reg name="v16" bitsize="128" type="vec128"/> + <reg name="v17" bitsize="128" type="vec128"/> + <reg name="v18" bitsize="128" type="vec128"/> + <reg name="v19" bitsize="128" type="vec128"/> + <reg name="v20" bitsize="128" type="vec128"/> + <reg name="v21" bitsize="128" type="vec128"/> + <reg name="v22" bitsize="128" type="vec128"/> + <reg name="v23" bitsize="128" type="vec128"/> + <reg name="v24" bitsize="128" type="vec128"/> + <reg name="v25" bitsize="128" type="vec128"/> + <reg name="v26" bitsize="128" type="vec128"/> + <reg name="v27" bitsize="128" type="vec128"/> + <reg name="v28" bitsize="128" type="vec128"/> + <reg name="v29" bitsize="128" type="vec128"/> + <reg name="v30" bitsize="128" type="vec128"/> + <reg name="v31" bitsize="128" type="vec128"/> +</feature> diff --git a/coregrind/m_gdbserver/s390x-vx-linux-valgrind.xml b/coregrind/m_gdbserver/s390x-vx-linux-valgrind.xml new file mode 100644 index 0000000..0237002 --- /dev/null +++ b/coregrind/m_gdbserver/s390x-vx-linux-valgrind.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<!-- Copyright (C) 2010-2018 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. --> + +<!-- S/390 64-bit user-level code. --> + +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<target> + <architecture>s390:64-bit</architecture> + <xi:include href="s390x-core64.xml"/> + <xi:include href="s390-acr.xml"/> + <xi:include href="s390-fpr.xml"/> + <xi:include href="s390x-linux64.xml"/> + <xi:include href="s390-vx.xml"/> + <xi:include href="s390x-core64-valgrind-s1.xml"/> + <xi:include href="s390-acr-valgrind-s1.xml"/> + <xi:include href="s390-fpr-valgrind-s1.xml"/> + <xi:include href="s390x-linux64-valgrind-s1.xml"/> + <xi:include href="s390-vx-valgrind-s1.xml"/> + <xi:include href="s390x-core64-valgrind-s2.xml"/> + <xi:include href="s390-acr-valgrind-s2.xml"/> + <xi:include href="s390-fpr-valgrind-s2.xml"/> + <xi:include href="s390x-linux64-valgrind-s2.xml"/> + <xi:include href="s390-vx-valgrind-s2.xml"/> +</target> diff --git a/coregrind/m_gdbserver/s390x-vx-linux.xml b/coregrind/m_gdbserver/s390x-vx-linux.xml new file mode 100644 index 0000000..e431c5b --- /dev/null +++ b/coregrind/m_gdbserver/s390x-vx-linux.xml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<!-- Copyright (C) 2010-2018 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. --> + +<!-- S/390 64-bit user-level code. --> + +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<target> + <architecture>s390:64-bit</architecture> + <xi:include href="s390x-core64.xml"/> + <xi:include href="s390-acr.xml"/> + <xi:include href="s390-fpr.xml"/> + <xi:include href="s390x-linux64.xml"/> + <xi:include href="s390-vx.xml"/> +</target> diff --git a/coregrind/m_gdbserver/valgrind-low-s390x.c b/coregrind/m_gdbserver/valgrind-low-s390x.c index 7bbb2e3..a667f4b 100644 --- a/coregrind/m_gdbserver/valgrind-low-s390x.c +++ b/coregrind/m_gdbserver/valgrind-low-s390x.c @@ -88,9 +88,42 @@ static struct reg regs[] = { { "f14", 2592, 64 }, { "f15", 2656, 64 }, { "orig_r2", 2720, 64 }, + { "v0l", 2784, 64 }, + { "v1l", 2848, 64 }, + { "v2l", 2912, 64 }, + { "v3l", 2976, 64 }, + { "v4l", 3040, 64 }, + { "v5l", 3104, 64 }, + { "v6l", 3168, 64 }, + { "v7l", 3232, 64 }, + { "v8l", 3296, 64 }, + { "v9l", 3360, 64 }, + { "v10l", 3424, 64 }, + { "v11l", 3488, 64 }, + { "v12l", 3552, 64 }, + { "v13l", 3616, 64 }, + { "v14l", 3680, 64 }, + { "v15l", 3744, 64 }, + { "v16", 3808, 128 }, + { "v17", 3936, 128 }, + { "v18", 4064, 128 }, + { "v19", 4192, 128 }, + { "v20", 4320, 128 }, + { "v21", 4448, 128 }, + { "v22", 4576, 128 }, + { "v23", 4704, 128 }, + { "v24", 4832, 128 }, + { "v25", 4960, 128 }, + { "v26", 5088, 128 }, + { "v27", 5216, 128 }, + { "v28", 5344, 128 }, + { "v29", 5472, 128 }, + { "v30", 5600, 128 }, + { "v31", 5728, 128 }, }; static const char *expedite_regs[] = { "r14", "r15", "pswa", 0 }; -#define num_regs (sizeof (regs) / sizeof (regs[0])) +#define num_regs_all (sizeof (regs) / sizeof (regs[0])) +static int num_regs; static CORE_ADDR get_pc (void) @@ -165,7 +198,7 @@ void transfer_register (ThreadId tid, int abs_regno, void * buf, case 32: VG_(transfer) (&s390x->guest_a14, buf, dir, size, mod); break; case 33: VG_(transfer) (&s390x->guest_a15, buf, dir, size, mod); break; case 34: VG_(transfer) (&s390x->guest_fpc, buf, dir, size, mod); break; - case 35: VG_(transfer) (&s390x->guest_v0, buf, dir, size, mod); break; + case 35: VG_(transfer) (&s390x->guest_v0.w64[0], buf, dir, size, mod); break; case 36: VG_(transfer) (&s390x->guest_v1.w64[0], buf, dir, size, mod); break; case 37: VG_(transfer) (&s390x->guest_v2.w64[0], buf, dir, size, mod); break; case 38: VG_(transfer) (&s390x->guest_v3.w64[0], buf, dir, size, mod); break; @@ -182,18 +215,65 @@ void transfer_register (ThreadId tid, int abs_regno, void * buf, case 49: VG_(transfer) (&s390x->guest_v14.w64[0], buf, dir, size, mod); break; case 50: VG_(transfer) (&s390x->guest_v15.w64[0], buf, dir, size, mod); break; case 51: *mod = False; break; //GDBTD??? { "orig_r2", 0, 64 }, + case 52: VG_(transfer) (&s390x->guest_v0.w64[1], buf, dir, size, mod); break; + case 53: VG_(transfer) (&s390x->guest_v1.w64[1], buf, dir, size, mod); break; + case 54: VG_(transfer) (&s390x->guest_v2.w64[1], buf, dir, size, mod); break; + case 55: VG_(transfer) (&s390x->guest_v3.w64[1], buf, dir, size, mod); break; + case 56: VG_(transfer) (&s390x->guest_v4.w64[1], buf, dir, size, mod); break; + case 57: VG_(transfer) (&s390x->guest_v5.w64[1], buf, dir, size, mod); break; + case 58: VG_(transfer) (&s390x->guest_v6.w64[1], buf, dir, size, mod); break; + case 59: VG_(transfer) (&s390x->guest_v7.w64[1], buf, dir, size, mod); break; + case 60: VG_(transfer) (&s390x->guest_v8.w64[1], buf, dir, size, mod); break; + case 61: VG_(transfer) (&s390x->guest_v9.w64[1], buf, dir, size, mod); break; + case 62: VG_(transfer) (&s390x->guest_v10.w64[1], buf, dir, size, mod); break; + case 63: VG_(transfer) (&s390x->guest_v11.w64[1], buf, dir, size, mod); break; + case 64: VG_(transfer) (&s390x->guest_v12.w64[1], buf, dir, size, mod); break; + case 65: VG_(transfer) (&s390x->guest_v13.w64[1], buf, dir, size, mod); break; + case 66: VG_(transfer) (&s390x->guest_v14.w64[1], buf, dir, size, mod); break; + case 67: VG_(transfer) (&s390x->guest_v15.w64[1], buf, dir, size, mod); break; + case 68: VG_(transfer) (&s390x->guest_v16, buf, dir, size, mod); break; + case 69: VG_(transfer) (&s390x->guest_v17, buf, dir, size, mod); break; + case 70: VG_(transfer) (&s390x->guest_v18, buf, dir, size, mod); break; + case 71: VG_(transfer) (&s390x->guest_v19, buf, dir, size, mod); break; + case 72: VG_(transfer) (&s390x->guest_v20, buf, dir, size, mod); break; + case 73: VG_(transfer) (&s390x->guest_v21, buf, dir, size, mod); break; + case 74: VG_(transfer) (&s390x->guest_v22, buf, dir, size, mod); break; + case 75: VG_(transfer) (&s390x->guest_v23, buf, dir, size, mod); break; + case 76: VG_(transfer) (&s390x->guest_v24, buf, dir, size, mod); break; + case 77: VG_(transfer) (&s390x->guest_v25, buf, dir, size, mod); break; + case 78: VG_(transfer) (&s390x->guest_v26, buf, dir, size, mod); break; + case 79: VG_(transfer) (&s390x->guest_v27, buf, dir, size, mod); break; + case 80: VG_(transfer) (&s390x->guest_v28, buf, dir, size, mod); break; + case 81: VG_(transfer) (&s390x->guest_v29, buf, dir, size, mod); break; + case 82: VG_(transfer) (&s390x->guest_v30, buf, dir, size, mod); break; + case 83: VG_(transfer) (&s390x->guest_v31, buf, dir, size, mod); break; default: vg_assert(0); } } static +Bool have_vx (void) +{ + VexArch va; + VexArchInfo vai; + VG_(machine_get_VexArchInfo) (&va, &vai); + return (vai.hwcaps & VEX_HWCAPS_S390X_VX) != 0; +} + +static const char* target_xml (Bool shadow_mode) { if (shadow_mode) { - return "s390x-generic-valgrind.xml"; + if (have_vx()) + return "s390x-vx-linux-valgrind.xml"; + else + return "s390x-generic-valgrind.xml"; } else { - return "s390x-generic.xml"; - } + if (have_vx()) + return "s390x-vx-linux.xml"; + else + return "s390x-generic.xml"; + } } static CORE_ADDR** target_get_dtv (ThreadState *tst) @@ -206,7 +286,7 @@ static CORE_ADDR** target_get_dtv (ThreadState *tst) } static struct valgrind_target_ops low_target = { - num_regs, + -1, // Override at init time. regs, 17, //sp = r15, which is register offset 17 in regs transfer_register, @@ -220,6 +300,11 @@ static struct valgrind_target_ops low_target = { void s390x_init_architecture (struct valgrind_target_ops *target) { *target = low_target; + if (have_vx()) + num_regs = num_regs_all; + else + num_regs = num_regs_all - 32; // Remove all VX registers. + target->num_regs = num_regs; set_register_cache (regs, num_regs); gdbserver_expedite_regs = expedite_regs; } |
|
From: Andreas A. <ar...@so...> - 2018-11-14 15:29:32
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=71002d8a5111d02ce8049c55017a8d948c820e35 commit 71002d8a5111d02ce8049c55017a8d948c820e35 Author: Andreas Arnez <ar...@li...> Date: Thu Oct 25 13:47:12 2018 +0200 Bug 400490 s390x: Fix register allocation for VRs vs FPRs On s390x, if vector registers are available, they are fed to the register allocator as if they were separate from the floating-point registers. But in fact the FPRs are embedded in the VRs. So for instance, if both f3 and v3 are allocated and used at the same time, corruption will result. This is fixed by offering only the non-overlapping VRs, v16 to v31, to the register allocator instead. Diff: --- NEWS | 1 + VEX/priv/host_s390_defs.c | 17 +++++++---------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/NEWS b/NEWS index 987d928..63287bb 100644 --- a/NEWS +++ b/NEWS @@ -47,6 +47,7 @@ where XXXXXX is the bug number as listed below. 399301 Use inlined frames in Massif XTree output. 399322 Improve callgrind_annotate output +400490 s390x: VRs allocated as if separate from FPRs Release 3.14.0 (9 October 2018) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c index 6c22ac8..98ac938 100644 --- a/VEX/priv/host_s390_defs.c +++ b/VEX/priv/host_s390_defs.c @@ -59,7 +59,6 @@ static UInt s390_tchain_load64_len(void); /* A mapping from register number to register index */ static Int gpr_index[16]; // GPR regno -> register index -static Int fpr_index[16]; // FPR regno -> register index static Int vr_index[32]; // VR regno -> register index HReg @@ -73,7 +72,7 @@ s390_hreg_gpr(UInt regno) HReg s390_hreg_fpr(UInt regno) { - Int ix = fpr_index[regno]; + Int ix = vr_index[regno]; vassert(ix >= 0); return mkHReg(/*virtual*/False, HRcFlt64, regno, ix); } @@ -463,11 +462,9 @@ getRRegUniverse_S390(void) RRegUniverse__init(ru); - /* Assign invalid values to the gpr/fpr/vr_index */ + /* Assign invalid values to the gpr/vr_index */ for (UInt i = 0; i < sizeof gpr_index / sizeof gpr_index[0]; ++i) gpr_index[i] = -1; - for (UInt i = 0; i < sizeof fpr_index / sizeof fpr_index[0]; ++i) - fpr_index[i] = -1; for (UInt i = 0; i < sizeof vr_index / sizeof vr_index[0]; ++i) vr_index[i] = -1; @@ -494,17 +491,17 @@ getRRegUniverse_S390(void) ru->allocable_start[HRcFlt64] = ru->size; for (UInt regno = 8; regno <= 15; ++regno) { - fpr_index[regno] = ru->size; + vr_index[regno] = ru->size; ru->regs[ru->size++] = s390_hreg_fpr(regno); } for (UInt regno = 0; regno <= 7; ++regno) { - fpr_index[regno] = ru->size; + vr_index[regno] = ru->size; ru->regs[ru->size++] = s390_hreg_fpr(regno); } ru->allocable_end[HRcFlt64] = ru->size - 1; ru->allocable_start[HRcVec128] = ru->size; - for (UInt regno = 0; regno <= 31; ++regno) { + for (UInt regno = 16; regno <= 31; ++regno) { vr_index[regno] = ru->size; ru->regs[ru->size++] = s390_hreg_vr(regno); } @@ -527,12 +524,12 @@ getRRegUniverse_S390(void) /* Sanity checking */ for (UInt i = 0; i < sizeof gpr_index / sizeof gpr_index[0]; ++i) vassert(gpr_index[i] >= 0); - for (UInt i = 0; i < sizeof fpr_index / sizeof fpr_index[0]; ++i) - vassert(fpr_index[i] >= 0); for (UInt i = 0; i < sizeof vr_index / sizeof vr_index[0]; ++i) vassert(vr_index[i] >= 0); initialised = True; + + RRegUniverse__check_is_sane(ru); return ru; } |
|
From: Andreas A. <ar...@so...> - 2018-11-14 15:29:31
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=9545e9f96beda6e9f2205bdb3c3e96edaf8d9e2b commit 9545e9f96beda6e9f2205bdb3c3e96edaf8d9e2b Author: Andreas Arnez <ar...@li...> Date: Tue Oct 30 17:06:38 2018 +0100 Bug 400491 s390x: Sign-extend immediate operand of LOCHI and friends The VEX implementation of each of the z/Architecture instructions LOCHI, LOCHHI, and LOCGHI treats the immediate 16-bit operand as an unsigned integer instead of a signed integer. This is fixed. Diff: --- NEWS | 1 + VEX/priv/guest_s390_toIR.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 63287bb..e0917e2 100644 --- a/NEWS +++ b/NEWS @@ -48,6 +48,7 @@ where XXXXXX is the bug number as listed below. 399301 Use inlined frames in Massif XTree output. 399322 Improve callgrind_annotate output 400490 s390x: VRs allocated as if separate from FPRs +400491 s390x: Operand of LOCH treated as unsigned integer Release 3.14.0 (9 October 2018) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c index 60b6081..9c4d79b 100644 --- a/VEX/priv/guest_s390_toIR.c +++ b/VEX/priv/guest_s390_toIR.c @@ -16307,7 +16307,7 @@ static const HChar * s390_irgen_LOCHHI(UChar r1, UChar m3, UShort i2, UChar unused) { next_insn_if(binop(Iop_CmpEQ32, s390_call_calculate_cond(m3), mkU32(0))); - put_gpr_w0(r1, mkU32(i2)); + put_gpr_w0(r1, mkU32((UInt)(Int)(Short)i2)); return "lochhi"; } @@ -16316,7 +16316,7 @@ static const HChar * s390_irgen_LOCHI(UChar r1, UChar m3, UShort i2, UChar unused) { next_insn_if(binop(Iop_CmpEQ32, s390_call_calculate_cond(m3), mkU32(0))); - put_gpr_w1(r1, mkU32(i2)); + put_gpr_w1(r1, mkU32((UInt)(Int)(Short)i2)); return "lochi"; } @@ -16325,7 +16325,7 @@ static const HChar * s390_irgen_LOCGHI(UChar r1, UChar m3, UShort i2, UChar unused) { next_insn_if(binop(Iop_CmpEQ32, s390_call_calculate_cond(m3), mkU32(0))); - put_gpr_dw0(r1, mkU64(i2)); + put_gpr_dw0(r1, mkU64((UInt)(Int)(Short)i2)); return "locghi"; } |