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
(32) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
1
|
2
|
3
|
4
|
|
5
|
6
|
7
(2) |
8
(16) |
9
|
10
|
11
(1) |
|
12
(19) |
13
(12) |
14
(15) |
15
(5) |
16
(15) |
17
(1) |
18
(15) |
|
19
|
20
(3) |
21
(1) |
22
(12) |
23
(4) |
24
(5) |
25
(15) |
|
26
(4) |
27
(12) |
28
|
29
(2) |
30
(13) |
31
(13) |
|
|
From: Rich C. <rc...@wi...> - 2014-01-14 04:22:01
|
valgrind revision: 13775 VEX revision: 2804 C compiler: gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012] GDB: GNU gdb (GDB) SUSE (7.5.1-2.1.1) Assembler: GNU assembler (GNU Binutils; openSUSE 12.3) 2.23.1 C library: GNU C Library (GNU libc) stable release version 2.17 (git c758a6861537) uname -mrs: Linux 3.7.9-1.1-desktop x86_64 Vendor version: Welcome to openSUSE 12.3 "Dartmouth" Beta 1 - Kernel %r (%t). Nightly build on ultra ( gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012] Linux 3.7.9-1.1-desktop x86_64 ) Started at 2014-01-13 21:30:01 CST Ended at 2014-01-13 22:21:50 CST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 666 tests, 0 stderr failures, 0 stdout failures, 1 stderrB failure, 0 stdoutB failures, 0 post failures == gdbserver_tests/mssnapshot (stderrB) ================================================= ./valgrind-new/gdbserver_tests/mssnapshot.stderrB.diff ================================================= --- mssnapshot.stderrB.exp 2014-01-13 22:04:05.764720843 -0600 +++ mssnapshot.stderrB.out 2014-01-13 22:10:53.283398815 -0600 @@ -1,5 +1,11 @@ relaying data between gdb and process .... +Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2 +Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158" vgdb-error value changed from 0 to 999999 +Missing separate debuginfo for /lib64/libpthread.so.0 +Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef" +Missing separate debuginfo for /lib64/libc.so.6 +Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7" general valgrind monitor commands: help [debug] : monitor command help. With debug: + debugging commands v.wait [<ms>] : sleep <ms> (default 0) then continue ================================================= ./valgrind-old/gdbserver_tests/mssnapshot.stderrB.diff ================================================= --- mssnapshot.stderrB.exp 2014-01-13 21:38:05.440638120 -0600 +++ mssnapshot.stderrB.out 2014-01-13 21:42:22.529399488 -0600 @@ -1,5 +1,11 @@ relaying data between gdb and process .... +Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2 +Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158" vgdb-error value changed from 0 to 999999 +Missing separate debuginfo for /lib64/libpthread.so.0 +Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef" +Missing separate debuginfo for /lib64/libc.so.6 +Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7" general valgrind monitor commands: help [debug] : monitor command help. With debug: + debugging commands v.wait [<ms>] : sleep <ms> (default 0) then continue |
|
From: Tom H. <to...@co...> - 2014-01-14 04:21:40
|
valgrind revision: 13775 VEX revision: 2804 C compiler: gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) GDB: GNU gdb (GDB) Fedora (7.3.50.20110722-16.fc16) Assembler: GNU assembler version 2.21.53.0.1-6.fc16 20110716 C library: GNU C Library development release version 2.14.90 uname -mrs: Linux 3.11.10-301.fc20.x86_64 x86_64 Vendor version: Fedora release 16 (Verne) Nightly build on bristol ( x86_64, Fedora 16 ) Started at 2014-01-14 03:02:59 GMT Ended at 2014-01-14 04:21:18 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 673 tests, 0 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == |
|
From: Tom H. <to...@co...> - 2014-01-14 03:57:32
|
valgrind revision: 13775 VEX revision: 2804 C compiler: gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2) GDB: GNU gdb (GDB) Fedora (7.4.50.20120120-54.fc17) Assembler: GNU assembler version 2.22.52.0.1-10.fc17 20120131 C library: GNU C Library stable release version 2.15 uname -mrs: Linux 3.11.10-301.fc20.x86_64 x86_64 Vendor version: Fedora release 17 (Beefy Miracle) Nightly build on bristol ( x86_64, Fedora 17 (Beefy Miracle) ) Started at 2014-01-14 02:51:34 GMT Ended at 2014-01-14 03:57:10 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 673 tests, 4 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcinfcallRU (stderr) gdbserver_tests/mcinfcallWSRU (stderr) gdbserver_tests/mcmain_pic (stderr) exp-sgcheck/tests/preen_invars (stdout) exp-sgcheck/tests/preen_invars (stderr) |
|
From: Tom H. <to...@co...> - 2014-01-14 03:36:55
|
valgrind revision: 13775 VEX revision: 2804 C compiler: gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8) GDB: GNU gdb (GDB) Fedora 7.5.1-42.fc18 Assembler: GNU assembler version 2.23.51.0.1-10.fc18 20120806 C library: GNU C Library stable release version 2.16 uname -mrs: Linux 3.11.10-301.fc20.x86_64 x86_64 Vendor version: Fedora release 18 (Spherical Cow) Nightly build on bristol ( x86_64, Fedora 18 (Spherical Cow) ) Started at 2014-01-14 02:41:52 GMT Ended at 2014-01-14 03:36:37 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 673 tests, 1 stderr failure, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == exp-sgcheck/tests/preen_invars (stdout) exp-sgcheck/tests/preen_invars (stderr) |
|
From: Tom H. <to...@co...> - 2014-01-14 03:16:00
|
valgrind revision: 13775 VEX revision: 2804 C compiler: gcc (GCC) 4.8.2 20131212 (Red Hat 4.8.2-7) GDB: GNU gdb (GDB) Fedora 7.6.1-46.fc19 Assembler: GNU assembler version 2.23.52.0.1-9.fc19 20130226 C library: GNU C Library (GNU libc) stable release version 2.17 uname -mrs: Linux 3.11.10-301.fc20.x86_64 x86_64 Vendor version: Fedora release 19 (Schrödingerâs Cat) Nightly build on bristol ( x86_64, Fedora 19 (Schrödingerâs Cat) ) Started at 2014-01-14 02:32:09 GMT Ended at 2014-01-14 03:15:48 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 673 tests, 2 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/dw4 (stderr) exp-sgcheck/tests/hackedbz2 (stderr) |
|
From: Maran P. <ma...@li...> - 2014-01-14 02:54:44
|
valgrind revision: 13775 VEX revision: 2804 C compiler: gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3) GDB: GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6) Assembler: GNU assembler version 2.20.51.0.2-5.36.el6 20100205 C library: GNU C Library stable release version 2.12 uname -mrs: Linux 2.6.32-358.el6.s390x s390x Vendor version: Red Hat Enterprise Linux Server release 6.4 (Santiago) Nightly build on rhels390 ( RHEL 6.4 with gcc 4.4.7 on zEC12 (s390x) ) Started at 2014-01-14 03:45:26 CET Ended at 2014-01-14 03:54:54 CET Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... failed Last 20 lines of verbose log follow echo m_machine.c:56: error: ‘VexGuestArchState’ has no member named ‘guest_FP’ m_machine.c: In function ‘vgPlain_set_SP’: m_machine.c:63: error: ‘VexGuestArchState’ has no member named ‘guest_SP’ m_machine.c: In function ‘vgPlain_get_UnwindStartRegs’: m_machine.c:107: error: ‘VexGuestArchState’ has no member named ‘guest_SP’ make[3]: *** [libcoregrind_s390x_linux_a-m_machine.o] Error 1 make[3]: *** Waiting for unfinished jobs.... mv -f .deps/libcoregrind_s390x_linux_a-m_libcprint.Tpo .deps/libcoregrind_s390x_linux_a-m_libcprint.Po mv -f .deps/libcoregrind_s390x_linux_a-m_errormgr.Tpo .deps/libcoregrind_s390x_linux_a-m_errormgr.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcfile.Tpo .deps/libcoregrind_s390x_linux_a-m_libcfile.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcbase.Tpo .deps/libcoregrind_s390x_linux_a-m_libcbase.Po mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po make[3]: Leaving directory `/root/nightly/valgrind-new/coregrind' make[2]: *** [all] Error 2 make[2]: Leaving directory `/root/nightly/valgrind-new/coregrind' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/root/nightly/valgrind-new' make: *** [all] Error 2 ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... failed Last 20 lines of verbose log follow echo m_machine.c:56: error: ‘VexGuestArchState’ has no member named ‘guest_FP’ m_machine.c: In function ‘vgPlain_set_SP’: m_machine.c:63: error: ‘VexGuestArchState’ has no member named ‘guest_SP’ m_machine.c: In function ‘vgPlain_get_UnwindStartRegs’: m_machine.c:107: error: ‘VexGuestArchState’ has no member named ‘guest_SP’ make[3]: *** [libcoregrind_s390x_linux_a-m_machine.o] Error 1 make[3]: *** Waiting for unfinished jobs.... mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po mv -f .deps/libcoregrind_s390x_linux_a-m_options.Tpo .deps/libcoregrind_s390x_linux_a-m_options.Po mv -f .deps/libcoregrind_s390x_linux_a-m_errormgr.Tpo .deps/libcoregrind_s390x_linux_a-m_errormgr.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcbase.Tpo .deps/libcoregrind_s390x_linux_a-m_libcbase.Po mv -f .deps/libcoregrind_s390x_linux_a-m_mallocfree.Tpo .deps/libcoregrind_s390x_linux_a-m_mallocfree.Po mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po make[3]: Leaving directory `/root/nightly/valgrind-old/coregrind' make[2]: *** [all] Error 2 make[2]: Leaving directory `/root/nightly/valgrind-old/coregrind' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/root/nightly/valgrind-old' make: *** [all] Error 2 ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2014-01-14 03:50:31.000000000 +0100 --- new.short 2014-01-14 03:54:54.000000000 +0100 *************** *** 13,26 **** make[3]: *** Waiting for unfinished jobs.... ! mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po ! mv -f .deps/libcoregrind_s390x_linux_a-m_options.Tpo .deps/libcoregrind_s390x_linux_a-m_options.Po mv -f .deps/libcoregrind_s390x_linux_a-m_errormgr.Tpo .deps/libcoregrind_s390x_linux_a-m_errormgr.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcbase.Tpo .deps/libcoregrind_s390x_linux_a-m_libcbase.Po - mv -f .deps/libcoregrind_s390x_linux_a-m_mallocfree.Tpo .deps/libcoregrind_s390x_linux_a-m_mallocfree.Po mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po ! make[3]: Leaving directory `/root/nightly/valgrind-old/coregrind' make[2]: *** [all] Error 2 ! make[2]: Leaving directory `/root/nightly/valgrind-old/coregrind' make[1]: *** [all-recursive] Error 1 ! make[1]: Leaving directory `/root/nightly/valgrind-old' make: *** [all] Error 2 --- 13,26 ---- make[3]: *** Waiting for unfinished jobs.... ! mv -f .deps/libcoregrind_s390x_linux_a-m_libcprint.Tpo .deps/libcoregrind_s390x_linux_a-m_libcprint.Po mv -f .deps/libcoregrind_s390x_linux_a-m_errormgr.Tpo .deps/libcoregrind_s390x_linux_a-m_errormgr.Po + mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po + mv -f .deps/libcoregrind_s390x_linux_a-m_libcfile.Tpo .deps/libcoregrind_s390x_linux_a-m_libcfile.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcbase.Tpo .deps/libcoregrind_s390x_linux_a-m_libcbase.Po mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po ! make[3]: Leaving directory `/root/nightly/valgrind-new/coregrind' make[2]: *** [all] Error 2 ! make[2]: Leaving directory `/root/nightly/valgrind-new/coregrind' make[1]: *** [all-recursive] Error 1 ! make[1]: Leaving directory `/root/nightly/valgrind-new' make: *** [all] Error 2 --tools=none,memcheck --reps=5 --vg=../valgrind-new --vg=../valgrind-old vg_perf: './bigcode' not found or not a file (.) -- Running tests in perf ---------------------------------------------- real 0m0.091s user 0m0.006s sys 0m0.007s |
|
From: Maran P. <ma...@li...> - 2014-01-14 02:50:34
|
valgrind revision: 13775 VEX revision: 2804 C compiler: gcc (GCC) 4.7.0 20120604 (Red Hat 4.7.0-7) GDB: GNU gdb (GDB) Fedora (7.4.50.20120120-42.fc17) Assembler: GNU assembler version 2.22.52.0.1-10.fc17 20120131 C library: unknown uname -mrs: Linux 3.3.4-5.fc17.s390x s390x Vendor version: Fedora release 17 (Beefy Miracle) Nightly build on fedoras390 ( Fedora 17 with gcc 4.7.0 on z196 (s390x) ) Started at 2014-01-14 03:45:26 CET Ended at 2014-01-14 03:50:42 CET Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... failed Last 20 lines of verbose log follow echo m_machine.c:107:50: error: ‘VexGuestArchState’ has no member named ‘guest_SP’ m_machine.c: In function ‘vgPlain_get_FP’: m_machine.c:57:1: warning: control reaches end of non-void function [-Wreturn-type] m_machine.c: In function ‘vgPlain_get_SP’: m_machine.c:54:1: warning: control reaches end of non-void function [-Wreturn-type] make[3]: *** [libcoregrind_s390x_linux_a-m_machine.o] Error 1 make[3]: *** Waiting for unfinished jobs.... mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po mv -f .deps/libcoregrind_s390x_linux_a-m_options.Tpo .deps/libcoregrind_s390x_linux_a-m_options.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcbase.Tpo .deps/libcoregrind_s390x_linux_a-m_libcbase.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po mv -f .deps/libcoregrind_s390x_linux_a-m_oset.Tpo .deps/libcoregrind_s390x_linux_a-m_oset.Po mv -f .deps/libcoregrind_s390x_linux_a-m_mallocfree.Tpo .deps/libcoregrind_s390x_linux_a-m_mallocfree.Po mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po make[3]: Leaving directory `/root/nightly/valgrind-new/coregrind' make[2]: *** [all] Error 2 make[2]: Leaving directory `/root/nightly/valgrind-new/coregrind' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/root/nightly/valgrind-new' make: *** [all] Error 2 ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... failed Last 20 lines of verbose log follow echo m_machine.c:107:50: error: ‘VexGuestArchState’ has no member named ‘guest_SP’ m_machine.c: In function ‘vgPlain_get_FP’: m_machine.c:57:1: warning: control reaches end of non-void function [-Wreturn-type] m_machine.c: In function ‘vgPlain_get_SP’: m_machine.c:54:1: warning: control reaches end of non-void function [-Wreturn-type] mv -f .deps/libcoregrind_s390x_linux_a-m_libcprint.Tpo .deps/libcoregrind_s390x_linux_a-m_libcprint.Po make[3]: *** [libcoregrind_s390x_linux_a-m_machine.o] Error 1 make[3]: *** Waiting for unfinished jobs.... mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcfile.Tpo .deps/libcoregrind_s390x_linux_a-m_libcfile.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcbase.Tpo .deps/libcoregrind_s390x_linux_a-m_libcbase.Po mv -f .deps/libcoregrind_s390x_linux_a-m_mallocfree.Tpo .deps/libcoregrind_s390x_linux_a-m_mallocfree.Po mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po make[3]: Leaving directory `/root/nightly/valgrind-old/coregrind' make[2]: *** [all] Error 2 make[2]: Leaving directory `/root/nightly/valgrind-old/coregrind' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/root/nightly/valgrind-old' make: *** [all] Error 2 ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2014-01-14 03:48:19.228426321 +0100 --- new.short 2014-01-14 03:50:42.708423997 +0100 *************** *** 11,13 **** m_machine.c:54:1: warning: control reaches end of non-void function [-Wreturn-type] - mv -f .deps/libcoregrind_s390x_linux_a-m_libcprint.Tpo .deps/libcoregrind_s390x_linux_a-m_libcprint.Po make[3]: *** [libcoregrind_s390x_linux_a-m_machine.o] Error 1 --- 11,12 ---- *************** *** 15,26 **** mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po ! mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po ! mv -f .deps/libcoregrind_s390x_linux_a-m_libcfile.Tpo .deps/libcoregrind_s390x_linux_a-m_libcfile.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcbase.Tpo .deps/libcoregrind_s390x_linux_a-m_libcbase.Po mv -f .deps/libcoregrind_s390x_linux_a-m_mallocfree.Tpo .deps/libcoregrind_s390x_linux_a-m_mallocfree.Po mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po ! make[3]: Leaving directory `/root/nightly/valgrind-old/coregrind' make[2]: *** [all] Error 2 ! make[2]: Leaving directory `/root/nightly/valgrind-old/coregrind' make[1]: *** [all-recursive] Error 1 ! make[1]: Leaving directory `/root/nightly/valgrind-old' make: *** [all] Error 2 --- 14,26 ---- mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po ! mv -f .deps/libcoregrind_s390x_linux_a-m_options.Tpo .deps/libcoregrind_s390x_linux_a-m_options.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcbase.Tpo .deps/libcoregrind_s390x_linux_a-m_libcbase.Po + mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po + mv -f .deps/libcoregrind_s390x_linux_a-m_oset.Tpo .deps/libcoregrind_s390x_linux_a-m_oset.Po mv -f .deps/libcoregrind_s390x_linux_a-m_mallocfree.Tpo .deps/libcoregrind_s390x_linux_a-m_mallocfree.Po mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po ! make[3]: Leaving directory `/root/nightly/valgrind-new/coregrind' make[2]: *** [all] Error 2 ! make[2]: Leaving directory `/root/nightly/valgrind-new/coregrind' make[1]: *** [all-recursive] Error 1 ! make[1]: Leaving directory `/root/nightly/valgrind-new' make: *** [all] Error 2 --tools=none,memcheck --reps=5 --vg=../valgrind-new --vg=../valgrind-old vg_perf: './bigcode' not found or not a file (.) -- Running tests in perf ---------------------------------------------- real 0m0.045s user 0m0.006s sys 0m0.005s |
|
From: Maran P. <ma...@li...> - 2014-01-14 02:50:02
|
valgrind revision: 13775 VEX revision: 2804 C compiler: gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973] GDB: GNU gdb (GDB) SUSE (7.5.1-0.7.29) Assembler: GNU assembler (GNU Binutils; SUSE Linux Enterprise 11) 2.23.1 C library: GNU C Library stable release version 2.11.3 (20110527) uname -mrs: Linux 3.0.101-0.8-default s390x Vendor version: Welcome to SUSE Linux Enterprise Server 11 SP3 (s390x) - Kernel %r (%t). Nightly build on sless390 ( SUSE Linux Enterprise Server 11 SP1 gcc 4.3.4 on z196 (s390x) ) Started at 2014-01-14 03:45:01 CET Ended at 2014-01-14 03:49:51 CET Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... failed Last 20 lines of verbose log follow echo m_machine.c:56: error: 'VexGuestArchState' has no member named 'guest_FP' m_machine.c: In function 'vgPlain_set_SP': m_machine.c:63: error: 'VexGuestArchState' has no member named 'guest_SP' m_machine.c: In function 'vgPlain_get_UnwindStartRegs': m_machine.c:107: error: 'VexGuestArchState' has no member named 'guest_SP' make[3]: *** [libcoregrind_s390x_linux_a-m_machine.o] Error 1 make[3]: *** Waiting for unfinished jobs.... mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcprint.Tpo .deps/libcoregrind_s390x_linux_a-m_libcprint.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcfile.Tpo .deps/libcoregrind_s390x_linux_a-m_libcfile.Po mv -f .deps/libcoregrind_s390x_linux_a-m_errormgr.Tpo .deps/libcoregrind_s390x_linux_a-m_errormgr.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcbase.Tpo .deps/libcoregrind_s390x_linux_a-m_libcbase.Po mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po make[3]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-new/coregrind' make[2]: *** [all] Error 2 make[2]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-new/coregrind' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-new' make: *** [all] Error 2 ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... failed Last 20 lines of verbose log follow echo m_machine.c:56: error: 'VexGuestArchState' has no member named 'guest_FP' m_machine.c: In function 'vgPlain_set_SP': m_machine.c:63: error: 'VexGuestArchState' has no member named 'guest_SP' m_machine.c: In function 'vgPlain_get_UnwindStartRegs': m_machine.c:107: error: 'VexGuestArchState' has no member named 'guest_SP' make[3]: *** [libcoregrind_s390x_linux_a-m_machine.o] Error 1 make[3]: *** Waiting for unfinished jobs.... mv -f .deps/libcoregrind_s390x_linux_a-m_libcprint.Tpo .deps/libcoregrind_s390x_linux_a-m_libcprint.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcfile.Tpo .deps/libcoregrind_s390x_linux_a-m_libcfile.Po mv -f .deps/libcoregrind_s390x_linux_a-m_errormgr.Tpo .deps/libcoregrind_s390x_linux_a-m_errormgr.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcbase.Tpo .deps/libcoregrind_s390x_linux_a-m_libcbase.Po mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po make[3]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-old/coregrind' make[2]: *** [all] Error 2 make[2]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-old/coregrind' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-old' make: *** [all] Error 2 ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Tue Jan 14 03:47:42 2014 --- new.short Tue Jan 14 03:49:51 2014 *************** *** 13,16 **** make[3]: *** Waiting for unfinished jobs.... - mv -f .deps/libcoregrind_s390x_linux_a-m_libcprint.Tpo .deps/libcoregrind_s390x_linux_a-m_libcprint.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po --- 13,16 ---- make[3]: *** Waiting for unfinished jobs.... mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po + mv -f .deps/libcoregrind_s390x_linux_a-m_libcprint.Tpo .deps/libcoregrind_s390x_linux_a-m_libcprint.Po mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po *************** *** 20,26 **** mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po ! make[3]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-old/coregrind' make[2]: *** [all] Error 2 ! make[2]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-old/coregrind' make[1]: *** [all-recursive] Error 1 ! make[1]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-old' make: *** [all] Error 2 --- 20,26 ---- mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po ! make[3]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-new/coregrind' make[2]: *** [all] Error 2 ! make[2]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-new/coregrind' make[1]: *** [all-recursive] Error 1 ! make[1]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-new' make: *** [all] Error 2 --tools=none,memcheck --reps=5 --vg=../valgrind-new --vg=../valgrind-old vg_perf: './bigcode' not found or not a file (.) -- Running tests in perf ---------------------------------------------- real 0m0.016s user 0m0.006s sys 0m0.002s |
|
From: Rich C. <rc...@wi...> - 2014-01-14 02:45:03
|
valgrind revision: 13775
VEX revision: 2804
C compiler: gcc (SUSE Linux) 4.8.1 20130909 [gcc-4_8-branch revision 202388]
GDB: GNU gdb (GDB; openSUSE Factory) 7.6.50.20130731-cvs
Assembler: GNU assembler (GNU Binutils; openSUSE Factory) 2.23.2
C library: GNU C Library (GNU libc) stable release version 2.18 (git )
uname -mrs: Linux 3.11.4-3-desktop x86_64
Vendor version: Welcome to openSUSE 13.1 "Bottle" Beta 1 - Kernel %r (%t).
Nightly build on rodan ( Linux 3.11.4-3-desktop x86_64 )
Started at 2014-01-13 19:22:01 CST
Ended at 2014-01-13 20:44:48 CST
Results unchanged from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 588 tests, 7 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
memcheck/tests/dw4 (stderr)
memcheck/tests/err_disable3 (stderr)
memcheck/tests/err_disable4 (stderr)
memcheck/tests/threadname (stderr)
memcheck/tests/threadname_xml (stderr)
drd/tests/pth_mutex_reinit (stderr)
exp-sgcheck/tests/hackedbz2 (stderr)
=================================================
./valgrind-new/drd/tests/pth_mutex_reinit.stderr.diff
=================================================
--- pth_mutex_reinit.stderr.exp 2014-01-13 20:03:03.521980344 -0600
+++ pth_mutex_reinit.stderr.out 2014-01-13 20:37:37.907985379 -0600
@@ -1,11 +1,15 @@
+The object at address 0x........ is not a mutex.
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_mutex_reinit.c:?)
+
Mutex reinitialization: mutex 0x........, recursion count 0, owner 1.
at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
by 0x........: main (pth_mutex_reinit.c:?)
mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
by 0x........: main (pth_mutex_reinit.c:?)
Done.
-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/exp-sgcheck/tests/hackedbz2.stderr.diff-glibc28-amd64
=================================================
--- hackedbz2.stderr.exp-glibc28-amd64 2014-01-13 20:03:54.041516254 -0600
+++ hackedbz2.stderr.out 2014-01-13 20:43:57.868015935 -0600
@@ -1,7 +1,6 @@
Invalid read of size 1
- at 0x........: vex_strlen (hackedbz2.c:1006)
- by 0x........: add_to_myprintf_buf (hackedbz2.c:1284)
+ at 0x........: add_to_myprintf_buf (hackedbz2.c:1006)
by 0x........: vex_printf (hackedbz2.c:1155)
by 0x........: BZ2_compressBlock (hackedbz2.c:4039)
by 0x........: handle_compress (hackedbz2.c:4761)
=================================================
./valgrind-new/memcheck/tests/dw4.stderr.diff
=================================================
--- dw4.stderr.exp 2014-01-13 20:02:52.560864069 -0600
+++ dw4.stderr.out 2014-01-13 20:16:15.561382228 -0600
@@ -1,3 +1,11 @@
+
+parse_type_DIE: confused by:
+ <1><492>: DW_TAG_structure_type
+ DW_AT_signature : 8 byte signature: 9b d0 55 13 bb 1e e9 37
+
+WARNING: Serious error when reading debug info
+When reading debug info from /usr/local/src/valgrind/nightly/valgrind-new/memcheck/tests/dw4:
+parse_type_DIE: confused by the above DIE
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:49)
@@ -8,12 +16,10 @@
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:51)
- Location 0x........ is 0 bytes inside S2[0].i,
- a global variable declared at dw4.c:42
+ Address 0x........ is 4 bytes inside data symbol "S2"
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:52)
- Location 0x........ is 0 bytes inside local.i,
- declared at dw4.c:46, in frame #1 of thread 1
+ Address 0x........ is on thread 1's stack
=================================================
./valgrind-new/memcheck/tests/err_disable3.stderr.diff
=================================================
--- err_disable3.stderr.exp 2014-01-13 20:02:53.350872449 -0600
+++ err_disable3.stderr.out 2014-01-13 20:16:20.178431206 -0600
@@ -10,8 +10,6 @@
Thread 2:
Invalid read of size 1
at 0x........: err (err_disable3.c:25)
- by 0x........: child_fn (err_disable3.c:31)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable3.c:42)
=================================================
./valgrind-new/memcheck/tests/err_disable4.stderr.diff
=================================================
--- err_disable4.stderr.exp 2014-01-13 20:02:47.445809808 -0600
+++ err_disable4.stderr.out 2014-01-13 20:16:22.647457397 -0600
@@ -1501,8 +1501,6 @@
Thread x:
Invalid read of size 1
at 0x........: err (err_disable4.c:41)
- by 0x........: child_fn_2 (err_disable4.c:55)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable4.c:68)
=================================================
./valgrind-new/memcheck/tests/threadname.stderr.diff
=================================================
--- threadname.stderr.exp 2014-01-13 20:02:47.451809872 -0600
+++ threadname.stderr.out 2014-01-13 20:20:05.153817789 -0600
@@ -9,36 +9,12 @@
Thread 2:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_0 (threadname.c:53)
- ...
Address 0x........ is 0 bytes after a block of size 2 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
by 0x........: bad_things (threadname.c:15)
by 0x........: child_fn_0 (threadname.c:53)
...
-Thread 3 try1:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
- Address 0x........ is 0 bytes after a block of size 3 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
-
-Thread 4 012345678901234:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
- Address 0x........ is 0 bytes after a block of size 4 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
-
Thread 1:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
=================================================
./valgrind-new/memcheck/tests/threadname_xml.stderr.diff
=================================================
--- threadname_xml.stderr.exp 2014-01-13 20:02:53.793877148 -0600
+++ threadname_xml.stderr.out 2014-01-13 20:20:06.448831526 -0600
@@ -94,14 +94,6 @@
<file>threadname.c</file>
<line>...</line>
</frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_0</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
</stack>
<auxwhat>Address 0x........ is 0 bytes after a block of size 2 alloc'd</auxwhat>
<stack>
@@ -135,112 +127,6 @@
<error>
<unique>0x........</unique>
<tid>...</tid>
- <threadname>try1</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 3 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>malloc</fn>
- <dir>...</dir>
- <file>vg_replace_malloc.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
-</error>
-
-<error>
- <unique>0x........</unique>
- <tid>...</tid>
- <threadname>012345678901234</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_2</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 4 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
<truncated beyond 100 lines>
=================================================
./valgrind-old/drd/tests/pth_mutex_reinit.stderr.diff
=================================================
--- pth_mutex_reinit.stderr.exp 2014-01-13 19:22:25.989123056 -0600
+++ pth_mutex_reinit.stderr.out 2014-01-13 19:55:23.226097537 -0600
@@ -1,11 +1,15 @@
+The object at address 0x........ is not a mutex.
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_mutex_reinit.c:?)
+
Mutex reinitialization: mutex 0x........, recursion count 0, owner 1.
at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
by 0x........: main (pth_mutex_reinit.c:?)
mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
by 0x........: main (pth_mutex_reinit.c:?)
Done.
-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
=================================================
./valgrind-old/exp-sgcheck/tests/hackedbz2.stderr.diff-glibc28-amd64
=================================================
--- hackedbz2.stderr.exp-glibc28-amd64 2014-01-13 19:22:51.936398304 -0600
+++ hackedbz2.stderr.out 2014-01-13 20:01:44.000136778 -0600
@@ -1,7 +1,6 @@
Invalid read of size 1
- at 0x........: vex_strlen (hackedbz2.c:1006)
- by 0x........: add_to_myprintf_buf (hackedbz2.c:1284)
+ at 0x........: add_to_myprintf_buf (hackedbz2.c:1006)
by 0x........: vex_printf (hackedbz2.c:1155)
by 0x........: BZ2_compressBlock (hackedbz2.c:4039)
by 0x........: handle_compress (hackedbz2.c:4761)
=================================================
./valgrind-old/memcheck/tests/dw4.stderr.diff
=================================================
--- dw4.stderr.exp 2014-01-13 19:23:06.937557436 -0600
+++ dw4.stderr.out 2014-01-13 19:34:02.727514040 -0600
@@ -1,3 +1,11 @@
+
+parse_type_DIE: confused by:
+ <1><492>: DW_TAG_structure_type
+ DW_AT_signature : 8 byte signature: 9b d0 55 13 bb 1e e9 37
+
+WARNING: Serious error when reading debug info
+When reading debug info from /usr/local/src/valgrind/nightly/valgrind-old/memcheck/tests/dw4:
+parse_type_DIE: confused by the above DIE
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:49)
@@ -8,12 +16,10 @@
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:51)
- Location 0x........ is 0 bytes inside S2[0].i,
- a global variable declared at dw4.c:42
+ Address 0x........ is 4 bytes inside data symbol "S2"
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:52)
- Location 0x........ is 0 bytes inside local.i,
- declared at dw4.c:46, in frame #1 of thread 1
+ Address 0x........ is on thread 1's stack
=================================================
./valgrind-old/memcheck/tests/err_disable3.stderr.diff
=================================================
--- err_disable3.stderr.exp 2014-01-13 19:23:13.332625275 -0600
+++ err_disable3.stderr.out 2014-01-13 19:34:07.356563144 -0600
@@ -10,8 +10,6 @@
Thread 2:
Invalid read of size 1
at 0x........: err (err_disable3.c:25)
- by 0x........: child_fn (err_disable3.c:31)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable3.c:42)
=================================================
./valgrind-old/memcheck/tests/err_disable4.stderr.diff
=================================================
--- err_disable4.stderr.exp 2014-01-13 19:23:08.793577125 -0600
+++ err_disable4.stderr.out 2014-01-13 19:34:09.842589516 -0600
@@ -1501,8 +1501,6 @@
Thread x:
Invalid read of size 1
at 0x........: err (err_disable4.c:41)
- by 0x........: child_fn_2 (err_disable4.c:55)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable4.c:68)
=================================================
./valgrind-old/memcheck/tests/threadname.stderr.diff
=================================================
--- threadname.stderr.exp 2014-01-13 19:23:13.677628935 -0600
+++ threadname.stderr.out 2014-01-13 19:37:53.025957040 -0600
@@ -9,36 +9,12 @@
Thread 2:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_0 (threadname.c:53)
- ...
Address 0x........ is 0 bytes after a block of size 2 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
by 0x........: bad_things (threadname.c:15)
by 0x........: child_fn_0 (threadname.c:53)
...
-Thread 3 try1:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
- Address 0x........ is 0 bytes after a block of size 3 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
-
-Thread 4 012345678901234:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
- Address 0x........ is 0 bytes after a block of size 4 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
-
Thread 1:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
=================================================
./valgrind-old/memcheck/tests/threadname_xml.stderr.diff
=================================================
--- threadname_xml.stderr.exp 2014-01-13 19:23:08.799577188 -0600
+++ threadname_xml.stderr.out 2014-01-13 19:37:54.328970862 -0600
@@ -94,14 +94,6 @@
<file>threadname.c</file>
<line>...</line>
</frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_0</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
</stack>
<auxwhat>Address 0x........ is 0 bytes after a block of size 2 alloc'd</auxwhat>
<stack>
@@ -135,112 +127,6 @@
<error>
<unique>0x........</unique>
<tid>...</tid>
- <threadname>try1</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 3 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>malloc</fn>
- <dir>...</dir>
- <file>vg_replace_malloc.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
-</error>
-
-<error>
- <unique>0x........</unique>
- <tid>...</tid>
- <threadname>012345678901234</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_2</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 4 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
<truncated beyond 100 lines>
|
|
From: Mark W. <mj...@re...> - 2014-01-13 17:25:57
|
On Mon, 2014-01-13 at 16:04 +0100, Mark Wielaard wrote: > Hi Valgrind hackers, developers and users, > > Valgrind will have a devroom at FOSDEM 2014 on Sunday 2 February with > the follow talks: Apologies for messing up the formatting. Here it is again, hopefully better readable. If not, please just see: https://fosdem.org/2014/schedule/track/valgrind/ 10:00 - 10:25 Valgrind Support in the Eclipse IDE An Overview of the Eclipse Valgrind plugin provided by the Linux Tools Project Roland Grunberg 10:30 - 10:55 Testing of valgrind RPMs in RHEL Miroslav Franc 11:00 - 11:50 SimuVEX Using VEX in Symbolic Analysis Yan Shoshitaishvili 13:00 - 13:50 Helgrind: a constraint-based data race detector Julian Seward 14:00 - 14:25 Porting Valgrind on Solaris Ivo Raisr, Petr Pavlu 15:00 - 15:25 GDB, so where are we now? Status of GDB's ongoing target and run control projects Pedro Alves 15:30 - 15:55 Combining the power of Valgrind and GDB Philippe Waroquiers 16:00 - 16:25 BoF: Valgrind and GDB integration Crazy and fun ways to make the Valgrind/GDB combo more powerful Tom Tromey 16:30 - 17:45 BoF: Ideas, new features and directions for Valgrind Open discussion about small (or big) ideas to improve or change Valgrind. Mark Wielaard > More background information about the talks can be found at: > https://fosdem.org/2014/schedule/track/valgrind/ > > For the last session we are still looking for ideas to discuss. It will > be an open discussion, so anything you like can be discussed. The > current list of discussion topics is: > > * Release/bugfixing strategy/policy. > * Valgrind and transactional memory. > * Making Valgrind really multi-threaded, parallelising Memcheck, > parallelising the rest of the framework, and tools. > * Better support compiled/JITted code. Allowing the JIT compiler to > indicate to Valgrind the link between the JITted code and the source > code. > * Modify memcheck to report the last leaked pointer to a block integrate > "omega" as a memcheck option or omega as a separate tool. > http://www.brainmurders.eclipse.co.uk/omega.html > * Should we continue to support MacOS? > What about Valgrind on MS-Windows? > * Make Callgrind work sanely on ARM. > * Redo the JIT framework to reduce baseline overheads. > * Packaging valgrind for distros, handling patches, suppressions, etc. > * Flexible heuristic possibly leaked support. i.e. let the user specific > an "expression" in a suppression file that if true would transform a > possibly leaked into a reachable. > * An interactive SQL relational interface to Valgrind data structures > https://github.com/mfragkoulis/PiCO_QL/tree/master/src/Valgrind-mod > > I'll update the abstract of the BoF with the above and any other topics > people will bring up: > https://fosdem.org/2014/schedule/event/valgrind_bof/ > > If you want to put something on the Valgrind BoF agenda please send a > small description (one or two paragraphs) to the the moderator Mark > Wielaard mj...@re... with in the subject: "FOSDEM devroom > discuss: ..." If you want to discuss a somewhat larger topic please do > feel free to send two or three slides in advance. Mark will collect > ideas/suggestions/... and present these and coordinate the discussion > (and keep track of the time, so every idea will be discussed). > > Call For Video Volunteers > > The FOSDEM organization can provide us with equipment to record some or > all of the talks in our devroom. But we need at volunteers to do the > actual recordings. An ideal candidate for this job would be someone who > is going to be watching talks in the Valgrind devroom most (or all) of > the time anyway, and who doesn't mind watching after a camera and/or an > audio mixer while watching the talk. > > While some A/V experience is obviously useful for the volunteer, it is > absolutely not required; FOSDEM will provide the right gear and help set > it up, and FOSDEM organizers will also provide enough information so the > volunteers know what to do. This will include a live training session > during the opening talk (in Janson) for those who want it. > > If you can and want to help record talks/discussions in the Valgrind > devroom that would be really appreciated. |
|
From: Mark W. <mj...@re...> - 2014-01-13 15:05:31
|
Hi Valgrind hackers, developers and users, Valgrind will have a devroom at FOSDEM 2014 on Sunday 2 February with the follow talks: Valgrind Support in the Eclipse IDE Roland Grunberg 10:00 10:25 Testing of valgrind RPMs in RHEL Miroslav Franc 10:30 10:55 SimuVEX Yan Shoshitaishvili 11:00 11:50 Helgrind: a constraint-based data race detector Julian Seward 13:00 13:50 Porting Valgrind on Solaris Ivo Raisr, Petr Pavlu 14:00 14:25 GDB, so where are we now? Pedro Alves 15:00 15:25 Combining the power of Valgrind and GDB Philippe Waroquiers 15:30 15:55 BoF: Valgrind and GDB integration Tom Tromey 16:00 16:25 BoF: Ideas, new features and directions for Valgrind Mark Wielaard 16:30 17:45 More background information about the talks can be found at: https://fosdem.org/2014/schedule/track/valgrind/ For the last session we are still looking for ideas to discuss. It will be an open discussion, so anything you like can be discussed. The current list of discussion topics is: * Release/bugfixing strategy/policy. * Valgrind and transactional memory. * Making Valgrind really multi-threaded, parallelising Memcheck, parallelising the rest of the framework, and tools. * Better support compiled/JITted code. Allowing the JIT compiler to indicate to Valgrind the link between the JITted code and the source code. * Modify memcheck to report the last leaked pointer to a block integrate "omega" as a memcheck option or omega as a separate tool. http://www.brainmurders.eclipse.co.uk/omega.html * Should we continue to support MacOS? What about Valgrind on MS-Windows? * Make Callgrind work sanely on ARM. * Redo the JIT framework to reduce baseline overheads. * Packaging valgrind for distros, handling patches, suppressions, etc. * Flexible heuristic possibly leaked support. i.e. let the user specific an "expression" in a suppression file that if true would transform a possibly leaked into a reachable. * An interactive SQL relational interface to Valgrind data structures https://github.com/mfragkoulis/PiCO_QL/tree/master/src/Valgrind-mod I'll update the abstract of the BoF with the above and any other topics people will bring up: https://fosdem.org/2014/schedule/event/valgrind_bof/ If you want to put something on the Valgrind BoF agenda please send a small description (one or two paragraphs) to the the moderator Mark Wielaard mj...@re... with in the subject: "FOSDEM devroom discuss: ..." If you want to discuss a somewhat larger topic please do feel free to send two or three slides in advance. Mark will collect ideas/suggestions/... and present these and coordinate the discussion (and keep track of the time, so every idea will be discussed). Call For Video Volunteers The FOSDEM organization can provide us with equipment to record some or all of the talks in our devroom. But we need at volunteers to do the actual recordings. An ideal candidate for this job would be someone who is going to be watching talks in the Valgrind devroom most (or all) of the time anyway, and who doesn't mind watching after a camera and/or an audio mixer while watching the talk. While some A/V experience is obviously useful for the volunteer, it is absolutely not required; FOSDEM will provide the right gear and help set it up, and FOSDEM organizers will also provide enough information so the volunteers know what to do. This will include a live training session during the opening talk (in Janson) for those who want it. If you can and want to help record talks/discussions in the Valgrind devroom that would be really appreciated. |
|
From: <sv...@va...> - 2014-01-13 11:50:39
|
Author: sewardj
Date: Mon Jan 13 11:50:17 2014
New Revision: 13775
Log:
Update implementation notes for the arm64-linux port.
Added:
trunk/README.aarch64
- copied, changed from r13774, trunk/ARM64_TIDYUPS.txt
Modified:
trunk/ARM64_TIDYUPS.txt
trunk/Makefile.am
Modified: trunk/Makefile.am
==============================================================================
--- trunk/Makefile.am (original)
+++ trunk/Makefile.am Mon Jan 13 11:50:17 2014
@@ -104,6 +104,7 @@
README.android \
README.android_emulator \
README.mips \
+ README.aarch64 \
NEWS.old \
valgrind.pc.in \
valgrind.spec.in \
Copied: trunk/README.aarch64 (from r13774, trunk/ARM64_TIDYUPS.txt)
==============================================================================
--- trunk/ARM64_TIDYUPS.txt (original)
+++ trunk/README.aarch64 Mon Jan 13 11:50:17 2014
@@ -1,21 +1,67 @@
-## HOW TO Cross-CONFIGURE
+Status
+~~~~~~
-export CC=aarch64-linux-gnu-gcc
-export LD=aarch64-linux-gnu-ld
-export AR=aarch64-linux-gnu-ar
+As of Jan 2014 the trunk contains a port to AArch64 ARMv8 -- loosely,
+the 64-bit ARM architecture. Currently it supports integer and FP
+instructions and can run almost anything generated by gcc-4.7.2 -O2.
+The port is under active development.
-./autogen.sh
-./configure --prefix=`pwd`/Inst --host=aarch64-unknown-linux --enable-only64bit
+Current limitations, as of mid-Jan 2014.
-##############################################################
+* threaded apps won't work, due to inadequate sys_clone() support.
-UnwindStartRegs -- what should that contain?
+* almost no support of vector (SIMD) instructions
+* Integration with the built in GDB server doesn't work yet.
+There has been extensive testing of the baseline simulation of integer
+and FP instructions. Memcheck is also believed to work, at least for
+small examples. Other tools appear to at least not crash when running
+/bin/date.
+
+
+Building
+~~~~~~~~
+
+You could probably build it directly on a target OS, using the normal
+non-cross scheme
+
+ ./autogen.sh ; ./configure --prefix=.. ; make ; make install
+
+Development so far was however done by cross compiling, viz:
+
+ export CC=aarch64-linux-gnu-gcc
+ export LD=aarch64-linux-gnu-ld
+ export AR=aarch64-linux-gnu-ar
+
+ ./autogen.sh
+ ./configure --prefix=`pwd`/Inst --host=aarch64-unknown-linux \
+ --enable-only64bit
+ make -j4
+ make -j4 install
+
+Doing this assumes that the install path (`pwd`/Inst) is valid on
+both host and target, which isn't normally the case. To avoid
+this limitation, do instead:
+
+ ./configure --prefix=/install/path/on/target \
+ --host=aarch64-unknown-linux \
+ --enable-only64bit
+ make -j4
+ make -j4 install DESTDIR=/a/temp/dir/on/host
+ # and then copy the contents of DESTDIR to the target.
+
+See README.android for more examples of cross-compile building.
-vki-arm64-linux.h: vki_sigaction_base
+Implementation tidying-up/TODO notes
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+UnwindStartRegs -- what should that contain?
+
+
+vki-arm64-linux.h: vki_sigaction_base
I really don't think that __vki_sigrestore_t sa_restorer
should be present. Adding it surely puts sa_mask at a wrong
offset compared to (kernel) reality. But not having it causes
@@ -32,7 +78,6 @@
it to __vki_uint128_t, but what's the defn of that?
-
m_debuginfo/priv_storage.h: need proper defn of DiCfSI
@@ -48,32 +93,28 @@
I'd say the amd64 version has padding it shouldn't have. Check?
-
syswrap-linux.c run_a_thread_NORETURN assembly sections
seems like tst->os_state.exitcode has word type
in which case the ppc64_linux use of lwz to read it, is wrong
-
syswrap-linux.c ML_(do_fork_clone)
assuming that VGP_arm64_linux is the same as VGP_arm_linux here
-
dispatch-arm64-linux.S: FIXME: set up FP control state before
entering generated code. Also fix screwy indentation.
+
dispatcher-ery general: what's a good (predictor-friendly) way to
branch to a register?
-
in vki-arm64-scnums.h
//#if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT)
Probably want to reenable that and clean up accordingly
-
putIRegXXorZR: figure out a way that the computed value is actually
used, so as to keep any memory reads that might generate it, alive.
(else the simulation can lose exceptions). At least, for writes to
@@ -81,42 +122,32 @@
integer instructions, that write to a register, cause exceptions?
-
loads/stores: generate stack alignment checks as necessary
-
fix barrier insns: ISB, DMB
-
fix atomic loads/stores
-
FMADD/FMSUB/FNMADD/FNMSUB: generate and use the relevant fused
IROps so as to avoid double rounding
-
ARM64Instr_Call getRegUsage: re-check relative to what
getAllocableRegs_ARM64 makes available
-
Make dispatch-arm64-linux.S save any callee-saved Q regs
I think what is required is to save D8-D15 and nothing more than that.
-
wrapper for __NR3264_fstat -- correct?
-
-PRE(sys_clone): get rid of references to vki_modify_ldt_t
-and the definition of it in vki-arm64-linux.h. Ditto for
-32 bit arm.
-
+PRE(sys_clone): get rid of references to vki_modify_ldt_t and the
+definition of it in vki-arm64-linux.h. Ditto for 32 bit arm.
sigframe-arm64-linux.c: build_sigframe: references to nonexistent
@@ -124,60 +155,54 @@
replaced by zero. Also in synth_ucontext.
-
m_debugger.c:
uregs.pstate = LibVEX_GuestARM64_get_nzcv(vex); /* is this correct? */
Is that remotely correct?
-
host_arm64_defs.c: emit_ARM64INstr:
ARM64in_VDfromX and ARM64in_VQfromXX: use simple top-half zeroing
MOVs to vector registers instead of INS Vd.D[0], Xreg, to avoid false
dependencies on the top half of the register. (Or at least check
-the semantocs of INS Vd.D[0] to see if it zeroes out the top.)
-
+the semantics of INS Vd.D[0] to see if it zeroes out the top.)
preferredVectorSubTypeFromSize: review perf effects and decide
on a types-for-subparts policy
-
fold_IRExpr_Unop: add a reduction rule for this
1Sto64(CmpNEZ64( Or64(GET:I64(1192),GET:I64(1184)) ))
vis 1Sto64(CmpNEZ64(x)) --> CmpwNEZ64(x)
-
check insn selection for memcheck-only primops:
Left64 CmpwNEZ64 V128to64 V128HIto64 1Sto64 CmpNEZ64 CmpNEZ32
widen_z_8_to_64 1Sto32 Left32 32HLto64 CmpwNEZ32 CmpNEZ8
-
isel: get rid of various cases where zero is put into a register
and just use xzr instead. Especially for CmpNEZ64/32. And for
writing zeroes into the CC thunk fields.
-
/* Keep this list in sync with that in iselNext below */
/* Keep this list in sync with that for Ist_Exit above */
uh .. they are not in sync
-
very stupid:
imm64 x23, 0xFFFFFFFFFFFFFFA0
17 F4 9F D2 F7 FF BF F2 F7 FF DF F2 F7 FF FF F2
-
valgrind.h: fix VALGRIND_ALIGN_STACK/VALGRIND_RESTORE_STACK,
also add CFI annotations
-
could possibly bring r29 into use, which be useful as it is
callee saved
+
+
+ubfm/sbfm etc: special case cases that are simple shifts, as iropt
+can't always simplify the general-case IR to a shift in such cases.
|
|
From: Philippe W. <phi...@sk...> - 2014-01-13 06:25:09
|
valgrind revision: 13774 VEX revision: 2804 C compiler: gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8) GDB: GNU gdb (GDB) Fedora (7.5.1-37.fc18) Assembler: GNU assembler version 2.23.51.0.1-7.fc18 20120806 C library: GNU C Library stable release version 2.16 uname -mrs: Linux 3.8.8-202.fc18.ppc64p7 ppc64 Vendor version: Fedora release 18 (Spherical Cow) Nightly build on gcc110 ( Fedora release 18 (Spherical Cow), ppc64 ) Started at 2014-01-12 20:00:17 PST Ended at 2014-01-12 22:22:09 PST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 571 tests, 32 stderr failures, 3 stdout failures, 0 stderrB failures, 0 stdoutB failures, 2 post failures == memcheck/tests/linux/getregset (stdout) memcheck/tests/linux/getregset (stderr) memcheck/tests/ppc64/power_ISA2_05 (stdout) memcheck/tests/supp_unknown (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) massif/tests/big-alloc (post) massif/tests/deep-D (post) helgrind/tests/annotate_rwlock (stderr) helgrind/tests/free_is_write (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/locked_vs_unlocked1_fwd (stderr) helgrind/tests/locked_vs_unlocked1_rev (stderr) helgrind/tests/locked_vs_unlocked2 (stderr) helgrind/tests/locked_vs_unlocked3 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_cond_destroy_busy (stderr) helgrind/tests/pth_destroy_cond (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) --tools=none,memcheck,callgrind,helgrind,cachegrind,drd,massif --reps=3 --vg=../valgrind-new --vg=../valgrind-old -- Running tests in perf ---------------------------------------------- -- bigcode1 -- bigcode1 valgrind-new:0.23s no: 1.5s ( 6.6x, -----) me: 2.8s (12.3x, -----) ca:18.5s (80.5x, -----) he: 1.7s ( 7.5x, -----) ca: 5.4s (23.4x, -----) dr: 1.7s ( 7.3x, -----) ma: 2.1s ( 9.1x, -----) bigcode1 valgrind-old:0.23s no: 1.5s ( 6.7x, -2.0%) me: 2.9s (12.5x, -2.1%) ca:18.8s (81.5x, -1.3%) he: 1.7s ( 7.5x, 0.0%) ca: 5.3s (23.1x, 1.3%) dr: 1.7s ( 7.2x, 1.8%) ma: 2.1s ( 9.3x, -1.4%) -- bigcode2 -- bigcode2 valgrind-new:0.23s no: 1.5s ( 6.7x, -----) me: 2.9s (12.7x, -----) ca:18.7s (81.5x, -----) he: 2.1s ( 9.1x, -----) ca: 5.5s (23.8x, -----) dr: 1.8s ( 8.0x, -----) ma: 2.1s ( 9.2x, -----) bigcode2 valgrind-old:0.23s no: 1.5s ( 6.6x, 0.7%) me: 3.0s (13.1x, -3.1%) ca:18.6s (81.0x, 0.5%) he: 2.1s ( 9.1x, 0.0%) ca: 5.5s (23.8x, 0.2%) dr: 1.8s ( 8.0x, 0.5%) ma: 2.1s ( 9.2x, 0.0%) -- bz2 -- bz2 valgrind-new:0.73s no: 4.6s ( 6.2x, -----) me:11.7s (16.1x, -----) ca:26.6s (36.5x, -----) he:14.6s (20.0x, -----) ca:24.4s (33.5x, -----) dr:20.3s (27.8x, -----) ma: 4.7s ( 6.4x, -----) bz2 valgrind-old:0.73s no: 4.5s ( 6.2x, 0.4%) me:11.8s (16.2x, -0.9%) ca:26.6s (36.5x, -0.0%) he:14.6s (20.0x, -0.1%) ca:24.4s (33.4x, 0.2%) dr:19.2s (26.3x, 5.4%) ma: 4.7s ( 6.4x, 0.0%) -- fbench -- fbench valgrind-new:0.34s no: 2.1s ( 6.2x, -----) me: 5.3s (15.5x, -----) ca: 8.5s (25.1x, -----) he: 5.3s (15.5x, -----) ca: 7.4s (21.8x, -----) dr: 5.0s (14.6x, -----) ma: 2.1s ( 6.3x, -----) fbench valgrind-old:0.34s no: 2.1s ( 6.3x, -1.9%) me: 5.3s (15.6x, -0.6%) ca: 8.6s (25.4x, -0.9%) he: 5.2s (15.4x, 0.8%) ca: 7.5s (22.1x, -1.1%) dr: 5.0s (14.7x, -0.6%) ma: 2.1s ( 6.3x, -0.5%) -- ffbench -- ffbench valgrind-new:0.44s no: 1.3s ( 3.0x, -----) me: 2.6s ( 5.9x, -----) ca: 2.5s ( 5.8x, -----) he: 7.1s (16.2x, -----) ca: 6.9s (15.7x, -----) dr: 5.0s (11.4x, -----) ma: 1.0s ( 2.3x, -----) ffbench valgrind-old:0.44s no: 1.3s ( 3.0x, 1.5%) me: 2.6s ( 5.8x, 1.2%) ca: 2.5s ( 5.8x, 0.4%) he: 6.9s (15.7x, 3.1%) ca: 7.0s (15.9x, -1.6%) dr: 5.1s (11.5x, -0.6%) ma: 1.0s ( 2.3x, -1.0%) -- heap -- heap valgrind-new:0.41s no: 2.4s ( 5.8x, -----) me: 9.9s (24.3x, -----) ca:13.3s (32.6x, -----) he:12.0s (29.3x, -----) ca:12.7s (30.9x, -----) dr: 8.3s (20.3x, -----) ma: 8.6s (20.9x, -----) heap valgrind-old:0.41s no: 2.4s ( 5.8x, 0.4%) me:10.0s (24.3x, -0.2%) ca:13.4s (32.6x, -0.1%) he:11.7s (28.5x, 2.5%) ca:12.1s (29.4x, 4.8%) dr: 8.2s (20.1x, 0.8%) ma: 8.9s (21.8x, -4.1%) -- heap_pdb4 -- heap_pdb4 valgrind-new:0.42s no: 2.6s ( 6.1x, -----) me:14.0s (33.4x, -----) ca:14.4s (34.2x, -----) he:13.0s (30.9x, -----) ca:13.2s (31.3x, -----) dr: 9.2s (22.0x, -----) ma: 8.7s (20.8x, -----) heap_pdb4 valgrind-old:0.42s no: 2.6s ( 6.1x, 0.8%) me:14.2s (33.7x, -1.1%) ca:14.3s (34.1x, 0.2%) he:13.1s (31.3x, -1.2%) ca:13.1s (31.2x, 0.5%) dr: 9.1s (21.7x, 1.6%) ma: 9.2s (21.9x, -5.2%) -- many-loss-records -- many-loss-records valgrind-new:0.03s no: 0.5s (17.3x, -----) me: 2.2s (74.0x, -----) ca: 1.9s (63.7x, -----) he: 1.8s (60.3x, -----) ca: 1.9s (61.7x, -----) dr: 1.5s (51.0x, -----) ma: 1.6s (53.0x, -----) many-loss-records valgrind-old:0.03s no: 0.5s (17.3x, 0.0%) me: 2.2s (74.0x, 0.0%) ca: 1.9s (63.3x, 0.5%) he: 1.8s (60.0x, 0.6%) ca: 1.9s (61.7x, 0.0%) dr: 1.5s (50.7x, 0.7%) ma: 1.7s (55.7x, -5.0%) -- many-xpts -- many-xpts valgrind-new:0.07s no: 0.7s (10.6x, -----) me: 3.4s (49.0x, -----) ca: 4.7s (67.3x, -----) he: 4.8s (68.9x, -----) ca: 2.9s (41.4x, -----) dr: 2.3s (32.7x, -----) ma: 2.3s (32.3x, -----) many-xpts valgrind-old:0.07s no: 0.7s (10.4x, 1.4%) me: 3.4s (48.9x, 0.3%) ca: 4.7s (67.7x, -0.6%) he: 4.8s (69.0x, -0.2%) ca: 2.9s (41.0x, 1.0%) dr: 2.3s (32.4x, 0.9%) ma: 2.4s (34.1x, -5.8%) -- sarp -- sarp valgrind-new:0.02s no: 0.4s (19.5x, -----) me: 3.1s (157.5x, -----) ca: 2.9s (146.0x, -----) he:11.0s (551.0x, -----) ca: 1.7s (85.0x, -----) dr: 1.1s (53.0x, -----) ma: 0.4s (21.0x, -----) sarp valgrind-old:0.02s no: 0.4s (20.0x, -2.6%) me: 3.2s (159.0x, -1.0%) ca: 3.0s (147.5x, -1.0%) he:11.1s (554.0x, -0.5%) ca: 1.7s (84.5x, 0.6%) dr: 1.1s (54.0x, -1.9%) ma: 0.4s (22.0x, -4.8%) -- tinycc -- tinycc valgrind-new:0.28s no: 3.0s (10.7x, -----) me:14.1s (50.4x, -----) ca:17.6s (62.7x, -----) he:19.0s (67.9x, -----) ca:15.9s (56.8x, -----) dr:12.4s (44.2x, -----) ma: 3.8s (13.6x, -----) tinycc valgrind-old:0.28s no: 3.0s (10.7x, 0.0%) me:14.2s (50.5x, -0.2%) ca:17.9s (64.0x, -2.1%) he:19.2s (68.5x, -0.8%) ca:15.6s (55.7x, 1.8%) dr:12.1s (43.1x, 2.5%) ma: 3.8s (13.6x, -0.3%) -- Finished tests in perf ---------------------------------------------- == 11 programs, 154 timings ================= real 54m24.805s user 52m51.003s sys 0m20.104s |
|
From: Rich C. <rc...@wi...> - 2014-01-13 04:52:34
|
valgrind revision: 13774 VEX revision: 2804 C compiler: gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012] GDB: GNU gdb (GDB) SUSE (7.5.1-2.1.1) Assembler: GNU assembler (GNU Binutils; openSUSE 12.3) 2.23.1 C library: GNU C Library (GNU libc) stable release version 2.17 (git c758a6861537) uname -mrs: Linux 3.7.9-1.1-desktop x86_64 Vendor version: Welcome to openSUSE 12.3 "Dartmouth" Beta 1 - Kernel %r (%t). Nightly build on ultra ( gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012] Linux 3.7.9-1.1-desktop x86_64 ) Started at 2014-01-12 21:30:01 CST Ended at 2014-01-12 22:52:22 CST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 666 tests, 0 stderr failures, 0 stdout failures, 1 stderrB failure, 0 stdoutB failures, 0 post failures == gdbserver_tests/mssnapshot (stderrB) ================================================= ./valgrind-new/gdbserver_tests/mssnapshot.stderrB.diff ================================================= --- mssnapshot.stderrB.exp 2014-01-12 22:35:46.791268829 -0600 +++ mssnapshot.stderrB.out 2014-01-12 22:41:31.942610178 -0600 @@ -1,5 +1,11 @@ relaying data between gdb and process .... +Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2 +Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158" vgdb-error value changed from 0 to 999999 +Missing separate debuginfo for /lib64/libpthread.so.0 +Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef" +Missing separate debuginfo for /lib64/libc.so.6 +Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7" general valgrind monitor commands: help [debug] : monitor command help. With debug: + debugging commands v.wait [<ms>] : sleep <ms> (default 0) then continue ================================================= ./valgrind-old/gdbserver_tests/mssnapshot.stderrB.diff ================================================= --- mssnapshot.stderrB.exp 2014-01-12 21:45:44.607536458 -0600 +++ mssnapshot.stderrB.out 2014-01-12 21:59:07.123994439 -0600 @@ -1,5 +1,11 @@ relaying data between gdb and process .... +Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2 +Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158" vgdb-error value changed from 0 to 999999 +Missing separate debuginfo for /lib64/libpthread.so.0 +Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef" +Missing separate debuginfo for /lib64/libc.so.6 +Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7" general valgrind monitor commands: help [debug] : monitor command help. With debug: + debugging commands v.wait [<ms>] : sleep <ms> (default 0) then continue |
|
From: Maran P. <ma...@li...> - 2014-01-13 03:33:15
|
valgrind revision: 13774
VEX revision: 2804
C compiler: gcc (GCC) 4.7.0 20120604 (Red Hat 4.7.0-7)
GDB: GNU gdb (GDB) Fedora (7.4.50.20120120-42.fc17)
Assembler: GNU assembler version 2.22.52.0.1-10.fc17 20120131
C library: unknown
uname -mrs: Linux 3.3.4-5.fc17.s390x s390x
Vendor version: Fedora release 17 (Beefy Miracle)
Nightly build on fedoras390 ( Fedora 17 with gcc 4.7.0 on z196 (s390x) )
Started at 2014-01-13 03:45:25 CET
Ended at 2014-01-13 04:33:26 CET
Results differ from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... failed
Last 20 lines of verbose log follow echo
m_machine.c: In function ‘vgPlain_set_SP’:
m_machine.c:63:4: error: ‘VexGuestArchState’ has no member named ‘guest_SP’
m_machine.c: In function ‘vgPlain_get_UnwindStartRegs’:
m_machine.c:107:50: error: ‘VexGuestArchState’ has no member named ‘guest_SP’
m_machine.c: In function ‘vgPlain_get_FP’:
m_machine.c:57:1: warning: control reaches end of non-void function [-Wreturn-type]
m_machine.c: In function ‘vgPlain_get_SP’:
m_machine.c:54:1: warning: control reaches end of non-void function [-Wreturn-type]
make[3]: *** [libcoregrind_s390x_linux_a-m_machine.o] Error 1
make[3]: *** Waiting for unfinished jobs....
mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po
mv -f .deps/libcoregrind_s390x_linux_a-m_options.Tpo .deps/libcoregrind_s390x_linux_a-m_options.Po
mv -f .deps/libcoregrind_s390x_linux_a-m_mallocfree.Tpo .deps/libcoregrind_s390x_linux_a-m_mallocfree.Po
mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po
make[3]: Leaving directory `/root/nightly/valgrind-new/coregrind'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/root/nightly/valgrind-new/coregrind'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/nightly/valgrind-new'
make: *** [all] Error 2
=================================================
== Results from 24 hours ago ==
=================================================
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 647 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
helgrind/tests/pth_cond_destroy_busy (stderr)
helgrind/tests/tc18_semabuse (stderr)
helgrind/tests/tc20_verifywrap (stderr)
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short 2014-01-13 04:01:59.678433025 +0100
--- new.short 2014-01-13 04:33:26.418431946 +0100
***************
*** 3,13 ****
Configuring valgrind ... done
! Building valgrind ... done
! Running regression tests ... failed
!
! Regression test results follow
!
! == 647 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
! helgrind/tests/pth_cond_destroy_busy (stderr)
! helgrind/tests/tc18_semabuse (stderr)
! helgrind/tests/tc20_verifywrap (stderr)
--- 3,26 ----
Configuring valgrind ... done
! Building valgrind ... failed
+ Last 20 lines of verbose log follow echo
+ m_machine.c: In function ‘vgPlain_set_SP’:
+ m_machine.c:63:4: error: ‘VexGuestArchState’ has no member named ‘guest_SP’
+ m_machine.c: In function ‘vgPlain_get_UnwindStartRegs’:
+ m_machine.c:107:50: error: ‘VexGuestArchState’ has no member named ‘guest_SP’
+ m_machine.c: In function ‘vgPlain_get_FP’:
+ m_machine.c:57:1: warning: control reaches end of non-void function [-Wreturn-type]
+ m_machine.c: In function ‘vgPlain_get_SP’:
+ m_machine.c:54:1: warning: control reaches end of non-void function [-Wreturn-type]
+ make[3]: *** [libcoregrind_s390x_linux_a-m_machine.o] Error 1
+ make[3]: *** Waiting for unfinished jobs....
+ mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po
+ mv -f .deps/libcoregrind_s390x_linux_a-m_options.Tpo .deps/libcoregrind_s390x_linux_a-m_options.Po
+ mv -f .deps/libcoregrind_s390x_linux_a-m_mallocfree.Tpo .deps/libcoregrind_s390x_linux_a-m_mallocfree.Po
+ mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po
+ make[3]: Leaving directory `/root/nightly/valgrind-new/coregrind'
+ make[2]: *** [all] Error 2
+ make[2]: Leaving directory `/root/nightly/valgrind-new/coregrind'
+ make[1]: *** [all-recursive] Error 1
+ make[1]: Leaving directory `/root/nightly/valgrind-new'
+ make: *** [all] Error 2
--tools=none,memcheck --reps=5 --vg=../valgrind-new --vg=../valgrind-old
vg_perf: './bigcode' not found or not a file (.)
-- Running tests in perf ----------------------------------------------
real 0m0.041s
user 0m0.006s
sys 0m0.005s
|
|
From: Maran P. <ma...@li...> - 2014-01-13 03:18:58
|
valgrind revision: 13774
VEX revision: 2804
C compiler: gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973]
GDB: GNU gdb (GDB) SUSE (7.5.1-0.7.29)
Assembler: GNU assembler (GNU Binutils; SUSE Linux Enterprise 11) 2.23.1
C library: GNU C Library stable release version 2.11.3 (20110527)
uname -mrs: Linux 3.0.101-0.8-default s390x
Vendor version: Welcome to SUSE Linux Enterprise Server 11 SP3 (s390x) - Kernel %r (%t).
Nightly build on sless390 ( SUSE Linux Enterprise Server 11 SP1 gcc 4.3.4 on z196 (s390x) )
Started at 2014-01-13 03:45:01 CET
Ended at 2014-01-13 04:18:46 CET
Results differ from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... failed
Last 20 lines of verbose log follow echo
m_machine.c:56: error: 'VexGuestArchState' has no member named 'guest_FP'
m_machine.c: In function 'vgPlain_set_SP':
m_machine.c:63: error: 'VexGuestArchState' has no member named 'guest_SP'
m_machine.c: In function 'vgPlain_get_UnwindStartRegs':
m_machine.c:107: error: 'VexGuestArchState' has no member named 'guest_SP'
make[3]: *** [libcoregrind_s390x_linux_a-m_machine.o] Error 1
make[3]: *** Waiting for unfinished jobs....
mv -f .deps/libcoregrind_s390x_linux_a-m_libcprint.Tpo .deps/libcoregrind_s390x_linux_a-m_libcprint.Po
mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po
mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po
mv -f .deps/libcoregrind_s390x_linux_a-m_libcfile.Tpo .deps/libcoregrind_s390x_linux_a-m_libcfile.Po
mv -f .deps/libcoregrind_s390x_linux_a-m_errormgr.Tpo .deps/libcoregrind_s390x_linux_a-m_errormgr.Po
mv -f .deps/libcoregrind_s390x_linux_a-m_libcbase.Tpo .deps/libcoregrind_s390x_linux_a-m_libcbase.Po
mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po
make[3]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-new/coregrind'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-new/coregrind'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-new'
make: *** [all] Error 2
=================================================
== Results from 24 hours ago ==
=================================================
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 642 tests, 1 stderr failure, 0 stdout failures, 6 stderrB failures, 0 stdoutB failures, 0 post failures ==
gdbserver_tests/mcbreak (stderrB)
gdbserver_tests/mcclean_after_fork (stderrB)
gdbserver_tests/mcleak (stderrB)
gdbserver_tests/mcmain_pic (stderrB)
gdbserver_tests/mcvabits (stderrB)
gdbserver_tests/mssnapshot (stderrB)
helgrind/tests/pth_cond_destroy_busy (stderr)
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short Mon Jan 13 03:59:35 2014
--- new.short Mon Jan 13 04:18:46 2014
***************
*** 3,17 ****
Configuring valgrind ... done
! Building valgrind ... done
! Running regression tests ... failed
!
! Regression test results follow
!
! == 642 tests, 1 stderr failure, 0 stdout failures, 6 stderrB failures, 0 stdoutB failures, 0 post failures ==
! gdbserver_tests/mcbreak (stderrB)
! gdbserver_tests/mcclean_after_fork (stderrB)
! gdbserver_tests/mcleak (stderrB)
! gdbserver_tests/mcmain_pic (stderrB)
! gdbserver_tests/mcvabits (stderrB)
! gdbserver_tests/mssnapshot (stderrB)
! helgrind/tests/pth_cond_destroy_busy (stderr)
--- 3,26 ----
Configuring valgrind ... done
! Building valgrind ... failed
+ Last 20 lines of verbose log follow echo
+ m_machine.c:56: error: 'VexGuestArchState' has no member named 'guest_FP'
+ m_machine.c: In function 'vgPlain_set_SP':
+ m_machine.c:63: error: 'VexGuestArchState' has no member named 'guest_SP'
+ m_machine.c: In function 'vgPlain_get_UnwindStartRegs':
+ m_machine.c:107: error: 'VexGuestArchState' has no member named 'guest_SP'
+ make[3]: *** [libcoregrind_s390x_linux_a-m_machine.o] Error 1
+ make[3]: *** Waiting for unfinished jobs....
+ mv -f .deps/libcoregrind_s390x_linux_a-m_libcprint.Tpo .deps/libcoregrind_s390x_linux_a-m_libcprint.Po
+ mv -f .deps/libcoregrind_s390x_linux_a-m_libcsignal.Tpo .deps/libcoregrind_s390x_linux_a-m_libcsignal.Po
+ mv -f .deps/libcoregrind_s390x_linux_a-m_libcproc.Tpo .deps/libcoregrind_s390x_linux_a-m_libcproc.Po
+ mv -f .deps/libcoregrind_s390x_linux_a-m_libcfile.Tpo .deps/libcoregrind_s390x_linux_a-m_libcfile.Po
+ mv -f .deps/libcoregrind_s390x_linux_a-m_errormgr.Tpo .deps/libcoregrind_s390x_linux_a-m_errormgr.Po
+ mv -f .deps/libcoregrind_s390x_linux_a-m_libcbase.Tpo .deps/libcoregrind_s390x_linux_a-m_libcbase.Po
+ mv -f .deps/libcoregrind_s390x_linux_a-m_main.Tpo .deps/libcoregrind_s390x_linux_a-m_main.Po
+ make[3]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-new/coregrind'
+ make[2]: *** [all] Error 2
+ make[2]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-new/coregrind'
+ make[1]: *** [all-recursive] Error 1
+ make[1]: Leaving directory `/home4/maranpsamy/valgrind/nightly/valgrind-new'
+ make: *** [all] Error 2
--tools=none,memcheck --reps=5 --vg=../valgrind-new --vg=../valgrind-old
vg_perf: './bigcode' not found or not a file (.)
-- Running tests in perf ----------------------------------------------
real 0m0.008s
user 0m0.005s
sys 0m0.001s
|
|
From: Maran P. <ma...@li...> - 2014-01-13 02:50:54
|
valgrind revision: 13774 VEX revision: 2804 C compiler: gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3) GDB: GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6) Assembler: GNU assembler version 2.20.51.0.2-5.36.el6 20100205 C library: GNU C Library stable release version 2.12 uname -mrs: Linux 2.6.32-358.el6.s390x s390x Vendor version: Red Hat Enterprise Linux Server release 6.4 (Santiago) Nightly build on rhels390 ( RHEL 6.4 with gcc 4.4.7 on zEC12 (s390x) ) Started at 2014-01-13 03:45:25 CET Ended at 2014-01-13 03:51:04 CET Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... failed Last 20 lines of verbose log follow echo mv -f priv/.deps/libvex_s390x_linux_a-host_amd64_isel.Tpo priv/.deps/libvex_s390x_linux_a-host_amd64_isel.Po gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I../VEX/pub -DVGA_s390x=1 -DVGO_linux=1 -DVGP_s390x_linux=1 -DVGPV_s390x_linux_vanilla=1 -Ipriv -m64 -O2 -g -Wall -Wmissing-prototypes -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-format-zero-length -fno-strict-aliasing -fno-builtin -fomit-frame-pointer -Wbad-function-cast -Wcast-qual -Wcast-align -fstrict-aliasing -Wno-long-long -Wwrite-strings -fno-stack-protector -MT priv/libvex_s390x_linux_a-host_arm_defs.o -MD -MP -MF priv/.deps/libvex_s390x_linux_a-host_arm_defs.Tpo -c -o priv/libvex_s390x_linux_a-host_arm_defs.o `test -f 'priv/host_arm_defs.c' || echo './'`priv/host_arm_defs.c gcc: Internal error: Killed (program cc1) Please submit a full bug report. See <http://bugzilla.redhat.com/bugzilla> for instructions. make[3]: *** [priv/libvex_s390x_linux_a-guest_amd64_toIR.o] Error 1 make[3]: *** Waiting for unfinished jobs.... mv -f priv/.deps/libvex_s390x_linux_a-host_ppc_defs.Tpo priv/.deps/libvex_s390x_linux_a-host_ppc_defs.Po mv -f priv/.deps/libvex_s390x_linux_a-host_ppc_isel.Tpo priv/.deps/libvex_s390x_linux_a-host_ppc_isel.Po mv -f priv/.deps/libvex_s390x_linux_a-host_arm_defs.Tpo priv/.deps/libvex_s390x_linux_a-host_arm_defs.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_ppc_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_ppc_toIR.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_x86_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_x86_toIR.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_s390_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_s390_toIR.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_arm_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_arm_toIR.Po make[3]: Leaving directory `/root/nightly/valgrind-new/VEX' make[2]: *** [all] Error 2 make[2]: Leaving directory `/root/nightly/valgrind-new/VEX' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/root/nightly/valgrind-new' make: *** [all] Error 2 ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... failed Last 20 lines of verbose log follow echo mv -f priv/.deps/libvex_s390x_linux_a-host_ppc_defs.Tpo priv/.deps/libvex_s390x_linux_a-host_ppc_defs.Po gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I../VEX/pub -DVGA_s390x=1 -DVGO_linux=1 -DVGP_s390x_linux=1 -DVGPV_s390x_linux_vanilla=1 -Ipriv -m64 -O2 -g -Wall -Wmissing-prototypes -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-format-zero-length -fno-strict-aliasing -fno-builtin -fomit-frame-pointer -Wbad-function-cast -Wcast-qual -Wcast-align -fstrict-aliasing -Wno-long-long -Wwrite-strings -fno-stack-protector -MT priv/libvex_s390x_linux_a-host_s390_isel.o -MD -MP -MF priv/.deps/libvex_s390x_linux_a-host_s390_isel.Tpo -c -o priv/libvex_s390x_linux_a-host_s390_isel.o `test -f 'priv/host_s390_isel.c' || echo './'`priv/host_s390_isel.c gcc: Internal error: Killed (program cc1) Please submit a full bug report. See <http://bugzilla.redhat.com/bugzilla> for instructions. make[3]: *** [priv/libvex_s390x_linux_a-guest_amd64_toIR.o] Error 1 make[3]: *** Waiting for unfinished jobs.... mv -f priv/.deps/libvex_s390x_linux_a-host_arm_defs.Tpo priv/.deps/libvex_s390x_linux_a-host_arm_defs.Po mv -f priv/.deps/libvex_s390x_linux_a-host_s390_isel.Tpo priv/.deps/libvex_s390x_linux_a-host_s390_isel.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_ppc_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_ppc_toIR.Po mv -f priv/.deps/libvex_s390x_linux_a-host_s390_defs.Tpo priv/.deps/libvex_s390x_linux_a-host_s390_defs.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_s390_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_s390_toIR.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_x86_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_x86_toIR.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_arm_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_arm_toIR.Po make[3]: Leaving directory `/root/nightly/valgrind-old/VEX' make[2]: *** [all] Error 2 make[2]: Leaving directory `/root/nightly/valgrind-old/VEX' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/root/nightly/valgrind-old' make: *** [all] Error 2 ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2014-01-13 03:48:37.000000000 +0100 --- new.short 2014-01-13 03:51:04.000000000 +0100 *************** *** 6,9 **** Last 20 lines of verbose log follow echo ! mv -f priv/.deps/libvex_s390x_linux_a-host_ppc_defs.Tpo priv/.deps/libvex_s390x_linux_a-host_ppc_defs.Po ! gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I../VEX/pub -DVGA_s390x=1 -DVGO_linux=1 -DVGP_s390x_linux=1 -DVGPV_s390x_linux_vanilla=1 -Ipriv -m64 -O2 -g -Wall -Wmissing-prototypes -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-format-zero-length -fno-strict-aliasing -fno-builtin -fomit-frame-pointer -Wbad-function-cast -Wcast-qual -Wcast-align -fstrict-aliasing -Wno-long-long -Wwrite-strings -fno-stack-protector -MT priv/libvex_s390x_linux_a-host_s390_isel.o -MD -MP -MF priv/.deps/libvex_s390x_linux_a-host_s390_isel.Tpo -c -o priv/libvex_s390x_linux_a-host_s390_isel.o `test -f 'priv/host_s390_isel.c' || echo './'`priv/host_s390_isel.c gcc: Internal error: Killed (program cc1) --- 6,9 ---- Last 20 lines of verbose log follow echo ! mv -f priv/.deps/libvex_s390x_linux_a-host_amd64_isel.Tpo priv/.deps/libvex_s390x_linux_a-host_amd64_isel.Po ! gcc -DHAVE_CONFIG_H -I. -I.. -I.. -I../include -I../VEX/pub -DVGA_s390x=1 -DVGO_linux=1 -DVGP_s390x_linux=1 -DVGPV_s390x_linux_vanilla=1 -Ipriv -m64 -O2 -g -Wall -Wmissing-prototypes -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-format-zero-length -fno-strict-aliasing -fno-builtin -fomit-frame-pointer -Wbad-function-cast -Wcast-qual -Wcast-align -fstrict-aliasing -Wno-long-long -Wwrite-strings -fno-stack-protector -MT priv/libvex_s390x_linux_a-host_arm_defs.o -MD -MP -MF priv/.deps/libvex_s390x_linux_a-host_arm_defs.Tpo -c -o priv/libvex_s390x_linux_a-host_arm_defs.o `test -f 'priv/host_arm_defs.c' || echo './'`priv/host_arm_defs.c gcc: Internal error: Killed (program cc1) *************** *** 13,26 **** make[3]: *** Waiting for unfinished jobs.... mv -f priv/.deps/libvex_s390x_linux_a-host_arm_defs.Tpo priv/.deps/libvex_s390x_linux_a-host_arm_defs.Po - mv -f priv/.deps/libvex_s390x_linux_a-host_s390_isel.Tpo priv/.deps/libvex_s390x_linux_a-host_s390_isel.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_ppc_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_ppc_toIR.Po - mv -f priv/.deps/libvex_s390x_linux_a-host_s390_defs.Tpo priv/.deps/libvex_s390x_linux_a-host_s390_defs.Po - mv -f priv/.deps/libvex_s390x_linux_a-guest_s390_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_s390_toIR.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_x86_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_x86_toIR.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_arm_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_arm_toIR.Po ! make[3]: Leaving directory `/root/nightly/valgrind-old/VEX' make[2]: *** [all] Error 2 ! make[2]: Leaving directory `/root/nightly/valgrind-old/VEX' make[1]: *** [all-recursive] Error 1 ! make[1]: Leaving directory `/root/nightly/valgrind-old' make: *** [all] Error 2 --- 13,26 ---- make[3]: *** Waiting for unfinished jobs.... + mv -f priv/.deps/libvex_s390x_linux_a-host_ppc_defs.Tpo priv/.deps/libvex_s390x_linux_a-host_ppc_defs.Po + mv -f priv/.deps/libvex_s390x_linux_a-host_ppc_isel.Tpo priv/.deps/libvex_s390x_linux_a-host_ppc_isel.Po mv -f priv/.deps/libvex_s390x_linux_a-host_arm_defs.Tpo priv/.deps/libvex_s390x_linux_a-host_arm_defs.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_ppc_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_ppc_toIR.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_x86_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_x86_toIR.Po + mv -f priv/.deps/libvex_s390x_linux_a-guest_s390_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_s390_toIR.Po mv -f priv/.deps/libvex_s390x_linux_a-guest_arm_toIR.Tpo priv/.deps/libvex_s390x_linux_a-guest_arm_toIR.Po ! make[3]: Leaving directory `/root/nightly/valgrind-new/VEX' make[2]: *** [all] Error 2 ! make[2]: Leaving directory `/root/nightly/valgrind-new/VEX' make[1]: *** [all-recursive] Error 1 ! make[1]: Leaving directory `/root/nightly/valgrind-new' make: *** [all] Error 2 --tools=none,memcheck --reps=5 --vg=../valgrind-new --vg=../valgrind-old vg_perf: './bigcode' not found or not a file (.) -- Running tests in perf ---------------------------------------------- real 0m0.044s user 0m0.004s sys 0m0.003s |
|
From: Rich C. <rc...@wi...> - 2014-01-13 02:43:37
|
valgrind revision: 13774
VEX revision: 2804
C compiler: gcc (SUSE Linux) 4.8.1 20130909 [gcc-4_8-branch revision 202388]
GDB: GNU gdb (GDB; openSUSE Factory) 7.6.50.20130731-cvs
Assembler: GNU assembler (GNU Binutils; openSUSE Factory) 2.23.2
C library: GNU C Library (GNU libc) stable release version 2.18 (git )
uname -mrs: Linux 3.11.4-3-desktop x86_64
Vendor version: Welcome to openSUSE 13.1 "Bottle" Beta 1 - Kernel %r (%t).
Nightly build on rodan ( Linux 3.11.4-3-desktop x86_64 )
Started at 2014-01-12 19:22:01 CST
Ended at 2014-01-12 20:43:23 CST
Results unchanged from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 588 tests, 7 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
memcheck/tests/dw4 (stderr)
memcheck/tests/err_disable3 (stderr)
memcheck/tests/err_disable4 (stderr)
memcheck/tests/threadname (stderr)
memcheck/tests/threadname_xml (stderr)
drd/tests/pth_mutex_reinit (stderr)
exp-sgcheck/tests/hackedbz2 (stderr)
=================================================
./valgrind-new/drd/tests/pth_mutex_reinit.stderr.diff
=================================================
--- pth_mutex_reinit.stderr.exp 2014-01-12 20:02:29.756093111 -0600
+++ pth_mutex_reinit.stderr.out 2014-01-12 20:36:10.501529128 -0600
@@ -1,11 +1,15 @@
+The object at address 0x........ is not a mutex.
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_mutex_reinit.c:?)
+
Mutex reinitialization: mutex 0x........, recursion count 0, owner 1.
at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
by 0x........: main (pth_mutex_reinit.c:?)
mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
by 0x........: main (pth_mutex_reinit.c:?)
Done.
-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
=================================================
./valgrind-new/exp-sgcheck/tests/hackedbz2.stderr.diff-glibc28-amd64
=================================================
--- hackedbz2.stderr.exp-glibc28-amd64 2014-01-12 20:02:00.201779599 -0600
+++ hackedbz2.stderr.out 2014-01-12 20:42:33.557592577 -0600
@@ -1,7 +1,6 @@
Invalid read of size 1
- at 0x........: vex_strlen (hackedbz2.c:1006)
- by 0x........: add_to_myprintf_buf (hackedbz2.c:1284)
+ at 0x........: add_to_myprintf_buf (hackedbz2.c:1006)
by 0x........: vex_printf (hackedbz2.c:1155)
by 0x........: BZ2_compressBlock (hackedbz2.c:4039)
by 0x........: handle_compress (hackedbz2.c:4761)
=================================================
./valgrind-new/memcheck/tests/dw4.stderr.diff
=================================================
--- dw4.stderr.exp 2014-01-12 20:02:44.384248286 -0600
+++ dw4.stderr.out 2014-01-12 20:14:41.087851060 -0600
@@ -1,3 +1,11 @@
+
+parse_type_DIE: confused by:
+ <1><492>: DW_TAG_structure_type
+ DW_AT_signature : 8 byte signature: 9b d0 55 13 bb 1e e9 37
+
+WARNING: Serious error when reading debug info
+When reading debug info from /usr/local/src/valgrind/nightly/valgrind-new/memcheck/tests/dw4:
+parse_type_DIE: confused by the above DIE
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:49)
@@ -8,12 +16,10 @@
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:51)
- Location 0x........ is 0 bytes inside S2[0].i,
- a global variable declared at dw4.c:42
+ Address 0x........ is 4 bytes inside data symbol "S2"
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:52)
- Location 0x........ is 0 bytes inside local.i,
- declared at dw4.c:46, in frame #1 of thread 1
+ Address 0x........ is on thread 1's stack
=================================================
./valgrind-new/memcheck/tests/err_disable3.stderr.diff
=================================================
--- err_disable3.stderr.exp 2014-01-12 20:02:44.357247999 -0600
+++ err_disable3.stderr.out 2014-01-12 20:14:45.700899995 -0600
@@ -10,8 +10,6 @@
Thread 2:
Invalid read of size 1
at 0x........: err (err_disable3.c:25)
- by 0x........: child_fn (err_disable3.c:31)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable3.c:42)
=================================================
./valgrind-new/memcheck/tests/err_disable4.stderr.diff
=================================================
--- err_disable4.stderr.exp 2014-01-12 20:02:46.550271263 -0600
+++ err_disable4.stderr.out 2014-01-12 20:14:48.176926261 -0600
@@ -1501,8 +1501,6 @@
Thread x:
Invalid read of size 1
at 0x........: err (err_disable4.c:41)
- by 0x........: child_fn_2 (err_disable4.c:55)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable4.c:68)
=================================================
./valgrind-new/memcheck/tests/threadname.stderr.diff
=================================================
--- threadname.stderr.exp 2014-01-12 20:02:45.835263678 -0600
+++ threadname.stderr.out 2014-01-12 20:18:32.305303809 -0600
@@ -9,36 +9,12 @@
Thread 2:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_0 (threadname.c:53)
- ...
Address 0x........ is 0 bytes after a block of size 2 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
by 0x........: bad_things (threadname.c:15)
by 0x........: child_fn_0 (threadname.c:53)
...
-Thread 3 try1:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
- Address 0x........ is 0 bytes after a block of size 3 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
-
-Thread 4 012345678901234:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
- Address 0x........ is 0 bytes after a block of size 4 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
-
Thread 1:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
=================================================
./valgrind-new/memcheck/tests/threadname_xml.stderr.diff
=================================================
--- threadname_xml.stderr.exp 2014-01-12 20:02:45.433259414 -0600
+++ threadname_xml.stderr.out 2014-01-12 20:18:33.610317652 -0600
@@ -94,14 +94,6 @@
<file>threadname.c</file>
<line>...</line>
</frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_0</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
</stack>
<auxwhat>Address 0x........ is 0 bytes after a block of size 2 alloc'd</auxwhat>
<stack>
@@ -135,112 +127,6 @@
<error>
<unique>0x........</unique>
<tid>...</tid>
- <threadname>try1</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 3 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>malloc</fn>
- <dir>...</dir>
- <file>vg_replace_malloc.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
-</error>
-
-<error>
- <unique>0x........</unique>
- <tid>...</tid>
- <threadname>012345678901234</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_2</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 4 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
<truncated beyond 100 lines>
=================================================
./valgrind-old/drd/tests/pth_mutex_reinit.stderr.diff
=================================================
--- pth_mutex_reinit.stderr.exp 2014-01-12 19:22:39.728739760 -0600
+++ pth_mutex_reinit.stderr.out 2014-01-12 19:54:34.352050037 -0600
@@ -1,11 +1,15 @@
+The object at address 0x........ is not a mutex.
+ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ by 0x........: main (pth_mutex_reinit.c:?)
+
Mutex reinitialization: mutex 0x........, recursion count 0, owner 1.
at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
by 0x........: main (pth_mutex_reinit.c:?)
mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
by 0x........: main (pth_mutex_reinit.c:?)
Done.
-ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
=================================================
./valgrind-old/exp-sgcheck/tests/hackedbz2.stderr.diff-glibc28-amd64
=================================================
--- hackedbz2.stderr.exp-glibc28-amd64 2014-01-12 19:23:19.228158769 -0600
+++ hackedbz2.stderr.out 2014-01-12 20:00:48.055014268 -0600
@@ -1,7 +1,6 @@
Invalid read of size 1
- at 0x........: vex_strlen (hackedbz2.c:1006)
- by 0x........: add_to_myprintf_buf (hackedbz2.c:1284)
+ at 0x........: add_to_myprintf_buf (hackedbz2.c:1006)
by 0x........: vex_printf (hackedbz2.c:1155)
by 0x........: BZ2_compressBlock (hackedbz2.c:4039)
by 0x........: handle_compress (hackedbz2.c:4761)
=================================================
./valgrind-old/memcheck/tests/dw4.stderr.diff
=================================================
--- dw4.stderr.exp 2014-01-12 19:23:25.777228241 -0600
+++ dw4.stderr.out 2014-01-12 19:33:43.195777802 -0600
@@ -1,3 +1,11 @@
+
+parse_type_DIE: confused by:
+ <1><492>: DW_TAG_structure_type
+ DW_AT_signature : 8 byte signature: 9b d0 55 13 bb 1e e9 37
+
+WARNING: Serious error when reading debug info
+When reading debug info from /usr/local/src/valgrind/nightly/valgrind-old/memcheck/tests/dw4:
+parse_type_DIE: confused by the above DIE
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:49)
@@ -8,12 +16,10 @@
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:51)
- Location 0x........ is 0 bytes inside S2[0].i,
- a global variable declared at dw4.c:42
+ Address 0x........ is 4 bytes inside data symbol "S2"
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:52)
- Location 0x........ is 0 bytes inside local.i,
- declared at dw4.c:46, in frame #1 of thread 1
+ Address 0x........ is on thread 1's stack
=================================================
./valgrind-old/memcheck/tests/err_disable3.stderr.diff
=================================================
--- err_disable3.stderr.exp 2014-01-12 19:23:26.053231169 -0600
+++ err_disable3.stderr.out 2014-01-12 19:33:47.763826260 -0600
@@ -10,8 +10,6 @@
Thread 2:
Invalid read of size 1
at 0x........: err (err_disable3.c:25)
- by 0x........: child_fn (err_disable3.c:31)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable3.c:42)
=================================================
./valgrind-old/memcheck/tests/err_disable4.stderr.diff
=================================================
--- err_disable4.stderr.exp 2014-01-12 19:23:25.728227722 -0600
+++ err_disable4.stderr.out 2014-01-12 19:33:50.221852334 -0600
@@ -1501,8 +1501,6 @@
Thread x:
Invalid read of size 1
at 0x........: err (err_disable4.c:41)
- by 0x........: child_fn_2 (err_disable4.c:55)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable4.c:68)
=================================================
./valgrind-old/memcheck/tests/threadname.stderr.diff
=================================================
--- threadname.stderr.exp 2014-01-12 19:23:25.788228358 -0600
+++ threadname.stderr.out 2014-01-12 19:37:26.816149961 -0600
@@ -9,36 +9,12 @@
Thread 2:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_0 (threadname.c:53)
- ...
Address 0x........ is 0 bytes after a block of size 2 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
by 0x........: bad_things (threadname.c:15)
by 0x........: child_fn_0 (threadname.c:53)
...
-Thread 3 try1:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
- Address 0x........ is 0 bytes after a block of size 3 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
-
-Thread 4 012345678901234:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
- Address 0x........ is 0 bytes after a block of size 4 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
-
Thread 1:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
=================================================
./valgrind-old/memcheck/tests/threadname_xml.stderr.diff
=================================================
--- threadname_xml.stderr.exp 2014-01-12 19:23:25.832228825 -0600
+++ threadname_xml.stderr.out 2014-01-12 19:37:28.105163635 -0600
@@ -94,14 +94,6 @@
<file>threadname.c</file>
<line>...</line>
</frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_0</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
</stack>
<auxwhat>Address 0x........ is 0 bytes after a block of size 2 alloc'd</auxwhat>
<stack>
@@ -135,112 +127,6 @@
<error>
<unique>0x........</unique>
<tid>...</tid>
- <threadname>try1</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 3 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>malloc</fn>
- <dir>...</dir>
- <file>vg_replace_malloc.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
-</error>
-
-<error>
- <unique>0x........</unique>
- <tid>...</tid>
- <threadname>012345678901234</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_2</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 4 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
<truncated beyond 100 lines>
|
Author: sewardj
Date: Mon Jan 13 00:21:09 2014
New Revision: 13774
Log:
Initial implementation of CFI based stack unwinding for arm64-linux.
Modified:
trunk/coregrind/m_debuginfo/debuginfo.c
trunk/coregrind/m_debuginfo/priv_storage.h
trunk/coregrind/m_debuginfo/readdwarf.c
trunk/coregrind/m_debuginfo/storage.c
trunk/coregrind/m_stacktrace.c
trunk/coregrind/pub_core_basics.h
trunk/coregrind/pub_core_debuginfo.h
Modified: trunk/coregrind/m_debuginfo/debuginfo.c
==============================================================================
--- trunk/coregrind/m_debuginfo/debuginfo.c (original)
+++ trunk/coregrind/m_debuginfo/debuginfo.c Mon Jan 13 00:21:09 2014
@@ -2115,7 +2115,7 @@
case Creg_MIPS_RA: return eec->uregs->ra;
# elif defined(VGA_ppc32) || defined(VGA_ppc64)
# elif defined(VGP_arm64_linux)
- I_die_here;
+ case Creg_ARM64_X30: return eec->uregs->x30;
# else
# error "Unsupported arch"
# endif
@@ -2361,7 +2361,12 @@
break;
# elif defined(VGA_ppc32) || defined(VGA_ppc64)
# elif defined(VGP_arm64_linux)
- I_die_here;
+ case CFIC_ARM64_SPREL:
+ cfa = cfsi->cfa_off + uregs->sp;
+ break;
+ case CFIC_ARM64_X29REL:
+ cfa = cfsi->cfa_off + uregs->x29;
+ break;
# else
# error "Unsupported arch"
# endif
@@ -2437,6 +2442,8 @@
{E,R}SP, {E,R}BP.
For arm, the unwound registers are: R7 R11 R12 R13 R14 R15.
+
+ For arm64, the unwound registers are: X29(FP) X30(LR) SP PC.
*/
Bool VG_(use_CF_info) ( /*MOD*/D3UnwindRegs* uregsHere,
Addr min_accessible,
@@ -2459,7 +2466,7 @@
ipHere = uregsHere->pc;
# elif defined(VGA_ppc32) || defined(VGA_ppc64)
# elif defined(VGP_arm64_linux)
- I_die_here;
+ ipHere = uregsHere->pc;
# else
# error "Unknown arch"
# endif
@@ -2541,7 +2548,10 @@
COMPUTE(uregsPrev.fp, uregsHere->fp, cfsi->fp_how, cfsi->fp_off);
# elif defined(VGA_ppc32) || defined(VGA_ppc64)
# elif defined(VGP_arm64_linux)
- I_die_here;
+ COMPUTE(uregsPrev.pc, uregsHere->pc, cfsi->ra_how, cfsi->ra_off);
+ COMPUTE(uregsPrev.sp, uregsHere->sp, cfsi->sp_how, cfsi->sp_off);
+ COMPUTE(uregsPrev.x30, uregsHere->x30, cfsi->x30_how, cfsi->x30_off);
+ COMPUTE(uregsPrev.x29, uregsHere->x29, cfsi->x29_how, cfsi->x29_off);
# else
# error "Unknown arch"
# endif
Modified: trunk/coregrind/m_debuginfo/priv_storage.h
==============================================================================
--- trunk/coregrind/m_debuginfo/priv_storage.h (original)
+++ trunk/coregrind/m_debuginfo/priv_storage.h Mon Jan 13 00:21:09 2014
@@ -133,7 +133,7 @@
cfa = case cfa_how of
CFIC_IA_SPREL -> {e,r}sp + cfa_off
CFIC_IA_BPREL -> {e,r}bp + cfa_off
- CFIR_IA_EXPR -> expr whose index is in cfa_off
+ CFIC_EXPR -> expr whose index is in cfa_off
Once that is done, the previous frame's {e,r}sp/{e,r}bp values and
this frame's {e,r}ra value can be calculated like this:
@@ -150,11 +150,11 @@
keep track of:
cfa = case cfa_how of
- CFIC_R13REL -> r13 + cfa_off
- CFIC_R12REL -> r12 + cfa_off
- CFIC_R11REL -> r11 + cfa_off
- CFIC_R7REL -> r7 + cfa_off
- CFIR_EXPR -> expr whose index is in cfa_off
+ CFIC_ARM_R13REL -> r13 + cfa_off
+ CFIC_ARM_R12REL -> r12 + cfa_off
+ CFIC_ARM_R11REL -> r11 + cfa_off
+ CFIC_ARM_R7REL -> r7 + cfa_off
+ CFIR_EXPR -> expr whose index is in cfa_off
old_r14/r13/r12/r11/r7/ra
= case r14/r13/r12/r11/r7/ra_how of
@@ -164,13 +164,28 @@
CFIR_MEMCFAREL -> *( cfa + r14/r13/r12/r11/r7/ra_off )
CFIR_EXPR -> expr whose index is in r14/r13/r12/r11/r7/ra_off
+ On ARM64:
+
+ cfa = case cfa_how of
+ CFIC_ARM64_SPREL -> sp + cfa_off
+ CFIC_ARM64_X29REL -> x29 + cfa_off
+ CFIC_EXPR -> expr whose index is in cfa_off
+
+ old_sp/x30/x29/ra
+ = case sp/x30/x29/ra_how of
+ CFIR_UNKNOWN -> we don't know, sorry
+ CFIR_SAME -> same as it was before
+ CFIR_CFAREL -> cfa + sp/x30/x29/ra_how
+ CFIR_MEMCFAREL -> *( cfa + sp/x30/x29/ra_how )
+ CFIR_EXPR -> expr whose index is in sp/x30/x29/ra_off
+
On s390x we have a similar logic as x86 or amd64. We need the stack pointer
(r15), the frame pointer r11 (like BP) and together with the instruction
address in the PSW we can calculate the previous values:
cfa = case cfa_how of
CFIC_IA_SPREL -> r15 + cfa_off
CFIC_IA_BPREL -> r11 + cfa_off
- CFIR_IA_EXPR -> expr whose index is in cfa_off
+ CFIC_EXPR -> expr whose index is in cfa_off
old_sp/fp/ra
= case sp/fp/ra_how of
@@ -183,12 +198,13 @@
#define CFIC_IA_SPREL ((UChar)1)
#define CFIC_IA_BPREL ((UChar)2)
-#define CFIC_IA_EXPR ((UChar)3)
-#define CFIC_ARM_R13REL ((UChar)4)
-#define CFIC_ARM_R12REL ((UChar)5)
-#define CFIC_ARM_R11REL ((UChar)6)
-#define CFIC_ARM_R7REL ((UChar)7)
-#define CFIC_EXPR ((UChar)8) /* all targets */
+#define CFIC_ARM_R13REL ((UChar)3)
+#define CFIC_ARM_R12REL ((UChar)4)
+#define CFIC_ARM_R11REL ((UChar)5)
+#define CFIC_ARM_R7REL ((UChar)6)
+#define CFIC_ARM64_SPREL ((UChar)7)
+#define CFIC_ARM64_X29REL ((UChar)8)
+#define CFIC_EXPR ((UChar)9) /* all targets */
#define CFIR_UNKNOWN ((UChar)64)
#define CFIR_SAME ((UChar)65)
@@ -232,6 +248,23 @@
Int r7_off;
}
DiCfSI;
+#elif defined(VGA_arm64)
+typedef
+ struct {
+ Addr base;
+ UInt len;
+ UChar cfa_how; /* a CFIC_ value */
+ UChar ra_how; /* a CFIR_ value */
+ UChar sp_how; /* a CFIR_ value */ /*dw31=SP*/
+ UChar x30_how; /* a CFIR_ value */ /*dw30=LR*/
+ UChar x29_how; /* a CFIR_ value */ /*dw29=FP*/
+ Int cfa_off;
+ Int ra_off;
+ Int sp_off;
+ Int x30_off;
+ Int x29_off;
+ }
+ DiCfSI;
#elif defined(VGA_ppc32) || defined(VGA_ppc64)
/* Just have a struct with the common fields in, so that code that
processes the common fields doesn't have to be ifdef'd against
@@ -277,18 +310,6 @@
Int fp_off;
}
DiCfSI;
-#elif defined(VGA_arm64)
-/* Be generic until we know more about what's needed. */
-typedef
- struct {
- Addr base;
- UInt len;
- UChar cfa_how; /* a CFIC_ value */
- UChar ra_how; /* a CFIR_ value */
- Int cfa_off;
- Int ra_off;
- }
- DiCfSI;
#else
# error "Unknown arch"
#endif
@@ -328,6 +349,7 @@
Creg_ARM_R12,
Creg_ARM_R15,
Creg_ARM_R14,
+ Creg_ARM64_X30,
Creg_S390_R14,
Creg_MIPS_RA
}
Modified: trunk/coregrind/m_debuginfo/readdwarf.c
==============================================================================
--- trunk/coregrind/m_debuginfo/readdwarf.c (original)
+++ trunk/coregrind/m_debuginfo/readdwarf.c Mon Jan 13 00:21:09 2014
@@ -1840,11 +1840,11 @@
#elif defined(VGP_arm_linux)
# define FP_REG 12
# define SP_REG 13
-# define RA_REG_DEFAULT 14 //???
+# define RA_REG_DEFAULT 14
#elif defined(VGP_arm64_linux)
-# define FP_REG 29 //???
-# define SP_REG 31 //???
-# define RA_REG_DEFAULT 30 //???
+# define FP_REG 29
+# define SP_REG 31
+# define RA_REG_DEFAULT 30
#elif defined(VGP_x86_darwin)
# define FP_REG 5
# define SP_REG 4
@@ -1878,6 +1878,8 @@
# define N_CFI_REGS 72
#elif defined(VGP_arm_linux)
# define N_CFI_REGS 320
+#elif defined(VGP_arm64_linux)
+# define N_CFI_REGS 128
#else
# define N_CFI_REGS 20
#endif
@@ -2100,6 +2102,11 @@
ctx->state[j].reg[12].tag = RR_Same;
ctx->state[j].reg[7].tag = RR_Same;
/* this can't be right though: R12 (IP) isn't callee saved. */
+# elif defined(VGA_arm64)
+ /* Callee-saved registers (that we are interested in) should
+ start out as RR_Same. */
+ ctx->state[j].reg[29/*FP*/].tag = RR_Same;
+ ctx->state[j].reg[30/*LR*/].tag = RR_Same;
# endif
}
}
@@ -2121,7 +2128,7 @@
static void initCfiSI ( DiCfSI* si )
{
- VG_(memset)(si, 0, sizeof(*si));
+ VG_(bzero_inline)(si, sizeof(*si));
}
@@ -2184,7 +2191,7 @@
# elif defined(VGA_arm)
si->cfa_how = CFIC_ARM_R13REL;
# elif defined(VGA_arm64)
- I_die_here;
+ si->cfa_how = CFIC_ARM64_SPREL;
# else
si->cfa_how = 0; /* invalid */
# endif
@@ -2197,6 +2204,8 @@
si->cfa_how = CFIC_IA_BPREL;
# elif defined(VGA_arm)
si->cfa_how = CFIC_ARM_R12REL;
+# elif defined(VGA_arm64)
+ si->cfa_how = CFIC_ARM64_X29REL;
# else
si->cfa_how = 0; /* invalid */
# endif
@@ -2213,7 +2222,7 @@
si->cfa_off = ctxs->cfa_off;
}
# elif defined(VGA_arm64)
- if (1) { I_die_here; } // do we need any arm64 specifics here?
+ // do we need any arm64 specifics here?
# endif
else {
why = 1;
@@ -2348,6 +2357,48 @@
return True;
+# elif defined(VGA_arm64)
+
+ /* --- entire tail of this fn specialised for arm64 --- */
+
+ SUMMARISE_HOW(si->x30_how, si->x30_off, ctxs->reg[30/*LR*/]);
+ SUMMARISE_HOW(si->x29_how, si->x29_off, ctxs->reg[29/*FP*/]);
+
+ if (ctxs->reg[30/*LR*/].tag == RR_Same
+ && ctx->ra_reg == 30/*as we expect it always to be*/) {
+ /* Generate a trivial CfiExpr, which merely says "x30". First
+ ensure this DebugInfo has a cfsi_expr array in which to park
+ it. */
+ if (!debuginfo->cfsi_exprs)
+ debuginfo->cfsi_exprs = VG_(newXA)( ML_(dinfo_zalloc),
+ "di.ccCt.2a-arm64",
+ ML_(dinfo_free),
+ sizeof(CfiExpr) );
+ si->ra_off = ML_(CfiExpr_CfiReg)( debuginfo->cfsi_exprs,
+ Creg_ARM64_X30);
+ si->ra_how = CFIR_EXPR;
+ } else {
+ /* Just summarise it in the normal way */
+ SUMMARISE_HOW(si->ra_how, si->ra_off, ctxs->reg[ctx->ra_reg]);
+ }
+
+ /* on arm64, it seems the old SP value before the call is always
+ the same as the CFA. Therefore ... */
+ si->sp_how = CFIR_CFAREL;
+ si->sp_off = 0;
+
+ /* bogus looking range? Note, we require that the difference is
+ representable in 32 bits. */
+ if (loc_start >= ctx->loc)
+ { why = 4; goto failed; }
+ if (ctx->loc - loc_start > 10000000 /* let's say */)
+ { why = 5; goto failed; }
+
+ si->base = loc_start + ctx->initloc;
+ si->len = (UInt)(ctx->loc - loc_start);
+
+ return True;
+
# elif defined(VGA_s390x)
/* --- entire tail of this fn specialised for s390 --- */
@@ -2440,9 +2491,6 @@
return True;
-# elif defined(VGA_arm64)
- I_die_here;
-
# elif defined(VGA_ppc32) || defined(VGA_ppc64)
/* These don't use CFI based unwinding (is that really true?) */
@@ -2450,6 +2498,8 @@
# error "Unknown arch"
# endif
+ /* --- non-specialised code after this point --- */
+
# undef SUMMARISE_HOW
failed:
Modified: trunk/coregrind/m_debuginfo/storage.c
==============================================================================
--- trunk/coregrind/m_debuginfo/storage.c (original)
+++ trunk/coregrind/m_debuginfo/storage.c Mon Jan 13 00:21:09 2014
@@ -162,6 +162,12 @@
case CFIC_ARM_R7REL:
VG_(printf)("let cfa=oldR7+%d", si->cfa_off);
break;
+ case CFIC_ARM64_SPREL:
+ VG_(printf)("let cfa=oldSP+%d", si->cfa_off);
+ break;
+ case CFIC_ARM64_X29REL:
+ VG_(printf)("let cfa=oldX29+%d", si->cfa_off);
+ break;
case CFIC_EXPR:
VG_(printf)("let cfa={");
ML_(ppCfiExpr)(exprs, si->cfa_off);
@@ -196,7 +202,12 @@
VG_(printf)(" FP=");
SHOW_HOW(si->fp_how, si->fp_off);
# elif defined(VGA_arm64)
- I_die_here;
+ VG_(printf)(" SP=");
+ SHOW_HOW(si->sp_how, si->sp_off);
+ VG_(printf)(" X30=");
+ SHOW_HOW(si->x30_how, si->x30_off);
+ VG_(printf)(" X29=");
+ SHOW_HOW(si->x29_how, si->x29_off);
# else
# error "Unknown arch"
# endif
@@ -671,15 +682,16 @@
static void ppCfiReg ( CfiReg reg )
{
switch (reg) {
- case Creg_IA_SP: VG_(printf)("xSP"); break;
- case Creg_IA_BP: VG_(printf)("xBP"); break;
- case Creg_IA_IP: VG_(printf)("xIP"); break;
- case Creg_ARM_R13: VG_(printf)("R13"); break;
- case Creg_ARM_R12: VG_(printf)("R12"); break;
- case Creg_ARM_R15: VG_(printf)("R15"); break;
- case Creg_ARM_R14: VG_(printf)("R14"); break;
- case Creg_MIPS_RA: VG_(printf)("RA"); break;
- case Creg_S390_R14: VG_(printf)("R14"); break;
+ case Creg_IA_SP: VG_(printf)("xSP"); break;
+ case Creg_IA_BP: VG_(printf)("xBP"); break;
+ case Creg_IA_IP: VG_(printf)("xIP"); break;
+ case Creg_ARM_R13: VG_(printf)("R13"); break;
+ case Creg_ARM_R12: VG_(printf)("R12"); break;
+ case Creg_ARM_R15: VG_(printf)("R15"); break;
+ case Creg_ARM_R14: VG_(printf)("R14"); break;
+ case Creg_ARM64_X30: VG_(printf)("X30"); break;
+ case Creg_MIPS_RA: VG_(printf)("RA"); break;
+ case Creg_S390_R14: VG_(printf)("R14"); break;
default: vg_assert(0);
}
}
Modified: trunk/coregrind/m_stacktrace.c
==============================================================================
--- trunk/coregrind/m_stacktrace.c (original)
+++ trunk/coregrind/m_stacktrace.c Mon Jan 13 00:21:09 2014
@@ -1044,10 +1044,88 @@
UnwindStartRegs* startRegs,
Addr fp_max_orig )
{
- ips[0] = startRegs->r_pc;
- if (sps) sps[0] = startRegs->r_sp;
- if (fps) fps[0] = startRegs->misc.ARM64.x29;
- return 1;
+ Bool debug = False;
+ Int i;
+ Addr fp_max;
+ UInt n_found = 0;
+ const Int cmrf = VG_(clo_merge_recursive_frames);
+
+ vg_assert(sizeof(Addr) == sizeof(UWord));
+ vg_assert(sizeof(Addr) == sizeof(void*));
+
+ D3UnwindRegs uregs;
+ uregs.pc = startRegs->r_pc;
+ uregs.sp = startRegs->r_sp;
+ uregs.x30 = startRegs->misc.ARM64.x30;
+ uregs.x29 = startRegs->misc.ARM64.x29;
+ Addr fp_min = uregs.sp;
+
+ /* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1],
+ stopping when the trail goes cold, which we guess to be
+ when FP is not a reasonable stack location. */
+
+ // JRS 2002-sep-17: hack, to round up fp_max to the end of the
+ // current page, at least. Dunno if it helps.
+ // NJN 2002-sep-17: seems to -- stack traces look like 1.0.X again
+ fp_max = VG_PGROUNDUP(fp_max_orig);
+ if (fp_max >= sizeof(Addr))
+ fp_max -= sizeof(Addr);
+
+ if (debug)
+ VG_(printf)("\nmax_n_ips=%d fp_min=0x%lx fp_max_orig=0x%lx, "
+ "fp_max=0x%lx PC=0x%lx SP=0x%lx\n",
+ max_n_ips, fp_min, fp_max_orig, fp_max,
+ uregs.pc, uregs.sp);
+
+ /* Assertion broken before main() is reached in pthreaded programs; the
+ * offending stack traces only have one item. --njn, 2002-aug-16 */
+ /* vg_assert(fp_min <= fp_max);*/
+ // On Darwin, this kicks in for pthread-related stack traces, so they're
+ // only 1 entry long which is wrong.
+ if (fp_min + 512 >= fp_max) {
+ /* If the stack limits look bogus, don't poke around ... but
+ don't bomb out either. */
+ if (sps) sps[0] = uregs.sp;
+ if (fps) fps[0] = uregs.x29;
+ ips[0] = uregs.pc;
+ return 1;
+ }
+
+ /* */
+
+ if (sps) sps[0] = uregs.sp;
+ if (fps) fps[0] = uregs.x29;
+ ips[0] = uregs.pc;
+ i = 1;
+
+ /* Loop unwinding the stack, using CFI. */
+ while (True) {
+ if (debug) {
+ VG_(printf)("i: %d, pc: 0x%lx, sp: 0x%lx\n",
+ i, uregs.pc, uregs.sp);
+ }
+
+ if (i >= max_n_ips)
+ break;
+
+ if (VG_(use_CF_info)( &uregs, fp_min, fp_max )) {
+ if (sps) sps[i] = uregs.sp;
+ if (fps) fps[i] = uregs.x29;
+ ips[i++] = uregs.pc - 1;
+ if (debug)
+ VG_(printf)("USING CFI: pc: 0x%lx, sp: 0x%lx\n",
+ uregs.pc, uregs.sp);
+ uregs.pc = uregs.pc - 1;
+ if (UNLIKELY(cmrf > 0)) {RECURSIVE_MERGE(cmrf,ips,i);};
+ continue;
+ }
+
+ /* No luck. We have to give up. */
+ break;
+ }
+
+ n_found = i;
+ return n_found;
}
#endif
Modified: trunk/coregrind/pub_core_basics.h
==============================================================================
--- trunk/coregrind/pub_core_basics.h (original)
+++ trunk/coregrind/pub_core_basics.h Mon Jan 13 00:21:09 2014
@@ -111,7 +111,6 @@
UInt r7;
} ARM;
struct {
- // FIXME ARM64 is this correct?
ULong x29; /* FP */
ULong x30; /* LR */
} ARM64;
Modified: trunk/coregrind/pub_core_debuginfo.h
==============================================================================
--- trunk/coregrind/pub_core_debuginfo.h (original)
+++ trunk/coregrind/pub_core_debuginfo.h Mon Jan 13 00:21:09 2014
@@ -114,7 +114,7 @@
D3UnwindRegs;
#elif defined(VGA_arm64)
typedef
- struct { Addr pc; Addr sp; Addr lr; Addr fp; } /* PC, 31, 30, 29 */
+ struct { Addr pc; Addr sp; Addr x30; Addr x29; } /* PC, SP, LR, FP */
D3UnwindRegs;
#elif defined(VGA_ppc32) || defined(VGA_ppc64)
typedef
|
|
From: <sv...@va...> - 2014-01-13 00:18:59
|
Author: sewardj
Date: Mon Jan 13 00:18:51 2014
New Revision: 13773
Log:
Minor notes on arm64 register usages.
Modified:
trunk/ARM64_TIDYUPS.txt
trunk/docs/internals/register-uses.txt
Modified: trunk/ARM64_TIDYUPS.txt
==============================================================================
--- trunk/ARM64_TIDYUPS.txt (original)
+++ trunk/ARM64_TIDYUPS.txt Mon Jan 13 00:18:51 2014
@@ -176,3 +176,8 @@
valgrind.h: fix VALGRIND_ALIGN_STACK/VALGRIND_RESTORE_STACK,
also add CFI annotations
+
+
+
+could possibly bring r29 into use, which be useful as it is
+callee saved
Modified: trunk/docs/internals/register-uses.txt
==============================================================================
--- trunk/docs/internals/register-uses.txt (original)
+++ trunk/docs/internals/register-uses.txt Mon Jan 13 00:18:51 2014
@@ -149,7 +149,7 @@
r16(IP0)
r17(IP1)
r18 "Platform reg"
-r19-20 maybe "Temporary regs"
+r19-20 "Temporary regs"
r21 y "Callee saved" GSP
r22-28 y "Callee saved"
r29(FP) y
|
|
From: <sv...@va...> - 2014-01-13 00:18:12
|
Author: sewardj
Date: Mon Jan 13 00:17:54 2014
New Revision: 13772
Log:
VG_(bzero_inline): handle up to 12 words inline.
Modified:
trunk/include/pub_tool_libcbase.h
Modified: trunk/include/pub_tool_libcbase.h
==============================================================================
--- trunk/include/pub_tool_libcbase.h (original)
+++ trunk/include/pub_tool_libcbase.h Mon Jan 13 00:17:54 2014
@@ -124,7 +124,7 @@
extern void* VG_(memset) ( void *s, Int c, SizeT sz );
extern Int VG_(memcmp) ( const void* s1, const void* s2, SizeT n );
-/* Zero out up to 8 words quickly in-line. Do not use this for blocks
+/* Zero out up to 12 words quickly in-line. Do not use this for blocks
of size which are unknown at compile time, since the whole point is
for it to be inlined, and then for gcc to remove all code except
for the relevant 'sz' case. */
@@ -135,6 +135,18 @@
&& LIKELY(0 == (((Addr)s) & (Addr)(sizeof(UWord)-1)))) {
UWord* p = (UWord*)s;
switch (sz / (SizeT)sizeof(UWord)) {
+ case 12: p[0] = p[1] = p[2] = p[3]
+ = p[4] = p[5] = p[6] = p[7]
+ = p[8] = p[9] = p[10] = p[11] = 0UL; return;
+ case 11: p[0] = p[1] = p[2] = p[3]
+ = p[4] = p[5] = p[6] = p[7]
+ = p[8] = p[9] = p[10] = 0UL; return;
+ case 10: p[0] = p[1] = p[2] = p[3]
+ = p[4] = p[5] = p[6] = p[7]
+ = p[8] = p[9] = 0UL; return;
+ case 9: p[0] = p[1] = p[2] = p[3]
+ = p[4] = p[5] = p[6] = p[7]
+ = p[8] = 0UL; return;
case 8: p[0] = p[1] = p[2] = p[3]
= p[4] = p[5] = p[6] = p[7] = 0UL; return;
case 7: p[0] = p[1] = p[2] = p[3]
|
|
From: <sv...@va...> - 2014-01-12 18:24:10
|
Author: sewardj
Date: Sun Jan 12 18:23:45 2014
New Revision: 2804
Log:
Add missing ULLs to some 64-bit immediates.
Modified:
trunk/priv/guest_arm64_toIR.c
trunk/priv/host_arm64_isel.c
Modified: trunk/priv/guest_arm64_toIR.c
==============================================================================
--- trunk/priv/guest_arm64_toIR.c (original)
+++ trunk/priv/guest_arm64_toIR.c Sun Jan 12 18:23:45 2014
@@ -4338,7 +4338,7 @@
UInt dd = INSN(4,0);
ULong imm = VFPExpandImm(imm8, isD ? 64 : 32);
if (!isD) {
- vassert(0 == (imm & 0xFFFFFFFF00000000));
+ vassert(0 == (imm & 0xFFFFFFFF00000000ULL));
}
putQReg128(dd, mkV128(0));
putQReg(dd, isD ? mkU64(imm) : mkU32(imm & 0xFFFFFFFFULL));
Modified: trunk/priv/host_arm64_isel.c
==============================================================================
--- trunk/priv/host_arm64_isel.c (original)
+++ trunk/priv/host_arm64_isel.c Sun Jan 12 18:23:45 2014
@@ -1200,12 +1200,18 @@
// value = h+g+f+e d+c+b+a
// \ |
// value = h+g+f+e+d+c+b+a
- value = ((value >> 1) & 0x5555555555555555) + (value & 0x5555555555555555);
- value = ((value >> 2) & 0x3333333333333333) + (value & 0x3333333333333333);
- value = ((value >> 4) & 0x0f0f0f0f0f0f0f0f) + (value & 0x0f0f0f0f0f0f0f0f);
- value = ((value >> 8) & 0x00ff00ff00ff00ff) + (value & 0x00ff00ff00ff00ff);
- value = ((value >> 16) & 0x0000ffff0000ffff) + (value & 0x0000ffff0000ffff);
- value = ((value >> 32) & 0x00000000ffffffff) + (value & 0x00000000ffffffff);
+ value = ((value >> 1) & 0x5555555555555555ULL)
+ + (value & 0x5555555555555555ULL);
+ value = ((value >> 2) & 0x3333333333333333ULL)
+ + (value & 0x3333333333333333ULL);
+ value = ((value >> 4) & 0x0f0f0f0f0f0f0f0fULL)
+ + (value & 0x0f0f0f0f0f0f0f0fULL);
+ value = ((value >> 8) & 0x00ff00ff00ff00ffULL)
+ + (value & 0x00ff00ff00ff00ffULL);
+ value = ((value >> 16) & 0x0000ffff0000ffffULL)
+ + (value & 0x0000ffff0000ffffULL);
+ value = ((value >> 32) & 0x00000000ffffffffULL)
+ + (value & 0x00000000ffffffffULL);
return value;
}
|
|
From: <sv...@va...> - 2014-01-12 13:12:26
|
Author: sewardj
Date: Sun Jan 12 13:12:11 2014
New Revision: 13771
Log:
Add test cases for AArch64 integer instructions (not wired up).
Added:
trunk/none/tests/arm64/
trunk/none/tests/arm64/test_arm64_int.c
Added: trunk/none/tests/arm64/test_arm64_int.c
==============================================================================
--- trunk/none/tests/arm64/test_arm64_int.c (added)
+++ trunk/none/tests/arm64/test_arm64_int.c Sun Jan 12 13:12:11 2014
@@ -0,0 +1,10609 @@
+
+// To compile:
+// aarch64-linux-gnu-gcc -Wall -g -O0 -o test_arm64_int test_arm64_int.c
+
+// The ubfm/sbfm/bfm tests are huge and take ages to compile and run.
+// Set TEST_BFM to 0 to skip them.
+#define TEST_BFM 1
+
+
+#include <stdio.h>
+
+typedef unsigned long long int ULong;
+
+#define TESTINST1(instruction, RD, carryin) \
+{ \
+ ULong out; \
+ ULong nzcv_out; \
+ ULong nzcv_in = (carryin ? (1<<29) : 0); \
+ __asm__ __volatile__( \
+ "msr nzcv,%2;" \
+ instruction ";" \
+ "mov %0," #RD ";" \
+ "mrs %1,nzcv;" \
+ : "=&r" (out), "=&r" (nzcv_out) \
+ : "r" (nzcv_in) \
+ : #RD, "cc", "memory" \
+ ); \
+ printf("%s :: rd %016llx " \
+ "cin %d, nzcv %08llx %c%c%c%c\n", \
+ instruction, out, \
+ carryin ? 1 : 0, \
+ nzcv_out & 0xffff0000, \
+ ((1<<31) & nzcv_out) ? 'N' : ' ', \
+ ((1<<30) & nzcv_out) ? 'Z' : ' ', \
+ ((1<<29) & nzcv_out) ? 'C' : ' ', \
+ ((1<<28) & nzcv_out) ? 'V' : ' ' \
+ ); \
+}
+
+#define TESTINST2(instruction, RNval, RD, RN, carryin) \
+{ \
+ ULong out; \
+ ULong nzcv_out; \
+ ULong nzcv_in = (carryin ? (1<<29) : 0); \
+ __asm__ __volatile__( \
+ "msr nzcv,%3;" \
+ "mov " #RN ",%2;" \
+ instruction ";" \
+ "mov %0," #RD ";" \
+ "mrs %1,nzcv;" \
+ : "=&r" (out), "=&r" (nzcv_out) \
+ : "r" (RNval), "r" (nzcv_in) \
+ : #RD, #RN, "cc", "memory" \
+ ); \
+ printf("%s :: rd %016llx rn %016llx, " \
+ "cin %d, nzcv %08llx %c%c%c%c\n", \
+ instruction, out, ((ULong)RNval), \
+ carryin ? 1 : 0, \
+ nzcv_out & 0xffff0000, \
+ ((1<<31) & nzcv_out) ? 'N' : ' ', \
+ ((1<<30) & nzcv_out) ? 'Z' : ' ', \
+ ((1<<29) & nzcv_out) ? 'C' : ' ', \
+ ((1<<28) & nzcv_out) ? 'V' : ' ' \
+ ); \
+}
+
+#define TESTINST3(instruction, RMval, RNval, RD, RM, RN, carryin) \
+{ \
+ ULong out; \
+ ULong nzcv_out; \
+ ULong nzcv_in = (carryin ? (1<<29) : 0); \
+ __asm__ __volatile__( \
+ "msr nzcv,%4;" \
+ "mov " #RM ",%2;" \
+ "mov " #RN ",%3;" \
+ instruction ";" \
+ "mov %0," #RD ";" \
+ "mrs %1,nzcv;" \
+ : "=&r" (out), "=&r" (nzcv_out) \
+ : "r" (RMval), "r" (RNval), "r" (nzcv_in) \
+ : #RD, #RM, #RN, "cc", "memory" \
+ ); \
+ printf("%s :: rd %016llx rm %016llx, rn %016llx, " \
+ "cin %d, nzcv %08llx %c%c%c%c\n", \
+ instruction, out, ((ULong)RMval), ((ULong)RNval), \
+ carryin ? 1 : 0, \
+ nzcv_out & 0xffff0000, \
+ ((1<<31) & nzcv_out) ? 'N' : ' ', \
+ ((1<<30) & nzcv_out) ? 'Z' : ' ', \
+ ((1<<29) & nzcv_out) ? 'C' : ' ', \
+ ((1<<28) & nzcv_out) ? 'V' : ' ' \
+ ); \
+}
+
+#define TESTINST4(instruction, RMval, RNval, RAval, RD, RM, RN, RA, carryin) \
+{ \
+ ULong out; \
+ ULong nzcv_out; \
+ ULong nzcv_in = (carryin ? (1<<29) : 0); \
+ __asm__ __volatile__( \
+ "msr nzcv,%5;" \
+ "mov " #RM ",%2;" \
+ "mov " #RN ",%3;" \
+ "mov " #RA ",%4;" \
+ instruction ";" \
+ "mov %0," #RD ";" \
+ "mrs %1,nzcv;" \
+ : "=&r" (out), "=&r" (nzcv_out) \
+ : "r" (RMval), "r" (RNval), "r" (RAval), "r" (nzcv_in) \
+ : #RD, #RM, #RN, #RA, "cc", "memory" \
+ ); \
+ printf("%s :: rd %016llx rm %016llx, rn %016llx, ra %016llx, " \
+ "cin %d, nzcv %08llx %c%c%c%c\n", \
+ instruction, out, ((ULong)RMval), ((ULong)RNval), ((ULong)RAval), \
+ carryin ? 1 : 0, \
+ nzcv_out & 0xffff0000, \
+ ((1<<31) & nzcv_out) ? 'N' : ' ', \
+ ((1<<30) & nzcv_out) ? 'Z' : ' ', \
+ ((1<<29) & nzcv_out) ? 'C' : ' ', \
+ ((1<<28) & nzcv_out) ? 'V' : ' ' \
+ ); \
+}
+
+// Same as TESTINST2 except it doesn't print the RN value, since
+// that may differ between runs (it's a stack address).
+#define TESTINST2_hide2(instruction, RNval, RD, RN, carryin) \
+{ \
+ ULong out; \
+ ULong nzcv_out; \
+ ULong nzcv_in = (carryin ? (1<<29) : 0); \
+ __asm__ __volatile__( \
+ "msr nzcv,%3;" \
+ "mov " #RN ",%2;" \
+ instruction ";" \
+ "mov %0," #RD ";" \
+ "mrs %1,nzcv;" \
+ : "=&r" (out), "=&r" (nzcv_out) \
+ : "r" (RNval), "r" (nzcv_in) \
+ : #RD, #RN, "cc", "memory" \
+ ); \
+ printf("%s :: rd %016llx rn (hidden), " \
+ "cin %d, nzcv %08llx %c%c%c%c\n", \
+ instruction, out, \
+ carryin ? 1 : 0, \
+ nzcv_out & 0xffff0000, \
+ ((1<<31) & nzcv_out) ? 'N' : ' ', \
+ ((1<<30) & nzcv_out) ? 'Z' : ' ', \
+ ((1<<29) & nzcv_out) ? 'C' : ' ', \
+ ((1<<28) & nzcv_out) ? 'V' : ' ' \
+ ); \
+}
+
+#define TESTINST3_hide2and3(instruction, RMval, RNval, RD, RM, RN, carryin) \
+{ \
+ ULong out; \
+ ULong nzcv_out; \
+ ULong nzcv_in = (carryin ? (1<<29) : 0); \
+ __asm__ __volatile__( \
+ "msr nzcv,%4;" \
+ "mov " #RM ",%2;" \
+ "mov " #RN ",%3;" \
+ instruction ";" \
+ "mov %0," #RD ";" \
+ "mrs %1,nzcv;" \
+ : "=&r" (out), "=&r" (nzcv_out) \
+ : "r" (RMval), "r" (RNval), "r" (nzcv_in) \
+ : #RD, #RM, #RN, "cc", "memory" \
+ ); \
+ printf("%s :: rd %016llx rm (hidden), rn (hidden), " \
+ "cin %d, nzcv %08llx %c%c%c%c\n", \
+ instruction, out, \
+ carryin ? 1 : 0, \
+ nzcv_out & 0xffff0000, \
+ ((1<<31) & nzcv_out) ? 'N' : ' ', \
+ ((1<<30) & nzcv_out) ? 'Z' : ' ', \
+ ((1<<29) & nzcv_out) ? 'C' : ' ', \
+ ((1<<28) & nzcv_out) ? 'V' : ' ' \
+ ); \
+}
+
+
+#define ALL5s 0x5555555555555555ULL
+#define ALLas 0xAAAAAAAAAAAAAAAAULL
+#define ALLfs 0xFFFFFFFFFFFFFFFFULL
+
+int main ( void )
+{
+////////////////////////////////////////////////////////////////
+printf("misc ad-hoc tests\n");
+
+TESTINST3("add x3, x4, x5", 12345, 6789, x3, x4, x5, 0);
+TESTINST3("add w3, w4, w5", 12345, 6789, x3, x4, x5, 0);
+
+TESTINST2("bfm x2, x4, #0, #63", 0x5555555555555555, x2, x4, 0);
+TESTINST2("bfm x2, x4, #0, #63", 0xaaaaaaaaaaaaaaaa, x2, x4, 0);
+
+TESTINST3("cmp x4, x5 ; cset x3, ne", 12345, 6789, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; cset x3, eq", 12345, 6789, x3, x4, x5, 0);
+
+TESTINST3("cmp w4, w5 ; cset x3, ne",
+ 0xAB12345678, 0xCD12345678, x3, x4, x5, 0);
+
+TESTINST3("cmp w4, w5 ; cset x3, eq",
+ 0xCD12345678, 0xCD12345670, x3, x4, x5, 0);
+
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0xdb432311d1e3a1d0, 0xa6325ae016fbd710, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0x192e7217e1ab63b0, 0xfd370f11bfcd4a4a, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0xfd79baaee550b488, 0x5bc94f0d3ee4863a, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0xc58586ea2c6954df, 0xe861540945421773, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0xe51579fec3892795, 0x507865169b052546, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0x1b834ed5b21de6b5, 0x9a1140d0fd1dbf6c, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0x2b7c5939d7c0f528, 0xb73870a5a6630162, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0xfc9a9d8be2434f5e, 0x6a13f7db3dfa4a3f, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0xd98d2022a9b876ab, 0xa7e754e8ff3a554e, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0x33566e6515990527, 0x3d7e7390195d82e2, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0xe57b3a514f5207f4, 0x8ef7bac0f0ac903a, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0x9d4a481b12743bf8, 0x9f014e8d2644ee47, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0xefdd33d64e6d6a8b, 0x44e875422d202c19, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0x5c6c9b2a7f109f5b, 0x568ee275e665f075, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0x9b14b0a4fbbd2c11, 0x6b5bac44aaa93980, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0x2e01dd24f43ab651, 0xe7d992b63e93eed4, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0xf51464d0135fb75c, 0xcb60e536ad0b94e9, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0xca38ffb7de3bd6b0, 0xeef048dd9ed9490c, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0x54ec6fe1530c7d86, 0xe7aa4d6f69edb5d0, x3, x4, x5, 0);
+TESTINST3("cmp x4, x5 ; mrs x3, nzcv", 0x401b30e3b8b5d629, 0x635a5c613cdb7919, x3, x4, x5, 0);
+
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0xdb432311d1e3a1d0, 0xa6325ae016fbd710, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0x192e7217e1ab63b0, 0xfd370f11bfcd4a4a, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0xfd79baaee550b488, 0x5bc94f0d3ee4863a, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0xc58586ea2c6954df, 0xe861540945421773, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0xe51579fec3892795, 0x507865169b052546, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0x1b834ed5b21de6b5, 0x9a1140d0fd1dbf6c, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0x2b7c5939d7c0f528, 0xb73870a5a6630162, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0xfc9a9d8be2434f5e, 0x6a13f7db3dfa4a3f, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0xd98d2022a9b876ab, 0xa7e754e8ff3a554e, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0x33566e6515990527, 0x3d7e7390195d82e2, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0xe57b3a514f5207f4, 0x8ef7bac0f0ac903a, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0x9d4a481b12743bf8, 0x9f014e8d2644ee47, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0xefdd33d64e6d6a8b, 0x44e875422d202c19, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0x5c6c9b2a7f109f5b, 0x568ee275e665f075, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0x9b14b0a4fbbd2c11, 0x6b5bac44aaa93980, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0x2e01dd24f43ab651, 0xe7d992b63e93eed4, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0xf51464d0135fb75c, 0xcb60e536ad0b94e9, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0xca38ffb7de3bd6b0, 0xeef048dd9ed9490c, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0x54ec6fe1530c7d86, 0xe7aa4d6f69edb5d0, x3, x4, x5, 0);
+TESTINST3("cmp w4, w5 ; mrs x3, nzcv", 0x401b30e3b8b5d629, 0x635a5c613cdb7919, x3, x4, x5, 0);
+
+
+////////////////////////////////////////////////////////////////
+printf("ADD imm12\n");
+TESTINST2("add x3, x4, #0x876, lsl #0", ALL5s, x3, x4, 0);
+TESTINST2("add x3, x4, #0x876, lsl #0", ALLfs, x3, x4, 0);
+TESTINST2("add x3, x4, #0x876, lsl #12", ALL5s, x3, x4, 0);
+TESTINST2("add x3, x4, #0x876, lsl #12", ALLfs, x3, x4, 0);
+TESTINST2("add w3, w4, #0x876, lsl #0", ALL5s, x3, x4, 0);
+TESTINST2("add w3, w4, #0x876, lsl #0", ALLfs, x3, x4, 0);
+TESTINST2("add w3, w4, #0x876, lsl #12", ALL5s, x3, x4, 0);
+TESTINST2("add w3, w4, #0x876, lsl #12", ALLfs, x3, x4, 0);
+TESTINST2("adds x3, x4, #0x876, lsl #0", ALL5s, x3, x4, 0);
+TESTINST2("adds x3, x4, #0x876, lsl #0", ALLfs, x3, x4, 0);
+TESTINST2("adds x3, x4, #0x876, lsl #12", ALL5s, x3, x4, 0);
+TESTINST2("adds x3, x4, #0x876, lsl #12", ALLfs, x3, x4, 0);
+TESTINST2("adds w3, w4, #0x876, lsl #0", ALL5s, x3, x4, 0);
+TESTINST2("adds w3, w4, #0x876, lsl #0", ALLfs, x3, x4, 0);
+TESTINST2("adds w3, w4, #0x876, lsl #12", ALL5s, x3, x4, 0);
+TESTINST2("adds w3, w4, #0x876, lsl #12", ALLfs, x3, x4, 0);
+
+TESTINST2("adds x3, x4, #0xD87, lsl #0", 0xc5446fe48c610b28, x3, x4, 0);
+TESTINST2("adds x3, x4, #0xD87, lsl #0", 0xefdd33d64e6d6a8b, x3, x4, 0);
+TESTINST2("adds x3, x4, #0xD87, lsl #0", 0x8b0a4c8f910c1a9a, x3, x4, 0);
+TESTINST2("adds x3, x4, #0xD87, lsl #0", 0x5c6c9b2a7f109f5b, x3, x4, 0);
+TESTINST2("adds x3, x4, #0xD87, lsl #0", 0x1f699b1d954a5abd, x3, x4, 0);
+TESTINST2("adds x3, x4, #0xD87, lsl #0", 0x9b14b0a4fbbd2c11, x3, x4, 0);
+TESTINST2("adds x3, x4, #0xD87, lsl #0", 0xd55d1c942f951f5e, x3, x4, 0);
+TESTINST2("adds x3, x4, #0xD87, lsl #0", 0x31d5b14395d5a53a, x3, x4, 0);
+TESTINST2("adds x3, x4, #0xD87, lsl #0", 0x2e01dd24f43ab651, x3, x4, 0);
+TESTINST2("adds x3, x4, #0xD87, lsl #0", 0xf44e040002467809, x3, x4, 0);
+TESTINST2("adds x3, x4, #0xD87, lsl #0", 0x843fdf810277796e, x3, x4, 0);
+TESTINST2("adds x3, x4, #0xD87, lsl #0", 0x64d24626922b486c, x3, x4, 0);
+
+TESTINST2("adds w3, w4, #0xD87, lsl #0", 0xc5446fe48c610b28, x3, x4, 0);
+TESTINST2("adds w3, w4, #0xD87, lsl #0", 0xefdd33d64e6d6a8b, x3, x4, 0);
+TESTINST2("adds w3, w4, #0xD87, lsl #0", 0x8b0a4c8f910c1a9a, x3, x4, 0);
+TESTINST2("adds w3, w4, #0xD87, lsl #0", 0x5c6c9b2a7f109f5b, x3, x4, 0);
+TESTINST2("adds w3, w4, #0xD87, lsl #0", 0x1f699b1d954a5abd, x3, x4, 0);
+TESTINST2("adds w3, w4, #0xD87, lsl #0", 0x9b14b0a4fbbd2c11, x3, x4, 0);
+TESTINST2("adds w3, w4, #0xD87, lsl #0", 0xd55d1c942f951f5e, x3, x4, 0);
+TESTINST2("adds w3, w4, #0xD87, lsl #0", 0x31d5b14395d5a53a, x3, x4, 0);
+TESTINST2("adds w3, w4, #0xD87, lsl #0", 0x2e01dd24f43ab651, x3, x4, 0);
+TESTINST2("adds w3, w4, #0xD87, lsl #0", 0xf44e040002467809, x3, x4, 0);
+TESTINST2("adds w3, w4, #0xD87, lsl #0", 0x843fdf810277796e, x3, x4, 0);
+TESTINST2("adds w3, w4, #0xD87, lsl #0", 0x64d24626922b486c, x3, x4, 0);
+
+////////////////////////////////////////////////////////////////
+printf("SUB imm12\n");
+TESTINST2("sub w3, w4, #0x876, lsl #0", ALL5s, x3, x4, 0);
+TESTINST2("sub w3, w4, #0x876, lsl #0", ALLfs, x3, x4, 0);
+TESTINST2("sub w3, w4, #0x876, lsl #12", ALL5s, x3, x4, 0);
+TESTINST2("sub w3, w4, #0x876, lsl #12", ALLfs, x3, x4, 0);
+TESTINST2("sub w3, w4, #0x876, lsl #0", ALL5s, x3, x4, 0);
+TESTINST2("sub w3, w4, #0x876, lsl #0", ALLfs, x3, x4, 0);
+TESTINST2("sub w3, w4, #0x876, lsl #12", ALL5s, x3, x4, 0);
+TESTINST2("sub w3, w4, #0x876, lsl #12", ALLfs, x3, x4, 0);
+TESTINST2("subs w3, w4, #0x876, lsl #0", ALL5s, x3, x4, 0);
+TESTINST2("subs w3, w4, #0x876, lsl #0", ALLfs, x3, x4, 0);
+TESTINST2("subs w3, w4, #0x876, lsl #12", ALL5s, x3, x4, 0);
+TESTINST2("subs w3, w4, #0x876, lsl #12", ALLfs, x3, x4, 0);
+TESTINST2("subs w3, w4, #0x876, lsl #0", ALL5s, x3, x4, 0);
+TESTINST2("subs w3, w4, #0x876, lsl #0", ALLfs, x3, x4, 0);
+TESTINST2("subs w3, w4, #0x876, lsl #12", ALL5s, x3, x4, 0);
+TESTINST2("subs w3, w4, #0x876, lsl #12", ALLfs, x3, x4, 0);
+
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0xc5446fe48c610b28, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0xefdd33d64e6d6a8b, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x8b0a4c8f910c1a9a, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x5c6c9b2a7f109f5b, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x1f699b1d954a5abd, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x9b14b0a4fbbd2c11, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0xd55d1c942f951f5e, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x31d5b14395d5a53a, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x2e01dd24f43ab651, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0xf44e040002467809, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x843fdf810277796e, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x64d24626922b486c, x3, x4, 0);
+
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0xc5446fe48c610b28, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0xefdd33d64e6d6a8b, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x8b0a4c8f910c1a9a, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x5c6c9b2a7f109f5b, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x1f699b1d954a5abd, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x9b14b0a4fbbd2c11, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0xd55d1c942f951f5e, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x31d5b14395d5a53a, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x2e01dd24f43ab651, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0xf44e040002467809, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x843fdf810277796e, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x64d24626922b486c, x3, x4, 0);
+
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x64d2462600000d86, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x64d2462600000d87, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x64d2462600000d88, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x64d2462680000d86, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x64d2462680000d87, x3, x4, 0);
+TESTINST2("subs w3, w4, #0xD87, lsl #0", 0x64d2462680000d88, x3, x4, 0);
+
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x0000000000000d86, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x0000000000000d87, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x0000000000000d88, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x8000000000000d86, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x8000000000000d87, x3, x4, 0);
+TESTINST2("subs x3, x4, #0xD87, lsl #0", 0x8000000000000d88, x3, x4, 0);
+
+#if 0
+////////////////////////////////////////////////////////////////
+printf("ADR/ADRP\n");
+TESTINST1("adrp x27, #0x987", x27, 0);
+#endif
+
+////////////////////////////////////////////////////////////////
+printf("AND(imm)\n");
+TESTINST2("and x3,x4, #0xF", ALL5s, x3, x4, 0);
+TESTINST2("and x3,x4, #0x8080808080808080", 0x843fdf810277796e, x3, x4, 0);
+TESTINST2("and x3,x4, #0xC0C0C0C0C0C0C0C0", 0xc5446fe48c610b28, x3, x4, 0);
+TESTINST2("ands x3,x4, #0x8080808080808080", 0x843fdf810277796e, x3, x4, 0);
+TESTINST2("ands x3,x4, #0xC0C0C0C0C0C0C0C0", 0xc5446fe48c610b28, x3, x4, 0);
+TESTINST2("ands x3,x4, #0x8080808080808080", 0x143fdf810277796e, x3, x4, 0);
+TESTINST2("ands x3,x4, #0xC0C0C0C0C0C0C0C0", 0xA5446fe48c610b28, x3, x4, 0);
+TESTINST2("ands x3,x4, #0x8080808080808080", 0x7070707070707070, x3, x4, 0);
+TESTINST2("ands x3,x4, #0x8080808080808080", 0xF070707070707070, x3, x4, 0);
+
+TESTINST2("and w3,w4, #0xF", ALL5s, x3, x4, 0);
+TESTINST2("and w3,w4, #0x8080808080808080", 0x843fdf810277796e, x3, x4, 0);
+TESTINST2("and w3,w4, #0xC0C0C0C0C0C0C0C0", 0xc5446fe48c610b28, x3, x4, 0);
+TESTINST2("ands w3,w4, #0x80808080", 0x843fdf810277796e, x3, x4, 0);
+TESTINST2("ands w3,w4, #0xC0C0C0C0", 0xc5446fe48c610b28, x3, x4, 0);
+TESTINST2("ands w3,w4, #0x80808080", 0x143fdf810277796e, x3, x4, 0);
+TESTINST2("ands w3,w4, #0xC0C0C0C0", 0xA5446fe48c610b28, x3, x4, 0);
+TESTINST2("ands w3,w4, #0x80808080", 0x7070707070707070, x3, x4, 0);
+TESTINST2("ands w3,w4, #0x80808080", 0x70707070F0707070, x3, x4, 0);
+
+////////////////////////////////////////////////////////////////
+printf("ORR(imm)\n");
+TESTINST2("orr x3,x4, #0xF", ALL5s, x3, x4, 0);
+TESTINST2("orr x3,x4, #0x8080808080808080", 0x843fdf810277796e, x3, x4, 0);
+TESTINST2("orr x3,x4, #0xC0C0C0C0C0C0C0C0", 0xc5446fe48c610b28, x3, x4, 0);
+
+TESTINST2("orr w3,w4, #0xF", ALL5s, x3, x4, 0);
+TESTINST2("orr w3,w4, #0x8080808080808080", 0x843fdf810277796e, x3, x4, 0);
+TESTINST2("orr w3,w4, #0xC0C0C0C0C0C0C0C0", 0xc5446fe48c610b28, x3, x4, 0);
+
+////////////////////////////////////////////////////////////////
+printf("EOR(imm)\n");
+TESTINST2("eor x3,x4, #0xF", ALL5s, x3, x4, 0);
+TESTINST2("eor x3,x4, #0x8080808080808080", 0x843fdf810277796e, x3, x4, 0);
+TESTINST2("eor x3,x4, #0xC0C0C0C0C0C0C0C0", 0xc5446fe48c610b28, x3, x4, 0);
+
+TESTINST2("eor w3,w4, #0xF", ALL5s, x3, x4, 0);
+TESTINST2("eor w3,w4, #0x8080808080808080", 0x843fdf810277796e, x3, x4, 0);
+TESTINST2("eor w3,w4, #0xC0C0C0C0C0C0C0C0", 0xc5446fe48c610b28, x3, x4, 0);
+
+////////////////////////////////////////////////////////////////
+printf("MOVZ\n");
+TESTINST1("movz x27, #0x987", x27, 0);
+TESTINST1("movz x27, #0x987, lsl #16", x27, 0);
+TESTINST1("movz x27, #0x987, lsl #32", x27, 0);
+TESTINST1("movz x27, #0x987, lsl #48", x27, 0);
+
+////////////////////////////////////////////////////////////////
+printf("MOVN\n");
+TESTINST1("movn x27, #0x987", x27, 0);
+TESTINST1("movn x27, #0x987, lsl #16", x27, 0);
+TESTINST1("movn x27, #0x987, lsl #32", x27, 0);
+TESTINST1("movn x27, #0x987, lsl #48", x27, 0);
+
+////////////////////////////////////////////////////////////////
+printf("MOVK\n");
+TESTINST1("movn x27, #0xdef, lsl #48 ; movk x27, #0x987, lsl #0 ; "
+ "movk x27, #0xabc, lsl #32 ; movk x27, #0x5123, lsl #16 ", x27, 0);
+
+////////////////////////////////////////////////////////////////
+
+#if TEST_BFM
+
+printf("UBFM(64)\n");
+printf("SBFM(64)\n");
+printf("BFM(64)\n");
+
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #0", 0x643c986966334873, 0x6b8b4567327b23c6, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #0", 0x2ae8944a625558ec, 0x74b0dc5119495cff, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #0", 0x3d1b58ba507ed7ab, 0x238e1f2946e87ccd, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #0", 0x79e2a9e37545e146, 0x2eb141f241b71efb, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #0", 0x122008544db127f8, 0x515f007c5bd062c2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #0", 0x1190cde766ef438d, 0x0216231b1f16e9e8, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #0", 0x109cf92e0ded7263, 0x140e0f763352255a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #0", 0x41a7c4c96b68079a, 0x7fdcc2331befd79f, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #0", 0x519b500d431bd7b7, 0x4e6afb6625e45d32, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #0", 0x257130a362bbd95a, 0x3f2dba317c83e458, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #0", 0x333ab105721da317, 0x436c6125628c895d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #0", 0x6763845e75a2a8d4, 0x2443a8582d1d5ae9, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #0", 0x4353d0cd0b03e0c6, 0x08edbdab79838cb2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #0", 0x71f324542ca88611, 0x189a769b54e49eb4, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #0", 0x3a95f87408138641, 0x0836c40e02901d82, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #0", 0x737b8ddc6ceaf087, 0x1e7ff5217c3dbd3d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #0", 0x3006c83e614fd4a1, 0x22221a704516dde9, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #0", 0x440badfc05072367, 0x419ac2415577f8e1, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #0", 0x7724c67e5c482a97, 0x3804823e77465f01, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #0", 0x51ead36b2d517796, 0x2463b9ea5e884adc, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #0", 0x3855585c70a64e2a, 0x580bd78f153ea438, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #0", 0x1d4ed43b725a06fb, 0x6a2342ec2a487cb0, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #0", 0x7a6d8d3c4b588f54, 0x2cd89a3257e4ccaf, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #0", 0x38437fdb7644a45c, 0x542289ec6de91b18, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #0", 0x579478fe749abb43, 0x32fff902684a481a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #0", 0x79a1deaa75c6c33a, 0x3dc240fb1ba026fa, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #0", 0x520eedd1374a3fe6, 0x12e685fb70c6a529, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #0", 0x649bb77c275ac794, 0x4f4ef00523f9c13c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #0", 0x180115be235ba861, 0x393865751cf10fd8, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #0", 0x15b5af5c741226bb, 0x47398c89354fe9f9, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #1", 0x3f6ab60f61574095, 0x0d34b6a810233c99, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #1", 0x579be4f1310c50b3, 0x7e0c57b177ae35eb, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #1", 0x25a70bf71dbabf00, 0x5ff87e052f305def, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #1", 0x1381823a5db70ae5, 0x4ad084e91f48eaa1, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #1", 0x15014acb5f5e7fd0, 0x100f8fca6590700b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #1", 0x06b9476442c296bd, 0x098a3148799d0247, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #1", 0x661e3f1e5dc79ea8, 0x168e121f1eba5d23, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #1", 0x51d9c564613efdc5, 0x540a471c7bd3ee7b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #1", 0x42963e5a0a0382c5, 0x0bf72b1411447b73, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #1", 0x3b0fd37968eb2f63, 0x08f2b15e1a32234b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #1", 0x06a5ee6414330624, 0x4962813b60b6df70, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #1", 0x71ea1109100f59dc, 0x7fffca111a27709e, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #1", 0x6f6dd9ac094211f2, 0x7fb7e0aa06eb5bd4, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #1", 0x4c04a8af1716703b, 0x00885e1b76272110, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #1", 0x74de0ee368ebc550, 0x14e17e333222e7cd, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #1", 0x4a2ac31539ee015c, 0x2df6d64846b7d447, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #1", 0x43f1842260ef0119, 0x57fc4fbb0cc1016f, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #1", 0x49da307d7055a5f5, 0x26f324ba7f01579b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #1", 0x0488ac1a5fb8011c, 0x5fb8370b50801ee1, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #1", 0x6fc75af86a5f7029, 0x6aa78f7f7672bd23, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #1", 0x73a1821b7de67713, 0x7d5e18f85f3534a4, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #1", 0x14fce74e6a3dd3e8, 0x555c55b53fa62aca, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #1", 0x532999381fbfe8e0, 0x71c9129809daf632, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #1", 0x59adea3d288f1a34, 0x5092ca791d545c4d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #1", 0x097e1b4e51088277, 0x2a155dbc1d9f6e5f, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #1", 0x415e286c7c58fd05, 0x1ca0c5fa53584bcb, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #1", 0x5c10fe210e7ffa2b, 0x23d86aac45e6d486, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #1", 0x78df6a5539b7aaa2, 0x3c5991aa4bd8591a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #1", 0x379e21b50069e373, 0x2b0d8dbe6c80ec70, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #1", 0x6aa7b75c1df029d3, 0x2c27173b4c9b0904, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #2", 0x3db012b32708c9af, 0x5675ff363dd15094, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #2", 0x4f97e3e4053b0a9e, 0x5b25ace2175dfcf0, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #2", 0x56438d15519e3149, 0x34fd6b4f5915ff32, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #2", 0x4df72e4e5046b5a9, 0x2c6e4afd17a1b582, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #2", 0x5ec6afd419e21bb2, 0x5d888a082a082c70, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #2", 0x5399c65420ee1348, 0x75e0858a57a61a29, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #2", 0x2157f6bc704e1dd5, 0x4427069a0b37e80a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #2", 0x0e3e47a82e48f044, 0x57d2f10e0bffae18, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #2", 0x5551b9f324f6ab8e, 0x49d0feac4bee5a5b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #2", 0x2a31b62d1849c29b, 0x634c574c24e99dd7, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #2", 0x69e7f3e52a6de806, 0x7dff9d0900754342, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #2", 0x7ab49daf759f82cd, 0x1816f8c437df2233, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #2", 0x0f819e7f57c7d42d, 0x61e74ea3597b4d84, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #2", 0x78b5e77675486e47, 0x312167ad631b64d4, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #2", 0x65968c1c46263dec, 0x6e534cde1a0dde32, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #2", 0x746f2e306fde8af6, 0x260d8c4a73d4d3c4, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #2", 0x14d53685230f856c, 0x3fc32e2049c0e823, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #2", 0x3b5948076caa2304, 0x6eaa85fb3f06ecb2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #2", 0x17180b0b579328b9, 0x3f7c2ff425413bec, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #2", 0x4d32ab863f07acc3, 0x5d205e2011cca8ba, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #2", 0x16cf80f11c695dec, 0x6b47f63e5cb44a05, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #2", 0x11b1cc332e22fbb7, 0x3fcfaed90f856867, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #2", 0x744939a34fa0d2e3, 0x2993469977485850, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #2", 0x3f7f5dd92ae05a34, 0x6b1d2c1468b867d3, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #2", 0x4defdfa02123d5f2, 0x32794ff75454945e, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #2", 0x0dcdf8f652d7b105, 0x135b8110094927a8, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #2", 0x2a6ad9be0baac1b4, 0x2e8a639424e60401, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #2", 0x4ab26e7821faa2fa, 0x36b2acbc779d8544, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #2", 0x3e6400e614217e23, 0x5451cf496181ef69, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #2", 0x424479da1a9a9e69, 0x710757d05015cd1a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #3", 0x6a3b714c327b517e, 0x475e256a368db37e, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #3", 0x5d5babb351bf6b48, 0x1f461b5129bacf25, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #3", 0x72e3413a116ae494, 0x7e0f63842b4b8b53, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #3", 0x64429599631f1690, 0x3494b2fb00b13a31, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #3", 0x6ec9d8445c49eaee, 0x25973e320ead6f57, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #3", 0x7e448de95a9cc3e5, 0x064af49b397c46bc, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #3", 0x6ebe42080c058df5, 0x1afe36253ca88ecf, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #3", 0x26a02c5e541c8153, 0x0cbe5be93102bbe2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #3", 0x0697d2d206d68ab2, 0x67906f6010db9daa, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #3", 0x5895f5fa38a5d054, 0x3a966cd063f37e85, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #3", 0x4a10b4e843d3bcd4, 0x0f3f09d84b793735, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #3", 0x26f2d36471c1af98, 0x4c2a71662e534a82, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #3", 0x4e0b9a87434bae75, 0x3d00b9d915bcaba8, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #3", 0x1de8725a6a37288a, 0x4f38f2654c502870, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #3", 0x763cb68015b71329, 0x08f8b73f0ca6b462, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #3", 0x69d3947c2539dfa5, 0x3da970441cdce2de, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #3", 0x2c106a57684eed59, 0x2db88089706b674e, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #3", 0x20f4bdad639defac, 0x545ee5d304a66051, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #3", 0x2771ac801c4a08ec, 0x501f97866b057295, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #3", 0x0e0bb885565976f1, 0x1958bd174e647fe4, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #3", 0x19a52566335a1df1, 0x64212b8c5c17530c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #3", 0x1d91467c316032bb, 0x28677b7c378d97c0, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #3", 0x471745e401ddbc66, 0x44344c2213cdfcfc, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #3", 0x27179c0b5e636063, 0x30aadfda30eada61, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #3", 0x46b24dbc75b52783, 0x215641af53280662, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #3", 0x5953172f27edfe3a, 0x57ce66b467a70b69, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #3", 0x443807276c053b16, 0x52ac7dff00c4c3af, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #3", 0x425eb207334a6f1f, 0x4f2943935243bfac, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #3", 0x66a48d1156c28e34, 0x2e5b12b85c03d76d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #3", 0x0822c0ef57c5bb4f, 0x13916f2d0435d38d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #16", 0x59a377b648aeb063, 0x1803d0894f3a06d4, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #16", 0x271210c7217b22e4, 0x0024e13500bb13c1, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #16", 0x17304a672bb180d8, 0x53e31a246dc45e83, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #16", 0x539f7f122817e7ec, 0x556b69ed70836196, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #16", 0x141d2302407168d8, 0x7148254517d78639, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #16", 0x73bbd7f81876589d, 0x6a1b45e5567bd50a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #16", 0x6f38e6d146111ba5, 0x327fac775a606509, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #16", 0x1dd6d6f4769a091f, 0x5e963896775ba7c1, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #16", 0x3f48b98246ba8fca, 0x4695ae95777a4eaa, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #16", 0x6835b2ae4c187c90, 0x7835626c665aca49, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #16", 0x77c9fd68298a92ba, 0x541f28cd7f65fd16, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #16", 0x51a27aa6613183f2, 0x6fe95eac4b697c7a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #16", 0x21a2ecca4d5c4899, 0x634102b465bf9da8, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #16", 0x65d2a1376ebb1f2a, 0x3c3b72b2155ec4c2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #16", 0x34cc3acf4e556261, 0x6fbf29cb550b8808, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #16", 0x44ef6b8012fcde5e, 0x4c672fc952a311c3, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #16", 0x59b76e284252c2da, 0x4a1d606e04382503, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #16", 0x0e6b3f6a3eb21819, 0x6a92ef4c41ed20d7, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #16", 0x683caad3313c7c99, 0x41531ded06353cd2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #16", 0x126e008b34dfbc00, 0x519eb94c39df2579, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #16", 0x023c049a5bda35d4, 0x1f9ec3223410ed56, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #16", 0x4a9554fe392edbe4, 0x496fb218680ea5d1, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #16", 0x07843e4509815da3, 0x3d1a2dd97f618fcd, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #16", 0x1c7e3c011c2201ff, 0x5204a1914c73a9c6, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #16", 0x5e74c4d93b3ebe15, 0x50abcec97635aa2a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #16", 0x79f0d62f7975e8ee, 0x3822cb016ce00443, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #16", 0x2ab2658744b3fa61, 0x73154115622d8102, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #16", 0x7993b6623bab699e, 0x1c0ca67c3d206613, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #16", 0x17859f723aa10581, 0x713153697bcfbafc, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #16", 0x73cfe16520f88ea6, 0x63de60cd621af471, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #29", 0x2a79ec49338125cf, 0x617c843e7b541fab, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #29", 0x4fa327ce1873983a, 0x47c7c97146f8284b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #29", 0x53b2564f75509d76, 0x3d2dd2752e17eca7, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #29", 0x6ec686640e0d31ff, 0x1af7f0ea4da32c7e, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #29", 0x52c12c614bdd53fd, 0x2fd0ad811978ebeb, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #29", 0x0788bd9b47caa567, 0x569951fe4c54e2c3, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #29", 0x026baae92c02fe8c, 0x48249dbf1f0e5d0d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #29", 0x4cfb8d3262a5d5bd, 0x0129517e763b8c4e, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #29", 0x1626fb8c3957756a, 0x718fabf97775797c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #29", 0x51cb0da47b9b743c, 0x3e6da1c765ca235b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #29", 0x70ec11b22eda00ed, 0x13e21002257d63f4, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #29", 0x3ce732ec22f13df3, 0x732090725fb29816, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #29", 0x6ece91f04fc4d600, 0x792b84010fa85f4d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #29", 0x178f7b672421dfcf, 0x5bfd421076574f8b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #29", 0x5024de5b168efe17, 0x1565ac9919fb2650, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #29", 0x7934d3d401c65e98, 0x1036b29f1d206b8e, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #29", 0x3b1dd403530386d1, 0x1495e50a0f5bcf61, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #29", 0x4e9efb0d090802be, 0x7525f2bc0ce8e1a7, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #29", 0x37e203ab2586d60e, 0x3266459b3f8b0cbf, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #29", 0x48781401186928d6, 0x1f3da4d574c93698, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #29", 0x682dfed6606ed7f6, 0x047195e53746a5f2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #29", 0x0490b7c54303a216, 0x2d9df57d7fbd7a3e, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #29", 0x5992a02e29ef532d, 0x19b8a08e54b59621, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #29", 0x2bb5b1c6066be6b9, 0x71d601af52c77402, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #29", 0x596f6d8a5749361f, 0x6223436366d385c9, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #29", 0x605138de2622ad0c, 0x73bc6770280e6897, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #29", 0x4ba9831a06d71a2b, 0x6799755618333c89, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #29", 0x1f404301116e0907, 0x0cfc73211421971b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #29", 0x71dce0fd7906328b, 0x4b683d0d076e41d8, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #29", 0x3c09d4a120e45ca4, 0x072bbc16766d98c2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #42", 0x4ad3afd23cf93092, 0x4b232ee3159c74cf, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #42", 0x4365174b4a872c35, 0x6863e8d276896198, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #42", 0x21d0625551194ed1, 0x5d5ce7611cd484d5, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #42", 0x773bfbdd2c7c62c2, 0x44e2ed6c02219b33, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #42", 0x33537ced27514ade, 0x1a54d7bc42e57ef7, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #42", 0x38bf53e5226f5320, 0x570716135293bfef, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #42", 0x1b7585ab612dbddd, 0x5a0201c72a9c34e2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #42", 0x02121a816c2cfc88, 0x2109cda4577f5a4d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #42", 0x29262d1a557fb7ee, 0x6d1bcf1c4ce5ca53, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #42", 0x2006e42420cc134c, 0x436f2beb6c8b4466, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #42", 0x71e5621e4e42b6a8, 0x095fc93b41d74679, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #42", 0x7abf196a5e4db968, 0x43f8e1ac69215dfb, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #42", 0x059f0446030df306, 0x2c06dcf32e129658, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #42", 0x257d46265aa8580e, 0x00a656473e5e582b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #42", 0x3bd615eb0a045ab2, 0x68fa8d0d40f2cbd2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #42", 0x7631573a058df53b, 0x1872261f3de8306c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #42", 0x5b0dad2a4e3d26ab, 0x0acdfac01f578454, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #42", 0x6f0939f8154291f6, 0x0be2c8ba7b14914e, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #42", 0x6385489e00e4b973, 0x3cebd7c760ee9c16, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #42", 0x5f3272db7616d704, 0x4a0ffa115e446208, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #42", 0x7924ca0a0cfd4ea7, 0x0c56f86064d17722, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #42", 0x67a5a6b50c2a5c5b, 0x232fcf4d1ea21031, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #42", 0x162eb70d78070222, 0x5f94dc03237bbca0, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #42", 0x7d94f75d6c31e7cd, 0x6163ed0d0c600e47, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #42", 0x3a6f0e78379a5b56, 0x2bb7929b58a2a487, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #42", 0x4cdced4c10a30d9c, 0x53b735d529784870, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #42", 0x1187c70f5476de98, 0x0a66e486306235ea, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #42", 0x4a8db59c1afd9053, 0x0ea697f270ba39eb, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #42", 0x27fadefa78bb805a, 0x558bb10d43b27fa7, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #42", 0x04e5dcb541e96bdb, 0x62548fd80fa085b0, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #55", 0x39f06dfd14802f5d, 0x331c42501b1493c2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #55", 0x00b2172a532c34a5, 0x2774a2093785655a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #55", 0x0ac68ffb63df3fb7, 0x102809e23b2125a3, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #55", 0x74824d546f00529a, 0x64996e1357a37d47, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #55", 0x4377313216ac4b23, 0x0805b331060a1463, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #55", 0x31a9db764c4fff5b, 0x76c44e4e0e04e6ce, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #55", 0x450b7fb6340bf64d, 0x51b7667559a4ba71, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #55", 0x75f562281c618271, 0x6945402149f15c6b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #55", 0x30e1b1cf0c7a9237, 0x6505f02e2fe5d025, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #55", 0x5fa6c6dc77933f62, 0x676b35803193c8f9, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #55", 0x5b727f19514e5cb0, 0x6cb4ee9c6a6d56d7, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #55", 0x404eaf4a4a16874f, 0x4210d41e4ff4cc6d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #55", 0x60c2d2734cc32f1f, 0x55fee0d103c5e07c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #55", 0x19132e7b63822dc0, 0x11cac74a126cade9, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #55", 0x178e240d5556a87b, 0x6c11685a5e1eae31, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #55", 0x71b82aed0d15faca, 0x28100a9c0d838636, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #55", 0x19908d0224d48bdb, 0x3d69565b2299dcbc, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #55", 0x1c67cb3d40e29452, 0x542da5b5793753de, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #55", 0x1230f10225b57ed4, 0x63a4aab677da4a57, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #55", 0x6fcc06241dcdf795, 0x47cf16c4527fa04c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #55", 0x6a9126b568104812, 0x564580c8508ed897, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #55", 0x4b9275d24f0ceedb, 0x62fb868003a45530, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #55", 0x2463975609d30dfd, 0x61c30361632099e0, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #55", 0x16e908c82e0d7671, 0x70a42016161bc243, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #55", 0x52e2024d0ce344b5, 0x38b59eff307995ca, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #55", 0x4dc5d9070d55945e, 0x29b0e9a86f49cd8a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #55", 0x330b13332ef32ea6, 0x672417e15ff6ca09, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #55", 0x4cc1263b08bbeb1d, 0x32766a5522d71957, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #55", 0x70cc332f5661786e, 0x7365f1ee37524cf0, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #55", 0x256e67491cb9a581, 0x3af6a2203c5ea902, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #60", 0x268cb37f102362f8, 0x1f7f42e249d1fea0, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #60", 0x3e30d96918a35fe3, 0x5fedc0e33d75bc47, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #60", 0x2586a49817a03bb9, 0x6def52111112dbb6, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #60", 0x24f5d0186780c122, 0x005ca941734c7d9f, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #60", 0x1673efc805b9b1fd, 0x534347a85800e34b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #60", 0x0e759d1a6e3dee90, 0x7ad7fca263351604, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #60", 0x449f66fe557e0515, 0x1a8762f47f41d049, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #60", 0x7237aa965b1fbc2d, 0x3ba0794b6a0dce48, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #60", 0x6b431f2513cd8dcb, 0x33dfcce818c45e15, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #60", 0x2c70edae44296c6d, 0x563a1a5c2973f88f, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #60", 0x5bc9a8273ae37d86, 0x3a86d44551f79246, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #60", 0x22643ea91887578d, 0x45440fe500bf783f, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #60", 0x1e41098a5398582c, 0x58c05b8a38d82e71, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #60", 0x41d646bc3694a76a, 0x1c0d44752cb6a6a4, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #60", 0x0c12ac7f6798f039, 0x2bf876ee0675adba, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #60", 0x42b8ac67246348ea, 0x70837c027e4a5715, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #60", 0x3830d6b66d48cf87, 0x170eb52b2dfbcb8c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #60", 0x31723bf511f69861, 0x576fc41b64a1c464, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #60", 0x4cda15e77bdd6690, 0x369956ab0d3be41c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #60", 0x1464be1e66bbb7e5, 0x0dfb5c5b6f3e5490, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #60", 0x3a5410114423c777, 0x2816830232a5c7a8, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #60", 0x7ab86ee10b54e53b, 0x5f5c6e4d7c2a56cd, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #60", 0x72edd5747323808a, 0x02a0048706cb1b60, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #60", 0x1786c9741c2427a1, 0x0515727635a681db, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #60", 0x096cf7283b121183, 0x63a24d684fb7a02a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #60", 0x4d08a9e46af2bb3a, 0x3459648f3adf331d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #60", 0x66d021ca56167394, 0x481b173919e2bfcc, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #60", 0x3cd22b793137975e, 0x0921145c7b34dfe8, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #60", 0x755b5ed60d3715de, 0x2ddaa79177263b8a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #60", 0x188bfb1975f096df, 0x735092577013cdb7, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #61", 0x691417697bf45b8e, 0x76dee9180b79d08d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #61", 0x1818832f24c29fd1, 0x41205269009ae0dd, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #61", 0x5fd4b15404abe597, 0x5052810821857a57, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #61", 0x6f9ea0d1247fc4ae, 0x5c64ad752cdd5b39, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #61", 0x7a9638434fe12f61, 0x46c01b05566ec29b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #61", 0x0118c6c07f7e4a15, 0x51a3a284376863bc, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #61", 0x0cb55ff321df319e, 0x2e8e9f4776742596, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #61", 0x17cfc87d5d66dc65, 0x6687f34d25415b0c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #61", 0x595b37f371db7e02, 0x30bb2b9900e3dfe6, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #61", 0x169e1dd351d141cc, 0x017ec0c47173bb22, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #61", 0x567d27636f5de2ef, 0x12f9357a7672cf28, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #61", 0x13dda79d6a104566, 0x23502a61461bc834, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #61", 0x39f174c76e2e2d53, 0x1c8a8acf0e73dfe0, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #61", 0x6dac7768746ae2e4, 0x45dc439d3b0a3b87, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #61", 0x164a14821806546b, 0x317e611d7a61d75b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #61", 0x756d30d0505e5e01, 0x1fa332672e19dd00, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #61", 0x4239dc03307c7daa, 0x2efdbce64ec868c4, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #61", 0x024dbf7653355960, 0x403c23e658d7f9d7, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #61", 0x42933c4f729af360, 0x4f4ac8ff58cae6d9, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #61", 0x5cab38c63b7139dd, 0x1ee6af0d5670e3ed, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #61", 0x299f67302ac1076a, 0x64e4c3cd169cad8d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #61", 0x1f2bea4e03254a32, 0x51a6e915174bde99, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #61", 0x1b2b9e9d3150e85c, 0x11adb5f43575fed1, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #61", 0x01af465d128d98b7, 0x638fdbd11098cf6e, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #61", 0x430a16621f9d5c18, 0x5f61383243e92260, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #61", 0x72d2b5796c0be536, 0x1cc11c374557d5d8, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #61", 0x5ea6d8963d096bbf, 0x1e22bcb23565f1c8, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #61", 0x787aa59c70bb9983, 0x0bd6d5b53b52115c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #61", 0x1b7ca0ed2395a7ff, 0x51eebeea221a0ccd, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #61", 0x26baf2314b13a15a, 0x3965eb663aa88b3c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #62", 0x7c6489b653ae65de, 0x701e8a0d41e690cf, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #62", 0x663bfe9531e0986f, 0x527f603d7e13d013, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #62", 0x517df4875ebe0eab, 0x41fcf274294614f7, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #62", 0x4ac9f3e20cc0a782, 0x6e9dead04450aa00, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #62", 0x49ca1341058d717e, 0x79b69bc92970cc78, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #62", 0x76490b0136b19cbf, 0x64c2ddd54244b8de, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #62", 0x5a4744be1dc4b111, 0x645ec5ab11c5abef, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #62", 0x68d8526b3c8cc138, 0x4c6e372b010236ef, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #62", 0x103b2716156827fb, 0x42e8c7be653cdc22, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #62", 0x4748c06a254d9ea9, 0x6350ac35767725ab, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #62", 0x040bad550e5b2573, 0x1fbd3aa318c6b4f2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #62", 0x1b1bccf556cdfabb, 0x5d175ef24ed5a137, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #62", 0x5c5b6c3a5d094b84, 0x78466daf64e5e036, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #62", 0x13bae8430b895ebf, 0x272a991452a4773b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #62", 0x294e0fd030d85a55, 0x646a232a6e022d01, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #62", 0x6d651b8d31ed2baf, 0x6f0463f11226623c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #62", 0x475553ab5ab3ea93, 0x77633e5e7da042a3, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #62", 0x0001893d13d4a2f2, 0x7417684f0e9e1415, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #62", 0x222fc865047c27fa, 0x2764c907040d3692, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #62", 0x5b4a22b54b294578, 0x52e2d7c93d4b955a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #62", 0x283290fd495c0ea5, 0x2231759037a58eef, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #62", 0x54e56d646eb42955, 0x0a4a062b3bed7940, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #62", 0x1f8c83ab18f40a33, 0x29efa6427e337d35, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #62", 0x4ae135e207bd1dcf, 0x1059df710cf19f38, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #62", 0x627108627ea94a2b, 0x0a91e1dc1236898d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #62", 0x127ded1d483966aa, 0x20d49da36272919f, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #62", 0x4cb58ea439629ffa, 0x667fc83134adb582, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #62", 0x048be573142ac06c, 0x71f94adc27ffb15a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #62", 0x5d86cf1169ef4674, 0x5fa540492cbe7670, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #62", 0x58a36fca129b95f2, 0x68abefb0326c3c76, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #63", 0x2b8fa02540f9991c, 0x309fb9ab782ff375, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #63", 0x48b6b6eb0fb37489, 0x052192ad7670d608, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #63", 0x0e5cbeb4297bfd38, 0x08a75f952b27bf4d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #63", 0x71b563e3741a191e, 0x0d9a50ed20daabd1, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #63", 0x2d7cb9194781ac2f, 0x558861533e6af287, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #63", 0x5bac6c9c460fe42b, 0x666aa3e132089e8c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #63", 0x2fff2a9f477304ac, 0x5ec714fc39333bad, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #63", 0x5a0e9a9f1c3f31ce, 0x6b9f782308a29a69, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #63", 0x5d38caea05f4208c, 0x00d28dde059e3ac4, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #63", 0x15a7951504b67062, 0x7c0f10cc25ef81d5, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #63", 0x2e326d9a5eb19210, 0x51174123240453ca, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #63", 0x52cbab2e1a6760ef, 0x44deff9b1fe7d17d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #63", 0x61e90d1e44bd67e6, 0x5e52c40500486447, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #63", 0x0acd4c11111817cf, 0x325102d33d9579ba, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #63", 0x588b1c7c62682d8b, 0x76c8b5683acc76b1, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #63", 0x7ea75f5a44419ef9, 0x436f111a3299b71b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #63", 0x4a35bf85344702ac, 0x3837f1df5be02a44, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #63", 0x38fd730e52e6ed3d, 0x01cfac1a5fdd549a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #63", 0x31987f4d48c0a800, 0x03e1a864672fe0a8, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #63", 0x632808ef656a762b, 0x0717b22604642a7b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #63", 0x2a27de1136fd9196, 0x04ac8ec34511160d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #63", 0x4815a966796f4530, 0x02a68fc834f52a23, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #63", 0x5bd772bb3330b1ee, 0x6fc1a0d420a0c5e2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #63", 0x777250e70b726edc, 0x533a7cfd5a7ed215, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #63", 0x3fb97188382ea874, 0x365efc5a41a8106c, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #63", 0x0b1595b125670d6b, 0x2185650778b6e496, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #63", 0x6e27b56b66fe7765, 0x5fe6c53f3cae14fe, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #0, #63", 0x4c68ed9045bece3c, 0x41123f79514fbe5a, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #0, #63", 0x7cbc5fd319076430, 0x1660d4687690cba1, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #0, #63", 0x1276a9601b479698, 0x2b85f5c444d20939, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #1, #0", 0x4e78488738ad4c18, 0x6572cf1b6e4e1c1b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #1, #0", 0x441fbaf47f2bea8b, 0x48ccee3145ea996e, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #1, #0", 0x375a92ff29180ee2, 0x0792a9db03d92c7d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #1, #0", 0x4e7f1c4d5c76d652, 0x7c901113427028b0, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #1, #0", 0x43754db740307d27, 0x7f1e3dae3ca6d1b9, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #1, #0", 0x05ef4b642457647b, 0x0df690130fde3b47, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #1, #0", 0x3d5ec8ab31f4fcad, 0x066f06e902abab37, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #1, #0", 0x4d3c93462cf0838b, 0x477db4704fd5720b, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #1, #0", 0x659dcfa306f07c58, 0x3e238e271bb4dbcd, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #1, #0", 0x061c66e369321f16, 0x619f753b29bd8a97, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #1, #0", 0x124a2df82a26c828, 0x2d96b7143d76f9e2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #1, #0", 0x069d9e7a7f056040, 0x7fe7229260c94a46, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #1, #0", 0x3f35dd672b66ac12, 0x1d701bff4a12ec32, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #1, #0", 0x4fbe108e60602e62, 0x59f12779452528cb, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #1, #0", 0x12552b100f4e8872, 0x47d0d4020d1cd939, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #1, #0", 0x3c3f0bfd1b15d96c, 0x5cf24b455f91be56, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #1, #0", 0x220655c45ce60f5e, 0x7b469a2321dcdba0, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #1, #0", 0x46182e7579311d4c, 0x4b9a66382822bca7, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #1, #0", 0x2357e5746580d91b, 0x6599b68958625c6d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #1, #0", 0x6486395b569bc2b2, 0x392ba6b329f583ef, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #1, #0", 0x02026ec54df9979a, 0x7408702123bc16c2, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #1, #0", 0x2e59c5fd30b21390, 0x68e13f8e51c07f53, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #1, #0", 0x40009c033bcfa3d1, 0x5edd588c40aef10d, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; bfm x3, x4, #1, #0", 0x56e57d3d1b874986, 0x2040af637c3fa800, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; ubfm x3, x4, #1, #0", 0x786d58e469b6e9d9, 0x1e1c83a178ebd301, x3, x4, x5, 0);
+TESTINST3("mov x3, x5 ; sbfm x3, x4, #1, #0", 0x62e8072506a84631, 0x21...
[truncated message content] |
|
From: <sv...@va...> - 2014-01-12 12:54:12
|
Author: sewardj
Date: Sun Jan 12 12:54:00 2014
New Revision: 13770
Log:
Add support for ARMv8 AArch64 (the 64 bit ARM instruction set).
Added:
trunk/ARM64_TIDYUPS.txt
trunk/coregrind/m_dispatch/dispatch-arm64-linux.S
trunk/coregrind/m_gdbserver/valgrind-low-arm64.c
trunk/coregrind/m_sigframe/sigframe-arm64-linux.c
trunk/coregrind/m_syswrap/syscall-arm64-linux.S
trunk/coregrind/m_syswrap/syswrap-arm64-linux.c
trunk/include/vki/vki-arm64-linux.h
trunk/include/vki/vki-posixtypes-arm64-linux.h
trunk/include/vki/vki-scnums-arm64-linux.h
Modified:
trunk/Makefile.all.am
trunk/Makefile.tool.am
trunk/Makefile.vex.am
trunk/cachegrind/cg_arch.c
trunk/cachegrind/cg_branchpred.c
trunk/configure.ac
trunk/coregrind/Makefile.am
trunk/coregrind/launcher-linux.c
trunk/coregrind/m_aspacemgr/aspacemgr-common.c
trunk/coregrind/m_cache.c
trunk/coregrind/m_coredump/coredump-elf.c
trunk/coregrind/m_debugger.c
trunk/coregrind/m_debuginfo/d3basics.c
trunk/coregrind/m_debuginfo/debuginfo.c
trunk/coregrind/m_debuginfo/priv_storage.h
trunk/coregrind/m_debuginfo/readdwarf.c
trunk/coregrind/m_debuginfo/readelf.c
trunk/coregrind/m_debuginfo/storage.c
trunk/coregrind/m_debuglog.c
trunk/coregrind/m_gdbserver/target.c
trunk/coregrind/m_gdbserver/valgrind_low.h
trunk/coregrind/m_initimg/initimg-linux.c
trunk/coregrind/m_libcassert.c
trunk/coregrind/m_libcfile.c
trunk/coregrind/m_libcproc.c
trunk/coregrind/m_machine.c
trunk/coregrind/m_main.c
trunk/coregrind/m_options.c
trunk/coregrind/m_redir.c
trunk/coregrind/m_scheduler/scheduler.c
trunk/coregrind/m_signals.c
trunk/coregrind/m_stacktrace.c
trunk/coregrind/m_syscall.c
trunk/coregrind/m_syswrap/priv_types_n_macros.h
trunk/coregrind/m_syswrap/syscall-arm-linux.S
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/coregrind/m_syswrap/syswrap-main.c
trunk/coregrind/m_trampoline.S
trunk/coregrind/m_vki.c
trunk/coregrind/pub_core_aspacemgr.h
trunk/coregrind/pub_core_basics.h
trunk/coregrind/pub_core_debuginfo.h
trunk/coregrind/pub_core_machine.h
trunk/coregrind/pub_core_mallocfree.h
trunk/coregrind/pub_core_syscall.h
trunk/coregrind/pub_core_threadstate.h
trunk/coregrind/pub_core_trampoline.h
trunk/coregrind/pub_core_transtab_asm.h
trunk/docs/internals/register-uses.txt
trunk/drd/drd_bitmap.h
trunk/drd/drd_load_store.c
trunk/include/pub_tool_basics.h
trunk/include/pub_tool_machine.h
trunk/include/pub_tool_vkiscnums_asm.h
trunk/include/valgrind.h
trunk/include/vki/vki-linux.h
trunk/include/vki/vki-ppc32-linux.h
trunk/include/vki/vki-ppc64-linux.h
trunk/memcheck/mc_machine.c
Added: trunk/ARM64_TIDYUPS.txt
==============================================================================
--- trunk/ARM64_TIDYUPS.txt (added)
+++ trunk/ARM64_TIDYUPS.txt Sun Jan 12 12:54:00 2014
@@ -0,0 +1,178 @@
+
+## HOW TO Cross-CONFIGURE
+
+export CC=aarch64-linux-gnu-gcc
+export LD=aarch64-linux-gnu-ld
+export AR=aarch64-linux-gnu-ar
+
+./autogen.sh
+./configure --prefix=`pwd`/Inst --host=aarch64-unknown-linux --enable-only64bit
+
+##############################################################
+
+UnwindStartRegs -- what should that contain?
+
+
+
+vki-arm64-linux.h: vki_sigaction_base
+
+I really don't think that __vki_sigrestore_t sa_restorer
+should be present. Adding it surely puts sa_mask at a wrong
+offset compared to (kernel) reality. But not having it causes
+compilation of m_signals.c to fail in hard to understand ways,
+so adding it temporarily.
+
+
+m_trampoline.S: what's the unexecutable-insn value? 0xFFFFFFFF
+is there at the moment, but 0x00000000 is probably what it should be.
+Also, fix indentation/tab-vs-space stuff
+
+
+./include/vki/vki-arm64-linux.h: uses __uint128_t. Should change
+it to __vki_uint128_t, but what's the defn of that?
+
+
+
+m_debuginfo/priv_storage.h: need proper defn of DiCfSI
+
+
+readdwarf.c: is this correct?
+#elif defined(VGP_arm64_linux)
+# define FP_REG 29 //???
+# define SP_REG 31 //???
+# define RA_REG_DEFAULT 30 //???
+
+
+vki-arm64-linux.h:
+re linux-3.10.5/include/uapi/asm-generic/sembuf.h
+I'd say the amd64 version has padding it shouldn't have. Check?
+
+
+
+syswrap-linux.c run_a_thread_NORETURN assembly sections
+seems like tst->os_state.exitcode has word type
+in which case the ppc64_linux use of lwz to read it, is wrong
+
+
+
+syswrap-linux.c ML_(do_fork_clone)
+assuming that VGP_arm64_linux is the same as VGP_arm_linux here
+
+
+
+dispatch-arm64-linux.S: FIXME: set up FP control state before
+entering generated code. Also fix screwy indentation.
+
+dispatcher-ery general: what's a good (predictor-friendly) way to
+branch to a register?
+
+
+
+in vki-arm64-scnums.h
+//#if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT)
+Probably want to reenable that and clean up accordingly
+
+
+
+putIRegXXorZR: figure out a way that the computed value is actually
+used, so as to keep any memory reads that might generate it, alive.
+(else the simulation can lose exceptions). At least, for writes to
+the zero register generated by loads .. or .. can anything other
+integer instructions, that write to a register, cause exceptions?
+
+
+
+loads/stores: generate stack alignment checks as necessary
+
+
+
+fix barrier insns: ISB, DMB
+
+
+
+fix atomic loads/stores
+
+
+
+FMADD/FMSUB/FNMADD/FNMSUB: generate and use the relevant fused
+IROps so as to avoid double rounding
+
+
+
+ARM64Instr_Call getRegUsage: re-check relative to what
+getAllocableRegs_ARM64 makes available
+
+
+
+Make dispatch-arm64-linux.S save any callee-saved Q regs
+I think what is required is to save D8-D15 and nothing more than that.
+
+
+
+wrapper for __NR3264_fstat -- correct?
+
+
+
+PRE(sys_clone): get rid of references to vki_modify_ldt_t
+and the definition of it in vki-arm64-linux.h. Ditto for
+32 bit arm.
+
+
+
+sigframe-arm64-linux.c: build_sigframe: references to nonexistent
+siguc->uc_mcontext.trap_no, siguc->uc_mcontext.error_code have been
+replaced by zero. Also in synth_ucontext.
+
+
+
+m_debugger.c:
+uregs.pstate = LibVEX_GuestARM64_get_nzcv(vex); /* is this correct? */
+Is that remotely correct?
+
+
+
+host_arm64_defs.c: emit_ARM64INstr:
+ARM64in_VDfromX and ARM64in_VQfromXX: use simple top-half zeroing
+MOVs to vector registers instead of INS Vd.D[0], Xreg, to avoid false
+dependencies on the top half of the register. (Or at least check
+the semantocs of INS Vd.D[0] to see if it zeroes out the top.)
+
+
+
+preferredVectorSubTypeFromSize: review perf effects and decide
+on a types-for-subparts policy
+
+
+
+fold_IRExpr_Unop: add a reduction rule for this
+1Sto64(CmpNEZ64( Or64(GET:I64(1192),GET:I64(1184)) ))
+vis 1Sto64(CmpNEZ64(x)) --> CmpwNEZ64(x)
+
+
+
+check insn selection for memcheck-only primops:
+Left64 CmpwNEZ64 V128to64 V128HIto64 1Sto64 CmpNEZ64 CmpNEZ32
+widen_z_8_to_64 1Sto32 Left32 32HLto64 CmpwNEZ32 CmpNEZ8
+
+
+
+isel: get rid of various cases where zero is put into a register
+and just use xzr instead. Especially for CmpNEZ64/32. And for
+writing zeroes into the CC thunk fields.
+
+
+
+/* Keep this list in sync with that in iselNext below */
+/* Keep this list in sync with that for Ist_Exit above */
+uh .. they are not in sync
+
+
+
+very stupid:
+imm64 x23, 0xFFFFFFFFFFFFFFA0
+17 F4 9F D2 F7 FF BF F2 F7 FF DF F2 F7 FF FF F2
+
+
+
+valgrind.h: fix VALGRIND_ALIGN_STACK/VALGRIND_RESTORE_STACK,
+also add CFI annotations
Modified: trunk/Makefile.all.am
==============================================================================
--- trunk/Makefile.all.am (original)
+++ trunk/Makefile.all.am Sun Jan 12 12:54:00 2014
@@ -156,6 +156,10 @@
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_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 \
@@ -213,6 +217,7 @@
PRELOAD_LDFLAGS_PPC32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
PRELOAD_LDFLAGS_PPC64_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@
Modified: trunk/Makefile.tool.am
==============================================================================
--- trunk/Makefile.tool.am (original)
+++ trunk/Makefile.tool.am Sun Jan 12 12:54:00 2014
@@ -52,6 +52,9 @@
TOOL_LDFLAGS_ARM_LINUX = \
$(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@
+TOOL_LDFLAGS_ARM64_LINUX = \
+ $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@
+
TOOL_LDFLAGS_S390X_LINUX = \
$(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@
@@ -105,6 +108,9 @@
LIBREPLACEMALLOC_ARM_LINUX = \
$(top_builddir)/coregrind/libreplacemalloc_toolpreload-arm-linux.a
+LIBREPLACEMALLOC_ARM64_LINUX = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-arm64-linux.a
+
LIBREPLACEMALLOC_X86_DARWIN = \
$(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-darwin.a
@@ -145,6 +151,11 @@
$(LIBREPLACEMALLOC_ARM_LINUX) \
-Wl,--no-whole-archive
+LIBREPLACEMALLOC_LDFLAGS_ARM64_LINUX = \
+ -Wl,--whole-archive \
+ $(LIBREPLACEMALLOC_ARM64_LINUX) \
+ -Wl,--no-whole-archive
+
LIBREPLACEMALLOC_LDFLAGS_X86_DARWIN = \
$(LIBREPLACEMALLOC_X86_DARWIN)
Modified: trunk/Makefile.vex.am
==============================================================================
--- trunk/Makefile.vex.am (original)
+++ trunk/Makefile.vex.am Sun Jan 12 12:54:00 2014
@@ -24,6 +24,7 @@
pub/libvex_guest_ppc32.h \
pub/libvex_guest_ppc64.h \
pub/libvex_guest_arm.h \
+ pub/libvex_guest_arm64.h \
pub/libvex_guest_s390x.h \
pub/libvex_guest_mips32.h \
pub/libvex_guest_mips64.h \
@@ -42,6 +43,7 @@
priv/guest_amd64_defs.h \
priv/guest_ppc_defs.h \
priv/guest_arm_defs.h \
+ priv/guest_arm64_defs.h \
priv/guest_s390_defs.h \
priv/guest_mips_defs.h \
priv/host_generic_regs.h \
@@ -53,6 +55,7 @@
priv/host_amd64_defs.h \
priv/host_ppc_defs.h \
priv/host_arm_defs.h \
+ priv/host_arm64_defs.h \
priv/host_s390_defs.h \
priv/s390_disasm.h \
priv/s390_defs.h \
@@ -71,6 +74,7 @@
pub/libvex_guest_ppc32.h \
pub/libvex_guest_ppc64.h \
pub/libvex_guest_arm.h \
+ pub/libvex_guest_arm64.h \
pub/libvex_guest_s390x.h \
pub/libvex_guest_mips32.h \
pub/libvex_guest_mips64.h
@@ -114,6 +118,8 @@
priv/guest_ppc_toIR.c \
priv/guest_arm_helpers.c \
priv/guest_arm_toIR.c \
+ priv/guest_arm64_helpers.c \
+ priv/guest_arm64_toIR.c \
priv/guest_s390_helpers.c \
priv/guest_s390_toIR.c \
priv/guest_mips_helpers.c \
@@ -132,6 +138,8 @@
priv/host_ppc_isel.c \
priv/host_arm_defs.c \
priv/host_arm_isel.c \
+ priv/host_arm64_defs.c \
+ priv/host_arm64_isel.c \
priv/host_s390_defs.c \
priv/host_s390_isel.c \
priv/s390_disasm.c \
Modified: trunk/cachegrind/cg_arch.c
==============================================================================
--- trunk/cachegrind/cg_arch.c (original)
+++ trunk/cachegrind/cg_arch.c Sun Jan 12 12:54:00 2014
@@ -367,6 +367,14 @@
*D1c = (cache_t) { 16384, 4, 64 };
*LLc = (cache_t) { 262144, 8, 64 };
+#elif defined(VGA_arm64)
+
+ // Copy the 32-bit ARM version until such time as we have
+ // some real hardware to run on
+ *I1c = (cache_t) { 16384, 4, 64 };
+ *D1c = (cache_t) { 16384, 4, 64 };
+ *LLc = (cache_t) { 262144, 8, 64 };
+
#elif defined(VGA_s390x)
//
// Here is the cache data from older machine models:
Modified: trunk/cachegrind/cg_branchpred.c
==============================================================================
--- trunk/cachegrind/cg_branchpred.c (original)
+++ trunk/cachegrind/cg_branchpred.c Sun Jan 12 12:54:00 2014
@@ -44,12 +44,12 @@
/* How many bits at the bottom of an instruction address are
guaranteed to be zero? */
-#if defined(VGA_ppc32) || defined(VGA_ppc64) || defined(VGA_arm) \
- || defined(VGA_mips32) || defined(VGA_mips64)
+#if defined(VGA_ppc32) || defined(VGA_ppc64) \
+ || defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_arm64)
# define N_IADDR_LO_ZERO_BITS 2
#elif defined(VGA_x86) || defined(VGA_amd64)
# define N_IADDR_LO_ZERO_BITS 0
-#elif defined(VGA_s390x)
+#elif defined(VGA_s390x) || defined(VGA_arm)
# define N_IADDR_LO_ZERO_BITS 1
#else
# error "Unsupported architecture"
Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac (original)
+++ trunk/configure.ac Sun Jan 12 12:54:00 2014
@@ -195,6 +195,11 @@
ARCH_MAX="arm"
;;
+ aarch64*)
+ AC_MSG_RESULT([ok (${host_cpu})])
+ ARCH_MAX="arm64"
+ ;;
+
mips)
AC_MSG_RESULT([ok (${host_cpu})])
ARCH_MAX="mips32"
@@ -559,6 +564,35 @@
valt_load_address_sec_inner="0xUNSET"
AC_MSG_RESULT([ok (${host_cpu}-${host_os})])
;;
+ arm64-linux)
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
+ if test x$vg_cv_only64bit = xyes; then
+ VGCONF_ARCH_PRI="arm64"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="ARM64_LINUX"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ elif test x$vg_cv_only32bit = xyes; then
+ VGCONF_ARCH_PRI="arm"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="ARM_LINUX"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ else
+ VGCONF_ARCH_PRI="arm64"
+ VGCONF_ARCH_SEC="arm"
+ VGCONF_PLATFORM_PRI_CAPS="ARM64_LINUX"
+ VGCONF_PLATFORM_SEC_CAPS="ARM_LINUX"
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0x38000000"
+ valt_load_address_sec_inner="0x28000000"
+ fi
+ AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
+ ;;
s390x-linux)
VGCONF_ARCH_PRI="s390x"
VGCONF_ARCH_SEC=""
@@ -624,7 +658,10 @@
AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_PPC64,
test x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX )
AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_ARM,
- test x$VGCONF_PLATFORM_PRI_CAPS = xARM_LINUX )
+ test x$VGCONF_PLATFORM_PRI_CAPS = xARM_LINUX \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xARM_LINUX )
+AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_ARM64,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xARM64_LINUX )
AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_S390X,
test x$VGCONF_PLATFORM_PRI_CAPS = xS390X_LINUX )
AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_MIPS32,
@@ -645,7 +682,10 @@
AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_PPC64_LINUX,
test x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX)
AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_ARM_LINUX,
- test x$VGCONF_PLATFORM_PRI_CAPS = xARM_LINUX)
+ test x$VGCONF_PLATFORM_PRI_CAPS = xARM_LINUX \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xARM_LINUX)
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_ARM64_LINUX,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xARM64_LINUX)
AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_S390X_LINUX,
test x$VGCONF_PLATFORM_PRI_CAPS = xS390X_LINUX \
-o x$VGCONF_PLATFORM_SEC_CAPS = xS390X_LINUX)
@@ -653,7 +693,6 @@
test x$VGCONF_PLATFORM_PRI_CAPS = xMIPS32_LINUX)
AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_MIPS64_LINUX,
test x$VGCONF_PLATFORM_PRI_CAPS = xMIPS64_LINUX)
-
AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_X86_DARWIN,
test x$VGCONF_PLATFORM_PRI_CAPS = xX86_DARWIN \
-o x$VGCONF_PLATFORM_SEC_CAPS = xX86_DARWIN)
@@ -670,6 +709,7 @@
-o x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xARM_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xARM64_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xS390X_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS32_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS64_LINUX)
@@ -2406,6 +2446,7 @@
mflag_primary=$FLAG_M32
elif test x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xARM64_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xS390X_LINUX ; then
mflag_primary=$FLAG_M64
elif test x$VGCONF_PLATFORM_PRI_CAPS = xX86_DARWIN ; then
Modified: trunk/coregrind/Makefile.am
==============================================================================
--- trunk/coregrind/Makefile.am (original)
+++ trunk/coregrind/Makefile.am Sun Jan 12 12:54:00 2014
@@ -61,6 +61,12 @@
vgdb_SOURCES = vgdb.c
+if VGCONF_PLATFORMS_INCLUDE_ARM64_LINUX
+# vgdb-invoker-ptrace.c isn't buildable on arm64-linux yet
+# so skip it. Unfortunately this also causes it to be skipped
+# for 32-bit ARM builds which are part of a bi-arch ARM build.
+vgdb_SOURCES += vgdb-invoker-none.c
+else
if VGCONF_OS_IS_LINUX
if VGCONF_PLATVARIANT_IS_ANDROID
vgdb_SOURCES += vgdb-invoker-none.c
@@ -68,6 +74,7 @@
vgdb_SOURCES += vgdb-invoker-ptrace.c
endif
endif
+endif
if VGCONF_OS_IS_DARWIN
# Some darwin specific stuff is needed as ptrace is not
# fully supported on MacOS. Till we find someone courageous
@@ -329,6 +336,7 @@
m_dispatch/dispatch-ppc32-linux.S \
m_dispatch/dispatch-ppc64-linux.S \
m_dispatch/dispatch-arm-linux.S \
+ m_dispatch/dispatch-arm64-linux.S \
m_dispatch/dispatch-s390x-linux.S \
m_dispatch/dispatch-mips32-linux.S \
m_dispatch/dispatch-mips64-linux.S \
@@ -345,6 +353,7 @@
m_gdbserver/valgrind-low-x86.c \
m_gdbserver/valgrind-low-amd64.c \
m_gdbserver/valgrind-low-arm.c \
+ m_gdbserver/valgrind-low-arm64.c \
m_gdbserver/valgrind-low-ppc32.c \
m_gdbserver/valgrind-low-ppc64.c \
m_gdbserver/valgrind-low-s390x.c \
@@ -368,6 +377,7 @@
m_sigframe/sigframe-ppc32-linux.c \
m_sigframe/sigframe-ppc64-linux.c \
m_sigframe/sigframe-arm-linux.c \
+ m_sigframe/sigframe-arm64-linux.c \
m_sigframe/sigframe-s390x-linux.c \
m_sigframe/sigframe-mips32-linux.c \
m_sigframe/sigframe-mips64-linux.c \
@@ -378,6 +388,7 @@
m_syswrap/syscall-ppc32-linux.S \
m_syswrap/syscall-ppc64-linux.S \
m_syswrap/syscall-arm-linux.S \
+ m_syswrap/syscall-arm64-linux.S \
m_syswrap/syscall-s390x-linux.S \
m_syswrap/syscall-mips32-linux.S \
m_syswrap/syscall-mips64-linux.S \
@@ -393,6 +404,7 @@
m_syswrap/syswrap-ppc32-linux.c \
m_syswrap/syswrap-ppc64-linux.c \
m_syswrap/syswrap-arm-linux.c \
+ m_syswrap/syswrap-arm64-linux.c \
m_syswrap/syswrap-s390x-linux.c \
m_syswrap/syswrap-mips32-linux.c \
m_syswrap/syswrap-mips64-linux.c \
Modified: trunk/coregrind/launcher-linux.c
==============================================================================
--- trunk/coregrind/launcher-linux.c (original)
+++ trunk/coregrind/launcher-linux.c Sun Jan 12 12:54:00 2014
@@ -57,6 +57,10 @@
#define EM_X86_64 62 // elf.h doesn't define this on some older systems
#endif
+#ifndef EM_AARCH64
+#define EM_AARCH64 183 // ditto
+#endif
+
/* Report fatal errors */
__attribute__((noreturn))
static void barf ( const char *format, ... )
@@ -220,6 +224,10 @@
(ehdr->e_ident[EI_OSABI] == ELFOSABI_SYSV ||
ehdr->e_ident[EI_OSABI] == ELFOSABI_LINUX)) {
platform = "mips64-linux";
+ } else if (ehdr->e_machine == EM_AARCH64 &&
+ (ehdr->e_ident[EI_OSABI] == ELFOSABI_SYSV ||
+ ehdr->e_ident[EI_OSABI] == ELFOSABI_LINUX)) {
+ platform = "arm64-linux";
}
} else if (header[EI_DATA] == ELFDATA2MSB) {
# if !defined(VGPV_arm_linux_android) \
@@ -309,12 +317,13 @@
target, because on most ppc64-linux setups, the basic /bin,
/usr/bin, etc, stuff is built in 32-bit mode, not 64-bit
mode. */
- if ((0==strcmp(VG_PLATFORM,"x86-linux")) ||
- (0==strcmp(VG_PLATFORM,"amd64-linux")) ||
- (0==strcmp(VG_PLATFORM,"ppc32-linux")) ||
- (0==strcmp(VG_PLATFORM,"ppc64-linux")) ||
- (0==strcmp(VG_PLATFORM,"arm-linux")) ||
- (0==strcmp(VG_PLATFORM,"s390x-linux")) ||
+ if ((0==strcmp(VG_PLATFORM,"x86-linux")) ||
+ (0==strcmp(VG_PLATFORM,"amd64-linux")) ||
+ (0==strcmp(VG_PLATFORM,"ppc32-linux")) ||
+ (0==strcmp(VG_PLATFORM,"ppc64-linux")) ||
+ (0==strcmp(VG_PLATFORM,"arm-linux")) ||
+ (0==strcmp(VG_PLATFORM,"arm64-linux")) ||
+ (0==strcmp(VG_PLATFORM,"s390x-linux")) ||
(0==strcmp(VG_PLATFORM,"mips32-linux")) ||
(0==strcmp(VG_PLATFORM,"mips64-linux")))
default_platform = VG_PLATFORM;
Modified: trunk/coregrind/m_aspacemgr/aspacemgr-common.c
==============================================================================
--- trunk/coregrind/m_aspacemgr/aspacemgr-common.c (original)
+++ trunk/coregrind/m_aspacemgr/aspacemgr-common.c Sun Jan 12 12:54:00 2014
@@ -152,15 +152,19 @@
{
SysRes res;
aspacem_assert(VG_IS_PAGE_ALIGNED(offset));
-# if defined(VGP_x86_linux) || defined(VGP_ppc32_linux) \
- || defined(VGP_arm_linux)
+
+# if defined(VGP_arm64_linux)
+ res = VG_(do_syscall6)(__NR3264_mmap, (UWord)start, length,
+ prot, flags, fd, offset);
+# elif defined(VGP_x86_linux) || defined(VGP_ppc32_linux) \
+ || defined(VGP_arm_linux)
/* mmap2 uses 4096 chunks even if actual page size is bigger. */
aspacem_assert((offset % 4096) == 0);
res = VG_(do_syscall6)(__NR_mmap2, (UWord)start, length,
prot, flags, fd, offset / 4096);
# elif defined(VGP_amd64_linux) || defined(VGP_ppc64_linux) \
|| defined(VGP_s390x_linux) || defined(VGP_mips32_linux) \
- || defined(VGP_mips64_linux)
+ || defined(VGP_mips64_linux) || defined(VGP_arm64_linux)
res = VG_(do_syscall6)(__NR_mmap, (UWord)start, length,
prot, flags, fd, offset);
# elif defined(VGP_x86_darwin)
@@ -242,8 +246,14 @@
/* --- Pertaining to files --- */
SysRes ML_(am_open) ( const HChar* pathname, Int flags, Int mode )
-{
+{
+# if defined(VGP_arm64_linux)
+ /* ARM64 wants to use __NR_openat rather than __NR_open. */
+ SysRes res = VG_(do_syscall4)(__NR_openat,
+ VKI_AT_FDCWD, (UWord)pathname, flags, mode);
+# else
SysRes res = VG_(do_syscall3)(__NR_open, (UWord)pathname, flags, mode);
+# endif
return res;
}
@@ -261,7 +271,12 @@
Int ML_(am_readlink)(HChar* path, HChar* buf, UInt bufsiz)
{
SysRes res;
+# if defined(VGP_arm64_linux)
+ res = VG_(do_syscall4)(__NR_readlinkat, VKI_AT_FDCWD,
+ (UWord)path, (UWord)buf, bufsiz);
+# else
res = VG_(do_syscall3)(__NR_readlink, (UWord)path, (UWord)buf, bufsiz);
+# endif
return sr_isError(res) ? -1 : sr_Res(res);
}
Modified: trunk/coregrind/m_cache.c
==============================================================================
--- trunk/coregrind/m_cache.c (original)
+++ trunk/coregrind/m_cache.c Sun Jan 12 12:54:00 2014
@@ -539,7 +539,7 @@
}
#elif defined(VGA_arm) || defined(VGA_ppc32) || defined(VGA_ppc64) || \
- defined(VGA_mips32) || defined(VGA_mips64)
+ defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_arm64)
static Bool
get_cache_info(VexArchInfo *vai)
Modified: trunk/coregrind/m_coredump/coredump-elf.c
==============================================================================
--- trunk/coregrind/m_coredump/coredump-elf.c (original)
+++ trunk/coregrind/m_coredump/coredump-elf.c Sun Jan 12 12:54:00 2014
@@ -233,7 +233,7 @@
}
static void fill_prstatus(const ThreadState *tst,
- struct vki_elf_prstatus *prs,
+ /*OUT*/struct vki_elf_prstatus *prs,
const vki_siginfo_t *si)
{
struct vki_user_regs_struct *regs;
@@ -252,12 +252,11 @@
prs->pr_pgrp = VG_(getpgrp)();
prs->pr_sid = VG_(getpgrp)();
-#ifdef VGP_s390x_linux
+#if defined(VGP_s390x_linux)
/* prs->pr_reg has struct type. Need to take address. */
regs = (struct vki_user_regs_struct *)&(prs->pr_reg);
#else
regs = (struct vki_user_regs_struct *)prs->pr_reg;
-
vg_assert(sizeof(*regs) == sizeof(prs->pr_reg));
#endif
@@ -302,10 +301,6 @@
regs->r14 = arch->vex.guest_R14;
regs->r15 = arch->vex.guest_R15;
-//:: regs->cs = arch->vex.guest_CS;
-//:: regs->fs = arch->vex.guest_FS;
-//:: regs->gs = arch->vex.guest_GS;
-
#elif defined(VGP_ppc32_linux)
# define DO(n) regs->gpr[n] = arch->vex.guest_GPR##n
DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
@@ -367,6 +362,10 @@
regs->ARM_pc = arch->vex.guest_R15T;
regs->ARM_cpsr = LibVEX_GuestARM_get_cpsr( &arch->vex );
+#elif defined(VGP_arm64_linux)
+ (void)arch;
+ I_die_here;
+
#elif defined(VGP_s390x_linux)
# define DO(n) regs->gprs[n] = arch->vex.guest_r##n
DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
@@ -377,6 +376,7 @@
DO(8); DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15);
# undef DO
regs->orig_gpr2 = arch->vex.guest_r2;
+
#elif defined(VGP_mips32_linux)
# define DO(n) regs->MIPS_r##n = arch->vex.guest_r##n
DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
@@ -386,6 +386,7 @@
# undef DO
regs->MIPS_hi = arch->vex.guest_HI;
regs->MIPS_lo = arch->vex.guest_LO;
+
#elif defined(VGP_mips64_linux)
# define DO(n) regs->MIPS_r##n = arch->vex.guest_r##n
DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
@@ -395,6 +396,7 @@
# undef DO
regs->MIPS_hi = arch->vex.guest_HI;
regs->MIPS_lo = arch->vex.guest_LO;
+
#else
# error Unknown ELF platform
#endif
@@ -470,6 +472,9 @@
#elif defined(VGP_arm_linux)
// umm ...
+#elif defined(VGP_arm64_linux)
+ I_die_here;
+
#elif defined(VGP_s390x_linux)
# define DO(n) fpu->fprs[n].ui = arch->vex.guest_f##n
DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
@@ -606,16 +611,13 @@
if (VG_(threads)[i].status == VgTs_Empty)
continue;
-# if defined(VGP_x86_linux)
-# if !defined(VGPV_arm_linux_android) && !defined(VGPV_x86_linux_android) \
- && !defined(VGPV_mips32_linux_android)
+# if defined(VGP_x86_linux) && !defined(VGPV_x86_linux_android)
{
vki_elf_fpxregset_t xfpu;
fill_xfpu(&VG_(threads)[i], &xfpu);
add_note(¬elist, "LINUX", NT_PRXFPREG, &xfpu, sizeof(xfpu));
}
# endif
-# endif
fill_fpu(&VG_(threads)[i], &fpu);
# if !defined(VGPV_arm_linux_android) && !defined(VGPV_x86_linux_android) \
Modified: trunk/coregrind/m_debugger.c
==============================================================================
--- trunk/coregrind/m_debugger.c (original)
+++ trunk/coregrind/m_debugger.c Sun Jan 12 12:54:00 2014
@@ -232,6 +232,47 @@
uregs.ARM_cpsr = LibVEX_GuestARM_get_cpsr(vex);
return VG_(ptrace)(VKI_PTRACE_SETREGS, pid, NULL, &uregs);
+#elif defined(VGP_arm64_linux)
+ I_die_here;
+ //ATC
+ struct vki_user_pt_regs uregs;
+ VG_(memset)(&uregs, 0, sizeof(uregs));
+ uregs.regs[0] = vex->guest_X0;
+ uregs.regs[1] = vex->guest_X1;
+ uregs.regs[2] = vex->guest_X2;
+ uregs.regs[3] = vex->guest_X3;
+ uregs.regs[4] = vex->guest_X4;
+ uregs.regs[5] = vex->guest_X5;
+ uregs.regs[6] = vex->guest_X6;
+ uregs.regs[7] = vex->guest_X7;
+ uregs.regs[8] = vex->guest_X8;
+ uregs.regs[9] = vex->guest_X9;
+ uregs.regs[10] = vex->guest_X10;
+ uregs.regs[11] = vex->guest_X11;
+ uregs.regs[12] = vex->guest_X12;
+ uregs.regs[13] = vex->guest_X13;
+ uregs.regs[14] = vex->guest_X14;
+ uregs.regs[15] = vex->guest_X15;
+ uregs.regs[16] = vex->guest_X16;
+ uregs.regs[17] = vex->guest_X17;
+ uregs.regs[18] = vex->guest_X18;
+ uregs.regs[19] = vex->guest_X19;
+ uregs.regs[20] = vex->guest_X20;
+ uregs.regs[21] = vex->guest_X21;
+ uregs.regs[22] = vex->guest_X22;
+ uregs.regs[23] = vex->guest_X23;
+ uregs.regs[24] = vex->guest_X24;
+ uregs.regs[25] = vex->guest_X25;
+ uregs.regs[26] = vex->guest_X26;
+ uregs.regs[27] = vex->guest_X27;
+ uregs.regs[28] = vex->guest_X28;
+ uregs.regs[29] = vex->guest_X29;
+ uregs.regs[30] = vex->guest_X30;
+ uregs.sp = vex->guest_SP;
+ uregs.pc = vex->guest_PC;
+ uregs.pstate = LibVEX_GuestARM64_get_nzcv(vex); /* is this correct? */
+ return VG_(ptrace)(VKI_PTRACE_SETREGS, pid, NULL, &uregs);
+
#elif defined(VGP_x86_darwin)
I_die_here;
Modified: trunk/coregrind/m_debuginfo/d3basics.c
==============================================================================
--- trunk/coregrind/m_debuginfo/d3basics.c (original)
+++ trunk/coregrind/m_debuginfo/d3basics.c Sun Jan 12 12:54:00 2014
@@ -420,6 +420,8 @@
# elif defined(VGP_mips64_linux)
if (regno == 29) { *a = regs->sp; return True; }
if (regno == 30) { *a = regs->fp; return True; }
+# elif defined(VGP_arm64_linux)
+ I_die_here;
# else
# error "Unknown platform"
# endif
Modified: trunk/coregrind/m_debuginfo/debuginfo.c
==============================================================================
--- trunk/coregrind/m_debuginfo/debuginfo.c (original)
+++ trunk/coregrind/m_debuginfo/debuginfo.c Sun Jan 12 12:54:00 2014
@@ -824,7 +824,8 @@
|| defined(VGA_mips64)
is_rx_map = seg->hasR && seg->hasX;
is_rw_map = seg->hasR && seg->hasW;
-# elif defined(VGA_amd64) || defined(VGA_ppc64) || defined(VGA_arm)
+# elif defined(VGA_amd64) || defined(VGA_ppc64) || defined(VGA_arm) \
+ || defined(VGA_arm64)
is_rx_map = seg->hasR && seg->hasX && !seg->hasW;
is_rw_map = seg->hasR && seg->hasW && !seg->hasX;
# elif defined(VGP_s390x_linux)
@@ -2113,6 +2114,8 @@
case Creg_IA_BP: return eec->uregs->fp;
case Creg_MIPS_RA: return eec->uregs->ra;
# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# elif defined(VGP_arm64_linux)
+ I_die_here;
# else
# error "Unsupported arch"
# endif
@@ -2357,6 +2360,8 @@
cfa = cfsi->cfa_off + uregs->fp;
break;
# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# elif defined(VGP_arm64_linux)
+ I_die_here;
# else
# error "Unsupported arch"
# endif
@@ -2453,6 +2458,8 @@
# elif defined(VGA_mips32) || defined(VGA_mips64)
ipHere = uregsHere->pc;
# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# elif defined(VGP_arm64_linux)
+ I_die_here;
# else
# error "Unknown arch"
# endif
@@ -2533,6 +2540,8 @@
COMPUTE(uregsPrev.sp, uregsHere->sp, cfsi->sp_how, cfsi->sp_off);
COMPUTE(uregsPrev.fp, uregsHere->fp, cfsi->fp_how, cfsi->fp_off);
# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+# elif defined(VGP_arm64_linux)
+ I_die_here;
# else
# error "Unknown arch"
# endif
Modified: trunk/coregrind/m_debuginfo/priv_storage.h
==============================================================================
--- trunk/coregrind/m_debuginfo/priv_storage.h (original)
+++ trunk/coregrind/m_debuginfo/priv_storage.h Sun Jan 12 12:54:00 2014
@@ -277,6 +277,18 @@
Int fp_off;
}
DiCfSI;
+#elif defined(VGA_arm64)
+/* Be generic until we know more about what's needed. */
+typedef
+ struct {
+ Addr base;
+ UInt len;
+ UChar cfa_how; /* a CFIC_ value */
+ UChar ra_how; /* a CFIR_ value */
+ Int cfa_off;
+ Int ra_off;
+ }
+ DiCfSI;
#else
# error "Unknown arch"
#endif
Modified: trunk/coregrind/m_debuginfo/readdwarf.c
==============================================================================
--- trunk/coregrind/m_debuginfo/readdwarf.c (original)
+++ trunk/coregrind/m_debuginfo/readdwarf.c Sun Jan 12 12:54:00 2014
@@ -1841,6 +1841,10 @@
# define FP_REG 12
# define SP_REG 13
# define RA_REG_DEFAULT 14 //???
+#elif defined(VGP_arm64_linux)
+# define FP_REG 29 //???
+# define SP_REG 31 //???
+# define RA_REG_DEFAULT 30 //???
#elif defined(VGP_x86_darwin)
# define FP_REG 5
# define SP_REG 4
@@ -2179,6 +2183,8 @@
si->cfa_how = CFIC_IA_SPREL;
# elif defined(VGA_arm)
si->cfa_how = CFIC_ARM_R13REL;
+# elif defined(VGA_arm64)
+ I_die_here;
# else
si->cfa_how = 0; /* invalid */
# endif
@@ -2206,6 +2212,8 @@
si->cfa_how = CFIC_ARM_R7REL;
si->cfa_off = ctxs->cfa_off;
}
+# elif defined(VGA_arm64)
+ if (1) { I_die_here; } // do we need any arm64 specifics here?
# endif
else {
why = 1;
@@ -2249,6 +2257,7 @@
why = 2; goto failed; /* otherwise give up */ \
}
+
# if defined(VGA_x86) || defined(VGA_amd64)
/* --- entire tail of this fn specialised for x86/amd64 --- */
@@ -2339,9 +2348,10 @@
return True;
-
# elif defined(VGA_s390x)
+ /* --- entire tail of this fn specialised for s390 --- */
+
SUMMARISE_HOW(si->ra_how, si->ra_off,
ctxs->reg[ctx->ra_reg] );
SUMMARISE_HOW(si->fp_how, si->fp_off,
@@ -2387,7 +2397,6 @@
return True;
-
# elif defined(VGA_mips32) || defined(VGA_mips64)
/* --- entire tail of this fn specialised for mips --- */
@@ -2431,9 +2440,12 @@
return True;
-
+# elif defined(VGA_arm64)
+ I_die_here;
# elif defined(VGA_ppc32) || defined(VGA_ppc64)
+ /* These don't use CFI based unwinding (is that really true?) */
+
# else
# error "Unknown arch"
# endif
@@ -2521,6 +2533,8 @@
return ML_(CfiExpr_CfiReg)( dstxa, Creg_IA_BP );
if (dwreg == srcuc->ra_reg)
return ML_(CfiExpr_CfiReg)( dstxa, Creg_IA_IP );
+# elif defined(VGA_arm64)
+ I_die_here;
# elif defined(VGA_ppc32) || defined(VGA_ppc64)
# else
# error "Unknown arch"
Modified: trunk/coregrind/m_debuginfo/readelf.c
==============================================================================
--- trunk/coregrind/m_debuginfo/readelf.c (original)
+++ trunk/coregrind/m_debuginfo/readelf.c Sun Jan 12 12:54:00 2014
@@ -2088,7 +2088,8 @@
/* PLT is different on different platforms, it seems. */
# if defined(VGP_x86_linux) || defined(VGP_amd64_linux) \
|| defined(VGP_arm_linux) || defined (VGP_s390x_linux) \
- || defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
+ || defined(VGP_mips32_linux) || defined(VGP_mips64_linux) \
+ || defined(VGP_arm64_linux)
/* Accept .plt where mapped as rx (code) */
if (0 == VG_(strcmp)(name, ".plt")) {
if (inrx && !di->plt_present) {
Modified: trunk/coregrind/m_debuginfo/storage.c
==============================================================================
--- trunk/coregrind/m_debuginfo/storage.c (original)
+++ trunk/coregrind/m_debuginfo/storage.c Sun Jan 12 12:54:00 2014
@@ -195,6 +195,8 @@
SHOW_HOW(si->sp_how, si->sp_off);
VG_(printf)(" FP=");
SHOW_HOW(si->fp_how, si->fp_off);
+# elif defined(VGA_arm64)
+ I_die_here;
# else
# error "Unknown arch"
# endif
Modified: trunk/coregrind/m_debuglog.c
==============================================================================
--- trunk/coregrind/m_debuglog.c (original)
+++ trunk/coregrind/m_debuglog.c Sun Jan 12 12:54:00 2014
@@ -103,6 +103,7 @@
}
#elif defined(VGP_amd64_linux)
+
__attribute__((noinline))
static UInt local_sys_write_stderr ( const HChar* buf, Int n )
{
@@ -267,6 +268,42 @@
return __res;
}
+#elif defined(VGP_arm64_linux)
+
+static UInt local_sys_write_stderr ( const HChar* buf, Int n )
+{
+ volatile ULong block[2];
+ block[0] = (ULong)buf;
+ block[1] = (ULong)n;
+ __asm__ volatile (
+ "mov x0, #2\n\t" /* stderr */
+ "ldr x1, [%0]\n\t" /* buf */
+ "ldr x2, [%0, #8]\n\t" /* n */
+ "mov x8, #"VG_STRINGIFY(__NR_write)"\n\t"
+ "svc 0x0\n" /* write() */
+ "str x0, [%0]\n\t"
+ :
+ : "r" (block)
+ : "x0","x1","x2","x7"
+ );
+ if (block[0] < 0)
+ block[0] = -1;
+ return (UInt)block[0];
+}
+
+static UInt local_sys_getpid ( void )
+{
+ UInt __res;
+ __asm__ volatile (
+ "mov x8, #"VG_STRINGIFY(__NR_getpid)"\n"
+ "svc 0x0\n" /* getpid() */
+ "mov %0, x0\n"
+ : "=r" (__res)
+ :
+ : "x0", "x8" );
+ return (UInt)__res;
+}
+
#elif defined(VGP_x86_darwin)
/* We would use VG_DARWIN_SYSNO_TO_KERNEL instead of VG_DARWIN_SYSNO_INDEX
@@ -350,6 +387,7 @@
}
#elif defined(VGP_s390x_linux)
+
static UInt local_sys_write_stderr ( const HChar* buf, Int n )
{
register Int r2 asm("2") = 2; /* file descriptor STDERR */
@@ -391,6 +429,7 @@
}
#elif defined(VGP_mips32_linux)
+
static UInt local_sys_write_stderr ( const HChar* buf, Int n )
{
volatile Int block[2];
@@ -428,6 +467,7 @@
}
#elif defined(VGP_mips64_linux)
+
static UInt local_sys_write_stderr ( const HChar* buf, Int n )
{
volatile Long block[2];
Added: trunk/coregrind/m_dispatch/dispatch-arm64-linux.S
==============================================================================
--- trunk/coregrind/m_dispatch/dispatch-arm64-linux.S (added)
+++ trunk/coregrind/m_dispatch/dispatch-arm64-linux.S Sun Jan 12 12:54:00 2014
@@ -0,0 +1,241 @@
+
+/*--------------------------------------------------------------------*/
+/*--- The core dispatch loop, for jumping to a code address. ---*/
+/*--- dispatch-arm64-linux.S ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2013-2013 OpenWorks
+ in...@op...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#if defined(VGP_arm64_linux)
+
+#include "pub_core_basics_asm.h"
+#include "pub_core_dispatch_asm.h"
+#include "pub_core_transtab_asm.h"
+#include "libvex_guest_offsets.h" /* for OFFSET_arm_R* */
+
+
+/*------------------------------------------------------------*/
+/*--- ---*/
+/*--- The dispatch loop. VG_(disp_run_translations) is ---*/
+/*--- used to run all translations, ---*/
+/*--- including no-redir ones. ---*/
+/*--- ---*/
+/*------------------------------------------------------------*/
+
+/*----------------------------------------------------*/
+/*--- Entry and preamble (set everything up) ---*/
+/*----------------------------------------------------*/
+
+/* signature:
+void VG_(disp_run_translations)( UWord* two_words,
+ void* guest_state,
+ Addr host_addr );
+*/
+.text
+.global VG_(disp_run_translations)
+VG_(disp_run_translations):
+ /* x0 holds two_words
+ x1 holds guest_state
+ x2 holds host_addr
+ */
+ /* Push the callee-saved registers. Unclear if x19/x20 are
+ callee-saved, but be on the safe side. Note this sequence
+ maintains 16-alignment of sp. Also save x0 since it will
+ be needed in the postamble. */
+ stp x29, x30, [sp, #-16]!
+ stp x27, x28, [sp, #-16]!
+ stp x25, x26, [sp, #-16]!
+ stp x23, x24, [sp, #-16]!
+ stp x21, x22, [sp, #-16]!
+ stp x19, x20, [sp, #-16]!
+ stp x0, xzr, [sp, #-16]!
+
+ /* set FPSCR to vex-required default value */
+ // FIXME
+ // mov r4, #0
+ // fmxr fpscr, r4
+
+ /* Set up the guest state pointer */
+ mov x21, x1
+
+ /* and jump into the code cache. Chained translations in
+ the code cache run, until for whatever reason, they can't
+ continue. When that happens, the translation in question
+ will jump (or call) to one of the continuation points
+ VG_(cp_...) below. */
+ br x2
+ /* NOTREACHED */
+
+/*----------------------------------------------------*/
+/*--- Postamble and exit. ---*/
+/*----------------------------------------------------*/
+
+postamble:
+ /* At this point, r1 and r2 contain two
+ words to be returned to the caller. r1
+ holds a TRC value, and r2 optionally may
+ hold another word (for CHAIN_ME exits, the
+ address of the place to patch.) */
+
+ /* We're leaving. Check that nobody messed with
+ FPSCR in ways we don't expect. */
+ // FIXME
+ // fmrx r4, fpscr
+ // bic r4, #0xF8000000 /* mask out NZCV and QC */
+ // bic r4, #0x0000009F /* mask out IDC,IXC,UFC,OFC,DZC,IOC */
+ // cmp r4, #0
+ // beq remove_frame /* we're OK */
+ /* otherwise we have an invariant violation */
+ // movw r1, #VG_TRC_INVARIANT_FAILED
+ // movw r2, #0
+ /* fall through */
+
+remove_frame:
+ /* Restore int regs, including importantly x0 (two_words),
+ but not x1 */
+ ldp x0, xzr, [sp], #16
+ ldp x19, x20, [sp], #16
+ ldp x21, x22, [sp], #16
+ ldp x23, x24, [sp], #16
+ ldp x25, x26, [sp], #16
+ ldp x27, x28, [sp], #16
+ ldp x29, x30, [sp], #16
+
+ /* Stash return values */
+ str x1, [x0, #0]
+ str x2, [x0, #8]
+ ret
+
+/*----------------------------------------------------*/
+/*--- Continuation points ---*/
+/*----------------------------------------------------*/
+
+/* ------ Chain me to slow entry point ------ */
+.global VG_(disp_cp_chain_me_to_slowEP)
+VG_(disp_cp_chain_me_to_slowEP):
+ /* We got called. The return address indicates
+ where the patching needs to happen. Collect
+ the return address and, exit back to C land,
+ handing the caller the pair (Chain_me_S, RA) */
+ mov x1, #VG_TRC_CHAIN_ME_TO_SLOW_EP
+ mov x2, x30 // 30 == LR
+ /* 4 = movw x9, disp_cp_chain_me_to_slowEP[15:0]
+ 4 = movk x9, disp_cp_chain_me_to_slowEP[31:16], lsl 16
+ 4 = movk x9, disp_cp_chain_me_to_slowEP[47:32], lsl 32
+ 4 = movk x9, disp_cp_chain_me_to_slowEP[63:48], lsl 48
+ 4 = blr x9
+ */
+ sub x2, x2, #4+4+4+4+4
+ b postamble
+
+/* ------ Chain me to fast entry point ------ */
+.global VG_(disp_cp_chain_me_to_fastEP)
+VG_(disp_cp_chain_me_to_fastEP):
+ /* We got called. The return address indicates
+ where the patching needs to happen. Collect
+ the return address and, exit back to C land,
+ handing the caller the pair (Chain_me_F, RA) */
+ mov x1, #VG_TRC_CHAIN_ME_TO_FAST_EP
+ mov x2, x30 // 30 == LR
+ /* 4 = movw x9, disp_cp_chain_me_to_fastEP[15:0]
+ 4 = movk x9, disp_cp_chain_me_to_fastEP[31:16], lsl 16
+ 4 = movk x9, disp_cp_chain_me_to_fastEP[47:32], lsl 32
+ 4 = movk x9, disp_cp_chain_me_to_fastEP[63:48], lsl 48
+ 4 = blr x9
+ */
+ sub x2, x2, #4+4+4+4+4
+ b postamble
+
+/* ------ Indirect but boring jump ------ */
+.global VG_(disp_cp_xindir)
+VG_(disp_cp_xindir):
+ /* Where are we going? */
+ ldr x0, [x21, #OFFSET_arm64_PC]
+
+ /* stats only */
+ adrp x1, VG_(stats__n_xindirs_32)
+ add x1, x1, :lo12:VG_(stats__n_xindirs_32)
+ ldr w2, [x1, #0]
+ add w2, w2, #1
+ str w2, [x1, #0]
+
+ /* try a fast lookup in the translation cache */
+ // x0 = next guest, x1,x2,x3,x4 scratch
+ mov x1, #VG_TT_FAST_MASK // x1 = VG_TT_FAST_MASK
+ and x2, x1, x0, LSR #2 // x2 = entry # = (x1 & (x0 >> 2))
+
+ adrp x4, VG_(tt_fast)
+ add x4, x4, :lo12:VG_(tt_fast) // x4 = &VG_(tt_fast)
+
+ add x1, x4, x2, LSL #4 // r1 = &tt_fast[entry#]
+
+ ldp x4, x5, [x1, #0] // x4 = .guest, x5 = .host
+
+ cmp x4, x0
+
+ // jump to host if lookup succeeded
+ bne fast_lookup_failed
+ br x5
+ /*NOTREACHED*/
+
+fast_lookup_failed:
+ /* RM ME -- stats only */
+ adrp x1, VG_(stats__n_xindir_misses_32)
+ add x1, x1, :lo12:VG_(stats__n_xindir_misses_32)
+ ldr w2, [x1, #0]
+ add w2, w2, #1
+ str w2, [x1, #0]
+
+ mov x1, #VG_TRC_INNER_FASTMISS
+ mov x2, #0
+ b postamble
+
+/* ------ Assisted jump ------ */
+.global VG_(disp_cp_xassisted)
+VG_(disp_cp_xassisted):
+ /* x21 contains the TRC */
+ mov x1, x21
+ mov x2, #0
+ b postamble
+
+/* ------ Event check failed ------ */
+.global VG_(disp_cp_evcheck_fail)
+VG_(disp_cp_evcheck_fail):
+ mov x1, #VG_TRC_INNER_COUNTERZERO
+ mov x2, #0
+ b postamble
+
+
+.size VG_(disp_run_translations), .-VG_(disp_run_translations)
+
+/* Let the linker know we don't need an executable stack */
+.section .note.GNU-stack,"",%progbits
+
+#endif // defined(VGP_arm64_linux)
+
+/*--------------------------------------------------------------------*/
+/*--- end dispatch-arm64-linux.S ---*/
+/*--------------------------------------------------------------------*/
Modified: trunk/coregrind/m_gdbserver/target.c
==============================================================================
--- trunk/coregrind/m_gdbserver/target.c (original)
+++ trunk/coregrind/m_gdbserver/target.c Sun Jan 12 12:54:00 2014
@@ -641,6 +641,8 @@
amd64_init_architecture(&the_low_target);
#elif defined(VGA_arm)
arm_init_architecture(&the_low_target);
+#elif defined(VGA_arm64)
+ arm_init_architecture(&the_low_target);
#elif defined(VGA_ppc32)
ppc32_init_architecture(&the_low_target);
#elif defined(VGA_ppc64)
@@ -652,6 +654,6 @@
#elif defined(VGA_mips64)
mips64_init_architecture(&the_low_target);
#else
- architecture missing in target.c valgrind_initialize_target
+ #error "architecture missing in target.c valgrind_initialize_target"
#endif
}
Added: trunk/coregrind/m_gdbserver/valgrind-low-arm64.c
==============================================================================
--- trunk/coregrind/m_gdbserver/valgrind-low-arm64.c (added)
+++ trunk/coregrind/m_gdbserver/valgrind-low-arm64.c Sun Jan 12 12:54:00 2014
@@ -0,0 +1,307 @@
+/* Low level interface to valgrind, for the remote server for GDB integrated
+ in valgrind.
+ Copyright (C) 2011
+ Free Software Foundation, Inc.
+
+ This file is part of VALGRIND.
+ It has been inspired from a file from gdbserver in gdb 6.6.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#include "server.h"
+#include "target.h"
+#include "regdef.h"
+#include "regcache.h"
+
+#include "pub_core_aspacemgr.h"
+#include "pub_tool_machine.h"
+#include "pub_core_threadstate.h"
+#include "pub_core_transtab.h"
+#include "pub_core_gdbserver.h"
+#include "pub_core_debuginfo.h"
+
+#include "valgrind_low.h"
+
+#include "libvex_guest_arm64.h"
+
+//ZZ static struct reg regs[] = {
+//ZZ { "r0", 0, 32 },
+//ZZ { "r1", 32, 32 },
+//ZZ { "r2", 64, 32 },
+//ZZ { "r3", 96, 32 },
+//ZZ { "r4", 128, 32 },
+//ZZ { "r5", 160, 32 },
+//ZZ { "r6", 192, 32 },
+//ZZ { "r7", 224, 32 },
+//ZZ { "r8", 256, 32 },
+//ZZ { "r9", 288, 32 },
+//ZZ { "r10", 320, 32 },
+//ZZ { "r11", 352, 32 },
+//ZZ { "r12", 384, 32 },
+//ZZ { "sp", 416, 32 },
+//ZZ { "lr", 448, 32 },
+//ZZ { "pc", 480, 32 },
+//ZZ { "", 512, 0 }, // It seems these entries are needed
+//ZZ { "", 512, 0 }, // as previous versions of arm <-> gdb placed
+//ZZ { "", 512, 0 }, // some floating point registers here. So, cpsr
+//ZZ { "", 512, 0 }, // must be register 25.
+//ZZ { "", 512, 0 },
+//ZZ { "", 512, 0 },
+//ZZ { "", 512, 0 },
+//ZZ { "", 512, 0 },
+//ZZ { "", 512, 0 },
+//ZZ { "cpsr", 512, 32 },
+//ZZ { "d0", 544, 64 },
+//ZZ { "d1", 608, 64 },
+//ZZ { "d2", 672, 64 },
+//ZZ { "d3", 736, 64 },
+//ZZ { "d4", 800, 64 },
+//ZZ { "d5", 864, 64 },
+//ZZ { "d6", 928, 64 },
+//ZZ { "d7", 992, 64 },
+//ZZ { "d8", 1056, 64 },
+//ZZ { "d9", 1120, 64 },
+//ZZ { "d10", 1184, 64 },
+//ZZ { "d11", 1248, 64 },
+//ZZ { "d12", 1312, 64 },
+//ZZ { "d13", 1376, 64 },
+//ZZ { "d14", 1440, 64 },
+//ZZ { "d15", 1504, 64 },
+//ZZ { "d16", 1568, 64 },
+//ZZ { "d17", 1632, 64 },
+//ZZ { "d18", 1696, 64 },
+//ZZ { "d19", 1760, 64 },
+//ZZ { "d20", 1824, 64 },
+//ZZ { "d21", 1888, 64 },
+//ZZ { "d22", 1952, 64 },
+//ZZ { "d23", 2016, 64 },
+//ZZ { "d24", 2080, 64 },
+//ZZ { "d25", 2144, 64 },
+//ZZ { "d26", 2208, 64 },
+//ZZ { "d27", 2272, 64 },
+//ZZ { "d28", 2336, 64 },
+//ZZ { "d29", 2400, 64 },
+//ZZ { "d30", 2464, 64 },
+//ZZ { "d31", 2528, 64 },
+//ZZ { "fpscr", 2592, 32 }
+//ZZ };
+//ZZ static const char *expedite_regs[] = { "r11", "sp", "pc", 0 };
+//ZZ #define num_regs (sizeof (regs) / sizeof (regs[0]))
+//ZZ
+//ZZ static
+//ZZ CORE_ADDR get_pc (void)
+//ZZ {
+//ZZ unsigned long pc;
+//ZZ
+//ZZ collect_register_by_name ("pc", &pc);
+//ZZ
+//ZZ dlog(1, "stop pc is %p\n", (void *) pc);
+//ZZ return pc;
+//ZZ }
+//ZZ
+//ZZ static
+//ZZ void set_pc (CORE_ADDR newpc)
+//ZZ {
+//ZZ Bool mod;
+//ZZ supply_register_by_name ("pc", &newpc, &mod);
+//ZZ if (mod)
+//ZZ dlog(1, "set pc to %p\n", C2v (newpc));
+//ZZ else
+//ZZ dlog(1, "set pc not changed %p\n", C2v (newpc));
+//ZZ }
+//ZZ
+//ZZ Addr thumb_pc (Addr pc)
+//ZZ {
+//ZZ // If the thumb bit (bit 0) is already set, we trust it.
+//ZZ if (pc & 1) {
+//ZZ dlog (1, "%p = thumb (bit0 is set)\n", C2v (pc));
+//ZZ return pc;
+//ZZ }
+//ZZ
+//ZZ // Here, bit 0 is not set.
+//ZZ // For a pc aligned on 4 bytes, we have to use the debug
+//ZZ // info to determine the thumb-ness.
+//ZZ // else (aligned on 2 bytes), we trust this is a thumb
+//ZZ // address and we set the thumb bit.
+//ZZ
+//ZZ if (pc & 2) {
+//ZZ dlog (1, "bit0 not set, bit1 set => %p = thumb\n", C2v (pc));
+//ZZ return pc | 1;
+//ZZ }
+//ZZ
+//ZZ // pc aligned on 4 bytes. We need to use debug info.
+//ZZ {
+//ZZ HChar fnname[200]; // ??? max size
+//ZZ Addr entrypoint;
+//ZZ Addr ptoc; // unused but needed.
+//ZZ // If this is a thumb instruction, we need to ask
+//ZZ // the debug info with the bit0 set
+//ZZ // (why can't debug info do that for us ???)
+//ZZ // (why if this is a 4 bytes thumb instruction ???)
+//ZZ if (VG_(get_fnname_raw) (pc | 1, fnname, 200)) {
+//ZZ if (VG_(lookup_symbol_SLOW)( "*", fnname, &entrypoint, &ptoc )) {
+//ZZ dlog (1, "fnname %s lookupsym %p => %p %s.\n",
+//ZZ fnname, C2v(entrypoint), C2v(pc),
+//ZZ (entrypoint & 1 ? "thumb" : "arm"));
+//ZZ if (entrypoint & 1)
+//ZZ return pc | 1;
+//ZZ else
+//ZZ return pc;
+//ZZ
+//ZZ } else {
+//ZZ dlog (1, "%p fnname %s lookupsym failed?. Assume arm\n",
+//ZZ C2v (pc), fnname);
+//ZZ return pc;
+//ZZ }
+//ZZ } else {
+//ZZ // Can't find function name. We assume this is arm
+//ZZ dlog (1, "%p unknown fnname?. Assume arm\n", C2v (pc));
+//ZZ return pc;
+//ZZ }
+//ZZ }
+//ZZ }
+//ZZ
+//ZZ /* store registers in the guest state (gdbserver_to_valgrind)
+//ZZ or fetch register from the guest state (valgrind_to_gdbserver). */
+//ZZ static
+//ZZ void transfer_register (ThreadId tid, int abs_regno, void * buf,
+//ZZ transfer_direction dir, int size, Bool *mod)
+//ZZ {
+//ZZ ThreadState* tst = VG_(get_ThreadState)(tid);
+//ZZ int set = abs_regno / num_regs;
+//ZZ int regno = abs_regno % num_regs;
+//ZZ *mod = False;
+//ZZ
+//ZZ VexGuestARMState* arm = (VexGuestARMState*) get_arch (set, tst);
+//ZZ
+//ZZ switch (regno) {
+//ZZ // numbers here have to match the order of regs above
+//ZZ // Attention: gdb order does not match valgrind order.
+//ZZ case 0: VG_(transfer) (&arm->guest_R0, buf, dir, size, mod); break;
+//ZZ case 1: VG_(transfer) (&arm->guest_R1, buf, dir, size, mod); break;
+//ZZ case 2: VG_(transfer) (&arm->guest_R2, buf, dir, size, mod); break;
+//ZZ case 3: VG_(transfer) (&arm->guest_R3, buf, dir, size, mod); break;
+//ZZ case 4: VG_(transfer) (&arm->guest_R4, buf, dir, size, mod); break;
+//ZZ case 5: VG_(transfer) (&arm->guest_R5, buf, dir, size, mod); break;
+//ZZ case 6: VG_(transfer) (&arm->guest_R6, buf, dir, size, mod); break;
+//ZZ case 7: VG_(transfer) (&arm->guest_R7, buf, dir, size, mod); break;
+//ZZ case 8: VG_(transfer) (&arm->guest_R8, buf, dir, size, mod); break;
+//ZZ case 9: VG_(transfer) (&arm->guest_R9, buf, dir, size, mod); break;
+//ZZ case 10: VG_(transfer) (&arm->guest_R10, buf, dir, size, mod); break;
+//ZZ case 11: VG_(transfer) (&arm->guest_R11, buf, dir, size, mod); break;
+//ZZ case 12: VG_(transfer) (&arm->guest_R12, buf, dir, size, mod); break;
+//ZZ case 13: VG_(transfer) (&arm->guest_R13, buf, dir, size, mod); break;
+//ZZ case 14: VG_(transfer) (&arm->guest_R14, buf, dir, size, mod); break;
+//ZZ case 15: {
+//ZZ VG_(transfer) (&arm->guest_R15T, buf, dir, size, mod);
+//ZZ if (dir == gdbserver_to_valgrind && *mod) {
+//ZZ // If gdb is changing the PC, we have to set the thumb bit
+//ZZ // if needed.
+//ZZ arm->guest_R15T = thumb_pc(arm->guest_R15T);
+//ZZ }
+//ZZ break;
+//ZZ }
+//ZZ case 16:
+//ZZ case 17:
+//ZZ case 18:
+//ZZ case 19:
+//ZZ case 20: /* 9 "empty registers". See struct reg regs above. */
+//ZZ case 21:
+//ZZ case 22:
+//ZZ case 23:
+//ZZ case 24: *mod = False; break;
+//ZZ case 25: {
+//ZZ UInt cpsr = LibVEX_GuestARM_get_cpsr (arm);
+//ZZ if (dir == valgrind_to_gdbserver) {
+//ZZ VG_(transfer) (&cpsr, buf, dir, size, mod);
+//ZZ } else {
+//ZZ # if 0
+//ZZ UInt newcpsr;
+//ZZ VG_(transfer) (&newcpsr, buf, dir, size, mod);
+//ZZ *mod = newcpsr != cpsr;
+//ZZ // GDBTD ???? see FIXME in guest_arm_helpers.c
+//ZZ LibVEX_GuestARM_put_flags (newcpsr, arm);
+//ZZ # else
+//ZZ *mod = False;
+//ZZ # endif
+//ZZ }
+//ZZ break;
+//ZZ }
+//ZZ case 26: VG_(transfer) (&arm->guest_D0, buf, dir, size, mod); break;
+//ZZ case 27: VG_(transfer) (&arm->guest_D1, buf, dir, size, mod); break;
+//ZZ case 28: VG_(transfer) (&arm->guest_D2, buf, dir, size, mod); break;
+//ZZ case 29: VG_(transfer) (&arm->guest_D3, buf, dir, size, mod); break;
+//ZZ case 30: VG_(transfer) (&arm->guest_D4, buf, dir, size, mod); break;
+//ZZ case 31: VG_(transfer) (&arm->guest_D5, buf, dir, size, mod); break;
+//ZZ case 32: VG_(transfer) (&arm->guest_D6, buf, dir, size, mod); break;
+//ZZ case 33: VG_(transfer) (&arm->guest_D7, buf, dir, size, mod); break;
+//ZZ case 34: VG_(transfer) (&arm->guest_D8, buf, dir, size, mod); break;
+//ZZ case 35: VG_(transfer) (&arm->guest_D9, buf, dir, size, mod); break;
+//ZZ case 36: VG_(transfer) (&arm->guest_D10, buf, dir, size, mod); break;
+//ZZ case 37: VG_(transfer) (&arm->guest_D11, buf, dir, size, mod); break;
+//ZZ case 38: VG_(transfer) (&arm->guest_D12, buf, dir, size, mod); break;
+//ZZ case 39: VG_(transfer) (&arm->guest_D13, buf, dir, size, mod); break;
+//ZZ case 40: VG_(transfer) (&arm->guest_D14, buf, dir, size, mod); break;
+//ZZ case 41: VG_(transfer) (&arm->guest_D15, buf, dir, size, mod); break;
+//ZZ case 42: VG_(transfer) (&arm->guest_D16, buf, dir, size, mod); break;
+//ZZ case 43: VG_(transfer) (&arm->guest_D17, buf, dir, size, mod); break;
+//ZZ case 44: VG_(transfer) (&arm->guest_D18, buf, dir, size, mod); break;
+//ZZ case 45: VG_(transfer) (&arm->guest_D19, buf, dir, size, mod); break;
+//ZZ case 46: VG_(transfer) (&arm->guest_D20, buf, dir, size, mod); break;
+//ZZ case 47: VG_(transfer) (&arm->guest_D21, buf, dir, size, mod); break;
+//ZZ case 48: VG_(transfer) (&arm->guest_D22, buf, dir, size, mod); break;
+//ZZ case 49: VG_(transfer) (&arm->guest_D23, buf, dir, size, mod); break;
+//ZZ case 50: VG_(transfer) (&arm->guest_D24, buf, dir, size, mod); break;
+//ZZ case 51: VG_(transfer) (&arm->guest_D25, buf, dir, size, mod); break;
+//ZZ case 52: VG_(transfer) (&arm->guest_D26, buf, dir, size, mod); break;
+//ZZ case 53: VG_(transfer) (&arm->guest_D27, buf, dir, size, mod); break;
+//ZZ case 54: VG_(transfer) (&arm->guest_D28, buf, dir, size, mod); break;
+//ZZ case 55: VG_(transfer) (&arm->guest_D29, buf, dir, size, mod); break;
+//ZZ case 56: VG_(transfer) (&arm->guest_D30, buf, dir, size, mod); break;
+//ZZ case 57: VG_(transfer) (&arm->guest_D31, buf, dir, size, mod); break;
+//ZZ case 58: VG_(transfer) (&arm->guest_FPSCR, buf, dir, size, mod); break;
+//ZZ default: vg_assert(0);
+//ZZ }
+//ZZ }
+//ZZ
+//ZZ static
+//ZZ const char* target_xml (Bool shadow_mode)
+//ZZ {
+//ZZ if (shadow_mode) {
+//ZZ return "arm-with-vfpv3-valgrind.xml";
+//ZZ } else {
+//ZZ return "arm-with-vfpv3.xml";
+//ZZ }
+//ZZ }
+//ZZ
+//ZZ static struct valgrind_target_ops low_target = {
+//ZZ num_regs,
+//ZZ regs,
+//ZZ 13, //SP
+//ZZ transfer_register,
+//ZZ get_pc,
+//ZZ set_pc,
+//ZZ "arm",
+//ZZ target_xml
+//ZZ };
+
+void arm64_init_architecture (struct valgrind_target_ops *target)
+{
+ vg_assert(0); // IMPLEMENT ME
+ //ZZ *target = low_target;
+ //ZZ set_register_cache (regs, num_regs);
+ //ZZ gdbserver_expedite_regs = expedite_regs;
+}
Modified: trunk/coregrind/m_gdbserver/valgrind_low.h
==============================================================================
--- trunk/coregrind/m_gdbserver/valgrind_low.h (original)
+++ trunk/coregrind/m_gdbserver/valgrind_low.h Sun Jan 12 12:54:00 2014
@@ -73,6 +73,7 @@
extern void x86_init_architecture (struct valgrind_target_ops *target);
extern void amd64_init_architecture (struct valgrind_target_ops *target);
extern void arm_init_architecture (struct valgrind_target_ops *target);
+extern void arm64_...
[truncated message content] |
|
From: <sv...@va...> - 2014-01-12 12:49:33
|
Author: sewardj
Date: Sun Jan 12 12:49:10 2014
New Revision: 2803
Log:
Add support for ARMv8 AArch64 (the 64 bit ARM instruction set):
integer and FP instructions.
Added:
trunk/priv/guest_arm64_defs.h
trunk/priv/guest_arm64_helpers.c
trunk/priv/guest_arm64_toIR.c
trunk/priv/host_arm64_defs.c
trunk/priv/host_arm64_defs.h
trunk/priv/host_arm64_isel.c
trunk/pub/libvex_guest_arm64.h
Modified:
trunk/Makefile-gcc
trunk/auxprogs/genoffsets.c
trunk/priv/guest_s390_helpers.c
trunk/priv/host_generic_simd64.c
trunk/priv/host_generic_simd64.h
trunk/priv/ir_opt.c
trunk/priv/main_main.c
trunk/pub/libvex.h
trunk/pub/libvex_basictypes.h
trunk/pub/libvex_guest_s390x.h
trunk/pub/libvex_ir.h
trunk/switchback/Makefile
trunk/switchback/linker.c
trunk/switchback/switchback.c
Modified: trunk/Makefile-gcc
==============================================================================
--- trunk/Makefile-gcc (original)
+++ trunk/Makefile-gcc Sun Jan 12 12:49:10 2014
@@ -50,12 +50,14 @@
priv/host_x86_defs.o \
priv/host_amd64_defs.o \
priv/host_arm_defs.o \
+ priv/host_arm64_defs.o \
priv/host_ppc_defs.o \
priv/host_s390_defs.o \
priv/host_mips_defs.o \
priv/host_x86_isel.o \
priv/host_amd64_isel.o \
priv/host_arm_isel.o \
+ priv/host_arm64_isel.o \
priv/host_ppc_isel.o \
priv/host_s390_isel.o \
priv/host_mips_isel.o \
@@ -70,12 +72,14 @@
priv/guest_x86_helpers.o \
priv/guest_amd64_helpers.o \
priv/guest_arm_helpers.o \
+ priv/guest_arm64_helpers.o \
priv/guest_ppc_helpers.o \
priv/guest_s390_helpers.o \
priv/guest_mips_helpers.o \
priv/guest_x86_toIR.o \
priv/guest_amd64_toIR.o \
priv/guest_arm_toIR.o \
+ priv/guest_arm64_toIR.o \
priv/guest_ppc_toIR.o \
priv/guest_s390_toIR.o \
priv/guest_mips_toIR.o
@@ -194,6 +198,12 @@
if [ ! -f TAG-amd64-darwin ] ; then rm -f $(LIB_OBJS) TAG-* libvex.a ; fi
touch TAG-amd64-darwin
+libvex-arm64-linux.a: TAG-arm64-linux libvex.a
+ mv -f libvex.a libvex-arm64-linux.a
+TAG-arm64-linux:
+ if [ ! -f TAG-arm64-linux ] ; then rm -f $(LIB_OBJS) TAG-* libvex.a ; fi
+ touch TAG-arm64-linux
+
clean:
rm -f $(LIB_OBJS) *.a vex test_main.o TAG-* \
@@ -273,6 +283,10 @@
$(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_arm_defs.o \
-c priv/host_arm_defs.c
+priv/host_arm64_defs.o: $(ALL_HEADERS) priv/host_arm64_defs.c
+ $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_arm64_defs.o \
+ -c priv/host_arm64_defs.c
+
priv/host_ppc_defs.o: $(ALL_HEADERS) priv/host_ppc_defs.c
$(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_ppc_defs.o \
-c priv/host_ppc_defs.c
@@ -297,6 +311,10 @@
$(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_arm_isel.o \
-c priv/host_arm_isel.c
+priv/host_arm64_isel.o: $(ALL_HEADERS) priv/host_arm64_isel.c
+ $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_arm64_isel.o \
+ -c priv/host_arm64_isel.c
+
priv/host_ppc_isel.o: $(ALL_HEADERS) priv/host_ppc_isel.c
$(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/host_ppc_isel.o \
-c priv/host_ppc_isel.c
@@ -361,10 +379,18 @@
$(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_arm_helpers.o \
-c priv/guest_arm_helpers.c
+priv/guest_arm64_helpers.o: $(ALL_HEADERS) priv/guest_arm64_helpers.c
+ $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_arm64_helpers.o \
+ -c priv/guest_arm64_helpers.c
+
priv/guest_arm_toIR.o: $(ALL_HEADERS) priv/guest_arm_toIR.c
$(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_arm_toIR.o \
-c priv/guest_arm_toIR.c
+priv/guest_arm64_toIR.o: $(ALL_HEADERS) priv/guest_arm64_toIR.c
+ $(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_arm64_toIR.o \
+ -c priv/guest_arm64_toIR.c
+
priv/guest_ppc_helpers.o: $(ALL_HEADERS) priv/guest_ppc_helpers.c
$(CC) $(CCFLAGS) $(ALL_INCLUDES) -o priv/guest_ppc_helpers.o \
-c priv/guest_ppc_helpers.c
Modified: trunk/auxprogs/genoffsets.c
==============================================================================
--- trunk/auxprogs/genoffsets.c (original)
+++ trunk/auxprogs/genoffsets.c Sun Jan 12 12:49:10 2014
@@ -51,6 +51,7 @@
#include "../pub/libvex_guest_ppc32.h"
#include "../pub/libvex_guest_ppc64.h"
#include "../pub/libvex_guest_arm.h"
+#include "../pub/libvex_guest_arm64.h"
#include "../pub/libvex_guest_s390x.h"
#include "../pub/libvex_guest_mips32.h"
#include "../pub/libvex_guest_mips64.h"
@@ -159,6 +160,19 @@
GENOFFSET(ARM,arm,R14);
GENOFFSET(ARM,arm,R15T);
+ // arm64
+ GENOFFSET(ARM64,arm64,X0);
+ GENOFFSET(ARM64,arm64,X1);
+ GENOFFSET(ARM64,arm64,X2);
+ GENOFFSET(ARM64,arm64,X3);
+ GENOFFSET(ARM64,arm64,X4);
+ GENOFFSET(ARM64,arm64,X5);
+ GENOFFSET(ARM64,arm64,X6);
+ GENOFFSET(ARM64,arm64,X7);
+ GENOFFSET(ARM64,arm64,X8);
+ GENOFFSET(ARM64,arm64,SP);
+ GENOFFSET(ARM64,arm64,PC);
+
// s390x
GENOFFSET(S390X,s390x,r2);
GENOFFSET(S390X,s390x,r3);
Added: trunk/priv/guest_arm64_defs.h
==============================================================================
--- trunk/priv/guest_arm64_defs.h (added)
+++ trunk/priv/guest_arm64_defs.h Sun Jan 12 12:49:10 2014
@@ -0,0 +1,244 @@
+
+/*---------------------------------------------------------------*/
+/*--- begin guest_arm64_defs.h ---*/
+/*---------------------------------------------------------------*/
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2013-2013 OpenWorks
+ in...@op...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __VEX_GUEST_ARM64_DEFS_H
+#define __VEX_GUEST_ARM64_DEFS_H
+
+#include "libvex_basictypes.h"
+#include "guest_generic_bb_to_IR.h" // DisResult
+
+/*---------------------------------------------------------*/
+/*--- arm64 to IR conversion ---*/
+/*---------------------------------------------------------*/
+
+/* Convert one ARM64 insn to IR. See the type DisOneInstrFn in
+ bb_to_IR.h. */
+extern
+DisResult disInstr_ARM64 ( IRSB* irbb,
+ Bool (*resteerOkFn) ( void*, Addr64 ),
+ Bool resteerCisOk,
+ void* callback_opaque,
+ UChar* guest_code,
+ Long delta,
+ Addr64 guest_IP,
+ VexArch guest_arch,
+ VexArchInfo* archinfo,
+ VexAbiInfo* abiinfo,
+ Bool host_bigendian,
+ Bool sigill_diag );
+
+/* Used by the optimiser to specialise calls to helpers. */
+extern
+IRExpr* guest_arm64_spechelper ( const HChar* function_name,
+ IRExpr** args,
+ IRStmt** precedingStmts,
+ Int n_precedingStmts );
+
+/* Describes to the optimser which part of the guest state require
+ precise memory exceptions. This is logically part of the guest
+ state description. */
+extern
+Bool guest_arm64_state_requires_precise_mem_exns ( Int, Int );
+
+extern
+VexGuestLayout arm64Guest_layout;
+
+
+/*---------------------------------------------------------*/
+/*--- arm64 guest helpers ---*/
+/*---------------------------------------------------------*/
+
+/* --- CLEAN HELPERS --- */
+
+/* Calculate NZCV from the supplied thunk components, in the positions
+ they appear in the CPSR, viz bits 31:28 for N Z C V respectively.
+ Returned bits 63:32 and 27:0 are zero. */
+extern
+ULong arm64g_calculate_flags_nzcv ( ULong cc_op, ULong cc_dep1,
+ ULong cc_dep2, ULong cc_dep3 );
+
+//ZZ /* Calculate the C flag from the thunk components, in the lowest bit
+//ZZ of the word (bit 0). */
+//ZZ extern
+//ZZ UInt armg_calculate_flag_c ( UInt cc_op, UInt cc_dep1,
+//ZZ UInt cc_dep2, UInt cc_dep3 );
+//ZZ
+//ZZ /* Calculate the V flag from the thunk components, in the lowest bit
+//ZZ of the word (bit 0). */
+//ZZ extern
+//ZZ UInt armg_calculate_flag_v ( UInt cc_op, UInt cc_dep1,
+//ZZ UInt cc_dep2, UInt cc_dep3 );
+//ZZ
+/* Calculate the specified condition from the thunk components, in the
+ lowest bit of the word (bit 0). */
+extern
+ULong arm64g_calculate_condition ( /* ARM64Condcode << 4 | cc_op */
+ ULong cond_n_op ,
+ ULong cc_dep1,
+ ULong cc_dep2, ULong cc_dep3 );
+
+//ZZ /* Calculate the QC flag from the thunk components, in the lowest bit
+//ZZ of the word (bit 0). */
+//ZZ extern
+//ZZ UInt armg_calculate_flag_qc ( UInt resL1, UInt resL2,
+//ZZ UInt resR1, UInt resR2 );
+
+
+/*---------------------------------------------------------*/
+/*--- Condition code stuff ---*/
+/*---------------------------------------------------------*/
+
+/* Flag masks. Defines positions of flag bits in the NZCV
+ register. */
+#define ARM64G_CC_SHIFT_N 31
+#define ARM64G_CC_SHIFT_Z 30
+#define ARM64G_CC_SHIFT_C 29
+#define ARM64G_CC_SHIFT_V 28
+//ZZ #define ARMG_CC_SHIFT_Q 27
+//ZZ
+//ZZ #define ARMG_CC_MASK_N (1 << ARMG_CC_SHIFT_N)
+//ZZ #define ARMG_CC_MASK_Z (1 << ARMG_CC_SHIFT_Z)
+//ZZ #define ARMG_CC_MASK_C (1 << ARMG_CC_SHIFT_C)
+//ZZ #define ARMG_CC_MASK_V (1 << ARMG_CC_SHIFT_V)
+//ZZ #define ARMG_CC_MASK_Q (1 << ARMG_CC_SHIFT_Q)
+
+/* Flag thunk descriptors. A four-word thunk is used to record
+ details of the most recent flag-setting operation, so NZCV can
+ be computed later if needed.
+
+ The four words are:
+
+ CC_OP, which describes the operation.
+
+ CC_DEP1, CC_DEP2, CC_NDEP. These are arguments to the
+ operation. We want set up the mcx_masks in flag helper calls
+ involving these fields so that Memcheck "believes" that the
+ resulting flags are data-dependent on both CC_DEP1 and
+ CC_DEP2. Hence the name DEP.
+
+ When building the thunk, it is always necessary to write words into
+ CC_DEP1/2 and NDEP, even if those args are not used given the CC_OP
+ field. This is important because otherwise Memcheck could give
+ false positives as it does not understand the relationship between
+ the CC_OP field and CC_DEP1/2/NDEP, and so believes that the
+ definedness of the stored flags always depends on all 3 DEP values.
+
+ A summary of the field usages is:
+
+ OP DEP1 DEP2 DEP3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ OP_COPY curr_NZCV:28x0 unused unused
+ OP_ADD32 argL argR unused
+ OP_ADD64 argL argR unused
+ OP_SUB32 argL argR unused
+ OP_SUB64 argL argR unused
+//ZZ OP_ADC argL argR 31x0:old_C
+//ZZ OP_SBB argL argR 31x0:old_C
+ OP_LOGIC32 result unused unused
+ OP_LOGIC64 result unused unused
+//ZZ OP_MUL result unused 30x0:old_C:old_V
+//ZZ OP_MULL resLO32 resHI32 30x0:old_C:old_V
+//ZZ */
+
+enum {
+ ARM64G_CC_OP_COPY=0, /* DEP1 = NZCV in 31:28, DEP2 = 0, DEP3 = 0
+ just copy DEP1 to output */
+
+ ARM64G_CC_OP_ADD32, /* DEP1 = argL (Rn), DEP2 = argR (shifter_op),
+ DEP3 = 0 */
+
+ ARM64G_CC_OP_ADD64, /* DEP1 = argL (Rn), DEP2 = argR (shifter_op),
+ DEP3 = 0 */
+
+ ARM64G_CC_OP_SUB32, /* DEP1 = argL (Rn), DEP2 = argR (shifter_op),
+ DEP3 = 0 */
+
+ ARM64G_CC_OP_SUB64, /* DEP1 = argL (Rn), DEP2 = argR (shifter_op),
+ DEP3 = 0 */
+
+//ZZ ARMG_CC_OP_ADC, /* DEP1 = argL (Rn), DEP2 = arg2 (shifter_op),
+//ZZ DEP3 = oldC (in LSB) */
+//ZZ
+//ZZ ARMG_CC_OP_SBB, /* DEP1 = argL (Rn), DEP2 = arg2 (shifter_op),
+//ZZ DEP3 = oldC (in LSB) */
+
+ ARM64G_CC_OP_LOGIC32, /* DEP1 = result, DEP2 = 0, DEP3 = 0 */
+ ARM64G_CC_OP_LOGIC64, /* DEP1 = result, DEP2 = 0, DEP3 = 0 */
+
+//ZZ ARMG_CC_OP_MUL, /* DEP1 = result, DEP2 = 0, DEP3 = oldC:old_V
+//ZZ (in bits 1:0) */
+//ZZ
+//ZZ ARMG_CC_OP_MULL, /* DEP1 = resLO32, DEP2 = resHI32, DEP3 = oldC:old_V
+//ZZ (in bits 1:0) */
+
+ ARM64G_CC_OP_NUMBER
+};
+
+/* XXXX because of the calling conventions for
+ arm64g_calculate_condition, all these OP values MUST be in the range
+ 0 .. 15 only (viz, 4-bits). */
+
+
+
+/* Defines conditions which we can ask for */
+
+typedef
+ enum {
+ ARM64CondEQ = 0, /* equal : Z=1 */
+ ARM64CondNE = 1, /* not equal : Z=0 */
+
+ ARM64CondCS = 2, /* >=u (higher or same) (aka HS) : C=1 */
+ ARM64CondCC = 3, /* <u (lower) (aka LO) : C=0 */
+
+ ARM64CondMI = 4, /* minus (negative) : N=1 */
+ ARM64CondPL = 5, /* plus (zero or +ve) : N=0 */
+
+ ARM64CondVS = 6, /* overflow : V=1 */
+ ARM64CondVC = 7, /* no overflow : V=0 */
+
+ ARM64CondHI = 8, /* >u (higher) : C=1 && Z=0 */
+ ARM64CondLS = 9, /* <=u (lower or same) : C=0 || Z=1 */
+
+ ARM64CondGE = 10, /* >=s (signed greater or equal) : N=V */
+ ARM64CondLT = 11, /* <s (signed less than) : N!=V */
+
+ ARM64CondGT = 12, /* >s (signed greater) : Z=0 && N=V */
+ ARM64CondLE = 13, /* <=s (signed less or equal) : Z=1 || N!=V */
+
+ ARM64CondAL = 14, /* always (unconditional) : 1 */
+ ARM64CondNV = 15 /* always (unconditional) : 1 */
+ }
+ ARM64Condcode;
+
+#endif /* ndef __VEX_GUEST_ARM64_DEFS_H */
+
+/*---------------------------------------------------------------*/
+/*--- end guest_arm64_defs.h ---*/
+/*---------------------------------------------------------------*/
Added: trunk/priv/guest_arm64_helpers.c
==============================================================================
--- trunk/priv/guest_arm64_helpers.c (added)
+++ trunk/priv/guest_arm64_helpers.c Sun Jan 12 12:49:10 2014
@@ -0,0 +1,1292 @@
+
+/*---------------------------------------------------------------*/
+/*--- begin guest_arm64_helpers.c ---*/
+/*---------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2013-2013 OpenWorks
+ in...@op...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#include "libvex_basictypes.h"
+#include "libvex_emnote.h"
+#include "libvex_guest_arm64.h"
+#include "libvex_ir.h"
+#include "libvex.h"
+
+#include "main_util.h"
+#include "main_globals.h"
+#include "guest_generic_bb_to_IR.h"
+#include "guest_arm64_defs.h"
+
+
+/* This file contains helper functions for arm guest code. Calls to
+ these functions are generated by the back end. These calls are of
+ course in the host machine code and this file will be compiled to
+ host machine code, so that all makes sense.
+
+ Only change the signatures of these helper functions very
+ carefully. If you change the signature here, you'll have to change
+ the parameters passed to it in the IR calls constructed by
+ guest_arm64_toIR.c.
+*/
+
+
+/* Set to 1 to get detailed profiling info about individual N, Z, C
+ and V flag evaluation. */
+#define PROFILE_NZCV_FLAGS 0
+
+#if PROFILE_NZCV_FLAGS
+
+static UInt tab_eval[ARM64G_CC_OP_NUMBER][16];
+static UInt initted = 0;
+static UInt tot_evals = 0;
+
+static void initCounts ( void )
+{
+ UInt i, j;
+ for (i = 0; i < ARM64G_CC_OP_NUMBER; i++) {
+ for (j = 0; j < 16; j++) {
+ tab_eval[i][j] = 0;
+ }
+ }
+ initted = 1;
+}
+
+static void showCounts ( void )
+{
+ const HChar* nameCC[16]
+ = { "EQ", "NE", "CS", "CC", "MI", "PL", "VS", "VC",
+ "HI", "LS", "GE", "LT", "GT", "LE", "AL", "NV" };
+ UInt i, j;
+ ULong sum = 0;
+ vex_printf("\nCC_OP 0 1 2 3 "
+ " 4 5 6\n");
+ vex_printf( "--------------------------------------------------"
+ "--------------------------\n");
+ for (j = 0; j < 16; j++) {
+ vex_printf("%2d %s ", j, nameCC[j]);
+ for (i = 0; i < ARM64G_CC_OP_NUMBER; i++) {
+ vex_printf("%9d ", tab_eval[i][j]);
+ sum += tab_eval[i][j];
+ }
+ vex_printf("\n");
+ }
+ vex_printf("(In total %llu calls)\n", sum);
+}
+
+#define NOTE_EVAL(_cc_op, _cond) \
+ do { \
+ if (!initted) initCounts(); \
+ vassert( ((UInt)(_cc_op)) < ARM64G_CC_OP_NUMBER); \
+ vassert( ((UInt)(_cond)) < 16); \
+ tab_eval[(UInt)(_cc_op)][(UInt)(cond)]++; \
+ tot_evals++; \
+ if (0 == (tot_evals & 0x7FFF)) \
+ showCounts(); \
+ } while (0)
+
+#endif /* PROFILE_NZCV_FLAGS */
+
+
+/* Calculate the N flag from the supplied thunk components, in the
+ least significant bit of the word. Returned bits 63:1 are zero. */
+static
+ULong arm64g_calculate_flag_n ( ULong cc_op, ULong cc_dep1,
+ ULong cc_dep2, ULong cc_dep3 )
+{
+ switch (cc_op) {
+ case ARM64G_CC_OP_COPY: {
+ /* (nzcv:28x0, unused, unused) */
+ ULong nf = (cc_dep1 >> ARM64G_CC_SHIFT_N) & 1;
+ return nf;
+ }
+ case ARM64G_CC_OP_ADD32: {
+ /* (argL, argR, unused) */
+ UInt argL = (UInt)cc_dep1;
+ UInt argR = (UInt)cc_dep2;
+ UInt res = argL + argR;
+ ULong nf = (ULong)(res >> 31);
+ return nf;
+ }
+ case ARM64G_CC_OP_ADD64: {
+ /* (argL, argR, unused) */
+ ULong argL = cc_dep1;
+ ULong argR = cc_dep2;
+ ULong res = argL + argR;
+ ULong nf = (ULong)(res >> 63);
+ return nf;
+ }
+ case ARM64G_CC_OP_SUB32: {
+ /* (argL, argR, unused) */
+ UInt argL = (UInt)cc_dep1;
+ UInt argR = (UInt)cc_dep2;
+ UInt res = argL - argR;
+ ULong nf = (ULong)(res >> 31);
+ return nf;
+ }
+ case ARM64G_CC_OP_SUB64: {
+ /* (argL, argR, unused) */
+ ULong argL = cc_dep1;
+ ULong argR = cc_dep2;
+ ULong res = argL - argR;
+ ULong nf = res >> 63;
+ return nf;
+ }
+//ZZ case ARMG_CC_OP_ADC: {
+//ZZ /* (argL, argR, oldC) */
+//ZZ UInt argL = cc_dep1;
+//ZZ UInt argR = cc_dep2;
+//ZZ UInt oldC = cc_dep3;
+//ZZ vassert((oldC & ~1) == 0);
+//ZZ UInt res = argL + argR + oldC;
+//ZZ UInt nf = res >> 31;
+//ZZ return nf;
+//ZZ }
+//ZZ case ARMG_CC_OP_SBB: {
+//ZZ /* (argL, argR, oldC) */
+//ZZ UInt argL = cc_dep1;
+//ZZ UInt argR = cc_dep2;
+//ZZ UInt oldC = cc_dep3;
+//ZZ vassert((oldC & ~1) == 0);
+//ZZ UInt res = argL - argR - (oldC ^ 1);
+//ZZ UInt nf = res >> 31;
+//ZZ return nf;
+//ZZ }
+ case ARM64G_CC_OP_LOGIC32: {
+ /* (res, unused, unused) */
+ UInt res = (UInt)cc_dep1;
+ ULong nf = res >> 31;
+ return nf;
+ }
+ case ARM64G_CC_OP_LOGIC64: {
+ /* (res, unused, unused) */
+ ULong res = cc_dep1;
+ ULong nf = res >> 63;
+ return nf;
+ }
+//ZZ case ARMG_CC_OP_MUL: {
+//ZZ /* (res, unused, oldC:oldV) */
+//ZZ UInt res = cc_dep1;
+//ZZ UInt nf = res >> 31;
+//ZZ return nf;
+//ZZ }
+//ZZ case ARMG_CC_OP_MULL: {
+//ZZ /* (resLo32, resHi32, oldC:oldV) */
+//ZZ UInt resHi32 = cc_dep2;
+//ZZ UInt nf = resHi32 >> 31;
+//ZZ return nf;
+//ZZ }
+ default:
+ /* shouldn't really make these calls from generated code */
+ vex_printf("arm64g_calculate_flag_n"
+ "( op=%llu, dep1=0x%llx, dep2=0x%llx, dep3=0x%llx )\n",
+ cc_op, cc_dep1, cc_dep2, cc_dep3 );
+ vpanic("arm64g_calculate_flag_n");
+ }
+}
+
+
+/* Calculate the Z flag from the supplied thunk components, in the
+ least significant bit of the word. Returned bits 63:1 are zero. */
+static
+ULong arm64g_calculate_flag_z ( ULong cc_op, ULong cc_dep1,
+ ULong cc_dep2, ULong cc_dep3 )
+{
+ switch (cc_op) {
+ case ARM64G_CC_OP_COPY: {
+ /* (nzcv:28x0, unused, unused) */
+ ULong zf = (cc_dep1 >> ARM64G_CC_SHIFT_Z) & 1;
+ return zf;
+ }
+ case ARM64G_CC_OP_ADD32: {
+ /* (argL, argR, unused) */
+ UInt argL = (UInt)cc_dep1;
+ UInt argR = (UInt)cc_dep2;
+ UInt res = argL + argR;
+ ULong zf = res == 0;
+ return zf;
+ }
+ case ARM64G_CC_OP_ADD64: {
+ /* (argL, argR, unused) */
+ ULong argL = cc_dep1;
+ ULong argR = cc_dep2;
+ ULong res = argL + argR;
+ ULong zf = res == 0;
+ return zf;
+ }
+ case ARM64G_CC_OP_SUB32: {
+ /* (argL, argR, unused) */
+ UInt argL = (UInt)cc_dep1;
+ UInt argR = (UInt)cc_dep2;
+ UInt res = argL - argR;
+ ULong zf = res == 0;
+ return zf;
+ }
+ case ARM64G_CC_OP_SUB64: {
+ /* (argL, argR, unused) */
+ ULong argL = cc_dep1;
+ ULong argR = cc_dep2;
+ ULong res = argL - argR;
+ ULong zf = res == 0;
+ return zf;
+ }
+//ZZ case ARMG_CC_OP_ADC: {
+//ZZ /* (argL, argR, oldC) */
+//ZZ UInt argL = cc_dep1;
+//ZZ UInt argR = cc_dep2;
+//ZZ UInt oldC = cc_dep3;
+//ZZ vassert((oldC & ~1) == 0);
+//ZZ UInt res = argL + argR + oldC;
+//ZZ UInt zf = res == 0;
+//ZZ return zf;
+//ZZ }
+//ZZ case ARMG_CC_OP_SBB: {
+//ZZ /* (argL, argR, oldC) */
+//ZZ UInt argL = cc_dep1;
+//ZZ UInt argR = cc_dep2;
+//ZZ UInt oldC = cc_dep3;
+//ZZ vassert((oldC & ~1) == 0);
+//ZZ UInt res = argL - argR - (oldC ^ 1);
+//ZZ UInt zf = res == 0;
+//ZZ return zf;
+//ZZ }
+ case ARM64G_CC_OP_LOGIC32: {
+ /* (res, unused, unused) */
+ UInt res = (UInt)cc_dep1;
+ ULong zf = res == 0;
+ return zf;
+ }
+ case ARM64G_CC_OP_LOGIC64: {
+ /* (res, unused, unused) */
+ ULong res = cc_dep1;
+ ULong zf = res == 0;
+ return zf;
+ }
+//ZZ case ARMG_CC_OP_MUL: {
+//ZZ /* (res, unused, oldC:oldV) */
+//ZZ UInt res = cc_dep1;
+//ZZ UInt zf = res == 0;
+//ZZ return zf;
+//ZZ }
+//ZZ case ARMG_CC_OP_MULL: {
+//ZZ /* (resLo32, resHi32, oldC:oldV) */
+//ZZ UInt resLo32 = cc_dep1;
+//ZZ UInt resHi32 = cc_dep2;
+//ZZ UInt zf = (resHi32|resLo32) == 0;
+//ZZ return zf;
+//ZZ }
+ default:
+ /* shouldn't really make these calls from generated code */
+ vex_printf("arm64g_calculate_flag_z"
+ "( op=%llu, dep1=0x%llx, dep2=0x%llx, dep3=0x%llx )\n",
+ cc_op, cc_dep1, cc_dep2, cc_dep3 );
+ vpanic("arm64g_calculate_flag_z");
+ }
+}
+
+
+/* CALLED FROM GENERATED CODE: CLEAN HELPER */
+/* Calculate the C flag from the supplied thunk components, in the
+ least significant bit of the word. Returned bits 63:1 are zero. */
+static
+ULong arm64g_calculate_flag_c ( ULong cc_op, ULong cc_dep1,
+ ULong cc_dep2, ULong cc_dep3 )
+{
+ switch (cc_op) {
+ case ARM64G_CC_OP_COPY: {
+ /* (nzcv:28x0, unused, unused) */
+ ULong cf = (cc_dep1 >> ARM64G_CC_SHIFT_C) & 1;
+ return cf;
+ }
+ case ARM64G_CC_OP_ADD32: {
+ /* (argL, argR, unused) */
+ UInt argL = (UInt)cc_dep1;
+ UInt argR = (UInt)cc_dep2;
+ UInt res = argL + argR;
+ ULong cf = res < argL;
+ return cf;
+ }
+ case ARM64G_CC_OP_ADD64: {
+ /* (argL, argR, unused) */
+ ULong argL = cc_dep1;
+ ULong argR = cc_dep2;
+ ULong res = argL + argR;
+ ULong cf = res < argL;
+ return cf;
+ }
+ case ARM64G_CC_OP_SUB32: {
+ /* (argL, argR, unused) */
+ UInt argL = (UInt)cc_dep1;
+ UInt argR = (UInt)cc_dep2;
+ ULong cf = argL >= argR;
+ return cf;
+ }
+ case ARM64G_CC_OP_SUB64: {
+ /* (argL, argR, unused) */
+ ULong argL = cc_dep1;
+ ULong argR = cc_dep2;
+ ULong cf = argL >= argR;
+ return cf;
+ }
+//ZZ case ARMG_CC_OP_ADC: {
+//ZZ /* (argL, argR, oldC) */
+//ZZ UInt argL = cc_dep1;
+//ZZ UInt argR = cc_dep2;
+//ZZ UInt oldC = cc_dep3;
+//ZZ vassert((oldC & ~1) == 0);
+//ZZ UInt res = argL + argR + oldC;
+//ZZ UInt cf = oldC ? (res <= argL) : (res < argL);
+//ZZ return cf;
+//ZZ }
+//ZZ case ARMG_CC_OP_SBB: {
+//ZZ /* (argL, argR, oldC) */
+//ZZ UInt argL = cc_dep1;
+//ZZ UInt argR = cc_dep2;
+//ZZ UInt oldC = cc_dep3;
+//ZZ vassert((oldC & ~1) == 0);
+//ZZ UInt cf = oldC ? (argL >= argR) : (argL > argR);
+//ZZ return cf;
+//ZZ }
+ case ARM64G_CC_OP_LOGIC32:
+ case ARM64G_CC_OP_LOGIC64: {
+ /* (res, unused, unused) */
+ return 0; // C after logic is zero on arm64
+ }
+//ZZ case ARMG_CC_OP_MUL: {
+//ZZ /* (res, unused, oldC:oldV) */
+//ZZ UInt oldC = (cc_dep3 >> 1) & 1;
+//ZZ vassert((cc_dep3 & ~3) == 0);
+//ZZ UInt cf = oldC;
+//ZZ return cf;
+//ZZ }
+//ZZ case ARMG_CC_OP_MULL: {
+//ZZ /* (resLo32, resHi32, oldC:oldV) */
+//ZZ UInt oldC = (cc_dep3 >> 1) & 1;
+//ZZ vassert((cc_dep3 & ~3) == 0);
+//ZZ UInt cf = oldC;
+//ZZ return cf;
+//ZZ }
+ default:
+ /* shouldn't really make these calls from generated code */
+ vex_printf("arm64g_calculate_flag_c"
+ "( op=%llu, dep1=0x%llx, dep2=0x%llx, dep3=0x%llx )\n",
+ cc_op, cc_dep1, cc_dep2, cc_dep3 );
+ vpanic("arm64g_calculate_flag_c");
+ }
+}
+
+
+/* CALLED FROM GENERATED CODE: CLEAN HELPER */
+/* Calculate the V flag from the supplied thunk components, in the
+ least significant bit of the word. Returned bits 63:1 are zero. */
+static
+ULong arm64g_calculate_flag_v ( ULong cc_op, ULong cc_dep1,
+ ULong cc_dep2, ULong cc_dep3 )
+{
+ switch (cc_op) {
+ case ARM64G_CC_OP_COPY: {
+ /* (nzcv:28x0, unused, unused) */
+ ULong vf = (cc_dep1 >> ARM64G_CC_SHIFT_V) & 1;
+ return vf;
+ }
+ case ARM64G_CC_OP_ADD32: {
+ /* (argL, argR, unused) */
+ UInt argL = (UInt)cc_dep1;
+ UInt argR = (UInt)cc_dep2;
+ UInt res = argL + argR;
+ ULong vf = (ULong)(((res ^ argL) & (res ^ argR)) >> 31);
+ return vf;
+ }
+ case ARM64G_CC_OP_ADD64: {
+ /* (argL, argR, unused) */
+ ULong argL = cc_dep1;
+ ULong argR = cc_dep2;
+ ULong res = argL + argR;
+ ULong vf = ((res ^ argL) & (res ^ argR)) >> 63;
+ return vf;
+ }
+ case ARM64G_CC_OP_SUB32: {
+ /* (argL, argR, unused) */
+ UInt argL = (UInt)cc_dep1;
+ UInt argR = (UInt)cc_dep2;
+ UInt res = argL - argR;
+ ULong vf = (ULong)(((argL ^ argR) & (argL ^ res)) >> 31);
+ return vf;
+ }
+ case ARM64G_CC_OP_SUB64: {
+ /* (argL, argR, unused) */
+ ULong argL = cc_dep1;
+ ULong argR = cc_dep2;
+ ULong res = argL - argR;
+ ULong vf = (((argL ^ argR) & (argL ^ res))) >> 63;
+ return vf;
+ }
+//ZZ case ARMG_CC_OP_ADC: {
+//ZZ /* (argL, argR, oldC) */
+//ZZ UInt argL = cc_dep1;
+//ZZ UInt argR = cc_dep2;
+//ZZ UInt oldC = cc_dep3;
+//ZZ vassert((oldC & ~1) == 0);
+//ZZ UInt res = argL + argR + oldC;
+//ZZ UInt vf = ((res ^ argL) & (res ^ argR)) >> 31;
+//ZZ return vf;
+//ZZ }
+//ZZ case ARMG_CC_OP_SBB: {
+//ZZ /* (argL, argR, oldC) */
+//ZZ UInt argL = cc_dep1;
+//ZZ UInt argR = cc_dep2;
+//ZZ UInt oldC = cc_dep3;
+//ZZ vassert((oldC & ~1) == 0);
+//ZZ UInt res = argL - argR - (oldC ^ 1);
+//ZZ UInt vf = ((argL ^ argR) & (argL ^ res)) >> 31;
+//ZZ return vf;
+//ZZ }
+ case ARM64G_CC_OP_LOGIC32:
+ case ARM64G_CC_OP_LOGIC64: {
+ /* (res, unused, unused) */
+ return 0; // V after logic is zero on arm64
+ }
+//ZZ case ARMG_CC_OP_MUL: {
+//ZZ /* (res, unused, oldC:oldV) */
+//ZZ UInt oldV = (cc_dep3 >> 0) & 1;
+//ZZ vassert((cc_dep3 & ~3) == 0);
+//ZZ UInt vf = oldV;
+//ZZ return vf;
+//ZZ }
+//ZZ case ARMG_CC_OP_MULL: {
+//ZZ /* (resLo32, resHi32, oldC:oldV) */
+//ZZ UInt oldV = (cc_dep3 >> 0) & 1;
+//ZZ vassert((cc_dep3 & ~3) == 0);
+//ZZ UInt vf = oldV;
+//ZZ return vf;
+//ZZ }
+ default:
+ /* shouldn't really make these calls from generated code */
+ vex_printf("arm64g_calculate_flag_v"
+ "( op=%llu, dep1=0x%llx, dep2=0x%llx, dep3=0x%llx )\n",
+ cc_op, cc_dep1, cc_dep2, cc_dep3 );
+ vpanic("arm64g_calculate_flag_v");
+ }
+}
+
+
+/* CALLED FROM GENERATED CODE: CLEAN HELPER */
+/* Calculate NZCV from the supplied thunk components, in the positions
+ they appear in the CPSR, viz bits 31:28 for N Z C V respectively.
+ Returned bits 27:0 are zero. */
+ULong arm64g_calculate_flags_nzcv ( ULong cc_op, ULong cc_dep1,
+ ULong cc_dep2, ULong cc_dep3 )
+{
+ ULong f;
+ ULong res = 0;
+ f = 1 & arm64g_calculate_flag_n(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ res |= (f << ARM64G_CC_SHIFT_N);
+ f = 1 & arm64g_calculate_flag_z(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ res |= (f << ARM64G_CC_SHIFT_Z);
+ f = 1 & arm64g_calculate_flag_c(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ res |= (f << ARM64G_CC_SHIFT_C);
+ f = 1 & arm64g_calculate_flag_v(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ res |= (f << ARM64G_CC_SHIFT_V);
+ return res;
+}
+
+//ZZ
+//ZZ /* CALLED FROM GENERATED CODE: CLEAN HELPER */
+//ZZ /* Calculate the QC flag from the arguments, in the lowest bit
+//ZZ of the word (bit 0). Urr, having this out of line is bizarre.
+//ZZ Push back inline. */
+//ZZ UInt armg_calculate_flag_qc ( UInt resL1, UInt resL2,
+//ZZ UInt resR1, UInt resR2 )
+//ZZ {
+//ZZ if (resL1 != resR1 || resL2 != resR2)
+//ZZ return 1;
+//ZZ else
+//ZZ return 0;
+//ZZ }
+
+/* CALLED FROM GENERATED CODE: CLEAN HELPER */
+/* Calculate the specified condition from the thunk components, in the
+ lowest bit of the word (bit 0). Returned bits 63:1 are zero. */
+ULong arm64g_calculate_condition ( /* ARM64Condcode << 4 | cc_op */
+ ULong cond_n_op ,
+ ULong cc_dep1,
+ ULong cc_dep2, ULong cc_dep3 )
+{
+ ULong cond = cond_n_op >> 4;
+ ULong cc_op = cond_n_op & 0xF;
+ ULong inv = cond & 1;
+ ULong nf, zf, vf, cf;
+
+# if PROFILE_NZCV_FLAGS
+ NOTE_EVAL(cc_op, cond);
+# endif
+
+ // vex_printf("XXXXXXXX %llx %llx %llx %llx\n",
+ // cond_n_op, cc_dep1, cc_dep2, cc_dep3);
+
+ switch (cond) {
+ case ARM64CondEQ: // Z=1 => z
+ case ARM64CondNE: // Z=0
+ zf = arm64g_calculate_flag_z(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ return inv ^ zf;
+
+ case ARM64CondCS: // C=1 => c
+ case ARM64CondCC: // C=0
+ cf = arm64g_calculate_flag_c(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ return inv ^ cf;
+
+ case ARM64CondMI: // N=1 => n
+ case ARM64CondPL: // N=0
+ nf = arm64g_calculate_flag_n(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ return inv ^ nf;
+
+ case ARM64CondVS: // V=1 => v
+ case ARM64CondVC: // V=0
+ vf = arm64g_calculate_flag_v(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ return inv ^ vf;
+
+ case ARM64CondHI: // C=1 && Z=0 => c & ~z
+ case ARM64CondLS: // C=0 || Z=1
+ cf = arm64g_calculate_flag_c(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ zf = arm64g_calculate_flag_z(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ return inv ^ (1 & (cf & ~zf));
+
+ case ARM64CondGE: // N=V => ~(n^v)
+ case ARM64CondLT: // N!=V
+ nf = arm64g_calculate_flag_n(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ vf = arm64g_calculate_flag_v(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ return inv ^ (1 & ~(nf ^ vf));
+
+ case ARM64CondGT: // Z=0 && N=V => ~z & ~(n^v) => ~(z | (n^v))
+ case ARM64CondLE: // Z=1 || N!=V
+ nf = arm64g_calculate_flag_n(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ vf = arm64g_calculate_flag_v(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ zf = arm64g_calculate_flag_z(cc_op, cc_dep1, cc_dep2, cc_dep3);
+ return inv ^ (1 & ~(zf | (nf ^ vf)));
+
+ case ARM64CondAL: // 1
+ case ARM64CondNV: // 1
+ return 1;
+
+ default:
+ /* shouldn't really make these calls from generated code */
+ vex_printf("arm64g_calculate_condition(ARM64)"
+ "( %llu, %llu, 0x%llx, 0x%llx, 0x%llx )\n",
+ cond, cc_op, cc_dep1, cc_dep2, cc_dep3 );
+ vpanic("armg_calculate_condition(ARM64)");
+ }
+}
+
+
+/*---------------------------------------------------------------*/
+/*--- Flag-helpers translation-time function specialisers. ---*/
+/*--- These help iropt specialise calls the above run-time ---*/
+/*--- flags functions. ---*/
+/*---------------------------------------------------------------*/
+
+/* Used by the optimiser to try specialisations. Returns an
+ equivalent expression, or NULL if none. */
+
+static Bool isU64 ( IRExpr* e, ULong n )
+{
+ return
+ toBool( e->tag == Iex_Const
+ && e->Iex.Const.con->tag == Ico_U64
+ && e->Iex.Const.con->Ico.U64 == n );
+}
+
+IRExpr* guest_arm64_spechelper ( const HChar* function_name,
+ IRExpr** args,
+ IRStmt** precedingStmts,
+ Int n_precedingStmts )
+{
+# define unop(_op,_a1) IRExpr_Unop((_op),(_a1))
+# define binop(_op,_a1,_a2) IRExpr_Binop((_op),(_a1),(_a2))
+# define mkU64(_n) IRExpr_Const(IRConst_U64(_n))
+# define mkU8(_n) IRExpr_Const(IRConst_U8(_n))
+
+ Int i, arity = 0;
+ for (i = 0; args[i]; i++)
+ arity++;
+//ZZ # if 0
+//ZZ vex_printf("spec request:\n");
+//ZZ vex_printf(" %s ", function_name);
+//ZZ for (i = 0; i < arity; i++) {
+//ZZ vex_printf(" ");
+//ZZ ppIRExpr(args[i]);
+//ZZ }
+//ZZ vex_printf("\n");
+//ZZ # endif
+
+ /* --------- specialising "arm64g_calculate_condition" --------- */
+
+ if (vex_streq(function_name, "arm64g_calculate_condition")) {
+
+ /* specialise calls to the "arm64g_calculate_condition" function.
+ Not sure whether this is strictly necessary, but: the
+ replacement IR must produce only the values 0 or 1. Bits
+ 63:1 are required to be zero. */
+ IRExpr *cond_n_op, *cc_dep1, *cc_dep2 ; //, *cc_ndep;
+ vassert(arity == 4);
+ cond_n_op = args[0]; /* (ARM64Condcode << 4) | ARM64G_CC_OP_* */
+ cc_dep1 = args[1];
+ cc_dep2 = args[2];
+ //cc_ndep = args[3];
+
+ /*---------------- SUB64 ----------------*/
+
+ /* 0, 1 */
+ if (isU64(cond_n_op, (ARM64CondEQ << 4) | ARM64G_CC_OP_SUB64)) {
+ /* EQ after SUB --> test argL == argR */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpEQ64, cc_dep1, cc_dep2));
+ }
+ if (isU64(cond_n_op, (ARM64CondNE << 4) | ARM64G_CC_OP_SUB64)) {
+ /* NE after SUB --> test argL != argR */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpNE64, cc_dep1, cc_dep2));
+ }
+
+ /* 2, 3 */
+ if (isU64(cond_n_op, (ARM64CondCS << 4) | ARM64G_CC_OP_SUB64)) {
+ /* CS after SUB --> test argL >=u argR
+ --> test argR <=u argL */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLE64U, cc_dep2, cc_dep1));
+ }
+ if (isU64(cond_n_op, (ARM64CondCC << 4) | ARM64G_CC_OP_SUB64)) {
+ /* CC after SUB --> test argL <u argR */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLT64U, cc_dep1, cc_dep2));
+ }
+
+ /* 8, 9 */
+ if (isU64(cond_n_op, (ARM64CondLS << 4) | ARM64G_CC_OP_SUB64)) {
+ /* LS after SUB --> test argL <=u argR */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLE64U, cc_dep1, cc_dep2));
+ }
+ if (isU64(cond_n_op, (ARM64CondHI << 4) | ARM64G_CC_OP_SUB64)) {
+ /* HI after SUB --> test argL >u argR
+ --> test argR <u argL */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLT64U, cc_dep2, cc_dep1));
+ }
+
+ /* 10, 11 */
+ if (isU64(cond_n_op, (ARM64CondLT << 4) | ARM64G_CC_OP_SUB64)) {
+ /* LT after SUB --> test argL <s argR */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLT64S, cc_dep1, cc_dep2));
+ }
+ if (isU64(cond_n_op, (ARM64CondGE << 4) | ARM64G_CC_OP_SUB64)) {
+ /* GE after SUB --> test argL >=s argR
+ --> test argR <=s argL */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLE64S, cc_dep2, cc_dep1));
+ }
+
+ /* 12, 13 */
+ if (isU64(cond_n_op, (ARM64CondGT << 4) | ARM64G_CC_OP_SUB64)) {
+ /* GT after SUB --> test argL >s argR
+ --> test argR <s argL */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLT64S, cc_dep2, cc_dep1));
+ }
+ if (isU64(cond_n_op, (ARM64CondLE << 4) | ARM64G_CC_OP_SUB64)) {
+ /* LE after SUB --> test argL <=s argR */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLE64S, cc_dep1, cc_dep2));
+ }
+
+ /*---------------- SUB32 ----------------*/
+
+ /* 0, 1 */
+ if (isU64(cond_n_op, (ARM64CondEQ << 4) | ARM64G_CC_OP_SUB32)) {
+ /* EQ after SUB --> test argL == argR */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpEQ32, unop(Iop_64to32, cc_dep1),
+ unop(Iop_64to32, cc_dep2)));
+ }
+ if (isU64(cond_n_op, (ARM64CondNE << 4) | ARM64G_CC_OP_SUB32)) {
+ /* NE after SUB --> test argL != argR */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpNE32, unop(Iop_64to32, cc_dep1),
+ unop(Iop_64to32, cc_dep2)));
+ }
+
+ /* 2, 3 */
+ if (isU64(cond_n_op, (ARM64CondCS << 4) | ARM64G_CC_OP_SUB32)) {
+ /* CS after SUB --> test argL >=u argR
+ --> test argR <=u argL */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLE32U, unop(Iop_64to32, cc_dep2),
+ unop(Iop_64to32, cc_dep1)));
+ }
+ if (isU64(cond_n_op, (ARM64CondCC << 4) | ARM64G_CC_OP_SUB32)) {
+ /* CC after SUB --> test argL <u argR */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLT32U, unop(Iop_64to32, cc_dep1),
+ unop(Iop_64to32, cc_dep2)));
+ }
+
+ /* 8, 9 */
+ if (isU64(cond_n_op, (ARM64CondLS << 4) | ARM64G_CC_OP_SUB32)) {
+ /* LS after SUB --> test argL <=u argR */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLE32U, unop(Iop_64to32, cc_dep1),
+ unop(Iop_64to32, cc_dep2)));
+ }
+ if (isU64(cond_n_op, (ARM64CondHI << 4) | ARM64G_CC_OP_SUB32)) {
+ /* HI after SUB --> test argL >u argR
+ --> test argR <u argL */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLT32U, unop(Iop_64to32, cc_dep2),
+ unop(Iop_64to32, cc_dep1)));
+ }
+
+ /* 10, 11 */
+ if (isU64(cond_n_op, (ARM64CondLT << 4) | ARM64G_CC_OP_SUB32)) {
+ /* LT after SUB --> test argL <s argR */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLT32S, unop(Iop_64to32, cc_dep1),
+ unop(Iop_64to32, cc_dep2)));
+ }
+ if (isU64(cond_n_op, (ARM64CondGE << 4) | ARM64G_CC_OP_SUB32)) {
+ /* GE after SUB --> test argL >=s argR
+ --> test argR <=s argL */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLE32S, unop(Iop_64to32, cc_dep2),
+ unop(Iop_64to32, cc_dep1)));
+ }
+
+ /* 12, 13 */
+ if (isU64(cond_n_op, (ARM64CondGT << 4) | ARM64G_CC_OP_SUB32)) {
+ /* GT after SUB --> test argL >s argR
+ --> test argR <s argL */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLT32S, unop(Iop_64to32, cc_dep2),
+ unop(Iop_64to32, cc_dep1)));
+ }
+ if (isU64(cond_n_op, (ARM64CondLE << 4) | ARM64G_CC_OP_SUB32)) {
+ /* LE after SUB --> test argL <=s argR */
+ return unop(Iop_1Uto64,
+ binop(Iop_CmpLE32S, unop(Iop_64to32, cc_dep1),
+ unop(Iop_64to32, cc_dep2)));
+ }
+
+//ZZ /*---------------- SBB ----------------*/
+//ZZ
+//ZZ if (isU32(cond_n_op, (ARMCondHS << 4) | ARMG_CC_OP_SBB)) {
+//ZZ /* This seems to happen a lot in softfloat code, eg __divdf3+140 */
+//ZZ /* thunk is: (dep1=argL, dep2=argR, ndep=oldC) */
+//ZZ /* HS after SBB (same as C after SBB below)
+//ZZ --> oldC ? (argL >=u argR) : (argL >u argR)
+//ZZ --> oldC ? (argR <=u argL) : (argR <u argL)
+//ZZ */
+//ZZ return
+//ZZ IRExpr_ITE(
+//ZZ binop(Iop_CmpNE32, cc_ndep, mkU32(0)),
+//ZZ /* case oldC != 0 */
+//ZZ unop(Iop_1Uto32, binop(Iop_CmpLE32U, cc_dep2, cc_dep1)),
+//ZZ /* case oldC == 0 */
+//ZZ unop(Iop_1Uto32, binop(Iop_CmpLT32U, cc_dep2, cc_dep1))
+//ZZ );
+//ZZ }
+//ZZ
+//ZZ /*---------------- LOGIC ----------------*/
+//ZZ
+//ZZ if (isU32(cond_n_op, (ARMCondEQ << 4) | ARMG_CC_OP_LOGIC)) {
+//ZZ /* EQ after LOGIC --> test res == 0 */
+//ZZ return unop(Iop_1Uto32,
+//ZZ binop(Iop_CmpEQ32, cc_dep1, mkU32(0)));
+//ZZ }
+//ZZ if (isU32(cond_n_op, (ARMCondNE << 4) | ARMG_CC_OP_LOGIC)) {
+//ZZ /* NE after LOGIC --> test res != 0 */
+//ZZ return unop(Iop_1Uto32,
+//ZZ binop(Iop_CmpNE32, cc_dep1, mkU32(0)));
+//ZZ }
+//ZZ
+//ZZ if (isU32(cond_n_op, (ARMCondPL << 4) | ARMG_CC_OP_LOGIC)) {
+//ZZ /* PL after LOGIC --> test (res >> 31) == 0 */
+//ZZ return unop(Iop_1Uto32,
+//ZZ binop(Iop_CmpEQ32,
+//ZZ binop(Iop_Shr32, cc_dep1, mkU8(31)),
+//ZZ mkU32(0)));
+//ZZ }
+//ZZ if (isU32(cond_n_op, (ARMCondMI << 4) | ARMG_CC_OP_LOGIC)) {
+//ZZ /* MI after LOGIC --> test (res >> 31) == 1 */
+//ZZ return unop(Iop_1Uto32,
+//ZZ binop(Iop_CmpEQ32,
+//ZZ binop(Iop_Shr32, cc_dep1, mkU8(31)),
+//ZZ mkU32(1)));
+//ZZ }
+
+ /*---------------- COPY ----------------*/
+
+ if (isU64(cond_n_op, (ARM64CondEQ << 4) | ARM64G_CC_OP_COPY)) {
+ /* EQ after COPY --> (cc_dep1 >> ARM64G_CC_SHIFT_Z) & 1 */
+ return binop(Iop_And64,
+ binop(Iop_Shr64, cc_dep1,
+ mkU8(ARM64G_CC_SHIFT_Z)),
+ mkU64(1));
+ }
+ if (isU64(cond_n_op, (ARM64CondNE << 4) | ARM64G_CC_OP_COPY)) {
+ /* NE after COPY --> ((cc_dep1 >> ARM64G_CC_SHIFT_Z) ^ 1) & 1 */
+ return binop(Iop_And64,
+ binop(Iop_Xor64,
+ binop(Iop_Shr64, cc_dep1,
+ mkU8(ARM64G_CC_SHIFT_Z)),
+ mkU64(1)),
+ mkU64(1));
+ }
+
+//ZZ /*----------------- AL -----------------*/
+//ZZ
+//ZZ /* A critically important case for Thumb code.
+//ZZ
+//ZZ What we're trying to spot is the case where cond_n_op is an
+//ZZ expression of the form Or32(..., 0xE0) since that means the
+//ZZ caller is asking for CondAL and we can simply return 1
+//ZZ without caring what the ... part is. This is a potentially
+//ZZ dodgy kludge in that it assumes that the ... part has zeroes
+//ZZ in bits 7:4, so that the result of the Or32 is guaranteed to
+//ZZ be 0xE in bits 7:4. Given that the places where this first
+//ZZ arg are constructed (in guest_arm_toIR.c) are very
+//ZZ constrained, we can get away with this. To make this
+//ZZ guaranteed safe would require to have a new primop, Slice44
+//ZZ or some such, thusly
+//ZZ
+//ZZ Slice44(arg1, arg2) = 0--(24)--0 arg1[7:4] arg2[3:0]
+//ZZ
+//ZZ and we would then look for Slice44(0xE0, ...)
+//ZZ which would give the required safety property.
+//ZZ
+//ZZ It would be infeasibly expensive to scan backwards through
+//ZZ the entire block looking for an assignment to the temp, so
+//ZZ just look at the previous 16 statements. That should find it
+//ZZ if it is an interesting case, as a result of how the
+//ZZ boilerplate guff at the start of each Thumb insn translation
+//ZZ is made.
+//ZZ */
+//ZZ if (cond_n_op->tag == Iex_RdTmp) {
+//ZZ Int j;
+//ZZ IRTemp look_for = cond_n_op->Iex.RdTmp.tmp;
+//ZZ Int limit = n_precedingStmts - 16;
+//ZZ if (limit < 0) limit = 0;
+//ZZ if (0) vex_printf("scanning %d .. %d\n", n_precedingStmts-1, limit);
+//ZZ for (j = n_precedingStmts - 1; j >= limit; j--) {
+//ZZ IRStmt* st = precedingStmts[j];
+//ZZ if (st->tag == Ist_WrTmp
+//ZZ && st->Ist.WrTmp.tmp == look_for
+//ZZ && st->Ist.WrTmp.data->tag == Iex_Binop
+//ZZ && st->Ist.WrTmp.data->Iex.Binop.op == Iop_Or32
+//ZZ && isU32(st->Ist.WrTmp.data->Iex.Binop.arg2, (ARMCondAL << 4)))
+//ZZ return mkU32(1);
+//ZZ }
+//ZZ /* Didn't find any useful binding to the first arg
+//ZZ in the previous 16 stmts. */
+//ZZ }
+ }
+
+//ZZ /* --------- specialising "armg_calculate_flag_c" --------- */
+//ZZ
+//ZZ else
+//ZZ if (vex_streq(function_name, "armg_calculate_flag_c")) {
+//ZZ
+//ZZ /* specialise calls to the "armg_calculate_flag_c" function.
+//ZZ Note that the returned value must be either 0 or 1; nonzero
+//ZZ bits 31:1 are not allowed. In turn, incoming oldV and oldC
+//ZZ values (from the thunk) are assumed to have bits 31:1
+//ZZ clear. */
+//ZZ IRExpr *cc_op, *cc_dep1, *cc_dep2, *cc_ndep;
+//ZZ vassert(arity == 4);
+//ZZ cc_op = args[0]; /* ARMG_CC_OP_* */
+//ZZ cc_dep1 = args[1];
+//ZZ cc_dep2 = args[2];
+//ZZ cc_ndep = args[3];
+//ZZ
+//ZZ if (isU32(cc_op, ARMG_CC_OP_LOGIC)) {
+//ZZ /* Thunk args are (result, shco, oldV) */
+//ZZ /* C after LOGIC --> shco */
+//ZZ return cc_dep2;
+//ZZ }
+//ZZ
+//ZZ if (isU32(cc_op, ARMG_CC_OP_SUB)) {
+//ZZ /* Thunk args are (argL, argR, unused) */
+//ZZ /* C after SUB --> argL >=u argR
+//ZZ --> argR <=u argL */
+//ZZ return unop(Iop_1Uto32,
+//ZZ binop(Iop_CmpLE32U, cc_dep2, cc_dep1));
+//ZZ }
+//ZZ
+//ZZ if (isU32(cc_op, ARMG_CC_OP_SBB)) {
+//ZZ /* This happens occasionally in softfloat code, eg __divdf3+140 */
+//ZZ /* thunk is: (dep1=argL, dep2=argR, ndep=oldC) */
+//ZZ /* C after SBB (same as HS after SBB above)
+//ZZ --> oldC ? (argL >=u argR) : (argL >u argR)
+//ZZ --> oldC ? (argR <=u argL) : (argR <u argL)
+//ZZ */
+//ZZ return
+//ZZ IRExpr_ITE(
+//ZZ binop(Iop_CmpNE32, cc_ndep, mkU32(0)),
+//ZZ /* case oldC != 0 */
+//ZZ unop(Iop_1Uto32, binop(Iop_CmpLE32U, cc_dep2, cc_dep1)),
+//ZZ /* case oldC == 0 */
+//ZZ unop(Iop_1Uto32, binop(Iop_CmpLT32U, cc_dep2, cc_dep1))
+//ZZ );
+//ZZ }
+//ZZ
+//ZZ }
+//ZZ
+//ZZ /* --------- specialising "armg_calculate_flag_v" --------- */
+//ZZ
+//ZZ else
+//ZZ if (vex_streq(function_name, "armg_calculate_flag_v")) {
+//ZZ
+//ZZ /* specialise calls to the "armg_calculate_flag_v" function.
+//ZZ Note that the returned value must be either 0 or 1; nonzero
+//ZZ bits 31:1 are not allowed. In turn, incoming oldV and oldC
+//ZZ values (from the thunk) are assumed to have bits 31:1
+//ZZ clear. */
+//ZZ IRExpr *cc_op, *cc_dep1, *cc_dep2, *cc_ndep;
+//ZZ vassert(arity == 4);
+//ZZ cc_op = args[0]; /* ARMG_CC_OP_* */
+//ZZ cc_dep1 = args[1];
+//ZZ cc_dep2 = args[2];
+//ZZ cc_ndep = args[3];
+//ZZ
+//ZZ if (isU32(cc_op, ARMG_CC_OP_LOGIC)) {
+//ZZ /* Thunk args are (result, shco, oldV) */
+//ZZ /* V after LOGIC --> oldV */
+//ZZ return cc_ndep;
+//ZZ }
+//ZZ
+//ZZ if (isU32(cc_op, ARMG_CC_OP_SUB)) {
+//ZZ /* Thunk args are (argL, argR, unused) */
+//ZZ /* V after SUB
+//ZZ --> let res = argL - argR
+//ZZ in ((argL ^ argR) & (argL ^ res)) >> 31
+//ZZ --> ((argL ^ argR) & (argL ^ (argL - argR))) >> 31
+//ZZ */
+//ZZ IRExpr* argL = cc_dep1;
+//ZZ IRExpr* argR = cc_dep2;
+//ZZ return
+//ZZ binop(Iop_Shr32,
+//ZZ binop(Iop_And32,
+//ZZ binop(Iop_Xor32, argL, argR),
+//ZZ binop(Iop_Xor32, argL, binop(Iop_Sub32, argL, argR))
+//ZZ ),
+//ZZ mkU8(31)
+//ZZ );
+//ZZ }
+//ZZ
+//ZZ if (isU32(cc_op, ARMG_CC_OP_SBB)) {
+//ZZ /* This happens occasionally in softfloat code, eg __divdf3+140 */
+//ZZ /* thunk is: (dep1=argL, dep2=argR, ndep=oldC) */
+//ZZ /* V after SBB
+//ZZ --> let res = argL - argR - (oldC ^ 1)
+//ZZ in (argL ^ argR) & (argL ^ res) & 1
+//ZZ */
+//ZZ return
+//ZZ binop(
+//ZZ Iop_And32,
+//ZZ binop(
+//ZZ Iop_And32,
+//ZZ // argL ^ argR
+//ZZ binop(Iop_Xor32, cc_dep1, cc_dep2),
+//ZZ // argL ^ (argL - argR - (oldC ^ 1))
+//ZZ binop(Iop_Xor32,
+//ZZ cc_dep1,
+//ZZ binop(Iop_Sub32,
+//ZZ binop(Iop_Sub32, cc_dep1, cc_dep2),
+//ZZ binop(Iop_Xor32, cc_ndep, mkU32(1)))
+//ZZ )
+//ZZ ),
+//ZZ mkU32(1)
+//ZZ );
+//ZZ }
+//ZZ
+//ZZ }
+
+# undef unop
+# undef binop
+# undef mkU64
+# undef mkU8
+
+ return NULL;
+}
+
+
+/*----------------------------------------------*/
+/*--- The exported fns .. ---*/
+/*----------------------------------------------*/
+
+//ZZ /* VISIBLE TO LIBVEX CLIENT */
+//ZZ #if 0
+//ZZ void LibVEX_GuestARM_put_flags ( UInt flags_native,
+//ZZ /*OUT*/VexGuestARMState* vex_state )
+//ZZ {
+//ZZ vassert(0); // FIXME
+//ZZ
+//ZZ /* Mask out everything except N Z V C. */
+//ZZ flags_native
+//ZZ &= (ARMG_CC_MASK_N | ARMG_CC_MASK_Z | ARMG_CC_MASK_V | ARMG_CC_MASK_C);
+//ZZ
+//ZZ vex_state->guest_CC_OP = ARMG_CC_OP_COPY;
+//ZZ vex_state->guest_CC_DEP1 = flags_native;
+//ZZ vex_state->guest_CC_DEP2 = 0;
+//ZZ vex_state->guest_CC_NDEP = 0;
+//ZZ }
+//ZZ #endif
+
+/* VISIBLE TO LIBVEX CLIENT */
+ULong LibVEX_GuestARM64_get_nzcv ( /*IN*/const VexGuestARM64State* vex_state )
+{
+ ULong nzcv = 0;
+ // NZCV
+ nzcv |= arm64g_calculate_flags_nzcv(
+ vex_state->guest_CC_OP,
+ vex_state->guest_CC_DEP1,
+ vex_state->guest_CC_DEP2,
+ vex_state->guest_CC_NDEP
+ );
+ vassert(0 == (nzcv & 0xFFFFFFFF0FFFFFFFULL));
+//ZZ // Q
+//ZZ if (vex_state->guest_QFLAG32 > 0)
+//ZZ cpsr |= (1 << 27);
+//ZZ // GE
+//ZZ if (vex_state->guest_GEFLAG0 > 0)
+//ZZ cpsr |= (1 << 16);
+//ZZ if (vex_state->guest_GEFLAG1 > 0)
+//ZZ cpsr |= (1 << 17);
+//ZZ if (vex_state->guest_GEFLAG2 > 0)
+//ZZ cpsr |= (1 << 18);
+//ZZ if (vex_state->guest_GEFLAG3 > 0)
+//ZZ cpsr |= (1 << 19);
+//ZZ // M
+//ZZ cpsr |= (1 << 4); // 0b10000 means user-mode
+//ZZ // J,T J (bit 24) is zero by initialisation above
+//ZZ // T we copy from R15T[0]
+//ZZ if (vex_state->guest_R15T & 1)
+//ZZ cpsr |= (1 << 5);
+//ZZ // ITSTATE we punt on for the time being. Could compute it
+//ZZ // if needed though.
+//ZZ // E, endianness, 0 (littleendian) from initialisation above
+//ZZ // A,I,F disable some async exceptions. Not sure about these.
+//ZZ // Leave as zero for the time being.
+ return nzcv;
+}
+
+/* VISIBLE TO LIBVEX CLIENT */
+void LibVEX_GuestARM64_initialise ( /*OUT*/VexGuestARM64State* vex_state )
+{
+ vex_bzero(vex_state, sizeof(*vex_state));
+//ZZ vex_state->host_EvC_FAILADDR = 0;
+//ZZ vex_state->host_EvC_COUNTER = 0;
+//ZZ
+//ZZ vex_state->guest_R0 = 0;
+//ZZ vex_state->guest_R1 = 0;
+//ZZ vex_state->guest_R2 = 0;
+//ZZ vex_state->guest_R3 = 0;
+//ZZ vex_state->guest_R4 = 0;
+//ZZ vex_state->guest_R5 = 0;
+//ZZ vex_state->guest_R6 = 0;
+//ZZ vex_state->guest_R7 = 0;
+//ZZ vex_state->guest_R8 = 0;
+//ZZ vex_state->guest_R9 = 0;
+//ZZ vex_state->guest_R10 = 0;
+//ZZ vex_state->guest_R11 = 0;
+//ZZ vex_state->guest_R12 = 0;
+//ZZ vex_state->guest_R13 = 0;
+//ZZ vex_state->guest_R14 = 0;
+//ZZ vex_state->guest_R15T = 0; /* NB: implies ARM mode */
+//ZZ
+ vex_state->guest_CC_OP = ARM64G_CC_OP_COPY;
+//ZZ vex_state->guest_CC_DEP1 = 0;
+//ZZ vex_state->guest_CC_DEP2 = 0;
+//ZZ vex_state->guest_CC_NDEP = 0;
+//ZZ vex_state->guest_QFLAG32 = 0;
+//ZZ vex_state->guest_GEFLAG0 = 0;
+//ZZ vex_state->guest_GEFLAG1 = 0;
+//ZZ vex_state->guest_GEFLAG2 = 0;
+//ZZ vex_state->guest_GEFLAG3 = 0;
+//ZZ
+//ZZ vex_state->guest_EMNOTE = EmNote_NONE;
+//ZZ vex_state->guest_TISTART = 0;
+//ZZ vex_state->guest_TILEN = 0;
+//ZZ vex_state->guest_NRADDR = 0;
+//ZZ vex_state->guest_IP_AT_SYSCALL = 0;
+//ZZ
+//ZZ vex_state->guest_D0 = 0;
+//ZZ vex_state->guest_D1 = 0;
+//ZZ vex_state->guest_D2 = 0;
+//ZZ vex_state->guest_D3 = 0;
+//ZZ vex_state->guest_D4 = 0;
+//ZZ vex_state->guest_D5 = 0;
+//ZZ vex_state->guest_D6 = 0;
+//ZZ vex_state->guest_D7 = 0;
+//ZZ vex_state->guest_D8 = 0;
+//ZZ vex_state->guest_D9 = 0;
+//ZZ vex_state->guest_D10 = 0;
+//ZZ vex_state->guest_D11 = 0;
+//ZZ vex_state->guest_D12 = 0;
+//ZZ vex_state->guest_D13 = 0;
+//ZZ vex_state->guest_D14 = 0;
+//ZZ vex_state->guest_D15 = 0;
+//ZZ vex_state->guest_D16 = 0;
+//ZZ vex_state->guest_D17 = 0;
+//ZZ vex_state->guest_D18 = 0;
+//ZZ vex_state->guest_D19 = 0;
+//ZZ vex_state->guest_D20 = 0;
+//ZZ vex_state->guest_D21 = 0;
+//ZZ vex_state->guest_D22 = 0;
+//ZZ vex_state->guest_D23 = 0;
+//ZZ vex_state->guest_D24 = 0;
+//ZZ vex_state->guest_D25 = 0;
+//ZZ vex_state->guest_D26 = 0;
+//ZZ vex_state->guest_D27 = 0;
+//ZZ vex_state->guest_D28 = 0;
+//ZZ vex_state->guest_D29 = 0;
+//ZZ vex_state->guest_D30 = 0;
+//ZZ vex_state->guest_D31 = 0;
+//ZZ
+//ZZ /* ARM encoded; zero is the default as it happens (result flags
+//ZZ (NZCV) cleared, FZ disabled, round to nearest, non-vector mode,
+//ZZ all exns masked, all exn sticky bits cleared). */
+//ZZ vex_state->guest_FPSCR = 0;
+//ZZ
+//ZZ vex_state->guest_TPIDRURO = 0;
+//ZZ
+//ZZ /* Not in a Thumb IT block. */
+//ZZ vex_state->guest_ITSTATE = 0;
+//ZZ
+//ZZ vex_state->padding1 = 0;
+//ZZ vex_state->padding2 = 0;
+//ZZ vex_state->padding3 = 0;
+//ZZ vex_state->padding4 = 0;
+//ZZ vex_state->padding5 = 0;
+}
+
+
+/*-----------------------------------------------------------*/
+/*--- Describing the arm guest state, for the benefit ---*/
+/*--- of iropt and instrumenters. ---*/
+/*-----------------------------------------------------------*/
+
+/* Figure out if any part of the guest state contained in minoff
+ .. maxoff requires precise memory exceptions. If in doubt return
+ True (but this generates significantly slower code).
+
+ We enforce precise exns for guest SP, PC, 29(FP), 30(LR).
+ That might be overkill (for 29 and 30); I don't know.
+*/
+Bool guest_arm64_state_requires_precise_mem_exns ( Int minoff,
+ Int maxoff)
+{
+ Int sp_min = offsetof(VexGuestARM64State, guest_SP);
+ Int sp_max = sp_min + 8 - 1...
[truncated message content] |