You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
1
(1) |
2
|
3
(1) |
|
4
(4) |
5
(5) |
6
(6) |
7
(1) |
8
(1) |
9
(3) |
10
(1) |
|
11
(6) |
12
(1) |
13
|
14
|
15
(1) |
16
(5) |
17
|
|
18
|
19
|
20
(3) |
21
(5) |
22
(1) |
23
(5) |
24
|
|
25
|
26
|
27
|
28
|
29
(3) |
30
|
31
|
|
From: Philippe W. <phi...@sk...> - 2016-12-11 22:11:38
|
On Fri, 2016-12-09 at 20:26 +0100, pa...@fr... wrote: > Hi > > After lurking here for a few years, I think it's time that I > contributed something a bit more concrete. > > At the moment I have two ideas: > > Add C++17 support. I also lurk on the BSI C++ panel. Obviously C++17 is > not done yet. The first changes that I see are the additional alignment > overloads for operator new, see if polymorphic_allocator needs any > support. I haven't been through the changes to threads but I imagine > there may be things there as well. Do you think that this is too > experimental/bleeding edge for Valgrind? No idea if C++17 is to be considered experimental or not. However, note that there are still some work to do for previous versions of C++. See bugs Bug 373069 - memcheck/tests/leak_cpp_interior fails with GCC 5.1+ Bug 372347 - Replacement problem of the additional c++14/c++17 new and delete operators > > Update FreeBSD support. Currently FreeBSD has a version of Valgrind > 10.1 available. Initially I'd just like to get it to build and > function. After that I'm sure that there are lots of other things like > missing syscalls. I've started looking at merging the existing code > (the bitbucket FreeBSD repo and Valgrind head), and it looks like a > fairly major task, if nothing else there are many manual merges where > Solaris and TileGX have been added. Yes, this is not a minor task. You might discuss this at the FOSDEM 17 Valgrind devroom and see if there is (some) enthusiasm for merging FreeBSD upstream. Philippe |
|
From: <sv...@va...> - 2016-12-11 21:39:35
|
Author: philippe
Date: Sun Dec 11 21:39:23 2016
New Revision: 16186
Log:
Fix 342040 Valgrind mishandles clone with CLONE_VFORK | CLONE_VM that clones to a different stack
Fix 373192 Calling posix_spawn in glibc 2.24 completely broken
Functionally, this patch just does the following 2 changes to the
fork clone handling:
* It does not mask anymore CLONE_VFORK :
The only effect of this flag is to suspend the parent, waiting for
the child to either exit or execve.
If some applications depends on this synchronisation, better keep it,
as it will not harm to suspend the parent valgrind waiting for the
child valgrind to exit or execve.
* In case the guest calls the clone syscall providing a non zero client stack,
set the child guest SP after the syscall, before executing guest instructions.
Not setting the guest stack ptr was the source of the problem reported
in the bugs.
This also adds a test case none/tests/linux/clonev.
Before this patch, test gives a SEGV, which is fixed by the patch.
The patch is however a lot bigger : this fix was touching some (mostly
identical/duplicated) code in all the linux platforms.
So, the clone/fork code has been factorised as much as possible.
This removes about 1700 lines of code.
This has been tested on:
* amd64
* x86
* ppc64 be and le
* ppc32
* arm64
This has been compiled on but *not really tested* on:
* mips64 (not too clear how to properly build and run valgrind on gcc22)
It has *not* been compiled and *not* tested on:
* arm
* mips32
* tilegx
* darwin (normally, no impact)
* solaris (normally, no impact)
The changes are relatively mechanical, so it is not impossible that
it will compile and work out of the box on these platforms.
Otherwise, questions welcome.
A few points of interest:
* Some platforms did have a typedef void vki_modify_ldt_t,
and some platforms had no definition for this type at all.
To make it easier to factorise, for such platforms, the following has
been used:
typedef char vki_modify_ldt_t;
When the sizeof vki_modify_ldt_t is > 1, then the arg syscall is checked.
This is somewhat a hack, but was simplifying the factorisation.
* for mips32/mips64 and tilegx, there is a strange unconditional assignment
of 0 to a register (guest_r2 on mips, guest_r0 on tilegx).
Unclear what this is, in particular because this is assigned whatever
the result of the syscall (success or not).
Added:
trunk/none/tests/linux/clonev.c
trunk/none/tests/linux/clonev.stderr.exp
trunk/none/tests/linux/clonev.stdout.exp
trunk/none/tests/linux/clonev.vgtest
Modified:
trunk/NEWS
trunk/coregrind/m_syswrap/priv_syswrap-linux.h
trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
trunk/coregrind/m_syswrap/syswrap-arm-linux.c
trunk/coregrind/m_syswrap/syswrap-arm64-linux.c
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/coregrind/m_syswrap/syswrap-mips32-linux.c
trunk/coregrind/m_syswrap/syswrap-mips64-linux.c
trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c
trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
trunk/coregrind/m_syswrap/syswrap-s390x-linux.c
trunk/coregrind/m_syswrap/syswrap-tilegx-linux.c
trunk/coregrind/m_syswrap/syswrap-x86-linux.c
trunk/include/vki/vki-arm64-linux.h
trunk/include/vki/vki-mips32-linux.h
trunk/include/vki/vki-mips64-linux.h
trunk/include/vki/vki-ppc32-linux.h
trunk/include/vki/vki-ppc64-linux.h
trunk/include/vki/vki-s390x-linux.h
trunk/none/tests/linux/Makefile.am
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Sun Dec 11 21:39:23 2016
@@ -28,7 +28,12 @@
* ================== PLATFORM CHANGES =================
- Support for demangling Rust symbols (n-i-bz)
+ - Support for demangling Rust symbols (n-i-bz)
+
+ - On linux, clone handling was improved to honour the CLONE_VFORK flag
+ and setting a child stack. Note however that CLONE_VFORK | CLONE_VM
+ is handled like CLONE_VFORK (so removing CLONE_VM flag).
+ Applications that depends on CLONE_VM exact semantic will (still) not work.
* ==================== TOOL CHANGES ====================
@@ -71,6 +76,8 @@
https://bugs.kde.org/show_bug.cgi?id=XXXXXX
where XXXXXX is the bug number as listed below.
+342040 Valgrind mishandles clone with CLONE_VFORK | CLONE_VM that clones
+ to a different stack.
348616 Wine/valgrind: noted but unhandled ioctl 0x5390 [..] (DVD_READ_STRUCT)
352395 Please provide SVN revision info in --version -v
352767 Wine/valgrind: noted but unhandled ioctl 0x5307 [..] (CDROMSTOP)
@@ -83,6 +90,7 @@
372504 Hanging on exit_group
372600 process loops forever when fatal signals are arriving quickly
373046 Stacks registered by core are never deregistered
+373192 Calling posix_spawn in glibc 2.24 completely broken
Release 3.12.0 (20 October 2016)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Modified: trunk/coregrind/m_syswrap/priv_syswrap-linux.h
==============================================================================
--- trunk/coregrind/m_syswrap/priv_syswrap-linux.h (original)
+++ trunk/coregrind/m_syswrap/priv_syswrap-linux.h Sun Dec 11 21:39:23 2016
@@ -39,12 +39,10 @@
extern Addr ML_(allocstack) ( ThreadId tid );
extern void ML_(call_on_new_stack_0_1) ( Addr stack, Addr retaddr,
void (*f)(Word), Word arg1 );
-extern SysRes ML_(do_fork_clone) ( ThreadId tid, UInt flags,
- Int* parent_tidptr, Int* child_tidptr );
-
// Linux-specific (but non-arch-specific) syscalls
+DECL_TEMPLATE(linux, sys_clone)
DECL_TEMPLATE(linux, sys_mount);
DECL_TEMPLATE(linux, sys_oldumount);
DECL_TEMPLATE(linux, sys_umount);
@@ -61,6 +59,10 @@
DECL_TEMPLATE(linux, sys_readahead);
DECL_TEMPLATE(linux, sys_move_pages);
+// clone is similar enough between linux variants to have a generic
+// version, but which will call an extern defined in syswrap-<platform>-linux.c
+DECL_TEMPLATE(linux, sys_clone);
+
// POSIX, but various sub-cases differ between Linux and Darwin.
DECL_TEMPLATE(linux, sys_fcntl);
DECL_TEMPLATE(linux, sys_fcntl64);
@@ -368,7 +370,83 @@
DECL_TEMPLATE(linux, sys_socketpair);
DECL_TEMPLATE(linux, sys_kcmp);
-#endif // __PRIV_SYSWRAP_LINUX_H
+// Some arch specific functions called from syswrap-linux.c
+extern Int do_syscall_clone_x86_linux ( Word (*fn)(void *),
+ void* stack,
+ Int flags,
+ void* arg,
+ Int* child_tid,
+ Int* parent_tid,
+ void* tls_ptr);
+extern SysRes ML_(x86_sys_set_thread_area) ( ThreadId tid,
+ vki_modify_ldt_t* info );
+extern void ML_(x86_setup_LDT_GDT) ( /*OUT*/ ThreadArchState *child,
+ /*IN*/ ThreadArchState *parent );
+
+extern Long do_syscall_clone_amd64_linux ( Word (*fn)(void *),
+ void* stack,
+ Long flags,
+ void* arg,
+ Int* child_tid,
+ Int* parent_tid,
+ void* tls_ptr);
+extern ULong do_syscall_clone_ppc32_linux ( Word (*fn)(void *),
+ void* stack,
+ Int flags,
+ void* arg,
+ Int* child_tid,
+ Int* parent_tid,
+ void* tls_ptr);
+extern ULong do_syscall_clone_ppc64_linux ( Word (*fn)(void *),
+ void* stack,
+ Int flags,
+ void* arg,
+ Int* child_tid,
+ Int* parent_tid,
+ void* tls_ptr );
+extern ULong do_syscall_clone_s390x_linux ( void *stack,
+ ULong flags,
+ Int *parent_tid,
+ Int *child_tid,
+ void* tls_ptr,
+ Word (*fn)(void *),
+ void *arg);
+extern Long do_syscall_clone_arm64_linux ( Word (*fn)(void *),
+ void* stack,
+ Long flags,
+ void* arg,
+ Int* child_tid,
+ Int* parent_tid,
+ void* tls_ptr );
+extern ULong do_syscall_clone_arm_linux ( Word (*fn)(void *),
+ void* stack,
+ Int flags,
+ void* arg,
+ Int* child_tid,
+ Int* parent_tid,
+ void* tls_ptr );
+extern ULong do_syscall_clone_mips64_linux ( Word (*fn) (void *), /* a0 - 4 */
+ void* stack, /* a1 - 5 */
+ Int flags, /* a2 - 6 */
+ void* arg, /* a3 - 7 */
+ Int* parent_tid, /* a4 - 8 */
+ void* tls_ptr, /* a5 - 9 */
+ Int* child_tid ); /* a6 - 10 */
+extern UInt do_syscall_clone_mips_linux ( Word (*fn) (void *), //a0 0 32
+ void* stack, //a1 4 36
+ Int flags, //a2 8 40
+ void* arg, //a3 12 44
+ Int* child_tid, //stack 16 48
+ Int* parent_tid, //stack 20 52
+ void* tls_ptr); //stack 24 56
+extern Long do_syscall_clone_tilegx_linux ( Word (*fn) (void *), //r0
+ void* stack, //r1
+ Long flags, //r2
+ void* arg, //r3
+ Long* child_tid, //r4
+ Long* parent_tid, //r5
+ void* tls_ptr ); //r6
+ #endif // __PRIV_SYSWRAP_LINUX_H
/*--------------------------------------------------------------------*/
/*--- end ---*/
Modified: trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-amd64-linux.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-amd64-linux.c Sun Dec 11 21:39:23 2016
@@ -130,14 +130,7 @@
#define __NR_CLONE VG_STRINGIFY(__NR_clone)
#define __NR_EXIT VG_STRINGIFY(__NR_exit)
-extern
-Long do_syscall_clone_amd64_linux ( Word (*fn)(void *),
- void* stack,
- Long flags,
- void* arg,
- Long* child_tid,
- Long* parent_tid,
- vki_modify_ldt_t * );
+// See priv_syswrap-linux.h for arg profile.
asm(
".text\n"
".globl do_syscall_clone_amd64_linux\n"
@@ -183,126 +176,6 @@
#undef __NR_EXIT
-// forward declaration
-static void setup_child ( ThreadArchState*, ThreadArchState* );
-
-/*
- When a client clones, we need to keep track of the new thread. This means:
- 1. allocate a ThreadId+ThreadState+stack for the thread
-
- 2. initialize the thread's new VCPU state
-
- 3. create the thread using the same args as the client requested,
- but using the scheduler entrypoint for EIP, and a separate stack
- for ESP.
- */
-static SysRes do_clone ( ThreadId ptid,
- ULong flags, Addr rsp,
- Long* parent_tidptr,
- Long* child_tidptr,
- Addr tlsaddr )
-{
- static const Bool debug = False;
-
- ThreadId ctid = VG_(alloc_ThreadState)();
- ThreadState* ptst = VG_(get_ThreadState)(ptid);
- ThreadState* ctst = VG_(get_ThreadState)(ctid);
- UWord* stack;
- SysRes res;
- Long rax;
- vki_sigset_t blockall, savedmask;
-
- VG_(sigfillset)(&blockall);
-
- vg_assert(VG_(is_running_thread)(ptid));
- vg_assert(VG_(is_valid_tid)(ctid));
-
- stack = (UWord*)ML_(allocstack)(ctid);
- if (stack == NULL) {
- res = VG_(mk_SysRes_Error)( VKI_ENOMEM );
- goto out;
- }
-
- /* Copy register state
-
- Both parent and child return to the same place, and the code
- following the clone syscall works out which is which, so we
- don't need to worry about it.
-
- The parent gets the child's new tid returned from clone, but the
- child gets 0.
-
- If the clone call specifies a NULL rsp for the new thread, then
- it actually gets a copy of the parent's rsp.
- */
- setup_child( &ctst->arch, &ptst->arch );
-
- /* Make sys_clone appear to have returned Success(0) in the
- child. */
- ctst->arch.vex.guest_RAX = 0;
-
- if (rsp != 0)
- ctst->arch.vex.guest_RSP = rsp;
-
- ctst->os_state.parent = ptid;
-
- /* inherit signal mask */
- ctst->sig_mask = ptst->sig_mask;
- ctst->tmp_sig_mask = ptst->sig_mask;
-
- /* Start the child with its threadgroup being the same as the
- parent's. This is so that any exit_group calls that happen
- after the child is created but before it sets its
- os_state.threadgroup field for real (in thread_wrapper in
- syswrap-linux.c), really kill the new thread. a.k.a this avoids
- a race condition in which the thread is unkillable (via
- exit_group) because its threadgroup is not set. The race window
- is probably only a few hundred or a few thousand cycles long.
- See #226116. */
- ctst->os_state.threadgroup = ptst->os_state.threadgroup;
-
- ML_(guess_and_register_stack) (rsp, ctst);
-
- /* Assume the clone will succeed, and tell any tool that wants to
- know that this thread has come into existence. If the clone
- fails, we'll send out a ll_exit notification for it at the out:
- label below, to clean up. */
- vg_assert(VG_(owns_BigLock_LL)(ptid));
- VG_TRACK ( pre_thread_ll_create, ptid, ctid );
-
- if (flags & VKI_CLONE_SETTLS) {
- if (debug)
- VG_(printf)("clone child has SETTLS: tls at %#lx\n", tlsaddr);
- ctst->arch.vex.guest_FS_CONST = tlsaddr;
- }
-
- flags &= ~VKI_CLONE_SETTLS;
-
- /* start the thread with everything blocked */
- VG_(sigprocmask)(VKI_SIG_SETMASK, &blockall, &savedmask);
-
- /* Create the new thread */
- rax = do_syscall_clone_amd64_linux(
- ML_(start_thread_NORETURN), stack, flags, &VG_(threads)[ctid],
- child_tidptr, parent_tidptr, NULL
- );
- res = VG_(mk_SysRes_amd64_linux)( rax );
-
- VG_(sigprocmask)(VKI_SIG_SETMASK, &savedmask, NULL);
-
- out:
- if (sr_isError(res)) {
- /* clone failed */
- VG_(cleanup_thread)(&ctst->arch);
- ctst->status = VgTs_Empty;
- /* oops. Better tell the tool the thread exited in a hurry :-) */
- VG_TRACK( pre_thread_ll_exit, ctid );
- }
-
- return res;
-}
-
-
/* ---------------------------------------------------------------------
More thread stuff
------------------------------------------------------------------ */
@@ -311,16 +184,6 @@
{
}
-void setup_child ( /*OUT*/ ThreadArchState *child,
- /*IN*/ ThreadArchState *parent )
-{
- /* We inherit our parent's guest state. */
- child->vex = parent->vex;
- child->vex_shadow1 = parent->vex_shadow1;
- child->vex_shadow2 = parent->vex_shadow2;
-}
-
-
/* ---------------------------------------------------------------------
PRE/POST wrappers for AMD64/Linux-specific syscalls
------------------------------------------------------------------ */
@@ -333,7 +196,6 @@
the right thing to do is to make these wrappers 'static' since they
aren't visible outside this file, but that requires even more macro
magic. */
-DECL_TEMPLATE(amd64_linux, sys_clone);
DECL_TEMPLATE(amd64_linux, sys_rt_sigreturn);
DECL_TEMPLATE(amd64_linux, sys_arch_prctl);
DECL_TEMPLATE(amd64_linux, sys_ptrace);
@@ -342,108 +204,6 @@
DECL_TEMPLATE(amd64_linux, sys_syscall184);
-PRE(sys_clone)
-{
- ULong cloneflags;
-
- PRINT("sys_clone ( %lx, %#lx, %#lx, %#lx, %#lx )",ARG1,ARG2,ARG3,ARG4,ARG5);
- PRE_REG_READ2(int, "clone",
- unsigned long, flags,
- void *, child_stack);
-
- if (ARG1 & VKI_CLONE_PARENT_SETTID) {
- if (VG_(tdict).track_pre_reg_read) {
- PRA3("clone", int *, parent_tidptr);
- }
- PRE_MEM_WRITE("clone(parent_tidptr)", ARG3, sizeof(Int));
- if (!VG_(am_is_valid_for_client)(ARG3, sizeof(Int), VKI_PROT_WRITE)) {
- SET_STATUS_Failure( VKI_EFAULT );
- return;
- }
- }
- if (ARG1 & VKI_CLONE_SETTLS) {
- if (VG_(tdict).track_pre_reg_read) {
- PRA4("clone", vki_modify_ldt_t *, tlsinfo);
- }
- PRE_MEM_READ("clone(tlsinfo)", ARG4, sizeof(vki_modify_ldt_t));
- if (!VG_(am_is_valid_for_client)(ARG4, sizeof(vki_modify_ldt_t),
- VKI_PROT_READ)) {
- SET_STATUS_Failure( VKI_EFAULT );
- return;
- }
- }
- if (ARG1 & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID)) {
- if (VG_(tdict).track_pre_reg_read) {
- PRA5("clone", int *, child_tidptr);
- }
- PRE_MEM_WRITE("clone(child_tidptr)", ARG4, sizeof(Int));
- if (!VG_(am_is_valid_for_client)(ARG4, sizeof(Int), VKI_PROT_WRITE)) {
- SET_STATUS_Failure( VKI_EFAULT );
- return;
- }
- }
-
- cloneflags = ARG1;
-
- if (!ML_(client_signal_OK)(ARG1 & VKI_CSIGNAL)) {
- SET_STATUS_Failure( VKI_EINVAL );
- return;
- }
-
- /* Only look at the flags we really care about */
- switch (cloneflags & (VKI_CLONE_VM | VKI_CLONE_FS
- | VKI_CLONE_FILES | VKI_CLONE_VFORK)) {
- case VKI_CLONE_VM | VKI_CLONE_FS | VKI_CLONE_FILES:
- /* thread creation */
- SET_STATUS_from_SysRes(
- do_clone(tid,
- ARG1, /* flags */
- (Addr)ARG2, /* child ESP */
- (Long *)ARG3, /* parent_tidptr */
- (Long *)ARG4, /* child_tidptr */
- (Addr)ARG5)); /* set_tls */
- break;
-
- case VKI_CLONE_VFORK | VKI_CLONE_VM: /* vfork */
- /* FALLTHROUGH - assume vfork == fork */
- cloneflags &= ~(VKI_CLONE_VFORK | VKI_CLONE_VM);
-
- case 0: /* plain fork */
- SET_STATUS_from_SysRes(
- ML_(do_fork_clone)(tid,
- cloneflags, /* flags */
- (Int *)ARG3, /* parent_tidptr */
- (Int *)ARG4)); /* child_tidptr */
- break;
-
- default:
- /* should we just ENOSYS? */
- VG_(message)(Vg_UserMsg,
- "Unsupported clone() flags: 0x%lx\n", ARG1);
- VG_(message)(Vg_UserMsg,
- "\n");
- VG_(message)(Vg_UserMsg,
- "The only supported clone() uses are:\n");
- VG_(message)(Vg_UserMsg,
- " - via a threads library (LinuxThreads or NPTL)\n");
- VG_(message)(Vg_UserMsg,
- " - via the implementation of fork or vfork\n");
- VG_(unimplemented)
- ("Valgrind does not support general clone().");
- }
-
- if (SUCCESS) {
- if (ARG1 & VKI_CLONE_PARENT_SETTID)
- POST_MEM_WRITE(ARG3, sizeof(Int));
- if (ARG1 & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID))
- POST_MEM_WRITE(ARG4, sizeof(Int));
-
- /* Thread creation was successful; let the child have the chance
- to run */
- *flags |= SfYieldAfter;
- }
-}
-
PRE(sys_rt_sigreturn)
{
/* This isn't really a syscall at all - it's a misuse of the
@@ -761,7 +521,7 @@
LINX_(__NR_setsockopt, sys_setsockopt), // 54
LINXY(__NR_getsockopt, sys_getsockopt), // 55
- PLAX_(__NR_clone, sys_clone), // 56
+ LINX_(__NR_clone, sys_clone), // 56
GENX_(__NR_fork, sys_fork), // 57
GENX_(__NR_vfork, sys_fork), // 58 treat as fork
GENX_(__NR_execve, sys_execve), // 59
Modified: trunk/coregrind/m_syswrap/syswrap-arm-linux.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-arm-linux.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-arm-linux.c Sun Dec 11 21:39:23 2016
@@ -102,14 +102,7 @@
#define __NR_CLONE VG_STRINGIFY(__NR_clone)
#define __NR_EXIT VG_STRINGIFY(__NR_exit)
-extern
-ULong do_syscall_clone_arm_linux ( Word (*fn)(void *),
- void* stack,
- Int flags,
- void* arg,
- Int* child_tid,
- Int* parent_tid,
- void* tls );
+// See priv_syswrap-linux.h for arg profile.
asm(
".text\n"
".globl do_syscall_clone_arm_linux\n"
@@ -148,104 +141,8 @@
#undef __NR_EXIT
// forward declarations
-static void setup_child ( ThreadArchState*, ThreadArchState* );
-static void assign_guest_tls(ThreadId ctid, Addr tlsptr);
static SysRes sys_set_tls ( ThreadId tid, Addr tlsptr );
-/*
- When a client clones, we need to keep track of the new thread. This means:
- 1. allocate a ThreadId+ThreadState+stack for the thread
-
- 2. initialize the thread's new VCPU state
-
- 3. create the thread using the same args as the client requested,
- but using the scheduler entrypoint for IP, and a separate stack
- for SP.
- */
-static SysRes do_clone ( ThreadId ptid,
- UInt flags, Addr sp,
- Int *parent_tidptr,
- Int *child_tidptr,
- Addr child_tls)
-{
- ThreadId ctid = VG_(alloc_ThreadState)();
- ThreadState* ptst = VG_(get_ThreadState)(ptid);
- ThreadState* ctst = VG_(get_ThreadState)(ctid);
- UInt r0;
- UWord *stack;
- SysRes res;
- vki_sigset_t blockall, savedmask;
-
- VG_(sigfillset)(&blockall);
-
- vg_assert(VG_(is_running_thread)(ptid));
- vg_assert(VG_(is_valid_tid)(ctid));
-
- stack = (UWord*)ML_(allocstack)(ctid);
-
- if(stack == NULL) {
- res = VG_(mk_SysRes_Error)( VKI_ENOMEM );
- goto out;
- }
-
- setup_child( &ctst->arch, &ptst->arch );
-
- ctst->arch.vex.guest_R0 = 0;
- if(sp != 0)
- ctst->arch.vex.guest_R13 = sp;
-
- ctst->os_state.parent = ptid;
-
- ctst->sig_mask = ptst->sig_mask;
- ctst->tmp_sig_mask = ptst->sig_mask;
-
- /* Start the child with its threadgroup being the same as the
- parent's. This is so that any exit_group calls that happen
- after the child is created but before it sets its
- os_state.threadgroup field for real (in thread_wrapper in
- syswrap-linux.c), really kill the new thread. a.k.a this avoids
- a race condition in which the thread is unkillable (via
- exit_group) because its threadgroup is not set. The race window
- is probably only a few hundred or a few thousand cycles long.
- See #226116. */
- ctst->os_state.threadgroup = ptst->os_state.threadgroup;
-
- ML_(guess_and_register_stack) (sp, ctst);
-
- vg_assert(VG_(owns_BigLock_LL)(ptid));
- VG_TRACK ( pre_thread_ll_create, ptid, ctid );
-
- if (flags & VKI_CLONE_SETTLS) {
- /* Just assign the tls pointer in the guest TPIDRURO. */
- assign_guest_tls(ctid, child_tls);
- }
-
- flags &= ~VKI_CLONE_SETTLS;
-
- VG_(sigprocmask)(VKI_SIG_SETMASK, &blockall, &savedmask);
-
- r0 = do_syscall_clone_arm_linux(
- ML_(start_thread_NORETURN), stack, flags, &VG_(threads)[ctid],
- child_tidptr, parent_tidptr, NULL
- );
- //VG_(printf)("AFTER SYSCALL, %x and %x CHILD: %d PARENT: %d\n",child_tidptr, parent_tidptr,*child_tidptr,*parent_tidptr);
-
- res = VG_(mk_SysRes_arm_linux)( r0 );
-
- VG_(sigprocmask)(VKI_SIG_SETMASK, &savedmask, NULL);
-
-out:
- if (sr_isError(res)) {
- VG_(cleanup_thread)(&ctst->arch);
- ctst->status = VgTs_Empty;
- VG_TRACK( pre_thread_ll_exit, ctid );
- }
-
- return res;
-}
-
-
-
/* ---------------------------------------------------------------------
More thread stuff
------------------------------------------------------------------ */
@@ -256,26 +153,13 @@
{
}
-void setup_child ( /*OUT*/ ThreadArchState *child,
- /*IN*/ ThreadArchState *parent )
-{
- child->vex = parent->vex;
- child->vex_shadow1 = parent->vex_shadow1;
- child->vex_shadow2 = parent->vex_shadow2;
-}
-
-static void assign_guest_tls(ThreadId tid, Addr tlsptr)
-{
- VG_(threads)[tid].arch.vex.guest_TPIDRURO = tlsptr;
-}
-
/* Assigns tlsptr to the guest TPIDRURO.
If needed for the specific hardware, really executes
the set_tls syscall.
*/
static SysRes sys_set_tls ( ThreadId tid, Addr tlsptr )
{
- assign_guest_tls(tid, tlsptr);
+ VG_(threads)[tid].arch.vex.guest_TPIDRURO = tlsptr;
if (KernelVariantiS(KernelVariant_android_no_hw_tls,
VG_(clo_kernel_variant))) {
@@ -333,7 +217,6 @@
DECL_TEMPLATE(arm_linux, sys_lstat64);
DECL_TEMPLATE(arm_linux, sys_fstatat64);
DECL_TEMPLATE(arm_linux, sys_fstat64);
-DECL_TEMPLATE(arm_linux, sys_clone);
DECL_TEMPLATE(arm_linux, sys_sigreturn);
DECL_TEMPLATE(arm_linux, sys_rt_sigreturn);
DECL_TEMPLATE(arm_linux, sys_sigsuspend);
@@ -424,100 +307,6 @@
POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
}
-PRE(sys_clone)
-{
- UInt cloneflags;
-
- PRINT("sys_clone ( %lx, %#lx, %#lx, %#lx, %#lx )",ARG1,ARG2,ARG3,ARG4,ARG5);
- PRE_REG_READ5(int, "clone",
- unsigned long, flags,
- void *, child_stack,
- int *, parent_tidptr,
- void *, child_tls,
- int *, child_tidptr);
-
- if (ARG1 & VKI_CLONE_PARENT_SETTID) {
- PRE_MEM_WRITE("clone(parent_tidptr)", ARG3, sizeof(Int));
- if (!VG_(am_is_valid_for_client)(ARG3, sizeof(Int),
- VKI_PROT_WRITE)) {
- SET_STATUS_Failure( VKI_EFAULT );
- return;
- }
- }
- if (ARG1 & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID)) {
- PRE_MEM_WRITE("clone(child_tidptr)", ARG5, sizeof(Int));
- if (!VG_(am_is_valid_for_client)(ARG5, sizeof(Int),
- VKI_PROT_WRITE)) {
- SET_STATUS_Failure( VKI_EFAULT );
- return;
- }
- }
- if (ARG1 & VKI_CLONE_SETTLS) {
- PRE_MEM_READ("clone(tls_user_desc)", ARG4, sizeof(vki_modify_ldt_t));
- if (!VG_(am_is_valid_for_client)(ARG4, sizeof(vki_modify_ldt_t),
- VKI_PROT_READ)) {
- SET_STATUS_Failure( VKI_EFAULT );
- return;
- }
- }
-
- cloneflags = ARG1;
-
- if (!ML_(client_signal_OK)(ARG1 & VKI_CSIGNAL)) {
- SET_STATUS_Failure( VKI_EINVAL );
- return;
- }
-
- /* Only look at the flags we really care about */
- switch (cloneflags & (VKI_CLONE_VM | VKI_CLONE_FS
- | VKI_CLONE_FILES | VKI_CLONE_VFORK)) {
- case VKI_CLONE_VM | VKI_CLONE_FS | VKI_CLONE_FILES:
- /* thread creation */
- SET_STATUS_from_SysRes(
- do_clone(tid,
- ARG1, /* flags */
- (Addr)ARG2, /* child ESP */
- (Int *)ARG3, /* parent_tidptr */
- (Int *)ARG5, /* child_tidptr */
- (Addr)ARG4)); /* set_tls */
- break;
-
- case VKI_CLONE_VFORK | VKI_CLONE_VM: /* vfork */
- /* FALLTHROUGH - assume vfork == fork */
- cloneflags &= ~(VKI_CLONE_VFORK | VKI_CLONE_VM);
-
- case 0: /* plain fork */
- SET_STATUS_from_SysRes(
- ML_(do_fork_clone)(tid,
- cloneflags, /* flags */
- (Int *)ARG3, /* parent_tidptr */
- (Int *)ARG5)); /* child_tidptr */
- break;
-
- default:
- /* should we just ENOSYS? */
- VG_(message)(Vg_UserMsg, "Unsupported clone() flags: 0x%lx\n", ARG1);
- VG_(message)(Vg_UserMsg, "\n");
- VG_(message)(Vg_UserMsg, "The only supported clone() uses are:\n");
- VG_(message)(Vg_UserMsg, " - via a threads library (LinuxThreads or NPTL)\n");
- VG_(message)(Vg_UserMsg, " - via the implementation of fork or vfork\n");
- VG_(message)(Vg_UserMsg, " - for the Quadrics Elan3 user-space driver\n");
- VG_(unimplemented)
- ("Valgrind does not support general clone().");
- }
-
- if (SUCCESS) {
- if (ARG1 & VKI_CLONE_PARENT_SETTID)
- POST_MEM_WRITE(ARG3, sizeof(Int));
- if (ARG1 & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID))
- POST_MEM_WRITE(ARG5, sizeof(Int));
-
- /* Thread creation was successful; let the child have the chance
- to run */
- *flags |= SfYieldAfter;
- }
-}
-
PRE(sys_sigreturn)
{
/* See comments on PRE(sys_rt_sigreturn) in syswrap-amd64-linux.c for
@@ -901,7 +690,7 @@
GENX_(__NR_fsync, sys_fsync), // 118
PLAX_(__NR_sigreturn, sys_sigreturn), // 119 ?/Linux
- PLAX_(__NR_clone, sys_clone), // 120
+ LINX_(__NR_clone, sys_clone), // 120
//zz // (__NR_setdomainname, sys_setdomainname), // 121 */*(?)
GENXY(__NR_uname, sys_newuname), // 122
// PLAX_(__NR_modify_ldt, sys_modify_ldt), // 123
Modified: trunk/coregrind/m_syswrap/syswrap-arm64-linux.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-arm64-linux.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-arm64-linux.c Sun Dec 11 21:39:23 2016
@@ -138,14 +138,7 @@
#define __NR_CLONE VG_STRINGIFY(__NR_clone)
#define __NR_EXIT VG_STRINGIFY(__NR_exit)
-extern
-Long do_syscall_clone_arm64_linux ( Word (*fn)(void *),
- void* child_stack,
- Long flags,
- void* arg,
- Int* child_tid,
- Int* parent_tid,
- void* tls );
+// See priv_syswrap-linux.h for arg profile.
asm(
".text\n"
".globl do_syscall_clone_arm64_linux\n"
@@ -196,121 +189,6 @@
static void assign_guest_tls(ThreadId ctid, Addr tlsptr);
//ZZ static SysRes sys_set_tls ( ThreadId tid, Addr tlsptr );
-/*
- When a client clones, we need to keep track of the new thread. This means:
- 1. allocate a ThreadId+ThreadState+stack for the thread
-
- 2. initialize the thread's new VCPU state
-
- 3. create the thread using the same args as the client requested,
- but using the scheduler entrypoint for IP, and a separate stack
- for SP.
- */
-static SysRes do_clone ( ThreadId ptid,
- ULong flags,
- Addr child_xsp,
- Int* parent_tidptr,
- Int* child_tidptr,
- Addr child_tls )
-{
- ThreadId ctid = VG_(alloc_ThreadState)();
- ThreadState* ptst = VG_(get_ThreadState)(ptid);
- ThreadState* ctst = VG_(get_ThreadState)(ctid);
- UWord* stack;
- SysRes res;
- ULong x0;
- vki_sigset_t blockall, savedmask;
-
- VG_(sigfillset)(&blockall);
-
- vg_assert(VG_(is_running_thread)(ptid));
- vg_assert(VG_(is_valid_tid)(ctid));
-
- stack = (UWord*)ML_(allocstack)(ctid);
- if (stack == NULL) {
- res = VG_(mk_SysRes_Error)( VKI_ENOMEM );
- goto out;
- }
-
- /* Copy register state
-
- Both parent and child return to the same place, and the code
- following the clone syscall works out which is which, so we
- don't need to worry about it.
-
- The parent gets the child's new tid returned from clone, but the
- child gets 0.
-
- If the clone call specifies a NULL xsp for the new thread, then
- it actually gets a copy of the parent's xsp.
- */
- setup_child( &ctst->arch, &ptst->arch );
-
- /* Make sys_clone appear to have returned Success(0) in the
- child. */
- ctst->arch.vex.guest_X0 = 0;
-
- if (child_xsp != 0)
- ctst->arch.vex.guest_XSP = child_xsp;
-
- ctst->os_state.parent = ptid;
-
- /* inherit signal mask */
- ctst->sig_mask = ptst->sig_mask;
- ctst->tmp_sig_mask = ptst->sig_mask;
-
- /* Start the child with its threadgroup being the same as the
- parent's. This is so that any exit_group calls that happen
- after the child is created but before it sets its
- os_state.threadgroup field for real (in thread_wrapper in
- syswrap-linux.c), really kill the new thread. a.k.a this avoids
- a race condition in which the thread is unkillable (via
- exit_group) because its threadgroup is not set. The race window
- is probably only a few hundred or a few thousand cycles long.
- See #226116. */
- ctst->os_state.threadgroup = ptst->os_state.threadgroup;
-
- ML_(guess_and_register_stack)(child_xsp, ctst);
-
- /* Assume the clone will succeed, and tell any tool that wants to
- know that this thread has come into existence. If the clone
- fails, we'll send out a ll_exit notification for it at the out:
- label below, to clean up. */
- vg_assert(VG_(owns_BigLock_LL)(ptid));
- VG_TRACK ( pre_thread_ll_create, ptid, ctid );
-
- if (flags & VKI_CLONE_SETTLS) {
- /* Just assign the tls pointer in the guest TPIDR_EL0. */
- assign_guest_tls(ctid, child_tls);
- }
-
- flags &= ~VKI_CLONE_SETTLS;
-
- /* start the thread with everything blocked */
- VG_(sigprocmask)(VKI_SIG_SETMASK, &blockall, &savedmask);
-
- x0 = do_syscall_clone_arm64_linux(
- ML_(start_thread_NORETURN), stack, flags, &VG_(threads)[ctid],
- child_tidptr, parent_tidptr, NULL
- );
-
- res = VG_(mk_SysRes_arm64_linux)( x0 );
-
- VG_(sigprocmask)(VKI_SIG_SETMASK, &savedmask, NULL);
-
- out:
- if (sr_isError(res)) {
- /* clone failed */
- VG_(cleanup_thread)(&ctst->arch);
- ctst->status = VgTs_Empty;
- /* oops. Better tell the tool the thread exited in a hurry :-) */
- VG_TRACK( pre_thread_ll_exit, ctid );
- }
-
- return res;
-}
-
-
/* ---------------------------------------------------------------------
More thread stuff
------------------------------------------------------------------ */
@@ -397,7 +275,6 @@
//ZZ DECL_TEMPLATE(arm_linux, sys_lstat64);
//ZZ DECL_TEMPLATE(arm_linux, sys_fstatat64);
//ZZ DECL_TEMPLATE(arm_linux, sys_fstat64);
-DECL_TEMPLATE(arm64_linux, sys_clone);
//ZZ DECL_TEMPLATE(arm_linux, sys_sigreturn);
DECL_TEMPLATE(arm64_linux, sys_rt_sigreturn);
//ZZ DECL_TEMPLATE(arm_linux, sys_sigsuspend);
@@ -512,110 +389,6 @@
//ZZ POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
//ZZ }
-/* Aarch64 seems to use CONFIG_CLONE_BACKWARDS in the kernel. See:
- http://dev.gentoo.org/~vapier/aarch64/linux-3.12.6.config
- http://people.redhat.com/wcohen/aarch64/aarch64_config
- from linux-3.10.5/kernel/fork.c
- #ifdef CONFIG_CLONE_BACKWARDS
- SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
- int __user *, parent_tidptr,
- int, tls_val,
- int __user *, child_tidptr)
-*/
-PRE(sys_clone)
-{
- UInt cloneflags;
-
- PRINT("sys_clone ( %lx, %#lx, %#lx, %#lx, %#lx )",ARG1,ARG2,ARG3,ARG4,ARG5);
- PRE_REG_READ5(int, "clone",
- unsigned long, flags,
- void *, child_stack,
- int *, parent_tidptr,
- void *, child_tls,
- int *, child_tidptr);
-
- if (ARG1 & VKI_CLONE_PARENT_SETTID) {
- PRE_MEM_WRITE("clone(parent_tidptr)", ARG3, sizeof(Int));
- if (!VG_(am_is_valid_for_client)(ARG3, sizeof(Int),
- VKI_PROT_WRITE)) {
- SET_STATUS_Failure( VKI_EFAULT );
- return;
- }
- }
-//ZZ if (ARG1 & VKI_CLONE_SETTLS) {
-//ZZ PRE_MEM_READ("clone(tls_user_desc)", ARG4, sizeof(vki_modify_ldt_t));
-//ZZ if (!VG_(am_is_valid_for_client)(ARG4, sizeof(vki_modify_ldt_t),
-//ZZ VKI_PROT_READ)) {
-//ZZ SET_STATUS_Failure( VKI_EFAULT );
-//ZZ return;
-//ZZ }
-//ZZ }
- if (ARG1 & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID)) {
- PRE_MEM_WRITE("clone(child_tidptr)", ARG5, sizeof(Int));
- if (!VG_(am_is_valid_for_client)(ARG5, sizeof(Int),
- VKI_PROT_WRITE)) {
- SET_STATUS_Failure( VKI_EFAULT );
- return;
- }
- }
-
- cloneflags = ARG1;
-
- if (!ML_(client_signal_OK)(ARG1 & VKI_CSIGNAL)) {
- SET_STATUS_Failure( VKI_EINVAL );
- return;
- }
-
- /* Only look at the flags we really care about */
- switch (cloneflags & (VKI_CLONE_VM | VKI_CLONE_FS
- | VKI_CLONE_FILES | VKI_CLONE_VFORK)) {
- case VKI_CLONE_VM | VKI_CLONE_FS | VKI_CLONE_FILES:
- /* thread creation */
- SET_STATUS_from_SysRes(
- do_clone(tid,
- ARG1, /* flags */
- (Addr)ARG2, /* child SP */
- (Int*)ARG3, /* parent_tidptr */
- (Int*)ARG5, /* child_tidptr */
- (Addr)ARG4)); /* tls_val */
- break;
-
- case VKI_CLONE_VFORK | VKI_CLONE_VM: /* vfork */
- /* FALLTHROUGH - assume vfork == fork */
- cloneflags &= ~(VKI_CLONE_VFORK | VKI_CLONE_VM);
-
- case 0: /* plain fork */
- SET_STATUS_from_SysRes(
- ML_(do_fork_clone)(tid,
- cloneflags, /* flags */
- (Int*)ARG3, /* parent_tidptr */
- (Int*)ARG5)); /* child_tidptr */
- break;
-
- default:
- /* should we just ENOSYS? */
- VG_(message)(Vg_UserMsg, "Unsupported clone() flags: 0x%lx\n", ARG1);
- VG_(message)(Vg_UserMsg, "\n");
- VG_(message)(Vg_UserMsg, "The only supported clone() uses are:\n");
- VG_(message)(Vg_UserMsg, " - via a threads library (LinuxThreads or NPTL)\n");
- VG_(message)(Vg_UserMsg, " - via the implementation of fork or vfork\n");
- VG_(message)(Vg_UserMsg, " - for the Quadrics Elan3 user-space driver\n");
- VG_(unimplemented)
- ("Valgrind does not support general clone().");
- }
-
- if (SUCCESS) {
- if (ARG1 & VKI_CLONE_PARENT_SETTID)
- POST_MEM_WRITE(ARG3, sizeof(Int));
- if (ARG1 & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID))
- POST_MEM_WRITE(ARG5, sizeof(Int));
-
- /* Thread creation was successful; let the child have the chance
- to run */
- *flags |= SfYieldAfter;
- }
-}
-
//ZZ PRE(sys_sigreturn)
//ZZ {
//ZZ /* See comments on PRE(sys_rt_sigreturn) in syswrap-amd64-linux.c for
@@ -1072,7 +845,7 @@
LINX_(__NR_add_key, sys_add_key), // 217
LINXY(__NR_keyctl, sys_keyctl), // 219
- PLAX_(__NR_clone, sys_clone), // 220
+ LINX_(__NR_clone, sys_clone), // 220
GENX_(__NR_execve, sys_execve), // 221
PLAX_(__NR_mmap, sys_mmap), // 222
PLAX_(__NR_fadvise64, sys_fadvise64), // 223
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c Sun Dec 11 21:39:23 2016
@@ -93,9 +93,8 @@
VG_TRACK(pre_thread_first_insn, tid);
tst->os_state.lwpid = VG_(gettid)();
- /* Set the threadgroup for real. This overwrites the provisional
- value set in do_clone() syswrap-*-linux.c. See comments in
- do_clone for background, also #226116. */
+ /* Set the threadgroup for real. This overwrites the provisional value set
+ in do_clone(). See comments in do_clone for background, also #226116. */
tst->os_state.threadgroup = VG_(getpid)();
/* Thread created with all signals blocked; scheduler will set the
@@ -430,17 +429,327 @@
vg_assert(0);
}
+/* Clone a new thread. Note that in the clone syscalls, we hard-code
+ tlsaddr argument as NULL : the guest TLS is emulated via guest
+ registers, and Valgrind itself has no thread local storage. */
+static SysRes clone_new_thread ( Word (*fn)(void *),
+ void* stack,
+ Word flags,
+ ThreadState* ctst,
+ Int* child_tidptr,
+ Int* parent_tidptr)
+{
+ SysRes res;
+ /* Note that in all the below, we make sys_clone appear to have returned
+ Success(0) in the child, by assigning the relevant child guest
+ register(s) just before the clone syscall. */
+#if defined(VGP_x86_linux)
+ Int eax;
+ ctst->arch.vex.guest_EAX = 0;
+ eax = do_syscall_clone_x86_linux
+ (ML_(start_thread_NORETURN), stack, flags, ctst,
+ child_tidptr, parent_tidptr, NULL);
+ res = VG_(mk_SysRes_x86_linux)( eax );
+#elif defined(VGP_amd64_linux)
+ Long rax;
+ ctst->arch.vex.guest_RAX = 0;
+ rax = do_syscall_clone_amd64_linux
+ (ML_(start_thread_NORETURN), stack, flags, ctst,
+ child_tidptr, parent_tidptr, NULL);
+ res = VG_(mk_SysRes_amd64_linux)( rax );
+#elif defined(VGP_ppc32_linux)
+ ULong word64;
+ UInt old_cr = LibVEX_GuestPPC32_get_CR( &ctst->arch.vex );
+ /* %r3 = 0 */
+ ctst->arch.vex.guest_GPR3 = 0;
+ /* %cr0.so = 0 */
+ LibVEX_GuestPPC32_put_CR( old_cr & ~(1<<28), &ctst->arch.vex );
+ word64 = do_syscall_clone_ppc32_linux
+ (ML_(start_thread_NORETURN), stack, flags, ctst,
+ child_tidptr, parent_tidptr, NULL);
+ /* High half word64 is syscall return value. Low half is
+ the entire CR, from which we need to extract CR0.SO. */
+ /* VG_(printf)("word64 = 0x%llx\n", word64); */
+ res = VG_(mk_SysRes_ppc32_linux)(/*val*/(UInt)(word64 >> 32),
+ /*errflag*/ (((UInt)word64) >> 28) & 1);
+#elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
+ ULong word64;
+ UInt old_cr = LibVEX_GuestPPC64_get_CR( &ctst->arch.vex );
+ /* %r3 = 0 */
+ ctst->arch.vex.guest_GPR3 = 0;
+ /* %cr0.so = 0 */
+ LibVEX_GuestPPC64_put_CR( old_cr & ~(1<<28), &ctst->arch.vex );
+ word64 = do_syscall_clone_ppc64_linux
+ (ML_(start_thread_NORETURN), stack, flags, ctst,
+ child_tidptr, parent_tidptr, NULL);
+ /* Low half word64 is syscall return value. Hi half is
+ the entire CR, from which we need to extract CR0.SO. */
+ /* VG_(printf)("word64 = 0x%llx\n", word64); */
+ res = VG_(mk_SysRes_ppc64_linux)
+ (/*val*/(UInt)(word64 & 0xFFFFFFFFULL),
+ /*errflag*/ (UInt)((word64 >> (32+28)) & 1));
+#elif defined(VGP_s390x_linux)
+ ULong r2;
+ ctst->arch.vex.guest_r2 = 0;
+ r2 = do_syscall_clone_s390x_linux
+ (stack, flags, parent_tidptr, child_tidptr, NULL,
+ ML_(start_thread_NORETURN), ctst);
+ res = VG_(mk_SysRes_s390x_linux)( r2 );
+#elif defined(VGP_arm64_linux)
+ ULong x0;
+ ctst->arch.vex.guest_X0 = 0;
+ x0 = do_syscall_clone_arm64_linux
+ (ML_(start_thread_NORETURN), stack, flags, ctst,
+ child_tidptr, parent_tidptr, NULL);
+ res = VG_(mk_SysRes_arm64_linux)( x0 );
+#elif defined(VGP_arm_linux)
+ UInt r0;
+ ctst->arch.vex.guest_R0 = 0;
+ r0 = do_syscall_clone_arm_linux
+ (ML_(start_thread_NORETURN), stack, flags, ctst,
+ child_tidptr, parent_tidptr, NULL);
+ res = VG_(mk_SysRes_arm_linux)( r0 );
+#elif defined(VGP_mips64_linux)
+ UInt ret = 0;
+ ctst->arch.vex.guest_r2 = 0;
+ ctst->arch.vex.guest_r7 = 0;
+ ret = do_syscall_clone_mips64_linux
+ (ML_(start_thread_NORETURN), stack, flags, ctst,
+ parent_tidptr, NULL, child_tidptr);
+ res = VG_(mk_SysRes_mips64_linux)( /* val */ ret, 0, /* errflag */ 0);
+#elif defined(VGP_mips32_linux)
+ UInt ret = 0;
+ ctst->arch.vex.guest_r2 = 0;
+ ctst->arch.vex.guest_r7 = 0;
+ ret = do_syscall_clone_mips_linux
+ (ML_(start_thread_NORETURN), stack, flags, ctst,
+ child_tidptr, parent_tidptr, NULL);
+ /* High half word64 is syscall return value. Low half is
+ the entire CR, from which we need to extract CR0.SO. */
+ res = VG_ (mk_SysRes_mips32_linux) (/*val */ ret, 0, /*errflag */ 0);
+#elif defined(VGP_tilegx_linux)
+ Long ret = 0;
+ ctst->arch.vex.guest_r0 = 0;
+ ctst->arch.vex.guest_r3 = 0;
+ ret = do_syscall_clone_tilegx_linux
+ (ML_ (start_thread_NORETURN), stack, flags, ctst,
+ child_tidptr, parent_tidptr, NULL);
+ /* High half word64 is syscall return value. */
+ res = VG_(mk_SysRes_tilegx_linux) (/*val */ ret);
+#else
+# error Unknown platform
+#endif
+ return res;
+}
+
+static void setup_child ( /*OUT*/ ThreadArchState *child,
+ /*IN*/ ThreadArchState *parent )
+{
+ /* We inherit our parent's guest state. */
+ child->vex = parent->vex;
+ child->vex_shadow1 = parent->vex_shadow1;
+ child->vex_shadow2 = parent->vex_shadow2;
+
+#if defined(VGP_x86_linux)
+ extern void ML_(x86_setup_LDT_GDT) ( /*OUT*/ ThreadArchState *child,
+ /*IN*/ ThreadArchState *parent );
+ ML_(x86_setup_LDT_GDT)(child, parent);
+#endif
+}
+
+static SysRes setup_child_tls (ThreadId ctid, Addr tlsaddr)
+{
+ static const Bool debug = False;
+ ThreadState* ctst = VG_(get_ThreadState)(ctid);
+ // res is succesful by default, overriden if a real syscall is needed/done.
+ SysRes res = VG_(mk_SysRes_Success)(0);
+
+ if (debug)
+ VG_(printf)("clone child has SETTLS: tls at %#lx\n", tlsaddr);
+
+#if defined(VGP_x86_linux)
+ vki_modify_ldt_t* tlsinfo = (vki_modify_ldt_t*)tlsaddr;
+ if (debug)
+ VG_(printf)("clone child has SETTLS: tls info at %p: idx=%u "
+ "base=%#lx limit=%x; esp=%#x fs=%x gs=%x\n",
+ tlsinfo, tlsinfo->entry_number,
+ tlsinfo->base_addr, tlsinfo->limit,
+ ctst->arch.vex.guest_ESP,
+ ctst->arch.vex.guest_FS, ctst->arch.vex.guest_GS);
+ res = ML_(x86_sys_set_thread_area)(ctid, tlsinfo);
+#elif defined(VGP_amd64_linux)
+ ctst->arch.vex.guest_FS_CONST = tlsaddr;
+#elif defined(VGP_ppc32_linux)
+ ctst->arch.vex.guest_GPR2 = tlsaddr;
+#elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
+ ctst->arch.vex.guest_GPR13 = tlsaddr;
+#elif defined(VGP_s390x_linux)
+ ctst->arch.vex.guest_a0 = (UInt) (tlsaddr >> 32);
+ ctst->arch.vex.guest_a1 = (UInt) tlsaddr;
+#elif defined(VGP_arm64_linux)
+ /* Just assign the tls pointer in the guest TPIDR_EL0. */
+ ctst->arch.vex.guest_TPIDR_EL0 = tlsaddr;
+#elif defined(VGP_arm_linux)
+ /* Just assign the tls pointer in the guest TPIDRURO. */
+ ctst->arch.vex.guest_TPIDRURO = tlsaddr;
+#elif defined(VGP_mips64_linux)
+ ctst->arch.vex.guest_ULR = tlsaddr;
+ ctst->arch.vex.guest_r27 = tlsaddr;
+#elif defined(VGP_mips32_linux)
+ ctst->arch.vex.guest_ULR = tlsaddr;
+ ctst->arch.vex.guest_r27 = tlsaddr;
+#elif defined(VGP_tilegx_linux)
+ ctst->arch.vex.guest_r53 = tlsaddr;
+#else
+# error Unknown platform
+#endif
+ return res;
+}
+
+/*
+ When a client clones, we need to keep track of the new thread. This means:
+ 1. allocate a ThreadId+ThreadState+stack for the thread
+
+ 2. initialize the thread's new VCPU state
+
+ 3. create the thread using the same args as the client requested,
+ but using the scheduler entrypoint for EIP, and a separate stack
+ for ESP.
+ */
+static SysRes do_clone ( ThreadId ptid,
+ UWord flags, Addr sp,
+ Int* parent_tidptr,
+ Int* child_tidptr,
+ Addr tlsaddr)
+{
+ ThreadId ctid = VG_(alloc_ThreadState)();
+ ThreadState* ptst = VG_(get_ThreadState)(ptid);
+ ThreadState* ctst = VG_(get_ThreadState)(ctid);
+ UWord* stack;
+ SysRes res;
+ vki_sigset_t blockall, savedmask;
+
+ VG_(sigfillset)(&blockall);
+
+ vg_assert(VG_(is_running_thread)(ptid));
+ vg_assert(VG_(is_valid_tid)(ctid));
+
+ stack = (UWord*)ML_(allocstack)(ctid);
+ if (stack == NULL) {
+ res = VG_(mk_SysRes_Error)( VKI_ENOMEM );
+ goto out;
+ }
+
+ /* Copy register state
+
+ Both parent and child return to the same place, and the code
+ following the clone syscall works out which is which, so we
+ don't need to worry about it.
+
+ The parent gets the child's new tid returned from clone, but the
+ child gets 0.
+
+ If the clone call specifies a NULL sp for the new thread, then
+ it actually gets a copy of the parent's sp.
+ */
+ setup_child( &ctst->arch, &ptst->arch );
+
+ if (sp != 0)
+ VG_(set_SP)(ctid, sp);
+
+ ctst->os_state.parent = ptid;
+
+ /* inherit signal mask */
+ ctst->sig_mask = ptst->sig_mask;
+ ctst->tmp_sig_mask = ptst->sig_mask;
+
+ /* Start the child with its threadgroup being the same as the
+ parent's. This is so that any exit_group calls that happen
+ after the child is created but before it sets its
+ os_state.threadgroup field for real (in thread_wrapper in
+ syswrap-linux.c), really kill the new thread. a.k.a this avoids
+ a race condition in which the thread is unkillable (via
+ exit_group) because its threadgroup is not set. The race window
+ is probably only a few hundred or a few thousand cycles long.
+ See #226116. */
+ ctst->os_state.threadgroup = ptst->os_state.threadgroup;
+
+ ML_(guess_and_register_stack) (sp, ctst);
+
+ /* Assume the clone will succeed, and tell any tool that wants to
+ know that this thread has come into existence. We cannot defer
+ it beyond this point because setup_tls, just below,
+ causes checks to assert by making references to the new ThreadId
+ if we don't state the new thread exists prior to that point.
+ If the clone fails, we'll send out a ll_exit notification for it
+ at the out: label below, to clean up. */
+ vg_assert(VG_(owns_BigLock_LL)(ptid));
+ VG_TRACK ( pre_thread_ll_create, ptid, ctid );
+
+ if (flags & VKI_CLONE_SETTLS) {
+ res = setup_child_tls(ctid, tlsaddr);
+ if (sr_isError(res))
+ goto out;
+ }
+ flags &= ~VKI_CLONE_SETTLS;
+
+ /* start the thread with everything blocked */
+ VG_(sigprocmask)(VKI_SIG_SETMASK, &blockall, &savedmask);
+
+ /* Create the new thread */
+ res = clone_new_thread ( ML_(start_thread_NORETURN), stack, flags, ctst,
+ child_tidptr, parent_tidptr);
+
+ VG_(sigprocmask)(VKI_SIG_SETMASK, &savedmask, NULL);
+
+ out:
+ if (sr_isError(res)) {
+ /* clone failed */
+ VG_(cleanup_thread)(&ctst->arch);
+ ctst->status = VgTs_Empty;
+ /* oops. Better tell the tool the thread exited in a hurry :-) */
+ VG_TRACK( pre_thread_ll_exit, ctid );
+ }
+
+#if defined(VGP_mips64_linux) || defined(VGP_mips32_linux)
+ // ??? why do we set unconditionally r2 to 0, even when error out ???
+ ptst->arch.vex.guest_r2 = 0;
+#elif defined(VGP_tilegx_linux)
+ // ??? why do we set unconditionally r0 to 0, even when error out ???
+ ptst->arch.vex.guest_r0 = 0;
+#endif
-/* Do a clone which is really a fork() */
-SysRes ML_(do_fork_clone) ( ThreadId tid, UInt flags,
- Int* parent_tidptr, Int* child_tidptr )
+ return res;
+}
+
+/* Do a clone which is really a fork().
+ ML_(do_fork_clone) uses the clone syscall to fork a child process.
+ Note that this should not be called for a thread creation.
+ Also, some flags combinations are not supported, and such combinations
+ are handled either by masking the non supported flags or by asserting.
+
+ The CLONE_VFORK flag is accepted, as this just tells that the parent is
+ suspended till the child exits or calls execve. We better keep this flag,
+ just in case the guests parent/client code depends on this synchronisation.
+
+ We cannot keep the flag CLONE_VM, as Valgrind will do whatever host
+ instructions in the child process, that will mess up the parent host
+ memory. So, we hope for the best and assumes that the guest application does
+ not (really) depends on sharing the memory between parent and child in the
+ interval between clone and exits/execve.
+
+ If child_sp != 0, the child (guest) sp will be set to child_sp just after the
+ clone syscall, before child guest instructions are executed. */
+static SysRes ML_(do_fork_clone) ( ThreadId tid, UInt flags,
+ Int* parent_tidptr, Int* child_tidptr,
+ Addr child_sp)
{
vki_sigset_t fork_saved_mask;
vki_sigset_t mask;
SysRes res;
if (flags & (VKI_CLONE_SETTLS | VKI_CLONE_FS | VKI_CLONE_VM
- | VKI_CLONE_FILES | VKI_CLONE_VFORK))
+ | VKI_CLONE_FILES))
return VG_(mk_SysRes_Error)( VKI_EINVAL );
/* Block all signals during fork, so that we can fix things up in
@@ -476,6 +785,8 @@
if (!sr_isError(res) && sr_Res(res) == 0) {
/* child */
+ if (child_sp != 0)
+ VG_(set_SP)(tid, child_sp);
VG_(do_atfork_child)(tid);
/* restore signal mask */
@@ -508,7 +819,6 @@
return res;
}
-
/* ---------------------------------------------------------------------
PRE/POST wrappers for arch-generic, Linux-specific syscalls
------------------------------------------------------------------ */
@@ -519,6 +829,157 @@
#define PRE(name) DEFN_PRE_TEMPLATE(linux, name)
#define POST(name) DEFN_POST_TEMPLATE(linux, name)
+PRE(sys_clone)
+{
+ UInt cloneflags;
+ Bool badarg = False;
+
+ PRINT("sys_clone ( %lx, %#lx, %#lx, %#lx, %#lx )",ARG1,ARG2,ARG3,ARG4,ARG5);
+
+// Order of arguments differs between platforms.
+#if defined(VGP_x86_linux) \
+ || defined(VGP_ppc32_linux) \
+ || defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux) \
+ || defined(VGP_arm_linux) || defined(VGP_mips32_linux) \
+ || defined(VGP_mips64_linux) || defined(VGP_arm64_linux)
+#define ARG_CHILD_TIDPTR ARG5
+#define PRA_CHILD_TIDPTR PRA5
+#define ARG_TLS ARG4
+#define PRA_TLS PRA4
+#elif defined(VGP_amd64_linux) || defined(VGP_tilegx_linux) \
+ || defined(VGP_s390x_linux)
+#define ARG_CHILD_TIDPTR ARG4
+#define PRA_CHILD_TIDPTR PRA4
+#define ARG_TLS ARG5
+#define PRA_TLS PRA5
+#else
+# error Unknown platform
+#endif
+// And s390x is even more special, and inverts flags and child stack args
+#if defined(VGP_s390x_linux)
+#define ARG_FLAGS ARG2
+#define PRA_FLAGS PRA2
+#define ARG_CHILD_STACK ARG1
+#define PRA_CHILD_STACK PRA1
+#else
+#define ARG_FLAGS ARG1
+#define PRA_FLAGS PRA1
+#define ARG_CHILD_STACK ARG2
+#define PRA_CHILD_STACK PRA2
+#endif
+
+ if (VG_(tdict).track_pre_reg_read) {
+ PRA_FLAGS("clone", unsigned long, flags);
+ PRA_CHILD_STACK("clone", void *, child_stack);
+ }
+
+ if (ARG_FLAGS & VKI_CLONE_PARENT_SETTID) {
+ if (VG_(tdict).track_pre_reg_read) {
+ PRA3("clone", int *, parent_tidptr);
+ }
+ PRE_MEM_WRITE("clone(parent_tidptr)", ARG3, sizeof(Int));
+ if (!VG_(am_is_valid_for_client)(ARG3, sizeof(Int),
+ VKI_PROT_WRITE)) {
+ badarg = True;
+ }
+ }
+ if (ARG_FLAGS & VKI_CLONE_SETTLS) {
+ if (VG_(tdict).track_pre_reg_read) {
+ PRA_TLS("clone", vki_modify_ldt_t *, tlsinfo);
+ }
+ /* Not very clear what is vki_modify_ldt_t: for many platforms, it is a
+ dummy type (that we define as a char). We only dereference/check the
+ ARG_TLS pointer if the type looks like a real type, i.e. sizeof > 1. */
+ if (sizeof(vki_modify_ldt_t) > 1) {
+ PRE_MEM_READ("clone(tlsinfo)", ARG_TLS, sizeof(vki_modify_ldt_t));
+ if (!VG_(am_is_valid_for_client)(ARG_TLS, sizeof(vki_modify_ldt_t),
+ VKI_PROT_READ)) {
+ badarg = True;
+ }
+ }
+ }
+ if (ARG_FLAGS & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID)) {
+ if (VG_(tdict).track_pre_reg_read) {
+ PRA_CHILD_TIDPTR("clone", int *, child_tidptr);
+ }
+ PRE_MEM_WRITE("clone(child_tidptr)", ARG_CHILD_TIDPTR, sizeof(Int));
+ if (!VG_(am_is_valid_for_client)(ARG_CHILD_TIDPTR, sizeof(Int),
+ VKI_PROT_WRITE)) {
+ badarg = True;
+ }
+ }
+
+ if (badarg) {
+ SET_STATUS_Failure( VKI_EFAULT );
+ return;
+ }
+
+ cloneflags = ARG_FLAGS;
+
+ if (!ML_(client_signal_OK)(ARG_FLAGS & VKI_CSIGNAL)) {
+ SET_STATUS_Failure( VKI_EINVAL );
+ return;
+ }
+
+ /* Only look at the flags we really care about */
+ switch (cloneflags & (VKI_CLONE_VM | VKI_CLONE_FS
+ | VKI_CLONE_FILES | VKI_CLONE_VFORK)) {
+ case VKI_CLONE_VM | VKI_CLONE_FS | VKI_CLONE_FILES:
+ /* thread creation */
+ SET_STATUS_from_SysRes(
+ do_clone(tid,
+ ARG_FLAGS, /* flags */
+ (Addr)ARG_CHILD_STACK, /* child ESP */
+ (Int*)ARG3, /* parent_tidptr */
+ (Int*)ARG_CHILD_TIDPTR, /* child_tidptr */
+ (Addr)ARG_TLS)); /* set_tls */
+ break;
+
+ case VKI_CLONE_VFORK | VKI_CLONE_VM: /* vfork */
+ // FALLTHROUGH - assume vfork (somewhat) == fork, see ML_(do_fork_clone).
+ cloneflags &= ~VKI_CLONE_VM;
+
+ case 0: /* plain fork */
+ SET_STATUS_from_SysRes(
+ ML_(do_fork_clone)(tid,
+ cloneflags, /* flags */
+ (Int*)ARG3, /* parent_tidptr */
+ (Int*)ARG_CHILD_TIDPTR, /* child_tidptr */
+ (Addr)ARG_CHILD_STACK));
+ break;
+
+ default:
+ /* should we just ENOSYS? */
+ VG_(message)(Vg_UserMsg, "Unsupported clone() flags: 0x%lx\n", ARG_FLAGS);
+ VG_(message)(Vg_UserMsg, "\n");
+ VG_(message)(Vg_UserMsg, "The only supported clone() uses are:\n");
+ VG_(message)(Vg_UserMsg, " - via a threads library (LinuxThreads or NPTL)\n");
+ VG_(message)(Vg_UserMsg, " - via the implementation of fork or vfork\n");
+ VG_(unimplemented)
+ ("Valgrind does not support general clone().");
+ }
+
+ if (SUCCESS) {
+ if (ARG_FLAGS & VKI_CLONE_PARENT_SETTID)
+ POST_MEM_WRITE(ARG3, sizeof(Int));
+ if (ARG_FLAGS & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID))
+ POST_MEM_WRITE(ARG_CHILD_TIDPTR, sizeof(Int));
+
+ /* Thread creation was successful; let the child have the chance
+ to run */
+ *flags |= SfYieldAfter;
+ }
+
+#undef ARG_CHILD_TIDPTR
+#undef PRA_CHILD_TI...
[truncated message content] |
|
From: <sv...@va...> - 2016-12-11 08:07:28
|
Author: rhyskidd
Date: Sun Dec 11 08:07:21 2016
New Revision: 16185
Log:
Add placeholders for all new OS X 10.11 syscalls. Related to bz#348909.
Modified:
trunk/coregrind/m_syswrap/priv_syswrap-darwin.h
trunk/coregrind/m_syswrap/syswrap-darwin.c
trunk/include/vki/vki-scnums-darwin.h
Modified: trunk/coregrind/m_syswrap/priv_syswrap-darwin.h
==============================================================================
--- trunk/coregrind/m_syswrap/priv_syswrap-darwin.h (original)
+++ trunk/coregrind/m_syswrap/priv_syswrap-darwin.h Sun Dec 11 08:07:21 2016
@@ -237,7 +237,9 @@
#if DARWIN_VERS >= DARWIN_10_12
// NYI kdebug_typefilter // 177
#endif /* DARWIN_VERS >= DARWIN_10_12 */
-// 178
+#if DARWIN_VERS >= DARWIN_10_11
+// NYI kdebug_trace_string // 178
+#endif /* DARWIN_VERS >= DARWIN_10_11 */
// 179
DECL_TEMPLATE(darwin, kdebug_trace); // 180
// GEN setgid 181
@@ -465,7 +467,9 @@
DECL_TEMPLATE(darwin, __thread_selfid); // 372
#endif
// 373
-// 374
+#if DARWIN_VERS >= DARWIN_10_11
+// NYI kevent_qos // 374
+#endif /* DARWIN_VERS >= DARWIN_10_11 */
// 375
// 376
// 377
@@ -590,6 +594,18 @@
// NYI renameatx_np // 488
// NYI mremap_encrypted // 489
#endif /* DARWIN_VERS >= DARWIN_10_10 */
+#if DARWIN_VERS >= DARWIN_10_11
+// NYI netagent_trigger // 490
+// NYI stack_snapshot_with_config // 491
+// NYI microstackshot // 492
+// NYI grab_pgo_data // 493
+// NYI persona // 494
+// 495
+// 496
+// 497
+// 498
+// NYI work_interval_ctl // 499
+#endif /* DARWIN_VERS >= DARWIN_10_11 */
#if DARWIN_VERS >= DARWIN_10_12
// NYI getentropy // 500
// NYI necp_open // 501
Modified: trunk/coregrind/m_syswrap/syswrap-darwin.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-darwin.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-darwin.c Sun Dec 11 08:07:21 2016
@@ -10298,6 +10298,20 @@
MACX_(__NR_guarded_writev_np, guarded_writev_np), // 487
// _____(__NR___mremap_encrypted), // 489
#endif
+#if DARWIN_VERS >= DARWIN_10_11
+// _____(__NR_kdebug_trace_string), // 178
+// _____(__NR_kevent_qos), // 374
+// _____(__NR_netagent_trigger), // 490
+// _____(__NR_stack_snapshot_with_config), // 491
+// _____(__NR_microstackshot), // 492
+// _____(__NR_grab_pgo_data), // 493
+// _____(__NR_persona), // 494
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(495)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(496)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(497)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(498)), // ???
+// _____(__NR_work_interval_ctl), // 499
+#endif
#if DARWIN_VERS >= DARWIN_10_12
// _____(__NR_kdebug_typefilter), // 177
// _____(__NR_clonefileat), // 462
Modified: trunk/include/vki/vki-scnums-darwin.h
==============================================================================
--- trunk/include/vki/vki-scnums-darwin.h (original)
+++ trunk/include/vki/vki-scnums-darwin.h Sun Dec 11 08:07:21 2016
@@ -395,7 +395,9 @@
#if DARWIN_VERS >= DARWIN_10_12
#define __NR_kdebug_typefilter VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(177)
#endif /* DARWIN_VERS >= DARWIN_10_12 */
- /* 178 */
+#if DARWIN_VERS >= DARWIN_10_11
+#define __NR_kdebug_trace_string VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(178)
+#endif /* DARWIN_VERS >= DARWIN_10_11 */
/* 179 */
#define __NR_kdebug_trace VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(180)
#define __NR_setgid VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(181)
@@ -645,7 +647,9 @@
/* 372 */
#endif
/* 373 */
- /* 374 */
+#if DARWIN_VERS >= DARWIN_10_11
+#define __NR_kevent_qos VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(374)
+#endif /* DARWIN_VERS >= DARWIN_10_11 */
/* 375 */
/* 376 */
/* 377 */
@@ -755,18 +759,17 @@
#endif /* DARWIN_VERS >= DARWIN_10_12 */
/* 489 */
-// TODO Update with OS X 10.11 kernel (xnu) source code release
#if DARWIN_VERS >= DARWIN_10_11
- /* 490 */
- /* 491 */
- /* 492 */
- /* 493 */
- /* 494 */
+#define __NR_netagent_trigger VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(490)
+#define __NR_stack_snapshot_with_config VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(491)
+#define __NR_microstackshot VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(492)
+#define __NR_grab_pgo_data VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(493)
+#define __NR_persona VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(494)
/* 495 */
/* 496 */
/* 497 */
/* 498 */
- /* 499 */
+#define __NR_work_interval_ctl VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(499)
#endif /* DARWIN_VERS >= DARWIN_10_11 */
#if DARWIN_VERS >= DARWIN_10_12
|
|
From: <sv...@va...> - 2016-12-11 07:18:02
|
Author: rhyskidd
Date: Sun Dec 11 07:17:43 2016
New Revision: 16184
Log:
Add placeholders for all new macOS 10.12 syscalls. Related to bz#365327.
Modified:
trunk/coregrind/m_syswrap/priv_syswrap-darwin.h
trunk/coregrind/m_syswrap/syswrap-darwin.c
trunk/include/vki/vki-scnums-darwin.h
Modified: trunk/coregrind/m_syswrap/priv_syswrap-darwin.h
==============================================================================
--- trunk/coregrind/m_syswrap/priv_syswrap-darwin.h (original)
+++ trunk/coregrind/m_syswrap/priv_syswrap-darwin.h Sun Dec 11 07:17:43 2016
@@ -234,7 +234,9 @@
// old getdents
// old gc_control
// NYI add_profil 176
-// 177
+#if DARWIN_VERS >= DARWIN_10_12
+// NYI kdebug_typefilter // 177
+#endif /* DARWIN_VERS >= DARWIN_10_12 */
// 178
// 179
DECL_TEMPLATE(darwin, kdebug_trace); // 180
@@ -555,7 +557,11 @@
// NYI coalition_info // 459
DECL_TEMPLATE(darwin, necp_match_policy); // 460
DECL_TEMPLATE(darwin, getattrlistbulk); // 461
-// 462
+#endif /* DARWIN_VERS >= DARWIN_10_10 */
+#if DARWIN_VERS >= DARWIN_10_12
+// NYI clonefileat // 462
+#endif /* DARWIN_VERS >= DARWIN_10_12 */
+#if DARWIN_VERS >= DARWIN_10_10
// NYI openat // 463
// NYI openat_nocancel // 464
// NYI renameat // 465
@@ -581,9 +587,33 @@
DECL_TEMPLATE(darwin, guarded_write_np); // 485
DECL_TEMPLATE(darwin, guarded_pwrite_np); // 486
DECL_TEMPLATE(darwin, guarded_writev_np); // 487
-// NYI rename_ext // 488
+// NYI renameatx_np // 488
// NYI mremap_encrypted // 489
#endif /* DARWIN_VERS >= DARWIN_10_10 */
+#if DARWIN_VERS >= DARWIN_10_12
+// NYI getentropy // 500
+// NYI necp_open // 501
+// NYI necp_client_action // 502
+// 503
+// 504
+// 505
+// 506
+// 507
+// 508
+// 509
+// 510
+// 511
+// 512
+// 513
+// 514
+// NYI ulock_wait // 515
+// NYI ulock_wake // 516
+// NYI fclonefileat // 517
+// NYI fs_snapshot // 518
+// 519
+// NYI terminate_with_payload // 520
+// NYI abort_with_payload // 521
+#endif /* DARWIN_VERS >= DARWIN_10_12 */
// Mach message helpers
DECL_TEMPLATE(darwin, mach_port_set_context);
Modified: trunk/coregrind/m_syswrap/syswrap-darwin.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-darwin.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-darwin.c Sun Dec 11 07:17:43 2016
@@ -10296,9 +10296,35 @@
MACX_(__NR_guarded_write_np, guarded_write_np), // 485
MACX_(__NR_guarded_pwrite_np, guarded_pwrite_np), // 486
MACX_(__NR_guarded_writev_np, guarded_writev_np), // 487
-// _____(__NR___rename_ext), // 488
// _____(__NR___mremap_encrypted), // 489
#endif
+#if DARWIN_VERS >= DARWIN_10_12
+// _____(__NR_kdebug_typefilter), // 177
+// _____(__NR_clonefileat), // 462
+// _____(__NR_renameatx_np), // 488
+// _____(__NR_getentropy), // 500
+// _____(__NR_necp_open), // 501
+// _____(__NR_necp_client_action), // 502
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(503)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(504)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(505)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(506)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(507)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(508)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(509)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(510)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(511)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(512)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(513)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(514)), // ???
+// _____(__NR_ulock_wait), // 515
+// _____(__NR_ulock_wake), // 516
+// _____(__NR_fclonefileat), // 517
+// _____(__NR_fs_snapshot), // 518
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(519)), // ???
+// _____(__NR_terminate_with_payload), // 520
+// _____(__NR_abort_with_payload), // 521
+#endif
// _____(__NR_MAXSYSCALL)
MACX_(__NR_DARWIN_FAKE_SIGRETURN, FAKE_SIGRETURN)
};
Modified: trunk/include/vki/vki-scnums-darwin.h
==============================================================================
--- trunk/include/vki/vki-scnums-darwin.h (original)
+++ trunk/include/vki/vki-scnums-darwin.h Sun Dec 11 07:17:43 2016
@@ -391,7 +391,10 @@
/* 174 old getdents */
/* 175 old gc_control */
#define __NR_add_profil VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(176)
- /* 177 */
+
+#if DARWIN_VERS >= DARWIN_10_12
+#define __NR_kdebug_typefilter VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(177)
+#endif /* DARWIN_VERS >= DARWIN_10_12 */
/* 178 */
/* 179 */
#define __NR_kdebug_trace VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(180)
@@ -732,16 +735,26 @@
#if DARWIN_VERS >= DARWIN_10_10
#define __NR_necp_match_policy VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(460)
#define __NR_getattrlistbulk VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(461)
+#endif /* DARWIN_VERS >= DARWIN_10_10 */
+
+#if DARWIN_VERS >= DARWIN_10_12
+#define __NR_clonefileat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(462)
+#endif /* DARWIN_VERS >= DARWIN_10_12 */
+
+#if DARWIN_VERS >= DARWIN_10_10
#define __NR_readlinkat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(473)
#define __NR_bsdthread_ctl VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(478)
#define __NR_guarded_open_dprotected_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(484)
#define __NR_guarded_write_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(485)
#define __NR_guarded_pwrite_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(486)
#define __NR_guarded_writev_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(487)
- /* 488 */
- /* 489 */
#endif /* DARWIN_VERS >= DARWIN_10_10 */
+#if DARWIN_VERS >= DARWIN_10_12
+#define __NR_renameatx_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(488)
+#endif /* DARWIN_VERS >= DARWIN_10_12 */
+ /* 489 */
+
// TODO Update with OS X 10.11 kernel (xnu) source code release
#if DARWIN_VERS >= DARWIN_10_11
/* 490 */
@@ -756,11 +769,10 @@
/* 499 */
#endif /* DARWIN_VERS >= DARWIN_10_11 */
-// TODO Update with macOS 10.12 kernel (xnu) source code release
#if DARWIN_VERS >= DARWIN_10_12
- /* 500 */
- /* 501 */
- /* 502 */
+#define __NR_getentropy VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(500)
+#define __NR_necp_open VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(501)
+#define __NR_necp_client_action VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(502)
/* 503 */
/* 504 */
/* 505 */
@@ -773,13 +785,13 @@
/* 512 */
/* 513 */
/* 514 */
- /* 515 */
- /* 516 */
- /* 517 */
- /* 518 */
+#define __NR_ulock_wait VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(515)
+#define __NR_ulock_wake VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(516)
+#define __NR_fclonefileat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(517)
+#define __NR_fs_snapshot VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(518)
/* 519 */
- /* 520 */
- /* 521 */
+#define __NR_terminate_with_payload VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(520)
+#define __NR_abort_with_payload VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(521)
#endif /* DARWIN_VERS >= DARWIN_10_12 */
#if DARWIN_VERS < DARWIN_10_6
@@ -795,7 +807,6 @@
#elif DARWIN_VERS == DARWIN_10_11
#define __NR_MAXSYSCALL VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(500)
#elif DARWIN_VERS == DARWIN_10_12
-// TODO Confirm against final release
#define __NR_MAXSYSCALL VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(522)
#else
#error unknown darwin version
|
|
From: Rhys K. <rhy...@gm...> - 2016-12-11 00:47:22
|
On 9 December 2016 at 14:26, <pa...@fr...> wrote: > Hi > > After lurking here for a few years, I think it's time that I contributed > something a bit more concrete. > > At the moment I have two ideas: > > Add C++17 support. > I also lurk on the BSI C++ panel. Obviously C++17 is not done yet. The > first changes that I see are the additional alignment overloads for > operator new, see if polymorphic_allocator needs any support. I haven't > been through the changes to threads but I imagine there may be things there > as well. Do you think that this is too experimental/bleeding edge for > Valgrind? > > Update FreeBSD support. > Currently FreeBSD has a version of Valgrind 10.1 available. Initially I'd > just like to get it to build and function. After that I'm sure that there > are lots of other things like missing syscalls. I've started looking at > merging the existing code (the bitbucket FreeBSD repo and Valgrind head), > and it looks like a fairly major task, if nothing else there are many > manual merges where Solaris and TileGX have been added. > > Also early next year I'm planning to retire my venerable Macbook (too old > to upgrade beyond Mac OS 10.7.5) and get either another Macbook or a Mac > Mini. So that might lead to some work on macOS. > Another macOS developer for Valgrind would be welcome. > > One caveat: though this would be on my own time, my employer does, in a > different business unit, sell software integrity tools, so I'll need to > check that there's no problem there. > > Regards > Paul > ------------------------------------------------------------ > ------------------ > Developer Access Program for Intel Xeon Phi Processors > Access to Intel Xeon Phi processor-based developer platforms. > With one year of Intel Parallel Studio XE. > Training and support from Colfax. > Order your platform today.http://sdm.link/xeonphi > _______________________________________________ > Valgrind-developers mailing list > Val...@li... > https://lists.sourceforge.net/lists/listinfo/valgrind-developers > |
|
From: <sv...@va...> - 2016-12-10 00:30:10
|
Author: petarj
Date: Sat Dec 10 00:29:58 2016
New Revision: 16183
Log:
mips64: add cvm_atomic.stdout.exp-BE
Add BE variant of exp file for cvm_atomic test.
This fixes none/tests/mips64/cvm_atomic for Cavium MIPS64 BE systems.
Added:
trunk/none/tests/mips64/cvm_atomic.stdout.exp-BE
Modified:
trunk/none/tests/mips64/Makefile.am
Modified: trunk/none/tests/mips64/Makefile.am
==============================================================================
--- trunk/none/tests/mips64/Makefile.am (original)
+++ trunk/none/tests/mips64/Makefile.am Sat Dec 10 00:29:58 2016
@@ -18,7 +18,8 @@
cvm_lx_ins.stdout.exp-LE cvm_lx_ins.stdout.exp-BE \
cvm_lx_ins.stdout.exp-non-octeon \
cvm_lx_ins.stderr.exp cvm_lx_ins.vgtest \
- cvm_atomic.stdout.exp-LE cvm_atomic.stdout.exp-non-octeon \
+ cvm_atomic.stdout.exp-LE cvm_atomic.stdout.exp-BE \
+ cvm_atomic.stdout.exp-non-octeon \
cvm_atomic.stderr.exp cvm_atomic.vgtest \
cvm_atomic_thread.stdout.exp-LE cvm_atomic_thread.stdout.exp-non-octeon \
cvm_atomic_thread.stderr.exp cvm_atomic_thread.vgtest \
Added: trunk/none/tests/mips64/cvm_atomic.stdout.exp-BE
==============================================================================
--- trunk/none/tests/mips64/cvm_atomic.stdout.exp-BE (added)
+++ trunk/none/tests/mips64/cvm_atomic.stdout.exp-BE Sat Dec 10 00:29:58 2016
@@ -0,0 +1,4721 @@
+baddu $t3, $t1, $t2 :: rd 0x4, rs 0x42b0c0a28677b502, rt 0x42b0c0a28677b502
+baddu $t3, $t1, $t2 :: rd 0xa2, rs 0x42b0c0a28677b502, rt 0x9e705cc51ad8dca0
+baddu $t3, $t1, $t2 :: rd 0x82, rs 0x42b0c0a28677b502, rt 0x47f505569a08a180
+baddu $t3, $t1, $t2 :: rd 0x99, rs 0x42b0c0a28677b502, rt 0x94ff52fc81afa797
+baddu $t3, $t1, $t2 :: rd 0xc7, rs 0x42b0c0a28677b502, rt 0x556b3ecaccf17ac5
+baddu $t3, $t1, $t2 :: rd 0x68, rs 0x42b0c0a28677b502, rt 0x3c2cd9a9cda20766
+baddu $t3, $t1, $t2 :: rd 0x38, rs 0x42b0c0a28677b502, rt 0xd0d070db710cd036
+baddu $t3, $t1, $t2 :: rd 0xa9, rs 0x42b0c0a28677b502, rt 0x2f39454412d6e4a7
+baddu $t3, $t1, $t2 :: rd 0x16, rs 0x42b0c0a28677b502, rt 0xed5005cbc8b0a214
+baddu $t3, $t1, $t2 :: rd 0x42, rs 0x42b0c0a28677b502, rt 0x87750a04ad765040
+baddu $t3, $t1, $t2 :: rd 0x5c, rs 0x42b0c0a28677b502, rt 0xc4c770f630dcca5a
+baddu $t3, $t1, $t2 :: rd 0xba, rs 0x42b0c0a28677b502, rt 0xbb8c035e0de0f0b8
+baddu $t3, $t1, $t2 :: rd 0xad, rs 0x42b0c0a28677b502, rt 0x49fbf6a795b1a5ab
+baddu $t3, $t1, $t2 :: rd 0x51, rs 0x42b0c0a28677b502, rt 0xd685884e76558c4f
+baddu $t3, $t1, $t2 :: rd 0x3c, rs 0x42b0c0a28677b502, rt 0x58300f029cae393a
+baddu $t3, $t1, $t2 :: rd 0xaf, rs 0x42b0c0a28677b502, rt 0xde230867a630f6ad
+baddu $t3, $t1, $t2 :: rd 0x9d, rs 0x42b0c0a28677b502, rt 0x81daf8200468319b
+baddu $t3, $t1, $t2 :: rd 0x52, rs 0x42b0c0a28677b502, rt 0x6778fdf3ba52a850
+baddu $t3, $t1, $t2 :: rd 0xc2, rs 0x42b0c0a28677b502, rt 0xe4627f3fe5255fc0
+baddu $t3, $t1, $t2 :: rd 0x46, rs 0x42b0c0a28677b502, rt 0x7caf83d2880ff344
+baddu $t3, $t1, $t2 :: rd 0x29, rs 0x42b0c0a28677b502, rt 0x24296b75a76fa427
+baddu $t3, $t1, $t2 :: rd 0x91, rs 0x42b0c0a28677b502, rt 0x70dc3454bfe348f
+baddu $t3, $t1, $t2 :: rd 0xd9, rs 0x42b0c0a28677b502, rt 0x3f63daa9afd199d7
+baddu $t3, $t1, $t2 :: rd 0x27, rs 0x42b0c0a28677b502, rt 0xe54750d5d9257f25
+baddu $t3, $t1, $t2 :: rd 0xe5, rs 0x42b0c0a28677b502, rt 0x3ce839a51cf929e3
+baddu $t3, $t1, $t2 :: rd 0xf, rs 0x42b0c0a28677b502, rt 0x84785280dd301d0d
+baddu $t3, $t1, $t2 :: rd 0x89, rs 0x42b0c0a28677b502, rt 0x663d061055833287
+baddu $t3, $t1, $t2 :: rd 0x7b, rs 0x42b0c0a28677b502, rt 0x9ca4bdbd32be479
+baddu $t3, $t1, $t2 :: rd 0x35, rs 0x42b0c0a28677b502, rt 0x36a6f7fa3c0c9f33
+baddu $t3, $t1, $t2 :: rd 0xdc, rs 0x42b0c0a28677b502, rt 0xa8b08fe67a8bc7da
+baddu $t3, $t1, $t2 :: rd 0xa4, rs 0x42b0c0a28677b502, rt 0xb665ed5e7f89e9a2
+baddu $t3, $t1, $t2 :: rd 0x4d, rs 0x42b0c0a28677b502, rt 0x420b34f533734a4b
+baddu $t3, $t1, $t2 :: rd 0xc, rs 0x42b0c0a28677b502, rt 0xeaded5c53dad020a
+baddu $t3, $t1, $t2 :: rd 0xee, rs 0x42b0c0a28677b502, rt 0x2299b0e01d5e68ec
+baddu $t3, $t1, $t2 :: rd 0x8c, rs 0x42b0c0a28677b502, rt 0xe5e9a314be7fa08a
+baddu $t3, $t1, $t2 :: rd 0x38, rs 0x42b0c0a28677b502, rt 0x4aeb6ca0e3459e36
+baddu $t3, $t1, $t2 :: rd 0x93, rs 0x42b0c0a28677b502, rt 0x993138f16cfde991
+baddu $t3, $t1, $t2 :: rd 0xf4, rs 0x42b0c0a28677b502, rt 0x8cff404aede292f2
+baddu $t3, $t1, $t2 :: rd 0x6d, rs 0x42b0c0a28677b502, rt 0x42e9f8548b739b6b
+baddu $t3, $t1, $t2 :: rd 0x63, rs 0x42b0c0a28677b502, rt 0x276af70a0e128561
+baddu $t3, $t1, $t2 :: rd 0x3f, rs 0x42b0c0a28677b502, rt 0x1f9720f946923c3d
+baddu $t3, $t1, $t2 :: rd 0x28, rs 0x42b0c0a28677b502, rt 0xc7a59be7800f3d26
+baddu $t3, $t1, $t2 :: rd 0x6d, rs 0x42b0c0a28677b502, rt 0x743e568d2fcf486b
+baddu $t3, $t1, $t2 :: rd 0xee, rs 0x42b0c0a28677b502, rt 0xdfb254da422346ec
+baddu $t3, $t1, $t2 :: rd 0x4c, rs 0x42b0c0a28677b502, rt 0x3c07af97fba6704a
+baddu $t3, $t1, $t2 :: rd 0x70, rs 0x42b0c0a28677b502, rt 0xd5b2120c6f52416e
+baddu $t3, $t1, $t2 :: rd 0xf7, rs 0x42b0c0a28677b502, rt 0xa388c16272f1f8f5
+baddu $t3, $t1, $t2 :: rd 0x51, rs 0x42b0c0a28677b502, rt 0xb42ad6e659a7b04f
+baddu $t3, $t1, $t2 :: rd 0x9f, rs 0x42b0c0a28677b502, rt 0x53606bb4bf0c999d
+baddu $t3, $t1, $t2 :: rd 0xcb, rs 0x42b0c0a28677b502, rt 0x15ebf6121dca77c9
+baddu $t3, $t1, $t2 :: rd 0x65, rs 0x42b0c0a28677b502, rt 0x14abf36419fb9e63
+baddu $t3, $t1, $t2 :: rd 0xf7, rs 0x42b0c0a28677b502, rt 0x7e35ce6d56e670f5
+baddu $t3, $t1, $t2 :: rd 0xf5, rs 0x42b0c0a28677b502, rt 0xf2e7a490978058f3
+baddu $t3, $t1, $t2 :: rd 0xdf, rs 0x42b0c0a28677b502, rt 0xa3d991b79941dedd
+baddu $t3, $t1, $t2 :: rd 0x29, rs 0x42b0c0a28677b502, rt 0x185b88e0db8d7d27
+baddu $t3, $t1, $t2 :: rd 0x81, rs 0x42b0c0a28677b502, rt 0xd58ecbabde35697f
+baddu $t3, $t1, $t2 :: rd 0xb4, rs 0x42b0c0a28677b502, rt 0x2f7e224a1c170ab2
+baddu $t3, $t1, $t2 :: rd 0x59, rs 0x42b0c0a28677b502, rt 0xfe71fca06c0eb657
+baddu $t3, $t1, $t2 :: rd 0x5d, rs 0x42b0c0a28677b502, rt 0xeed8f3518102315b
+baddu $t3, $t1, $t2 :: rd 0x8b, rs 0x42b0c0a28677b502, rt 0x34fdfc9a9302be89
+baddu $t3, $t1, $t2 :: rd 0x54, rs 0x42b0c0a28677b502, rt 0xc49ee3ad81b5af52
+baddu $t3, $t1, $t2 :: rd 0xee, rs 0x42b0c0a28677b502, rt 0x9e02de4b678930ec
+baddu $t3, $t1, $t2 :: rd 0x68, rs 0x42b0c0a28677b502, rt 0x680cce5fb236b666
+baddu $t3, $t1, $t2 :: rd 0xa2, rs 0x9e705cc51ad8dca0, rt 0x42b0c0a28677b502
+baddu $t3, $t1, $t2 :: rd 0x40, rs 0x9e705cc51ad8dca0, rt 0x9e705cc51ad8dca0
+baddu $t3, $t1, $t2 :: rd 0x20, rs 0x9e705cc51ad8dca0, rt 0x47f505569a08a180
+baddu $t3, $t1, $t2 :: rd 0x37, rs 0x9e705cc51ad8dca0, rt 0x94ff52fc81afa797
+baddu $t3, $t1, $t2 :: rd 0x65, rs 0x9e705cc51ad8dca0, rt 0x556b3ecaccf17ac5
+baddu $t3, $t1, $t2 :: rd 0x6, rs 0x9e705cc51ad8dca0, rt 0x3c2cd9a9cda20766
+baddu $t3, $t1, $t2 :: rd 0xd6, rs 0x9e705cc51ad8dca0, rt 0xd0d070db710cd036
+baddu $t3, $t1, $t2 :: rd 0x47, rs 0x9e705cc51ad8dca0, rt 0x2f39454412d6e4a7
+baddu $t3, $t1, $t2 :: rd 0xb4, rs 0x9e705cc51ad8dca0, rt 0xed5005cbc8b0a214
+baddu $t3, $t1, $t2 :: rd 0xe0, rs 0x9e705cc51ad8dca0, rt 0x87750a04ad765040
+baddu $t3, $t1, $t2 :: rd 0xfa, rs 0x9e705cc51ad8dca0, rt 0xc4c770f630dcca5a
+baddu $t3, $t1, $t2 :: rd 0x58, rs 0x9e705cc51ad8dca0, rt 0xbb8c035e0de0f0b8
+baddu $t3, $t1, $t2 :: rd 0x4b, rs 0x9e705cc51ad8dca0, rt 0x49fbf6a795b1a5ab
+baddu $t3, $t1, $t2 :: rd 0xef, rs 0x9e705cc51ad8dca0, rt 0xd685884e76558c4f
+baddu $t3, $t1, $t2 :: rd 0xda, rs 0x9e705cc51ad8dca0, rt 0x58300f029cae393a
+baddu $t3, $t1, $t2 :: rd 0x4d, rs 0x9e705cc51ad8dca0, rt 0xde230867a630f6ad
+baddu $t3, $t1, $t2 :: rd 0x3b, rs 0x9e705cc51ad8dca0, rt 0x81daf8200468319b
+baddu $t3, $t1, $t2 :: rd 0xf0, rs 0x9e705cc51ad8dca0, rt 0x6778fdf3ba52a850
+baddu $t3, $t1, $t2 :: rd 0x60, rs 0x9e705cc51ad8dca0, rt 0xe4627f3fe5255fc0
+baddu $t3, $t1, $t2 :: rd 0xe4, rs 0x9e705cc51ad8dca0, rt 0x7caf83d2880ff344
+baddu $t3, $t1, $t2 :: rd 0xc7, rs 0x9e705cc51ad8dca0, rt 0x24296b75a76fa427
+baddu $t3, $t1, $t2 :: rd 0x2f, rs 0x9e705cc51ad8dca0, rt 0x70dc3454bfe348f
+baddu $t3, $t1, $t2 :: rd 0x77, rs 0x9e705cc51ad8dca0, rt 0x3f63daa9afd199d7
+baddu $t3, $t1, $t2 :: rd 0xc5, rs 0x9e705cc51ad8dca0, rt 0xe54750d5d9257f25
+baddu $t3, $t1, $t2 :: rd 0x83, rs 0x9e705cc51ad8dca0, rt 0x3ce839a51cf929e3
+baddu $t3, $t1, $t2 :: rd 0xad, rs 0x9e705cc51ad8dca0, rt 0x84785280dd301d0d
+baddu $t3, $t1, $t2 :: rd 0x27, rs 0x9e705cc51ad8dca0, rt 0x663d061055833287
+baddu $t3, $t1, $t2 :: rd 0x19, rs 0x9e705cc51ad8dca0, rt 0x9ca4bdbd32be479
+baddu $t3, $t1, $t2 :: rd 0xd3, rs 0x9e705cc51ad8dca0, rt 0x36a6f7fa3c0c9f33
+baddu $t3, $t1, $t2 :: rd 0x7a, rs 0x9e705cc51ad8dca0, rt 0xa8b08fe67a8bc7da
+baddu $t3, $t1, $t2 :: rd 0x42, rs 0x9e705cc51ad8dca0, rt 0xb665ed5e7f89e9a2
+baddu $t3, $t1, $t2 :: rd 0xeb, rs 0x9e705cc51ad8dca0, rt 0x420b34f533734a4b
+baddu $t3, $t1, $t2 :: rd 0xaa, rs 0x9e705cc51ad8dca0, rt 0xeaded5c53dad020a
+baddu $t3, $t1, $t2 :: rd 0x8c, rs 0x9e705cc51ad8dca0, rt 0x2299b0e01d5e68ec
+baddu $t3, $t1, $t2 :: rd 0x2a, rs 0x9e705cc51ad8dca0, rt 0xe5e9a314be7fa08a
+baddu $t3, $t1, $t2 :: rd 0xd6, rs 0x9e705cc51ad8dca0, rt 0x4aeb6ca0e3459e36
+baddu $t3, $t1, $t2 :: rd 0x31, rs 0x9e705cc51ad8dca0, rt 0x993138f16cfde991
+baddu $t3, $t1, $t2 :: rd 0x92, rs 0x9e705cc51ad8dca0, rt 0x8cff404aede292f2
+baddu $t3, $t1, $t2 :: rd 0xb, rs 0x9e705cc51ad8dca0, rt 0x42e9f8548b739b6b
+baddu $t3, $t1, $t2 :: rd 0x1, rs 0x9e705cc51ad8dca0, rt 0x276af70a0e128561
+baddu $t3, $t1, $t2 :: rd 0xdd, rs 0x9e705cc51ad8dca0, rt 0x1f9720f946923c3d
+baddu $t3, $t1, $t2 :: rd 0xc6, rs 0x9e705cc51ad8dca0, rt 0xc7a59be7800f3d26
+baddu $t3, $t1, $t2 :: rd 0xb, rs 0x9e705cc51ad8dca0, rt 0x743e568d2fcf486b
+baddu $t3, $t1, $t2 :: rd 0x8c, rs 0x9e705cc51ad8dca0, rt 0xdfb254da422346ec
+baddu $t3, $t1, $t2 :: rd 0xea, rs 0x9e705cc51ad8dca0, rt 0x3c07af97fba6704a
+baddu $t3, $t1, $t2 :: rd 0xe, rs 0x9e705cc51ad8dca0, rt 0xd5b2120c6f52416e
+baddu $t3, $t1, $t2 :: rd 0x95, rs 0x9e705cc51ad8dca0, rt 0xa388c16272f1f8f5
+baddu $t3, $t1, $t2 :: rd 0xef, rs 0x9e705cc51ad8dca0, rt 0xb42ad6e659a7b04f
+baddu $t3, $t1, $t2 :: rd 0x3d, rs 0x9e705cc51ad8dca0, rt 0x53606bb4bf0c999d
+baddu $t3, $t1, $t2 :: rd 0x69, rs 0x9e705cc51ad8dca0, rt 0x15ebf6121dca77c9
+baddu $t3, $t1, $t2 :: rd 0x3, rs 0x9e705cc51ad8dca0, rt 0x14abf36419fb9e63
+baddu $t3, $t1, $t2 :: rd 0x95, rs 0x9e705cc51ad8dca0, rt 0x7e35ce6d56e670f5
+baddu $t3, $t1, $t2 :: rd 0x93, rs 0x9e705cc51ad8dca0, rt 0xf2e7a490978058f3
+baddu $t3, $t1, $t2 :: rd 0x7d, rs 0x9e705cc51ad8dca0, rt 0xa3d991b79941dedd
+baddu $t3, $t1, $t2 :: rd 0xc7, rs 0x9e705cc51ad8dca0, rt 0x185b88e0db8d7d27
+baddu $t3, $t1, $t2 :: rd 0x1f, rs 0x9e705cc51ad8dca0, rt 0xd58ecbabde35697f
+baddu $t3, $t1, $t2 :: rd 0x52, rs 0x9e705cc51ad8dca0, rt 0x2f7e224a1c170ab2
+baddu $t3, $t1, $t2 :: rd 0xf7, rs 0x9e705cc51ad8dca0, rt 0xfe71fca06c0eb657
+baddu $t3, $t1, $t2 :: rd 0xfb, rs 0x9e705cc51ad8dca0, rt 0xeed8f3518102315b
+baddu $t3, $t1, $t2 :: rd 0x29, rs 0x9e705cc51ad8dca0, rt 0x34fdfc9a9302be89
+baddu $t3, $t1, $t2 :: rd 0xf2, rs 0x9e705cc51ad8dca0, rt 0xc49ee3ad81b5af52
+baddu $t3, $t1, $t2 :: rd 0x8c, rs 0x9e705cc51ad8dca0, rt 0x9e02de4b678930ec
+baddu $t3, $t1, $t2 :: rd 0x6, rs 0x9e705cc51ad8dca0, rt 0x680cce5fb236b666
+baddu $t3, $t1, $t2 :: rd 0x82, rs 0x47f505569a08a180, rt 0x42b0c0a28677b502
+baddu $t3, $t1, $t2 :: rd 0x20, rs 0x47f505569a08a180, rt 0x9e705cc51ad8dca0
+baddu $t3, $t1, $t2 :: rd 0x0, rs 0x47f505569a08a180, rt 0x47f505569a08a180
+baddu $t3, $t1, $t2 :: rd 0x17, rs 0x47f505569a08a180, rt 0x94ff52fc81afa797
+baddu $t3, $t1, $t2 :: rd 0x45, rs 0x47f505569a08a180, rt 0x556b3ecaccf17ac5
+baddu $t3, $t1, $t2 :: rd 0xe6, rs 0x47f505569a08a180, rt 0x3c2cd9a9cda20766
+baddu $t3, $t1, $t2 :: rd 0xb6, rs 0x47f505569a08a180, rt 0xd0d070db710cd036
+baddu $t3, $t1, $t2 :: rd 0x27, rs 0x47f505569a08a180, rt 0x2f39454412d6e4a7
+baddu $t3, $t1, $t2 :: rd 0x94, rs 0x47f505569a08a180, rt 0xed5005cbc8b0a214
+baddu $t3, $t1, $t2 :: rd 0xc0, rs 0x47f505569a08a180, rt 0x87750a04ad765040
+baddu $t3, $t1, $t2 :: rd 0xda, rs 0x47f505569a08a180, rt 0xc4c770f630dcca5a
+baddu $t3, $t1, $t2 :: rd 0x38, rs 0x47f505569a08a180, rt 0xbb8c035e0de0f0b8
+baddu $t3, $t1, $t2 :: rd 0x2b, rs 0x47f505569a08a180, rt 0x49fbf6a795b1a5ab
+baddu $t3, $t1, $t2 :: rd 0xcf, rs 0x47f505569a08a180, rt 0xd685884e76558c4f
+baddu $t3, $t1, $t2 :: rd 0xba, rs 0x47f505569a08a180, rt 0x58300f029cae393a
+baddu $t3, $t1, $t2 :: rd 0x2d, rs 0x47f505569a08a180, rt 0xde230867a630f6ad
+baddu $t3, $t1, $t2 :: rd 0x1b, rs 0x47f505569a08a180, rt 0x81daf8200468319b
+baddu $t3, $t1, $t2 :: rd 0xd0, rs 0x47f505569a08a180, rt 0x6778fdf3ba52a850
+baddu $t3, $t1, $t2 :: rd 0x40, rs 0x47f505569a08a180, rt 0xe4627f3fe5255fc0
+baddu $t3, $t1, $t2 :: rd 0xc4, rs 0x47f505569a08a180, rt 0x7caf83d2880ff344
+baddu $t3, $t1, $t2 :: rd 0xa7, rs 0x47f505569a08a180, rt 0x24296b75a76fa427
+baddu $t3, $t1, $t2 :: rd 0xf, rs 0x47f505569a08a180, rt 0x70dc3454bfe348f
+baddu $t3, $t1, $t2 :: rd 0x57, rs 0x47f505569a08a180, rt 0x3f63daa9afd199d7
+baddu $t3, $t1, $t2 :: rd 0xa5, rs 0x47f505569a08a180, rt 0xe54750d5d9257f25
+baddu $t3, $t1, $t2 :: rd 0x63, rs 0x47f505569a08a180, rt 0x3ce839a51cf929e3
+baddu $t3, $t1, $t2 :: rd 0x8d, rs 0x47f505569a08a180, rt 0x84785280dd301d0d
+baddu $t3, $t1, $t2 :: rd 0x7, rs 0x47f505569a08a180, rt 0x663d061055833287
+baddu $t3, $t1, $t2 :: rd 0xf9, rs 0x47f505569a08a180, rt 0x9ca4bdbd32be479
+baddu $t3, $t1, $t2 :: rd 0xb3, rs 0x47f505569a08a180, rt 0x36a6f7fa3c0c9f33
+baddu $t3, $t1, $t2 :: rd 0x5a, rs 0x47f505569a08a180, rt 0xa8b08fe67a8bc7da
+baddu $t3, $t1, $t2 :: rd 0x22, rs 0x47f505569a08a180, rt 0xb665ed5e7f89e9a2
+baddu $t3, $t1, $t2 :: rd 0xcb, rs 0x47f505569a08a180, rt 0x420b34f533734a4b
+baddu $t3, $t1, $t2 :: rd 0x8a, rs 0x47f505569a08a180, rt 0xeaded5c53dad020a
+baddu $t3, $t1, $t2 :: rd 0x6c, rs 0x47f505569a08a180, rt 0x2299b0e01d5e68ec
+baddu $t3, $t1, $t2 :: rd 0xa, rs 0x47f505569a08a180, rt 0xe5e9a314be7fa08a
+baddu $t3, $t1, $t2 :: rd 0xb6, rs 0x47f505569a08a180, rt 0x4aeb6ca0e3459e36
+baddu $t3, $t1, $t2 :: rd 0x11, rs 0x47f505569a08a180, rt 0x993138f16cfde991
+baddu $t3, $t1, $t2 :: rd 0x72, rs 0x47f505569a08a180, rt 0x8cff404aede292f2
+baddu $t3, $t1, $t2 :: rd 0xeb, rs 0x47f505569a08a180, rt 0x42e9f8548b739b6b
+baddu $t3, $t1, $t2 :: rd 0xe1, rs 0x47f505569a08a180, rt 0x276af70a0e128561
+baddu $t3, $t1, $t2 :: rd 0xbd, rs 0x47f505569a08a180, rt 0x1f9720f946923c3d
+baddu $t3, $t1, $t2 :: rd 0xa6, rs 0x47f505569a08a180, rt 0xc7a59be7800f3d26
+baddu $t3, $t1, $t2 :: rd 0xeb, rs 0x47f505569a08a180, rt 0x743e568d2fcf486b
+baddu $t3, $t1, $t2 :: rd 0x6c, rs 0x47f505569a08a180, rt 0xdfb254da422346ec
+baddu $t3, $t1, $t2 :: rd 0xca, rs 0x47f505569a08a180, rt 0x3c07af97fba6704a
+baddu $t3, $t1, $t2 :: rd 0xee, rs 0x47f505569a08a180, rt 0xd5b2120c6f52416e
+baddu $t3, $t1, $t2 :: rd 0x75, rs 0x47f505569a08a180, rt 0xa388c16272f1f8f5
+baddu $t3, $t1, $t2 :: rd 0xcf, rs 0x47f505569a08a180, rt 0xb42ad6e659a7b04f
+baddu $t3, $t1, $t2 :: rd 0x1d, rs 0x47f505569a08a180, rt 0x53606bb4bf0c999d
+baddu $t3, $t1, $t2 :: rd 0x49, rs 0x47f505569a08a180, rt 0x15ebf6121dca77c9
+baddu $t3, $t1, $t2 :: rd 0xe3, rs 0x47f505569a08a180, rt 0x14abf36419fb9e63
+baddu $t3, $t1, $t2 :: rd 0x75, rs 0x47f505569a08a180, rt 0x7e35ce6d56e670f5
+baddu $t3, $t1, $t2 :: rd 0x73, rs 0x47f505569a08a180, rt 0xf2e7a490978058f3
+baddu $t3, $t1, $t2 :: rd 0x5d, rs 0x47f505569a08a180, rt 0xa3d991b79941dedd
+baddu $t3, $t1, $t2 :: rd 0xa7, rs 0x47f505569a08a180, rt 0x185b88e0db8d7d27
+baddu $t3, $t1, $t2 :: rd 0xff, rs 0x47f505569a08a180, rt 0xd58ecbabde35697f
+baddu $t3, $t1, $t2 :: rd 0x32, rs 0x47f505569a08a180, rt 0x2f7e224a1c170ab2
+baddu $t3, $t1, $t2 :: rd 0xd7, rs 0x47f505569a08a180, rt 0xfe71fca06c0eb657
+baddu $t3, $t1, $t2 :: rd 0xdb, rs 0x47f505569a08a180, rt 0xeed8f3518102315b
+baddu $t3, $t1, $t2 :: rd 0x9, rs 0x47f505569a08a180, rt 0x34fdfc9a9302be89
+baddu $t3, $t1, $t2 :: rd 0xd2, rs 0x47f505569a08a180, rt 0xc49ee3ad81b5af52
+baddu $t3, $t1, $t2 :: rd 0x6c, rs 0x47f505569a08a180, rt 0x9e02de4b678930ec
+baddu $t3, $t1, $t2 :: rd 0xe6, rs 0x47f505569a08a180, rt 0x680cce5fb236b666
+baddu $t3, $t1, $t2 :: rd 0x99, rs 0x94ff52fc81afa797, rt 0x42b0c0a28677b502
+baddu $t3, $t1, $t2 :: rd 0x37, rs 0x94ff52fc81afa797, rt 0x9e705cc51ad8dca0
+baddu $t3, $t1, $t2 :: rd 0x17, rs 0x94ff52fc81afa797, rt 0x47f505569a08a180
+baddu $t3, $t1, $t2 :: rd 0x2e, rs 0x94ff52fc81afa797, rt 0x94ff52fc81afa797
+baddu $t3, $t1, $t2 :: rd 0x5c, rs 0x94ff52fc81afa797, rt 0x556b3ecaccf17ac5
+baddu $t3, $t1, $t2 :: rd 0xfd, rs 0x94ff52fc81afa797, rt 0x3c2cd9a9cda20766
+baddu $t3, $t1, $t2 :: rd 0xcd, rs 0x94ff52fc81afa797, rt 0xd0d070db710cd036
+baddu $t3, $t1, $t2 :: rd 0x3e, rs 0x94ff52fc81afa797, rt 0x2f39454412d6e4a7
+baddu $t3, $t1, $t2 :: rd 0xab, rs 0x94ff52fc81afa797, rt 0xed5005cbc8b0a214
+baddu $t3, $t1, $t2 :: rd 0xd7, rs 0x94ff52fc81afa797, rt 0x87750a04ad765040
+baddu $t3, $t1, $t2 :: rd 0xf1, rs 0x94ff52fc81afa797, rt 0xc4c770f630dcca5a
+baddu $t3, $t1, $t2 :: rd 0x4f, rs 0x94ff52fc81afa797, rt 0xbb8c035e0de0f0b8
+baddu $t3, $t1, $t2 :: rd 0x42, rs 0x94ff52fc81afa797, rt 0x49fbf6a795b1a5ab
+baddu $t3, $t1, $t2 :: rd 0xe6, rs 0x94ff52fc81afa797, rt 0xd685884e76558c4f
+baddu $t3, $t1, $t2 :: rd 0xd1, rs 0x94ff52fc81afa797, rt 0x58300f029cae393a
+baddu $t3, $t1, $t2 :: rd 0x44, rs 0x94ff52fc81afa797, rt 0xde230867a630f6ad
+baddu $t3, $t1, $t2 :: rd 0x32, rs 0x94ff52fc81afa797, rt 0x81daf8200468319b
+baddu $t3, $t1, $t2 :: rd 0xe7, rs 0x94ff52fc81afa797, rt 0x6778fdf3ba52a850
+baddu $t3, $t1, $t2 :: rd 0x57, rs 0x94ff52fc81afa797, rt 0xe4627f3fe5255fc0
+baddu $t3, $t1, $t2 :: rd 0xdb, rs 0x94ff52fc81afa797, rt 0x7caf83d2880ff344
+baddu $t3, $t1, $t2 :: rd 0xbe, rs 0x94ff52fc81afa797, rt 0x24296b75a76fa427
+baddu $t3, $t1, $t2 :: rd 0x26, rs 0x94ff52fc81afa797, rt 0x70dc3454bfe348f
+baddu $t3, $t1, $t2 :: rd 0x6e, rs 0x94ff52fc81afa797, rt 0x3f63daa9afd199d7
+baddu $t3, $t1, $t2 :: rd 0xbc, rs 0x94ff52fc81afa797, rt 0xe54750d5d9257f25
+baddu $t3, $t1, $t2 :: rd 0x7a, rs 0x94ff52fc81afa797, rt 0x3ce839a51cf929e3
+baddu $t3, $t1, $t2 :: rd 0xa4, rs 0x94ff52fc81afa797, rt 0x84785280dd301d0d
+baddu $t3, $t1, $t2 :: rd 0x1e, rs 0x94ff52fc81afa797, rt 0x663d061055833287
+baddu $t3, $t1, $t2 :: rd 0x10, rs 0x94ff52fc81afa797, rt 0x9ca4bdbd32be479
+baddu $t3, $t1, $t2 :: rd 0xca, rs 0x94ff52fc81afa797, rt 0x36a6f7fa3c0c9f33
+baddu $t3, $t1, $t2 :: rd 0x71, rs 0x94ff52fc81afa797, rt 0xa8b08fe67a8bc7da
+baddu $t3, $t1, $t2 :: rd 0x39, rs 0x94ff52fc81afa797, rt 0xb665ed5e7f89e9a2
+baddu $t3, $t1, $t2 :: rd 0xe2, rs 0x94ff52fc81afa797, rt 0x420b34f533734a4b
+baddu $t3, $t1, $t2 :: rd 0xa1, rs 0x94ff52fc81afa797, rt 0xeaded5c53dad020a
+baddu $t3, $t1, $t2 :: rd 0x83, rs 0x94ff52fc81afa797, rt 0x2299b0e01d5e68ec
+baddu $t3, $t1, $t2 :: rd 0x21, rs 0x94ff52fc81afa797, rt 0xe5e9a314be7fa08a
+baddu $t3, $t1, $t2 :: rd 0xcd, rs 0x94ff52fc81afa797, rt 0x4aeb6ca0e3459e36
+baddu $t3, $t1, $t2 :: rd 0x28, rs 0x94ff52fc81afa797, rt 0x993138f16cfde991
+baddu $t3, $t1, $t2 :: rd 0x89, rs 0x94ff52fc81afa797, rt 0x8cff404aede292f2
+baddu $t3, $t1, $t2 :: rd 0x2, rs 0x94ff52fc81afa797, rt 0x42e9f8548b739b6b
+baddu $t3, $t1, $t2 :: rd 0xf8, rs 0x94ff52fc81afa797, rt 0x276af70a0e128561
+baddu $t3, $t1, $t2 :: rd 0xd4, rs 0x94ff52fc81afa797, rt 0x1f9720f946923c3d
+baddu $t3, $t1, $t2 :: rd 0xbd, rs 0x94ff52fc81afa797, rt 0xc7a59be7800f3d26
+baddu $t3, $t1, $t2 :: rd 0x2, rs 0x94ff52fc81afa797, rt 0x743e568d2fcf486b
+baddu $t3, $t1, $t2 :: rd 0x83, rs 0x94ff52fc81afa797, rt 0xdfb254da422346ec
+baddu $t3, $t1, $t2 :: rd 0xe1, rs 0x94ff52fc81afa797, rt 0x3c07af97fba6704a
+baddu $t3, $t1, $t2 :: rd 0x5, rs 0x94ff52fc81afa797, rt 0xd5b2120c6f52416e
+baddu $t3, $t1, $t2 :: rd 0x8c, rs 0x94ff52fc81afa797, rt 0xa388c16272f1f8f5
+baddu $t3, $t1, $t2 :: rd 0xe6, rs 0x94ff52fc81afa797, rt 0xb42ad6e659a7b04f
+baddu $t3, $t1, $t2 :: rd 0x34, rs 0x94ff52fc81afa797, rt 0x53606bb4bf0c999d
+baddu $t3, $t1, $t2 :: rd 0x60, rs 0x94ff52fc81afa797, rt 0x15ebf6121dca77c9
+baddu $t3, $t1, $t2 :: rd 0xfa, rs 0x94ff52fc81afa797, rt 0x14abf36419fb9e63
+baddu $t3, $t1, $t2 :: rd 0x8c, rs 0x94ff52fc81afa797, rt 0x7e35ce6d56e670f5
+baddu $t3, $t1, $t2 :: rd 0x8a, rs 0x94ff52fc81afa797, rt 0xf2e7a490978058f3
+baddu $t3, $t1, $t2 :: rd 0x74, rs 0x94ff52fc81afa797, rt 0xa3d991b79941dedd
+baddu $t3, $t1, $t2 :: rd 0xbe, rs 0x94ff52fc81afa797, rt 0x185b88e0db8d7d27
+baddu $t3, $t1, $t2 :: rd 0x16, rs 0x94ff52fc81afa797, rt 0xd58ecbabde35697f
+baddu $t3, $t1, $t2 :: rd 0x49, rs 0x94ff52fc81afa797, rt 0x2f7e224a1c170ab2
+baddu $t3, $t1, $t2 :: rd 0xee, rs 0x94ff52fc81afa797, rt 0xfe71fca06c0eb657
+baddu $t3, $t1, $t2 :: rd 0xf2, rs 0x94ff52fc81afa797, rt 0xeed8f3518102315b
+baddu $t3, $t1, $t2 :: rd 0x20, rs 0x94ff52fc81afa797, rt 0x34fdfc9a9302be89
+baddu $t3, $t1, $t2 :: rd 0xe9, rs 0x94ff52fc81afa797, rt 0xc49ee3ad81b5af52
+baddu $t3, $t1, $t2 :: rd 0x83, rs 0x94ff52fc81afa797, rt 0x9e02de4b678930ec
+baddu $t3, $t1, $t2 :: rd 0xfd, rs 0x94ff52fc81afa797, rt 0x680cce5fb236b666
+baddu $t3, $t1, $t2 :: rd 0xc7, rs 0x556b3ecaccf17ac5, rt 0x42b0c0a28677b502
+baddu $t3, $t1, $t2 :: rd 0x65, rs 0x556b3ecaccf17ac5, rt 0x9e705cc51ad8dca0
+baddu $t3, $t1, $t2 :: rd 0x45, rs 0x556b3ecaccf17ac5, rt 0x47f505569a08a180
+baddu $t3, $t1, $t2 :: rd 0x5c, rs 0x556b3ecaccf17ac5, rt 0x94ff52fc81afa797
+baddu $t3, $t1, $t2 :: rd 0x8a, rs 0x556b3ecaccf17ac5, rt 0x556b3ecaccf17ac5
+baddu $t3, $t1, $t2 :: rd 0x2b, rs 0x556b3ecaccf17ac5, rt 0x3c2cd9a9cda20766
+baddu $t3, $t1, $t2 :: rd 0xfb, rs 0x556b3ecaccf17ac5, rt 0xd0d070db710cd036
+baddu $t3, $t1, $t2 :: rd 0x6c, rs 0x556b3ecaccf17ac5, rt 0x2f39454412d6e4a7
+baddu $t3, $t1, $t2 :: rd 0xd9, rs 0x556b3ecaccf17ac5, rt 0xed5005cbc8b0a214
+baddu $t3, $t1, $t2 :: rd 0x5, rs 0x556b3ecaccf17ac5, rt 0x87750a04ad765040
+baddu $t3, $t1, $t2 :: rd 0x1f, rs 0x556b3ecaccf17ac5, rt 0xc4c770f630dcca5a
+baddu $t3, $t1, $t2 :: rd 0x7d, rs 0x556b3ecaccf17ac5, rt 0xbb8c035e0de0f0b8
+baddu $t3, $t1, $t2 :: rd 0x70, rs 0x556b3ecaccf17ac5, rt 0x49fbf6a795b1a5ab
+baddu $t3, $t1, $t2 :: rd 0x14, rs 0x556b3ecaccf17ac5, rt 0xd685884e76558c4f
+baddu $t3, $t1, $t2 :: rd 0xff, rs 0x556b3ecaccf17ac5, rt 0x58300f029cae393a
+baddu $t3, $t1, $t2 :: rd 0x72, rs 0x556b3ecaccf17ac5, rt 0xde230867a630f6ad
+baddu $t3, $t1, $t2 :: rd 0x60, rs 0x556b3ecaccf17ac5, rt 0x81daf8200468319b
+baddu $t3, $t1, $t2 :: rd 0x15, rs 0x556b3ecaccf17ac5, rt 0x6778fdf3ba52a850
+baddu $t3, $t1, $t2 :: rd 0x85, rs 0x556b3ecaccf17ac5, rt 0xe4627f3fe5255fc0
+baddu $t3, $t1, $t2 :: rd 0x9, rs 0x556b3ecaccf17ac5, rt 0x7caf83d2880ff344
+baddu $t3, $t1, $t2 :: rd 0xec, rs 0x556b3ecaccf17ac5, rt 0x24296b75a76fa427
+baddu $t3, $t1, $t2 :: rd 0x54, rs 0x556b3ecaccf17ac5, rt 0x70dc3454bfe348f
+baddu $t3, $t1, $t2 :: rd 0x9c, rs 0x556b3ecaccf17ac5, rt 0x3f63daa9afd199d7
+baddu $t3, $t1, $t2 :: rd 0xea, rs 0x556b3ecaccf17ac5, rt 0xe54750d5d9257f25
+baddu $t3, $t1, $t2 :: rd 0xa8, rs 0x556b3ecaccf17ac5, rt 0x3ce839a51cf929e3
+baddu $t3, $t1, $t2 :: rd 0xd2, rs 0x556b3ecaccf17ac5, rt 0x84785280dd301d0d
+baddu $t3, $t1, $t2 :: rd 0x4c, rs 0x556b3ecaccf17ac5, rt 0x663d061055833287
+baddu $t3, $t1, $t2 :: rd 0x3e, rs 0x556b3ecaccf17ac5, rt 0x9ca4bdbd32be479
+baddu $t3, $t1, $t2 :: rd 0xf8, rs 0x556b3ecaccf17ac5, rt 0x36a6f7fa3c0c9f33
+baddu $t3, $t1, $t2 :: rd 0x9f, rs 0x556b3ecaccf17ac5, rt 0xa8b08fe67a8bc7da
+baddu $t3, $t1, $t2 :: rd 0x67, rs 0x556b3ecaccf17ac5, rt 0xb665ed5e7f89e9a2
+baddu $t3, $t1, $t2 :: rd 0x10, rs 0x556b3ecaccf17ac5, rt 0x420b34f533734a4b
+baddu $t3, $t1, $t2 :: rd 0xcf, rs 0x556b3ecaccf17ac5, rt 0xeaded5c53dad020a
+baddu $t3, $t1, $t2 :: rd 0xb1, rs 0x556b3ecaccf17ac5, rt 0x2299b0e01d5e68ec
+baddu $t3, $t1, $t2 :: rd 0x4f, rs 0x556b3ecaccf17ac5, rt 0xe5e9a314be7fa08a
+baddu $t3, $t1, $t2 :: rd 0xfb, rs 0x556b3ecaccf17ac5, rt 0x4aeb6ca0e3459e36
+baddu $t3, $t1, $t2 :: rd 0x56, rs 0x556b3ecaccf17ac5, rt 0x993138f16cfde991
+baddu $t3, $t1, $t2 :: rd 0xb7, rs 0x556b3ecaccf17ac5, rt 0x8cff404aede292f2
+baddu $t3, $t1, $t2 :: rd 0x30, rs 0x556b3ecaccf17ac5, rt 0x42e9f8548b739b6b
+baddu $t3, $t1, $t2 :: rd 0x26, rs 0x556b3ecaccf17ac5, rt 0x276af70a0e128561
+baddu $t3, $t1, $t2 :: rd 0x2, rs 0x556b3ecaccf17ac5, rt 0x1f9720f946923c3d
+baddu $t3, $t1, $t2 :: rd 0xeb, rs 0x556b3ecaccf17ac5, rt 0xc7a59be7800f3d26
+baddu $t3, $t1, $t2 :: rd 0x30, rs 0x556b3ecaccf17ac5, rt 0x743e568d2fcf486b
+baddu $t3, $t1, $t2 :: rd 0xb1, rs 0x556b3ecaccf17ac5, rt 0xdfb254da422346ec
+baddu $t3, $t1, $t2 :: rd 0xf, rs 0x556b3ecaccf17ac5, rt 0x3c07af97fba6704a
+baddu $t3, $t1, $t2 :: rd 0x33, rs 0x556b3ecaccf17ac5, rt 0xd5b2120c6f52416e
+baddu $t3, $t1, $t2 :: rd 0xba, rs 0x556b3ecaccf17ac5, rt 0xa388c16272f1f8f5
+baddu $t3, $t1, $t2 :: rd 0x14, rs 0x556b3ecaccf17ac5, rt 0xb42ad6e659a7b04f
+baddu $t3, $t1, $t2 :: rd 0x62, rs 0x556b3ecaccf17ac5, rt 0x53606bb4bf0c999d
+baddu $t3, $t1, $t2 :: rd 0x8e, rs 0x556b3ecaccf17ac5, rt 0x15ebf6121dca77c9
+baddu $t3, $t1, $t2 :: rd 0x28, rs 0x556b3ecaccf17ac5, rt 0x14abf36419fb9e63
+baddu $t3, $t1, $t2 :: rd 0xba, rs 0x556b3ecaccf17ac5, rt 0x7e35ce6d56e670f5
+baddu $t3, $t1, $t2 :: rd 0xb8, rs 0x556b3ecaccf17ac5, rt 0xf2e7a490978058f3
+baddu $t3, $t1, $t2 :: rd 0xa2, rs 0x556b3ecaccf17ac5, rt 0xa3d991b79941dedd
+baddu $t3, $t1, $t2 :: rd 0xec, rs 0x556b3ecaccf17ac5, rt 0x185b88e0db8d7d27
+baddu $t3, $t1, $t2 :: rd 0x44, rs 0x556b3ecaccf17ac5, rt 0xd58ecbabde35697f
+baddu $t3, $t1, $t2 :: rd 0x77, rs 0x556b3ecaccf17ac5, rt 0x2f7e224a1c170ab2
+baddu $t3, $t1, $t2 :: rd 0x1c, rs 0x556b3ecaccf17ac5, rt 0xfe71fca06c0eb657
+baddu $t3, $t1, $t2 :: rd 0x20, rs 0x556b3ecaccf17ac5, rt 0xeed8f3518102315b
+baddu $t3, $t1, $t2 :: rd 0x4e, rs 0x556b3ecaccf17ac5, rt 0x34fdfc9a9302be89
+baddu $t3, $t1, $t2 :: rd 0x17, rs 0x556b3ecaccf17ac5, rt 0xc49ee3ad81b5af52
+baddu $t3, $t1, $t2 :: rd 0xb1, rs 0x556b3ecaccf17ac5, rt 0x9e02de4b678930ec
+baddu $t3, $t1, $t2 :: rd 0x2b, rs 0x556b3ecaccf17ac5, rt 0x680cce5fb236b666
+baddu $t3, $t1, $t2 :: rd 0x68, rs 0x3c2cd9a9cda20766, rt 0x42b0c0a28677b502
+baddu $t3, $t1, $t2 :: rd 0x6, rs 0x3c2cd9a9cda20766, rt 0x9e705cc51ad8dca0
+baddu $t3, $t1, $t2 :: rd 0xe6, rs 0x3c2cd9a9cda20766, rt 0x47f505569a08a180
+baddu $t3, $t1, $t2 :: rd 0xfd, rs 0x3c2cd9a9cda20766, rt 0x94ff52fc81afa797
+baddu $t3, $t1, $t2 :: rd 0x2b, rs 0x3c2cd9a9cda20766, rt 0x556b3ecaccf17ac5
+baddu $t3, $t1, $t2 :: rd 0xcc, rs 0x3c2cd9a9cda20766, rt 0x3c2cd9a9cda20766
+baddu $t3, $t1, $t2 :: rd 0x9c, rs 0x3c2cd9a9cda20766, rt 0xd0d070db710cd036
+baddu $t3, $t1, $t2 :: rd 0xd, rs 0x3c2cd9a9cda20766, rt 0x2f39454412d6e4a7
+baddu $t3, $t1, $t2 :: rd 0x7a, rs 0x3c2cd9a9cda20766, rt 0xed5005cbc8b0a214
+baddu $t3, $t1, $t2 :: rd 0xa6, rs 0x3c2cd9a9cda20766, rt 0x87750a04ad765040
+baddu $t3, $t1, $t2 :: rd 0xc0, rs 0x3c2cd9a9cda20766, rt 0xc4c770f630dcca5a
+baddu $t3, $t1, $t2 :: rd 0x1e, rs 0x3c2cd9a9cda20766, rt 0xbb8c035e0de0f0b8
+baddu $t3, $t1, $t2 :: rd 0x11, rs 0x3c2cd9a9cda20766, rt 0x49fbf6a795b1a5ab
+baddu $t3, $t1, $t2 :: rd 0xb5, rs 0x3c2cd9a9cda20766, rt 0xd685884e76558c4f
+baddu $t3, $t1, $t2 :: rd 0xa0, rs 0x3c2cd9a9cda20766, rt 0x58300f029cae393a
+baddu $t3, $t1, $t2 :: rd 0x13, rs 0x3c2cd9a9cda20766, rt 0xde230867a630f6ad
+baddu $t3, $t1, $t2 :: rd 0x1, rs 0x3c2cd9a9cda20766, rt 0x81daf8200468319b
+baddu $t3, $t1, $t2 :: rd 0xb6, rs 0x3c2cd9a9cda20766, rt 0x6778fdf3ba52a850
+baddu $t3, $t1, $t2 :: rd 0x26, rs 0x3c2cd9a9cda20766, rt 0xe4627f3fe5255fc0
+baddu $t3, $t1, $t2 :: rd 0xaa, rs 0x3c2cd9a9cda20766, rt 0x7caf83d2880ff344
+baddu $t3, $t1, $t2 :: rd 0x8d, rs 0x3c2cd9a9cda20766, rt 0x24296b75a76fa427
+baddu $t3, $t1, $t2 :: rd 0xf5, rs 0x3c2cd9a9cda20766, rt 0x70dc3454bfe348f
+baddu $t3, $t1, $t2 :: rd 0x3d, rs 0x3c2cd9a9cda20766, rt 0x3f63daa9afd199d7
+baddu $t3, $t1, $t2 :: rd 0x8b, rs 0x3c2cd9a9cda20766, rt 0xe54750d5d9257f25
+baddu $t3, $t1, $t2 :: rd 0x49, rs 0x3c2cd9a9cda20766, rt 0x3ce839a51cf929e3
+baddu $t3, $t1, $t2 :: rd 0x73, rs 0x3c2cd9a9cda20766, rt 0x84785280dd301d0d
+baddu $t3, $t1, $t2 :: rd 0xed, rs 0x3c2cd9a9cda20766, rt 0x663d061055833287
+baddu $t3, $t1, $t2 :: rd 0xdf, rs 0x3c2cd9a9cda20766, rt 0x9ca4bdbd32be479
+baddu $t3, $t1, $t2 :: rd 0x99, rs 0x3c2cd9a9cda20766, rt 0x36a6f7fa3c0c9f33
+baddu $t3, $t1, $t2 :: rd 0x40, rs 0x3c2cd9a9cda20766, rt 0xa8b08fe67a8bc7da
+baddu $t3, $t1, $t2 :: rd 0x8, rs 0x3c2cd9a9cda20766, rt 0xb665ed5e7f89e9a2
+baddu $t3, $t1, $t2 :: rd 0xb1, rs 0x3c2cd9a9cda20766, rt 0x420b34f533734a4b
+baddu $t3, $t1, $t2 :: rd 0x70, rs 0x3c2cd9a9cda20766, rt 0xeaded5c53dad020a
+baddu $t3, $t1, $t2 :: rd 0x52, rs 0x3c2cd9a9cda20766, rt 0x2299b0e01d5e68ec
+baddu $t3, $t1, $t2 :: rd 0xf0, rs 0x3c2cd9a9cda20766, rt 0xe5e9a314be7fa08a
+baddu $t3, $t1, $t2 :: rd 0x9c, rs 0x3c2cd9a9cda20766, rt 0x4aeb6ca0e3459e36
+baddu $t3, $t1, $t2 :: rd 0xf7, rs 0x3c2cd9a9cda20766, rt 0x993138f16cfde991
+baddu $t3, $t1, $t2 :: rd 0x58, rs 0x3c2cd9a9cda20766, rt 0x8cff404aede292f2
+baddu $t3, $t1, $t2 :: rd 0xd1, rs 0x3c2cd9a9cda20766, rt 0x42e9f8548b739b6b
+baddu $t3, $t1, $t2 :: rd 0xc7, rs 0x3c2cd9a9cda20766, rt 0x276af70a0e128561
+baddu $t3, $t1, $t2 :: rd 0xa3, rs 0x3c2cd9a9cda20766, rt 0x1f9720f946923c3d
+baddu $t3, $t1, $t2 :: rd 0x8c, rs 0x3c2cd9a9cda20766, rt 0xc7a59be7800f3d26
+baddu $t3, $t1, $t2 :: rd 0xd1, rs 0x3c2cd9a9cda20766, rt 0x743e568d2fcf486b
+baddu $t3, $t1, $t2 :: rd 0x52, rs 0x3c2cd9a9cda20766, rt 0xdfb254da422346ec
+baddu $t3, $t1, $t2 :: rd 0xb0, rs 0x3c2cd9a9cda20766, rt 0x3c07af97fba6704a
+baddu $t3, $t1, $t2 :: rd 0xd4, rs 0x3c2cd9a9cda20766, rt 0xd5b2120c6f52416e
+baddu $t3, $t1, $t2 :: rd 0x5b, rs 0x3c2cd9a9cda20766, rt 0xa388c16272f1f8f5
+baddu $t3, $t1, $t2 :: rd 0xb5, rs 0x3c2cd9a9cda20766, rt 0xb42ad6e659a7b04f
+baddu $t3, $t1, $t2 :: rd 0x3, rs 0x3c2cd9a9cda20766, rt 0x53606bb4bf0c999d
+baddu $t3, $t1, $t2 :: rd 0x2f, rs 0x3c2cd9a9cda20766, rt 0x15ebf6121dca77c9
+baddu $t3, $t1, $t2 :: rd 0xc9, rs 0x3c2cd9a9cda20766, rt 0x14abf36419fb9e63
+baddu $t3, $t1, $t2 :: rd 0x5b, rs 0x3c2cd9a9cda20766, rt 0x7e35ce6d56e670f5
+baddu $t3, $t1, $t2 :: rd 0x59, rs 0x3c2cd9a9cda20766, rt 0xf2e7a490978058f3
+baddu $t3, $t1, $t2 :: rd 0x43, rs 0x3c2cd9a9cda20766, rt 0xa3d991b79941dedd
+baddu $t3, $t1, $t2 :: rd 0x8d, rs 0x3c2cd9a9cda20766, rt 0x185b88e0db8d7d27
+baddu $t3, $t1, $t2 :: rd 0xe5, rs 0x3c2cd9a9cda20766, rt 0xd58ecbabde35697f
+baddu $t3, $t1, $t2 :: rd 0x18, rs 0x3c2cd9a9cda20766, rt 0x2f7e224a1c170ab2
+baddu $t3, $t1, $t2 :: rd 0xbd, rs 0x3c2cd9a9cda20766, rt 0xfe71fca06c0eb657
+baddu $t3, $t1, $t2 :: rd 0xc1, rs 0x3c2cd9a9cda20766, rt 0xeed8f3518102315b
+baddu $t3, $t1, $t2 :: rd 0xef, rs 0x3c2cd9a9cda20766, rt 0x34fdfc9a9302be89
+baddu $t3, $t1, $t2 :: rd 0xb8, rs 0x3c2cd9a9cda20766, rt 0xc49ee3ad81b5af52
+baddu $t3, $t1, $t2 :: rd 0x52, rs 0x3c2cd9a9cda20766, rt 0x9e02de4b678930ec
+baddu $t3, $t1, $t2 :: rd 0xcc, rs 0x3c2cd9a9cda20766, rt 0x680cce5fb236b666
+baddu $t3, $t1, $t2 :: rd 0x38, rs 0xd0d070db710cd036, rt 0x42b0c0a28677b502
+baddu $t3, $t1, $t2 :: rd 0xd6, rs 0xd0d070db710cd036, rt 0x9e705cc51ad8dca0
+baddu $t3, $t1, $t2 :: rd 0xb6, rs 0xd0d070db710cd036, rt 0x47f505569a08a180
+baddu $t3, $t1, $t2 :: rd 0xcd, rs 0xd0d070db710cd036, rt 0x94ff52fc81afa797
+baddu $t3, $t1, $t2 :: rd 0xfb, rs 0xd0d070db710cd036, rt 0x556b3ecaccf17ac5
+baddu $t3, $t1, $t2 :: rd 0x9c, rs 0xd0d070db710cd036, rt 0x3c2cd9a9cda20766
+baddu $t3, $t1, $t2 :: rd 0x6c, rs 0xd0d070db710cd036, rt 0xd0d070db710cd036
+baddu $t3, $t1, $t2 :: rd 0xdd, rs 0xd0d070db710cd036, rt 0x2f39454412d6e4a7
+baddu $t3, $t1, $t2 :: rd 0x4a, rs 0xd0d070db710cd036, rt 0xed5005cbc8b0a214
+baddu $t3, $t1, $t2 :: rd 0x76, rs 0xd0d070db710cd036, rt 0x87750a04ad765040
+baddu $t3, $t1, $t2 :: rd 0x90, rs 0xd0d070db710cd036, rt 0xc4c770f630dcca5a
+baddu $t3, $t1, $t2 :: rd 0xee, rs 0xd0d070db710cd036, rt 0xbb8c035e0de0f0b8
+baddu $t3, $t1, $t2 :: rd 0xe1, rs 0xd0d070db710cd036, rt 0x49fbf6a795b1a5ab
+baddu $t3, $t1, $t2 :: rd 0x85, rs 0xd0d070db710cd036, rt 0xd685884e76558c4f
+baddu $t3, $t1, $t2 :: rd 0x70, rs 0xd0d070db710cd036, rt 0x58300f029cae393a
+baddu $t3, $t1, $t2 :: rd 0xe3, rs 0xd0d070db710cd036, rt 0xde230867a630f6ad
+baddu $t3, $t1, $t2 :: rd 0xd1, rs 0xd0d070db710cd036, rt 0x81daf8200468319b
+baddu $t3, $t1, $t2 :: rd 0x86, rs 0xd0d070db710cd036, rt 0x6778fdf3ba52a850
+baddu $t3, $t1, $t2 :: rd 0xf6, rs 0xd0d070db710cd036, rt 0xe4627f3fe5255fc0
+baddu $t3, $t1, $t2 :: rd 0x7a, rs 0xd0d070db710cd036, rt 0x7caf83d2880ff344
+baddu $t3, $t1, $t2 :: rd 0x5d, rs 0xd0d070db710cd036, rt 0x24296b75a76fa427
+baddu $t3, $t1, $t2 :: rd 0xc5, rs 0xd0d070db710cd036, rt 0x70dc3454bfe348f
+baddu $t3, $t1, $t2 :: rd 0xd, rs 0xd0d070db710cd036, rt 0x3f63daa9afd199d7
+baddu $t3, $t1, $t2 :: rd 0x5b, rs 0xd0d070db710cd036, rt 0xe54750d5d9257f25
+baddu $t3, $t1, $t2 :: rd 0x19, rs 0xd0d070db710cd036, rt 0x3ce839a51cf929e3
+baddu $t3, $t1, $t2 :: rd 0x43, rs 0xd0d070db710cd036, rt 0x84785280dd301d0d
+baddu $t3, $t1, $t2 :: rd 0xbd, rs 0xd0d070db710cd036, rt 0x663d061055833287
+baddu $t3, $t1, $t2 :: rd 0xaf, rs 0xd0d070db710cd036, rt 0x9ca4bdbd32be479
+baddu $t3, $t1, $t2 :: rd 0x69, rs 0xd0d070db710cd036, rt 0x36a6f7fa3c0c9f33
+baddu $t3, $t1, $t2 :: rd 0x10, rs 0xd0d070db710cd036, rt 0xa8b08fe67a8bc7da
+baddu $t3, $t1, $t2 :: rd 0xd8, rs 0xd0d070db710cd036, rt 0xb665ed5e7f89e9a2
+baddu $t3, $t1, $t2 :: rd 0x81, rs 0xd0d070db710cd036, rt 0x420b34f533734a4b
+baddu $t3, $t1, $t2 :: rd 0x40, rs 0xd0d070db710cd036, rt 0xeaded5c53dad020a
+baddu $t3, $t1, $t2 :: rd 0x22, rs 0xd0d070db710cd036, rt 0x2299b0e01d5e68ec
+baddu $t3, $t1, $t2 :: rd 0xc0, rs 0xd0d070db710cd036, rt 0xe5e9a314be7fa08a
+baddu $t3, $t1, $t2 :: rd 0x6c, rs 0xd0d070db710cd036, rt 0x4aeb6ca0e3459e36
+baddu $t3, $t1, $t2 :: rd 0xc7, rs 0xd0d070db710cd036, rt 0x993138f16cfde991
+baddu $t3, $t1, $t2 :: rd 0x28, rs 0xd0d070db710cd036, rt 0x8cff404aede292f2
+baddu $t3, $t1, $t2 :: rd 0xa1, rs 0xd0d070db710cd036, rt 0x42e9f8548b739b6b
+baddu $t3, $t1, $t2 :: rd 0x97, rs 0xd0d070db710cd036, rt 0x276af70a0e128561
+baddu $t3, $t1, $t2 :: rd 0x73, rs 0xd0d070db710cd036, rt 0x1f9720f946923c3d
+baddu $t3, $t1, $t2 :: rd 0x5c, rs 0xd0d070db710cd036, rt 0xc7a59be7800f3d26
+baddu $t3, $t1, $t2 :: rd 0xa1, rs 0xd0d070db710cd036, rt 0x743e568d2fcf486b
+baddu $t3, $t1, $t2 :: rd 0x22, rs 0xd0d070db710cd036, rt 0xdfb254da422346ec
+baddu $t3, $t1, $t2 :: rd 0x80, rs 0xd0d070db710cd036, rt 0x3c07af97fba6704a
+baddu $t3, $t1, $t2 :: rd 0xa4, rs 0xd0d070db710cd036, rt 0xd5b2120c6f52416e
+baddu $t3, $t1, $t2 :: rd 0x2b, rs 0xd0d070db710cd036, rt 0xa388c16272f1f8f5
+baddu $t3, $t1, $t2 :: rd 0x85, rs 0xd0d070db710cd036, rt 0xb42ad6e659a7b04f
+baddu $t3, $t1, $t2 :: rd 0xd3, rs 0xd0d070db710cd036, rt 0x53606bb4bf0c999d
+baddu $t3, $t1, $t2 :: rd 0xff, rs 0xd0d070db710cd036, rt 0x15ebf6121dca77c9
+baddu $t3, $t1, $t2 :: rd 0x99, rs 0xd0d070db710cd036, rt 0x14abf36419fb9e63
+baddu $t3, $t1, $t2 :: rd 0x2b, rs 0xd0d070db710cd036, rt 0x7e35ce6d56e670f5
+baddu $t3, $t1, $t2 :: rd 0x29, rs 0xd0d070db710cd036, rt 0xf2e7a490978058f3
+baddu $t3, $t1, $t2 :: rd 0x13, rs 0xd0d070db710cd036, rt 0xa3d991b79941dedd
+baddu $t3, $t1, $t2 :: rd 0x5d, rs 0xd0d070db710cd036, rt 0x185b88e0db8d7d27
+baddu $t3, $t1, $t2 :: rd 0xb5, rs 0xd0d070db710cd036, rt 0xd58ecbabde35697f
+baddu $t3, $t1, $t2 :: rd 0xe8, rs 0xd0d070db710cd036, rt 0x2f7e224a1c170ab2
+baddu $t3, $t1, $t2 :: rd 0x8d, rs 0xd0d070db710cd036, rt 0xfe71fca06c0eb657
+baddu $t3, $t1, $t2 :: rd 0x91, rs 0xd0d070db710cd036, rt 0xeed8f3518102315b
+baddu $t3, $t1, $t2 :: rd 0xbf, rs 0xd0d070db710cd036, rt 0x34fdfc9a9302be89
+baddu $t3, $t1, $t2 :: rd 0x88, rs 0xd0d070db710cd036, rt 0xc49ee3ad81b5af52
+baddu $t3, $t1, $t2 :: rd 0x22, rs 0xd0d070db710cd036, rt 0x9e02de4b678930ec
+baddu $t3, $t1, $t2 :: rd 0x9c, rs 0xd0d070db710cd036, rt 0x680cce5fb236b666
+baddu $t3, $t1, $t2 :: rd 0xa9, rs 0x2f39454412d6e4a7, rt 0x42b0c0a28677b502
+baddu $t3, $t1, $t2 :: rd 0x47, rs 0x2f39454412d6e4a7, rt 0x9e705cc51ad8dca0
+baddu $t3, $t1, $t2 :: rd 0x27, rs 0x2f39454412d6e4a7, rt 0x47f505569a08a180
+baddu $t3, $t1, $t2 :: rd 0x3e, rs 0x2f39454412d6e4a7, rt 0x94ff52fc81afa797
+baddu $t3, $t1, $t2 :: rd 0x6c, rs 0x2f39454412d6e4a7, rt 0x556b3ecaccf17ac5
+baddu $t3, $t1, $t2 :: rd 0xd, rs 0x2f39454412d6e4a7, rt 0x3c2cd9a9cda20766
+baddu $t3, $t1, $t2 :: rd 0xdd, rs 0x2f39454412d6e4a7, rt 0xd0d070db710cd036
+baddu $t3, $t1, $t2 :: rd 0x4e, rs 0x2f39454412d6e4a7, rt 0x2f39454412d6e4a7
+baddu $t3, $t1, $t2 :: rd 0xbb, rs 0x2f39454412d6e4a7, rt 0xed5005cbc8b0a214
+baddu $t3, $t1, $t2 :: rd 0xe7, rs 0x2f39454412d6e4a7, rt 0x87750a04ad765040
+baddu $t3, $t1, $t2 :: rd 0x1, rs 0x2f39454412d6e4a7, rt 0xc4c770f630dcca5a
+baddu $t3, $t1, $t2 :: rd 0x5f, rs 0x2f39454412d6e4a7, rt 0xbb8c035e0de0f0b8
+baddu $t3, $t1, $t2 :: rd 0x52, rs 0x2f39454412d6e4a7, rt 0x49fbf6a795b1a5ab
+baddu $t3, $t1, $t2 :: rd 0xf6, rs 0x2f39454412d6e4a7, rt 0xd685884e76558c4f
+baddu $t3, $t1, $t2 :: rd 0xe1, rs 0x2f39454412d6e4a7, rt 0x58300f029cae393a
+baddu $t3, $t1, $t2 :: rd 0x54, rs 0x2f39454412d6e4a7, rt 0xde230867a630f6ad
+baddu $t3, $t1, $t2 :: rd 0x42, rs 0x2f39454412d6e4a7, rt 0x81daf8200468319b
+baddu $t3, $t1, $t2 :: rd 0xf7, rs 0x2f39454412d6e4a7, rt 0x6778fdf3ba52a850
+baddu $t3, $t1, $t2 :: rd 0x67, rs 0x2f39454412d6e4a7, rt 0xe4627f3fe5255fc0
+baddu $t3, $t1, $t2 :: rd 0xeb, rs 0x2f39454412d6e4a7, rt 0x7caf83d2880ff344
+baddu $t3, $t1, $t2 :: rd 0xce, rs 0x2f39454412d6e4a7, rt 0x24296b75a76fa427
+baddu $t3, $t1, $t2 :: rd 0x36, rs 0x2f39454412d6e4a7, rt 0x70dc3454bfe348f
+baddu $t3, $t1, $t2 :: rd 0x7e, rs 0x2f39454412d6e4a7, rt 0x3f63daa9afd199d7
+baddu $t3, $t1, $t2 :: rd 0xcc, rs 0x2f39454412d6e4a7, rt 0xe54750d5d9257f25
+baddu $t3, $t1, $t2 :: rd 0x8a, rs 0x2f39454412d6e4a7, rt 0x3ce839a51cf929e3
+baddu $t3, $t1, $t2 :: rd 0xb4, rs 0x2f39454412d6e4a7, rt 0x84785280dd301d0d
+baddu $t3, $t1, $t2 :: rd 0x2e, rs 0x2f39454412d6e4a7, rt 0x663d061055833287
+baddu $t3, $t1, $t2 :: rd 0x20, rs 0x2f39454412d6e4a7, rt 0x9ca4bdbd32be479
+baddu $t3, $t1, $t2 :: rd 0xda, rs 0x2f39454412d6e4a7, rt 0x36a6f7fa3c0c9f33
+baddu $t3, $t1, $t2 :: rd 0x81, rs 0x2f39454412d6e4a7, rt 0xa8b08fe67a8bc7da
+baddu $t3, $t1, $t2 :: rd 0x49, rs 0x2f39454412d6e4a7, rt 0xb665ed5e7f89e9a2
+baddu $t3, $t1, $t2 :: rd 0xf2, rs 0x2f39454412d6e4a7, rt 0x420b34f533734a4b
+baddu $t3, $t1, $t2 :: rd 0xb1, rs 0x2f39454412d6e4a7, rt 0xeaded5c53dad020a
+baddu $t3, $t1, $t2 :: rd 0x93, rs 0x2f39454412d6e4a7, rt 0x2299b0e01d5e68ec
+baddu $t3, $t1, $t2 :: rd 0x31, rs 0x2f39454412d6e4a7, rt 0xe5e9a314be7fa08a
+baddu $t3, $t1, $t2 :: rd 0xdd, rs 0x2f39454412d6e4a7, rt 0x4aeb6ca0e3459e36
+baddu $t3, $t1, $t2 :: rd 0x38, rs 0x2f39454412d6e4a7, rt 0x993138f16cfde991
+baddu $t3, $t1, $t2 :: rd 0x99, rs 0x2f39454412d6e4a7, rt 0x8cff404aede292f2
+baddu $t3, $t1, $t2 :: rd 0x12, rs 0x2f39454412d6e4a7, rt 0x42e9f8548b739b6b
+baddu $t3, $t1, $t2 :: rd 0x8, rs 0x2f39454412d6e4a7, rt 0x276af70a0e128561
+baddu $t3, $t1, $t2 :: rd 0xe4, rs 0x2f39454412d6e4a7, rt 0x1f9720f946923c3d
+baddu $t3, $t1, $t2 :: rd 0xcd, rs 0x2f39454412d6e4a7, rt 0xc7a59be7800f3d26
+baddu $t3, $t1, $t2 :: rd 0x12, rs 0x2f39454412d6e4a7, rt 0x743e568d2fcf486b
+baddu $t3, $t1, $t2 :: rd 0x93, rs 0x2f39454412d6e4a7, rt 0xdfb254da422346ec
+baddu $t3, $t1, $t2 :: rd 0xf1, rs 0x2f39454412d6e4a7, rt 0x3c07af97fba6704a
+baddu $t3, $t1, $t2 :: rd 0x15, rs 0x2f39454412d6e4a7, rt 0xd5b2120c6f52416e
+baddu $t3, $t1, $t2 :: rd 0x9c, rs 0x2f39454412d6e4a7, rt 0xa388c16272f1f8f5
+baddu $t3, $t1, $t2 :: rd 0xf6, rs 0x2f39454412d6e4a7, rt 0xb42ad6e659a7b04f
+baddu $t3, $t1, $t2 :: rd 0x44, rs 0x2f39454412d6e4a7, rt 0x53606bb4bf0c999d
+baddu $t3, $t1, $t2 :: rd 0x70, rs 0x2f39454412d6e4a7, rt 0x15ebf6121dca77c9
+baddu $t3, $t1, $t2 :: rd 0xa, rs 0x2f39454412d6e4a7, rt 0x14abf36419fb9e63
+baddu $t3, $t1, $t2 :: rd 0x9c, rs 0x2f39454412d6e4a7, rt 0x7e35ce6d56e670f5
+baddu $t3, $t1, $t2 :: rd 0x9a, rs 0x2f39454412d6e4a7, rt 0xf2e7a490978058f3
+baddu $t3, $t1, $t2 :: rd 0x84, rs 0x2f39454412d6e4a7, rt 0xa3d991b79941dedd
+baddu $t3, $t1, $t2 :: rd 0xce, rs 0x2f39454412d6e4a7, rt 0x185b88e0db8d7d27
+baddu $t3, $t1, $t2 :: rd 0x26, rs 0x2f39454412d6e4a7, rt 0xd58ecbabde35697f
+baddu $t3, $t1, $t2 :: rd 0x59, rs 0x2f39454412d6e4a7, rt 0x2f7e224a1c170ab2
+baddu $t3, $t1, $t2 :: rd 0xfe, rs 0x2f39454412d6e4a7, rt 0xfe71fca06c0eb657
+baddu $t3, $t1, $t2 :: rd 0x2, rs 0x2f39454412d6e4a7, rt 0xeed8f3518102315b
+baddu $t3, $t1, $t2 :: rd 0x30, rs 0x2f39454412d6e4a7, rt 0x34fdfc9a9302be89
+baddu $t3, $t1, $t2 :: rd 0xf9, rs 0x2f39454412d6e4a7, rt 0xc49ee3ad81b5af52
+baddu $t3, $t1, $t2 :: rd 0x93, rs 0x2f39454412d6e4a7, rt 0x9e02de4b678930ec
+baddu $t3, $t1, $t2 :: rd 0xd, rs 0x2f39454412d6e4a7, rt 0x680cce5fb236b666
+baddu $t3, $t1, $t2 :: rd 0x16, rs 0xed5005cbc8b0a214, rt 0x42b0c0a28677b502
+baddu $t3, $t1, $t2 :: rd 0xb4, rs 0xed5005cbc8b0a214, rt 0x9e705cc51ad8dca0
+baddu $t3, $t1, $t2 :: rd 0x94, rs 0xed5005cbc8b0a214, rt 0x47f505569a08a180
+baddu $t3, $t1, $t2 :: rd 0xab, rs 0xed5005cbc8b0a214, rt 0x94ff52fc81afa797
+baddu $t3, $t1, $t2 :: rd 0xd9, rs 0xed5005cbc8b0a214, rt 0x556b3ecaccf17ac5
+baddu $t3, $t1, $t2 :: rd 0x7a, rs 0xed5005cbc8b0a214, rt 0x3c2cd9a9cda20766
+baddu $t3, $t1, $t2 :: rd 0x4a, rs 0xed5005cbc8b0a214, rt 0xd0d070db710cd036
+baddu $t3, $t1, $t2 :: rd 0xbb, rs 0xed5005cbc8b0a214, rt 0x2f39454412d6e4a7
+baddu $t3, $t1, $t2 :: rd 0x28, rs 0xed5005cbc8b0a214, rt 0xed5005cbc8b0a214
+baddu $t3, $t1, $t2 :: rd 0x54, rs 0xed5005cbc8b0a214, rt 0x87750a04ad765040
+baddu $t3, $t1, $t2 :: rd 0x6e, rs 0xed5005cbc8b0a214, rt 0xc4c770f630dcca5a
+baddu $t3, $t1, $t2 :: rd 0xcc, rs 0xed5005cbc8b0a214, rt 0xbb8c035e0de0f0b8
+baddu $t3, $t1, $t2 :: rd 0xbf, rs 0xed5005cbc8b0a214, rt 0x49fbf6a795b1a5ab
+baddu $t3, $t1, $t2 :: rd 0x63, rs 0xed5005cbc8b0a214, rt 0xd685884e76558c4f
+baddu $t3, $t1, $t2 :: rd 0x4e, rs 0xed5005cbc8b0a214, rt 0x58300f029cae393a
+baddu $t3, $t1, $t2 :: rd 0xc1, rs 0xed5005cbc8b0a214, rt 0xde230867a630f6ad
+baddu $t3, $t1, $t2 :: rd 0xaf, rs 0xed5005cbc8b0a214, rt 0x81daf8200468319b
+baddu $t3, $t1, $t2 :: rd 0x64, rs 0xed5005cbc8b0a214, rt 0x6778fdf3ba52a850
+baddu $t3, $t1, $t2 :: rd 0xd4, rs 0xed5005cbc8b0a214, rt 0xe4627f3fe5255fc0
+baddu $t3, $t1, $t2 :: rd 0x58, rs 0xed5005cbc8b0a214, rt 0x7caf83d2880ff344
+baddu $t3, $t1, $t2 :: rd 0x3b, rs 0xed5005cbc8b0a214, rt 0x24296b75a76fa427
+baddu $t3, $t1, $t2 :: rd 0xa3, rs 0xed5005cbc8b0a214, rt 0x70dc3454bfe348f
+baddu $t3, $t1, $t2 :: rd 0xeb, rs 0xed5005cbc8b0a214, rt 0x3f63daa9afd199d7
+baddu $t3, $t1, $t2 :: rd 0x39, rs 0xed5005cbc8b0a214, rt 0xe54750d5d9257f25
+baddu $t3, $t1, $t2 :: rd 0xf7, rs 0xed5005cbc8b0a214, rt 0x3ce839a51cf929e3
+baddu $t3, $t1, $t2 :: rd 0x21, rs 0xed5005cbc8b0a214, rt 0x84785280dd301d0d
+baddu $t3, $t1, $t2 :: rd 0x9b, rs 0xed5005cbc8b0a214, rt 0x663d061055833287
+baddu $t3, $t1, $t2 :: rd 0x8d, rs 0xed5005cbc8b0a214, rt 0x9ca4bdbd32be479
+baddu $t3, $t1, $t2 :: rd 0x47, rs 0xed5005cbc8b0a214, rt 0x36a6f7fa3c0c9f33
+baddu $t3, $t1, $t2 :: rd 0xee, rs 0xed5005cbc8b0a214, rt 0xa8b08fe67a8bc7da
+baddu $t3, $t1, $t2 :: rd 0xb6, rs 0xed5005cbc8b0a214, rt 0xb665ed5e7f89e9a2
+baddu $t3, $t1, $t2 :: rd 0x5f, rs 0xed5005cbc8b0a214, rt 0x420b34f533734a4b
+baddu $t3, $t1, $t2 :: rd 0x1e, rs 0xed5005cbc8b0a214, rt 0xeaded5c53dad020a
+baddu $t3, $t1, $t2 :: rd 0x0, rs 0xed5005cbc8b0a214, rt 0x2299b0e01d5e68ec
+baddu $t3, $t1, $t2 :: rd 0x9e, rs 0xed5005cbc8b0a214, rt 0xe5e9a314be7fa08a
+baddu $t3, $t1, $t2 :: rd 0x4a, rs 0xed5005cbc8b0a214, rt 0x4aeb6ca0e3459e36
+baddu $t3, $t1, $t2 :: rd 0xa5, rs 0xed5005cbc8b0a214, rt 0x993138f16cfde991
+baddu $t3, $t1, $t2 :: rd 0x6, rs 0xed5005cbc8b0a214, rt 0x8cff404aede292f2
+baddu $t3, $t1, $t2 :: rd 0x7f, rs 0xed5005cbc8b0a214, rt 0x42e9f8548b739b6b
+baddu $t3, $t1, $t2 :: rd 0x75, rs 0xed5005cbc8b0a214, rt 0x276af70a0e128561
+baddu $t3, $t1, $t2 :: rd 0x51, rs 0xed5005cbc8b0a214, rt 0x1f9720f946923c3d
+baddu $t3, $t1, $t2 :: rd 0x3a, rs 0xed5005cbc8b0a214, rt 0xc7a59be7800f3d26
+baddu $t3, $t1, $t2 :: rd 0x7f, rs 0xed5005cbc8b0a214, rt 0x743e568d2fcf486b
+baddu $t3, $t1, $t2 :: rd 0x0, rs 0xed5005cbc8b0a214, rt 0xdfb254da422346ec
+baddu $t3, $t1, $t2 :: rd 0x5e, rs 0xed5005cbc8b0a214, rt 0x3c07af97fba6704a
+baddu $t3, $t1, $t2 :: rd 0x82, rs 0xed5005cbc8b0a214, rt 0xd5b2120c6f52416e
+baddu $t3, $t1, $t2 :: rd 0x9, rs 0xed5005cbc8b0a214, rt 0xa388c16272f1f8f5
+baddu $t3, $t1, $t2 :: rd 0x63, rs 0xed5005cbc8b0a214, rt 0xb42ad6e659a7b04f
+baddu $t3, $t1, $t2 :: rd 0xb1, rs 0xed5005cbc8b0a214, rt 0x53606bb4bf0c999d
+baddu $t3, $t1, $t2 :: rd 0xdd, rs 0xed5005cbc8b0a214, rt 0x15ebf6121dca77c9
+baddu $t3, $t1, $t2 :: rd 0x77, rs 0xed5005cbc8b0a214, rt 0x14abf36419fb9e63
+baddu $t3, $t1, $t2 :: rd 0x9, rs 0xed5005cbc8b0a214, rt 0x7e35ce6d56e670f5
+baddu $t3, $t1, $t2 :: rd 0x7, rs 0xed5005cbc8b0a214, rt 0xf2e7a490978058f3
+baddu $t3, $t1, $t2 :: rd 0xf1, rs 0xed5005cbc8b0a214, rt 0xa3d991b79941dedd
+baddu $t3, $t1, $t2 :: rd 0x3b, rs 0xed5005cbc8b0a214, rt 0x185b88e0db8d7d27
+baddu $t3, $t1, $t2 :: rd 0x93, rs 0xed5005cbc8b0a214, rt 0xd58ecbabde35697f
+baddu $t3, $t1, $t2 :: rd 0xc6, rs 0xed5005cbc8b0a214, rt 0x2f7e224a1c170ab2
+baddu $t3, $t1, $t2 :: rd 0x6b, rs 0xed5005cbc8b0a214, rt 0xfe71fca06c0eb657
+baddu $t3, $t1, $t2 :: rd 0x6f, rs 0xed5005cbc8b0a214, rt 0xeed8f3518102315b
+baddu $t3, $t1, $t2 :: rd 0x9d, rs 0xed5005cbc8b0a214, rt 0x34fdfc9a9302be89
+baddu $t3, $t1, $t2 :: rd 0x66, rs 0xed5005cbc8b0a214, rt 0xc49ee3ad81b5af52
+baddu $t3, $t1, $t2 :: rd 0x0, rs 0xed5005cbc8b0a214, rt 0x9e02de4b678930ec
+baddu $t3, $t1, $t2 :: rd 0x7a, rs 0xed5005cbc8b0a214, rt 0x680cce5fb236b666
+baddu $t3, $t1, $t2 :: rd 0x42, rs 0x87750a04ad765040, rt 0x42b0c0a28677b502
+baddu $t3, $t1, $t2 :: rd 0xe0, rs 0x87750a04ad765040, rt 0x9e705cc51ad8dca0
+baddu $t3, $t1, $t2 :: rd 0xc0, rs 0x87750a04ad765040, rt 0x47f505569a08a180
+baddu $t3, $t1, $t2 :: rd 0xd7, rs 0x87750a04ad765040, rt 0x94ff52fc81afa797
+baddu $t3, $t1, $t2 :: rd 0x5, rs 0x87750a04ad765040, rt 0x556b3ecaccf17ac5
+baddu $t3, $t1, $t2 :: rd 0xa6, rs 0x87750a04ad765040, rt 0x3c2cd9a9cda20766
+baddu $t3, $t1, $t2 :: rd 0x76, rs 0x87750a04ad765040, rt 0xd0d070db710cd036
+baddu $t3, $t1, $t2 :: rd 0xe7, rs 0x87750a04ad765040, rt 0x2f39454412d6e4a7
+baddu $t3, $t1, $t2 :: rd 0x54, rs 0x87750a04ad765040, rt 0xed5005cbc8b0a214
+baddu $t3, $t1, $t2 :: rd 0x80, rs 0x87750a04ad765040, rt 0x87750a04ad765040
+baddu $t3, $t1, $t2 :: rd 0x9a, rs 0x87750a04ad765040, rt 0xc4c770f630dcca5a
+baddu $t3, $t1, $t2 :: rd 0xf8, rs 0x87750a04ad765040, rt 0xbb8c035e0de0f0b8
+baddu $t3, $t1, $t2 :: rd 0xeb, rs 0x87750a04ad765040, rt 0x49fbf6a795b1a5ab
+baddu $t3, $t1, $t2 :: rd 0x8f, rs 0x87750a04ad765040, rt 0xd685884e76558c4f
+baddu $t3, $t1, $t2 :: rd 0x7a, rs 0x87750a04ad765040, rt 0x58300f029cae393a
+baddu $t3, $t1, $t2 :: rd 0xed, rs 0x87750a04ad765040, rt 0xde230867a630f6ad
+baddu $t3, $t1, $t2 :: rd 0xdb, rs 0x87750a04ad765040, rt 0x81daf8200468319b
+baddu $t3, $t1, $t2 :: rd 0x90, rs 0x87750a04ad765040, rt 0x6778fdf3ba52a850
+baddu $t3, $t1, $t2 :: rd 0x0, rs 0x87750a04ad765040, rt 0xe4627f3fe5255fc0
+baddu $t3, $t1, $t2 :: rd 0x84, rs 0x87750a04ad765040, rt 0x7caf83d2880ff344
+baddu $t3, $t1, $t2 :: rd 0x67, rs 0x87750a04ad765040, rt 0x24296b75a76fa427
+baddu $t3, $t1, $t2 :: rd 0xcf, rs 0x87750a04ad765040, rt 0x70dc3454bfe348f
+baddu $t3, $t1, $t2 :: rd 0x17, rs 0x87750a04ad765040, rt 0x3f63daa9afd199d7
+baddu $t3, $t1, $t2 :: rd 0x65, rs 0x87750a04ad765040, rt 0xe54750d5d9257f25
+baddu $t3, $t1, $t2 :: rd 0x23, rs 0x87750a04ad765040, rt 0x3ce839a51cf929e3
+baddu $t3, $t1, $t2 :: rd 0x4d, rs 0x87750a04ad765040, rt 0x84785280dd301d0d
+baddu $t3, $t1, $t2 :: rd 0xc7, rs 0x87750a04ad765040, rt 0x663d061055833287
+baddu $t3, $t1, $t2 :: rd 0xb9, rs 0x87750a04ad765040, rt 0x9ca4bdbd32be479
+baddu $t3, $t1, $t2 :: rd 0x73, rs 0x87750a04ad765040, rt 0x36a6f7fa3c0c9f33
+baddu $t3, $t1, $t2 :: rd 0x1a, rs 0x87750a04ad765040, rt 0xa8b08fe67a8bc7da
+baddu $t3, $t1, $t2 :: rd 0xe2, rs 0x87750a04ad765040, rt 0xb665ed5e7f89e9a2
+baddu $t3, $t1, $t2 :: rd 0x8b, rs 0x87750a04ad765040, rt 0x420b34f533734a4b
+baddu $t3, $t1, $t2 :: rd 0x4a, rs 0x87750a04ad765040, rt 0xeaded5c53dad020a
+baddu $t3, $t1, $t2 :: rd 0x2c, rs 0x87750a04ad765040, rt 0x2299b0e01d5e68ec
+baddu $t3, $t1, $t2 :: rd 0xca, rs 0x87750a04ad765040, rt 0xe5e9a314be7fa08a
+baddu $t3, $t1, $t2 :: rd 0x76, rs 0x87750a04ad765040, rt 0x4aeb6ca0e3459e36
+baddu $t3, $t1, $t2 :: rd 0xd1, rs 0x87750a04ad765040, rt 0x993138f16cfde991
+baddu $t3, $t1, $t2 :: rd 0x32, rs 0x87750a04ad765040, rt 0x8cff404aede292f2
+baddu $t3, $t1, $t2 :: rd 0xab, rs 0x87750a04ad765040, rt 0x42e9f8548b739b6b
+baddu $t3, $t1, $t2 :: rd 0xa1, rs 0x87750a04ad765040, rt 0x276af70a0e128561
+baddu $t3, $t1, $t2 :: rd 0x7d, rs 0x87750a04ad765040, rt 0x1f9720f946923c3d
+baddu $t3, $t1, $t2 :: rd 0x66, rs 0x87750a04ad765040, rt 0xc7a59be7800f3d26
+baddu $t3, $t1, $t2 :: rd 0xab, rs 0x87750a04ad765040, rt 0x743e568d2fcf486b
+baddu $t3, $t1, $t2 :: rd 0x2c, rs 0x87750a04ad765040, rt 0xdfb254da422346ec
+baddu $t3, $t1, $t2 :: rd 0x8a, rs 0x87750a04ad765040, rt 0x3c07af97fba6704a
+baddu $t3, $t1, $t2 :: rd 0xae, rs 0x87750a04ad765040, rt 0xd5b2120c6f52416e
+baddu $t3, $t1, $t2 :: rd 0x35, rs 0x87750a04ad765040, rt 0xa388c16272f1f8f5
+baddu $t3, $t1, $t2 :: rd 0x8f, rs 0x87750a04ad765040, rt 0xb42ad6e659a7b04f
+baddu $t3, $t1, $t2 :: rd 0xdd, rs 0x87750a04ad765040, rt 0x53606bb4bf0c999d
+baddu $t3, $t1, $t2 :: rd 0x9, rs 0x87750a04ad765040, rt 0x15ebf6121dca77c9
+baddu $t3, $t1, $t2 :: rd 0xa3, rs 0x87750a04ad765040, rt 0x14abf36419fb9e63
+baddu $t3, $t1, $t2 :: rd 0x35, rs 0x87750a04ad765040, rt 0x7e35ce6d56e670f5
+baddu $t3, $t1, $t2 :: rd 0x33, rs 0x87750a04ad765040, rt 0xf2e7a490978058f3
+baddu $t3, $t1, $t2 :: rd 0x1d, rs 0x87750a04ad765040, rt 0xa3d991b79941dedd
+baddu $t3, $t1, $t2 :: rd 0x67, rs 0x87750a04ad765040, rt 0x185b88e0db8d7d27
+baddu $t3, $t1, $t2 :: rd 0xbf, rs 0x87750a04ad765040, rt 0xd58ecbabde35697f
+baddu $t3, $t1, $t2 :: rd 0xf2, rs 0x87750a04ad765040, rt 0x2f7e224a1c170ab2
+baddu $t3, $t1, $t2 :: rd 0x97, rs 0x87750a04ad765040, rt 0xfe71fca06c0eb657
+baddu $t3, $t1, $t2 :: rd 0x9b, rs 0x87750a04ad765040, rt 0xeed8f3518102315b
+baddu $t3, $t1, $t2 :: rd 0xc9, rs 0x87750a04ad765040, rt 0x34fdfc9a9302be89
+baddu $t3, $t1, $t2 :: rd 0x92, rs 0x87750a04ad765040, rt 0xc49ee3ad81b5af52
+baddu $t3, $t1, $t2 :: rd 0x2c, rs 0x87750a04ad765040, rt 0x9e02de4b678930ec
+baddu $t3, $t1, $t2 :: rd 0xa6, rs 0x87750a04ad765040, rt 0x680cce5fb236b666
+baddu $t3, $t1, $t2 :: rd 0x5c, rs 0xc4c770f630dcca5a, rt 0x42b0c0a28677b502
+baddu $t3, $t1, $t2 :: rd 0xfa, rs 0xc4c770f630dcca5a, rt 0x9e705cc51ad8dca0
+baddu $t3, $t1, $t2 :: rd 0xda, rs 0xc4c770f630dcca5a, rt 0x47f505569a08a180
+baddu $t3, $t1, $t2 :: rd 0xf1, rs 0xc4c770f630dcca5a, rt 0x94ff52fc81afa797
+baddu $t3, $t1, $t2 :: rd 0x1f, rs 0xc4c770f630dcca5a, rt 0x556b3ecaccf17ac5
+baddu $t3, $t1, $t2 :: rd 0xc0, rs 0xc4c770f630dcca5a, rt 0x3c2cd9a9cda20766
+baddu $t3, $t1, $t2 :: rd 0x90, rs 0xc4c770f630dcca5a, rt 0xd0d070db710cd036
+baddu $t3, $t1, $t2 :: rd 0x1, rs 0xc4c770f630dcca5a, rt 0x2f39454412d6e4a7
+baddu $t3, $t1, $t2 :: rd 0x6e, rs 0xc4c770f630dcca5a, rt 0xed5005cbc8b0a214
+baddu $t3, $t1, $t2 :: rd 0x9a, rs 0xc4c770f630dcca5a, rt 0x87750a04ad765040
+baddu $t3, $t1, $t2 :: rd 0xb4, rs 0xc4c770f630dcca5a, rt 0xc4c770f630dcca5a
+baddu $t3, $t1, $t2 :: rd 0x12, rs 0xc4c770f630dcca5a, rt 0xbb8c035e0de0f0b8
+baddu $t3, $t1, $t2 :: rd 0x5, rs 0xc4c770f630dcca5a, rt 0x49fbf6a795b1a5ab
+baddu $t3, $t1, $t2 :: rd 0xa9, rs 0xc4c770f630dcca5a, rt 0xd685884e76558c4f
+baddu $t3, $t1, $t2 :: rd 0x94, rs 0xc4c770f630dcca5a, rt 0x58300f029cae393a
+baddu $t3, $t1, $t2 :: rd 0x7, rs 0xc4c770f630dcca5a, rt 0xde230867a630f6ad
+baddu $t3, $t1, $t2 :: rd 0xf5, rs 0xc4c770f630dcca5a, rt 0x81daf8200468319b
+baddu $t3, $t1, $t2 :: rd 0xaa, rs 0xc4c770f630dcca5a, rt 0x6778fdf3ba52a850
+baddu $t3, $t1, $t2 :: rd 0x1a, rs 0xc4c770f630dcca5a, rt 0xe4627f3fe5255fc0
+baddu $t3, $t1, $t2 :: rd 0x9e, rs 0xc4c770f630dcca5a, rt 0x7caf83d2880ff344
+baddu $t3, $t1, $t2 :: rd 0x81, rs 0xc4c770f630dcca5a, rt 0x24296b75a76fa427
+baddu $t3, $t1, $t2 :: rd 0xe9, rs 0xc4c770f630dcca5a, rt 0x70dc3454bfe348f
+baddu $t3, $t1, $t2 :: rd 0x31, rs 0xc4c770f630dcca5a, rt 0x3f63daa9afd199d7
+baddu $t3, $t1, $t2 :: rd 0x7f, rs 0xc4c770f630dcca5a, rt 0xe54750d5d9257f25
+baddu $t3, $t1, $t2 :: rd 0x3d, rs 0xc4c770f630dcca5a, rt 0x3ce839a51cf929e3
+baddu $t3, $t1, $t2 :: rd 0x67, rs 0xc4c770f630dcca5a, rt 0x84785280dd301d0d
+baddu $t3, $t1, $t2 :: rd 0xe1, rs 0xc4c770f630dcca5a, rt 0x663d061055833287
+baddu $t3, $t1, $t2 :: rd 0xd3, rs 0xc4c770f630dcca5a, rt 0x9ca4bdbd32be479
+baddu $t3, $t1, $t2 :: rd 0x8d, rs 0xc4c770f630dcca5a, rt 0x36a6f7fa3c0c9f33
+baddu $t3, $t1, $t2 :: rd 0x34, rs 0xc4c770f630dcca5a, rt 0xa8b08fe67a8bc7da
+baddu $t3, $t1, $t2 :: rd 0xfc, rs 0xc4c770f630dcca5a, rt 0xb665ed5e7f89e9a2
+baddu $t3, $t1, $t2 :: rd 0xa5, rs 0xc4c770f630dcca5a, rt 0x420b34f533734a4b
+baddu $t3, $t1, $t2 :: rd 0x64, rs 0xc4c770f630dcca5a, rt 0xeaded5c53dad020a
+baddu $t3, $t1, $t2 :: rd 0x46, rs 0xc4c770f630dcca5a, rt 0x2299b0e01d5e68ec
+baddu $t3, $t1, $t2 :: rd 0xe4, rs 0xc4c770f630dcca5a, rt 0xe5e9a314be7fa08a
+baddu $t3, $t1, $t2 :: rd 0x90, rs 0xc4c770f630dcca5a, rt 0x4aeb6ca0e3459e36
+baddu $t3, $t1, $t2 :: rd 0xeb, rs 0xc4c770f630dcca5a, rt 0x993138f16cfde991
+baddu $t3, $t1, $t2 :: rd 0x4c, rs 0xc4c770f630dcca5a, rt 0x8cff404aede292f2
+baddu $t3, $t1, $t2 :: rd 0xc5, rs 0xc4c770f630dcca5a, rt 0x42e9f8548b739b6b
+baddu $t3, $t1, $t2 :: rd 0xbb, rs 0xc4c770f630dcca5a, rt 0x276af70a0e128561
+baddu $t3, $t1, $t2 :: rd 0x97, rs 0xc4c770f630dcca5a, rt 0x1f9720f946923c3d
+baddu $t3, $t1, $t2 :: rd 0x80, rs 0xc4c770f630dcca5a, rt 0xc7a59be7800f3d26
+baddu $t3, $t1, $t2 :: rd 0xc5, rs 0xc4c770f630dcca5a, rt 0x743e568d2fcf486b
+baddu $t3, $t1, $t2 :: rd 0x46, rs 0xc4c770f630dcca5a, rt 0xdfb254da422346ec
+baddu $t3, $t1, $t2 :: rd 0xa4, rs 0xc4c770f630dcca5a, rt 0x3c07af97fba6704a
+baddu $t3, $t1, $t2 :: rd 0xc8, rs 0xc4c770f630dcca5a, rt 0xd5b2120c6f52416e
+baddu $t3, $t1, $t2 :: rd 0x4f, rs 0xc4c770f630dcca5a, rt 0xa388c16272f1f8f5
+baddu $t3, $t1, $t2 :: rd 0xa9, rs 0xc4c770f630dcca5a, rt 0xb42ad6e659a7b04f
+baddu $t3, $t1, $t2 :: rd 0xf7, rs 0xc4c770f630dcca5a, rt 0x53606bb4bf0c999d
+baddu $t3, $t1, $t2 :: rd 0x23, rs 0xc4c770f630dcca5a, rt 0x15ebf6121dca77c9
+baddu $t3, $t1, $t2 :: rd 0xbd, rs 0xc4c770f630dcca5a, rt 0x14abf36419fb9e63
+baddu $t3, $t1, $t2 :: rd 0x4f, rs 0xc4c770f630dcca5a, rt 0x7e35ce6d56e670f5
+baddu $t3, $t1, $t2 :: rd 0x4d, rs 0xc4c770f630dcca5a, rt 0xf2e7a490978058f3
+baddu $t3, $t1, $t2 :: rd 0x37, rs 0xc4c770f630dcca5a, rt 0xa3d991b79941dedd
+baddu $t3, $t1, $t2 :: rd 0x81, rs 0xc4c770f630dcca5a, rt 0x185b88e0db8d7d27
+baddu $t3, $t1, $t2 :: rd 0xd9, rs 0xc4c770f630dcca5a, rt 0xd58ecbabde35697f
+baddu $t3, $t1, $t2 :: rd 0xc, rs 0xc4c770f630dcca5a, rt 0x2f7e224a1c170ab2
+baddu $t3, $t1, $t2 :: rd 0xb1, rs 0xc4c770f630dcca5a, rt 0xfe71fca06c0eb657
+baddu $t3, $t1, $t2 :: rd 0xb5, rs 0xc4c770f630dcca5a, rt 0xeed8f3518102315b
+baddu $t3, $t1, $t2 :: rd 0xe3, rs 0xc4c770f630dcca5a, rt 0x34fdfc9a9302be89
+baddu $t3, $t1, $t2 :: rd 0xac, rs 0xc4c770f630dcca5a, rt 0xc49ee3ad81b5af52
+baddu $t3, $t1, $t2 :: rd 0x46, rs 0xc4c770f630dcca5a, rt 0x9e02de4b678930ec
+baddu $t3, $t1, $t2 :: rd 0xc0, rs 0xc4c770f630dcca5a, rt 0x680cce5fb236b666
+baddu $t3, $t1, $t2 :: rd 0xba, rs 0xbb8c035e0de0f0b8, rt 0x42b0c0a28677b502
+baddu $t3, $t1, $t2 :: rd 0x58, rs 0xbb8c035e0de0f0b8, rt 0x9e705cc51ad8dca0
+baddu $t3, $t1, $t2 :: rd 0x38, rs 0xbb8c035e0de0f0b8, rt 0x47f505569a08a180
+baddu $t3, $t1, $t2 :: rd 0x4f, rs 0xbb8c035e0de0f0b8, rt 0x94ff52fc81afa797
+baddu $t3, $t1, $t2 :: rd 0x7d, rs 0xbb8c035e0de0f0b8, rt 0x556b3ecaccf17ac5
+baddu $t3, $t1, $t2 :: rd 0x1e, rs 0xbb8c035e0de0f0b8, rt 0x3c2cd9a9cda20766
+baddu $t3, $t1, $t2 :: rd 0xee, rs 0xbb8c035e0de0f0b8, rt 0xd0d070db710cd036
+baddu $t3, $t1, $t2 :: rd 0x5f, rs 0xbb8c035e0de0f0b8, rt 0x2f39454412d6e4a7
+baddu $t3, $t1, $t2 :: rd 0xcc, rs 0xbb8c035e0de0f0b8, rt 0xed5005cbc8b0a214
+baddu $t3, $t1, $t2 :: rd 0xf8, rs 0xbb8c035e0de0f0b8, rt 0x87750a04ad765040
+baddu $t3, $t1, $t2 :: rd 0x12, rs 0xbb8c035e0de0f0b8, rt 0xc4c770f630dcca5a
+baddu $t3, $t1, $t2 :: rd 0x70, rs 0xbb8c035e0de0f0b8, rt 0xbb8c035e0de0f0b8
+baddu $t3, $t1, $t2 :: rd 0x63, rs 0xbb8c035e0de0f0b8, rt 0x49fbf6a795b1a5ab
+baddu $t3, $t1, $t2 :: rd 0x7, rs 0xbb8c035e0de0f0b8, rt 0xd685884e76558c4f
+baddu $t3, $t1, $t2 :: rd 0xf2, rs 0xbb8c035e0de0f0b8, rt 0x58300f029cae393a
+baddu $t3, $t1, $t2 :: rd 0x65, rs 0xbb8c035e0de0f0b8, rt 0xde230867a630f6ad
+baddu $t3, $t1, $t2 :: rd 0x53, rs 0xbb8c035e0de0f0b8, rt 0x81daf8200468319b
+baddu $t3, $t1, $t2 :: rd 0x8, rs 0xbb8c035e0de0f0b8, rt 0x6778fdf3ba52a850
+baddu $t3, $t1, $t2 :: rd 0x78, rs 0xbb8c035e0de0f0b8, rt 0xe4627f3fe5255fc0
+baddu $t3, $t1, $t2 :: rd 0xfc, rs 0xbb8c035e0de0f0b8, rt 0x7caf83d2880ff344
+baddu $t3, $t1, $t2 :: rd 0xdf, rs 0xbb8c035e0de0f0b8, rt 0x24296b75a76fa427
+baddu $t3, $t1, $t2 :: rd 0x47, rs 0xbb8c035e0de0f0b8, rt 0x70dc3454bfe348f
+baddu $t3, $t1, $t2 :: rd 0x8f, rs 0xbb8c035e0de0f0b8, rt 0x3f63daa9afd199d7
+baddu $t3, $t1, $t2 :: rd 0xdd, rs 0xbb8c035e0de0f0b8, rt 0xe54750d5d9257f25
+baddu $t3, $t1, $t2 :: rd 0x9b, rs 0xbb8c035e0de0f0b8, rt 0x3ce839a51cf929e3
+baddu $t3, $t1, $t2 :: rd 0xc5, rs 0xbb8c035e0de0f0b8, rt 0x84785280dd301d0d
+baddu $t3, $t1, $t2 :: rd 0x3f, rs 0xbb8c035e0de0f0b8, rt 0x663d061055833287
+baddu $t3, $t1, $t2 :: rd 0x31, rs 0xbb8c035e0de0f0b8, rt 0x9ca4bdbd32be479
+baddu $t3, $t1, $t2 :: rd 0xeb, rs 0xbb8c035e0de0f0b8, rt 0x36a6f7fa3c0c9f33
+baddu $t3, $t1, $t2 :: rd 0x92, rs 0xbb8c035e0de0f0b8, rt 0xa8b08fe67a8bc7da
+baddu $t3, $t1, $t2 :: rd 0x5a, rs 0xbb8c035e0de0f0b8, rt 0xb665ed5e7f89e9a2
+baddu $t3, $t1, $t2 :: rd 0x3, rs 0xbb8c035e0de0f0b8, rt 0x420b34f533734a4b
+baddu $t3, $t1, $t2 :: rd 0xc2, rs 0xbb8c035e0de0f0b8, rt 0xeaded5c53dad020a
+baddu $t3, $t1, $t2 :: rd 0xa4, rs 0xbb8c035e0de0f0b8, rt 0x2299b0e01d5e68ec
+baddu $t3, $t1, $t2 :: rd 0x42, rs 0xbb8c035e0de0f0b8, rt 0xe5e9a314be7fa08a
+baddu $t3, $t1, $t2 :: rd 0xee, rs 0xbb8c035e0de0f0b8, rt 0x4aeb6ca0e3459e36
+baddu $t3, $t1, $t2 :: rd 0x49, rs 0xbb8c035e0de0f0b8, rt 0x993138f16cfde991
+baddu $t3, $t1, $t2 :: rd 0xaa, rs 0xbb8c035e0de0f0b8, rt 0x8cff404aede292f2
+baddu $t3, $t1, $t2 :: rd 0x23, rs 0xbb8c035e0de0f0b8, rt 0x42e9f8548b739b6b
+baddu $t3, $t1, $t2 :: rd 0x19, rs 0xbb8c035e0de0f0b8, rt 0x276af70a0e128561
+baddu $t3, $t1, $t2 :: rd 0xf5, rs 0xbb8c035e0de0f0b8, rt 0x1f9720f946923c3d
+baddu $t3, $t1, $t2 :: rd 0xde, rs 0xbb8c035e0de0f0b8, rt 0xc7a59be7800f3d26
+baddu $t3, $t1, $t2 :: rd 0x23, rs 0xbb8c035e0de0f0b8, rt 0x743e568d2fcf486b
+baddu $t3, $t1, $t2 :: rd 0xa4, rs 0xbb8c035e0de0f0b8, rt 0xdfb254da422346ec
+baddu $t3, $t1, $t2 :: rd 0x2, rs 0xbb8c035e0de0f0b8, rt 0x3c07af97fba6704a
+baddu $t3, $t1, $t2 :: rd 0x26, rs 0xbb8c035e0de0f0b8, rt 0xd5b2120c6f52416e
+baddu $t3, $t1, $t2 :: rd 0xad, rs 0xbb8c035e0de0f0b8, rt 0xa388c16272f1f8f5
+baddu $t3, $t1, $t2 :: rd 0x7, rs 0xbb8c035e0de0f0b8, rt 0xb42ad6e659a7b04f
+baddu $t3, $t1, $t2 :: rd 0x55, rs 0xbb8c035e0de0f0b8, rt 0x53606bb4bf0c999d
+baddu $t3, $t1, $t2 :: rd 0x81, rs 0xbb8c035e0de0f0b8, rt 0x15ebf6121dca77c9
+baddu $t3, $t1, $t2 :: rd 0x1b, rs 0xbb8c035e0de0f0b8, rt 0x14abf36419fb9e63
+baddu $t3, $t1, $t2 :: rd 0xad, rs 0xbb8c035e0de0f0b8, rt 0x7e35ce6d56e670f5
+baddu $t3, $t1, $t2 :: rd 0xab, rs 0xbb8c035e0de0f0b8, rt 0xf2e7a490978058f3
+baddu $t3, $t1, $t2 :: rd 0x95, rs 0xbb8c035e0de0f0b8, rt 0xa3d991b79941dedd
+baddu $t3, $t1, $t2 :: rd 0xdf, rs 0xbb8c035e0de0f0b8, rt 0x185b88e0db8d7d27
+baddu $t3, $t1, $t2 :: rd 0x37, rs 0xbb8c035e0de0f0b8, rt 0xd58ecbabde35697f
+baddu $t3, $t1, $t2 :: rd 0x6a, rs 0xbb8c035e0de0f0b8, rt 0x2f7e224a1c170ab2
+baddu $t3, $t1, $t2 :: rd 0xf, rs 0xbb8c035e0de0f0b8, rt 0xfe71fca06c0eb657
+baddu $t3, $t1, $t2 :: rd 0x13, rs 0xbb8c035e0de0f0b8, rt 0xeed8f3518102315b
+baddu $t3, $t1, $t2 :: rd 0x41, rs 0xbb8c035e0de0f0b8, rt 0x34fdfc9a9302be89
+baddu $t3, $t1, $t2 :: rd 0xa, rs 0xbb8c035e0de0f0b8, rt 0xc49ee3ad81b5af52
+baddu $t3, $t1, $t2 :: rd 0xa4, rs 0xbb8c035e0de0f0b8, rt 0x9e02de4b678930ec
+baddu $t3, $t1, $t2 :: rd 0x1e, rs 0xbb8c035e0de0f0b8, rt 0x680cce5fb236b666
+baddu $t3, $t1, $t2 :: rd 0xad, rs 0x49fbf6a795b1a5ab, rt 0x42b0c0a28677b502
+baddu $t3, $t1, $t2 :: rd 0x4b, rs 0x49fbf6a795b1a5ab, rt 0x9e705cc51ad8dca0
+baddu $t3, $t1, $t2 :: rd 0x2b, rs 0x49fbf6a795b1a5ab, rt 0x47f505569a08a180
+baddu $t3, $t1, $t2 :: rd 0x42, rs 0x49fbf6a795b1a5ab, rt 0x94ff52fc81afa797
+baddu $t3, $t1, $t2 :: rd 0x70, rs 0x49fbf6a795b1a5ab, rt 0x556b3ecaccf17ac5
+baddu $t3, $t1, $t2 :: rd 0x11, rs 0x49fbf6a795b1a5ab, rt 0x3c2cd9a9cda20766
+bad...
[truncated message content] |
|
From: <pa...@fr...> - 2016-12-09 19:26:24
|
Hi After lurking here for a few years, I think it's time that I contributed something a bit more concrete. At the moment I have two ideas: Add C++17 support. I also lurk on the BSI C++ panel. Obviously C++17 is not done yet. The first changes that I see are the additional alignment overloads for operator new, see if polymorphic_allocator needs any support. I haven't been through the changes to threads but I imagine there may be things there as well. Do you think that this is too experimental/bleeding edge for Valgrind? Update FreeBSD support. Currently FreeBSD has a version of Valgrind 10.1 available. Initially I'd just like to get it to build and function. After that I'm sure that there are lots of other things like missing syscalls. I've started looking at merging the existing code (the bitbucket FreeBSD repo and Valgrind head), and it looks like a fairly major task, if nothing else there are many manual merges where Solaris and TileGX have been added. Also early next year I'm planning to retire my venerable Macbook (too old to upgrade beyond Mac OS 10.7.5) and get either another Macbook or a Mac Mini. So that might lead to some work on macOS. One caveat: though this would be on my own time, my employer does, in a different business unit, sell software integrity tools, so I'll need to check that there's no problem there. Regards Paul |
|
From: <sv...@va...> - 2016-12-09 18:52:05
|
Author: petarj
Date: Fri Dec 9 18:51:58 2016
New Revision: 16182
Log:
mips32: minor style change to r16181
Divide one line into two lines that fit "80 columns" rule.
Non-functional change.
Modified:
trunk/none/tests/mips32/round_fpu64.c
Modified: trunk/none/tests/mips32/round_fpu64.c
==============================================================================
--- trunk/none/tests/mips32/round_fpu64.c (original)
+++ trunk/none/tests/mips32/round_fpu64.c Fri Dec 9 18:51:58 2016
@@ -72,7 +72,8 @@
: "$f0" \
);
-#if (__mips==32) && (__mips_isa_rev>=2) && ((__mips_fpr==64) || (__mips_fpr==xx))
+#if (__mips==32) && (__mips_isa_rev>=2) && \
+ ((__mips_fpr==64) || (__mips_fpr==xx))
void set_rounding_mode(round_mode_t mode)
{
switch(mode) {
@@ -190,7 +191,8 @@
int main()
{
-#if (__mips==32) && (__mips_isa_rev>=2) && ((__mips_fpr==64) || (__mips_fpr==xx))
+#if (__mips==32) && (__mips_isa_rev>=2) && \
+ ((__mips_fpr==64) || (__mips_fpr==xx))
flt_round_op_t op;
signal(SIGILL, handler);
/* Test fpu64 mode. */
|
|
From: <sv...@va...> - 2016-12-09 18:35:52
|
Author: petarj
Date: Fri Dec 9 18:35:37 2016
New Revision: 16181
Log:
mips32: allow execution of round_fpu64 test for fpxx
Allow execution of none/tests/mips32/round_fpu64 test if it is built with
-mfpxx. It gets us more coverage eventually.
Modified:
trunk/none/tests/mips32/round_fpu64.c
Modified: trunk/none/tests/mips32/round_fpu64.c
==============================================================================
--- trunk/none/tests/mips32/round_fpu64.c (original)
+++ trunk/none/tests/mips32/round_fpu64.c Fri Dec 9 18:35:37 2016
@@ -72,7 +72,7 @@
: "$f0" \
);
-#if (__mips==32) && (__mips_isa_rev>=2) && (__mips_fpr==64)
+#if (__mips==32) && (__mips_isa_rev>=2) && ((__mips_fpr==64) || (__mips_fpr==xx))
void set_rounding_mode(round_mode_t mode)
{
switch(mode) {
@@ -190,7 +190,7 @@
int main()
{
-#if (__mips==32) && (__mips_isa_rev>=2) && (__mips_fpr==64)
+#if (__mips==32) && (__mips_isa_rev>=2) && ((__mips_fpr==64) || (__mips_fpr==xx))
flt_round_op_t op;
signal(SIGILL, handler);
/* Test fpu64 mode. */
|
|
From: <sv...@va...> - 2016-12-08 14:52:11
|
Author: petarj
Date: Thu Dec 8 14:52:02 2016
New Revision: 16180
Log:
mips: fix VG_(gdbserver_report_signal) arguments
When definition of VG_(gdbserver_report_signal) was changed in r15248,
the function VG_(synth_sigfpe) was omitted from the update.
This change fixes:
gdbserver_tests/mcsignopass (stderr)
gdbserver_tests/mcsignopass (stdoutB)
gdbserver_tests/mcsigpass (stderr)
gdbserver_tests/mcsigpass (stdoutB)
on MIPS platforms.
Modified:
trunk/coregrind/m_signals.c
Modified: trunk/coregrind/m_signals.c
==============================================================================
--- trunk/coregrind/m_signals.c (original)
+++ trunk/coregrind/m_signals.c Thu Dec 8 14:52:02 2016
@@ -2186,7 +2186,7 @@
info.si_signo = VKI_SIGFPE;
info.si_code = code;
- if (VG_(gdbserver_report_signal) (VKI_SIGFPE, tid)) {
+ if (VG_(gdbserver_report_signal) (&info, tid)) {
resume_scheduler(tid);
deliver_signal(tid, &info, &uc);
}
|
|
From: <sv...@va...> - 2016-12-07 16:19:36
|
Author: petarj
Date: Wed Dec 7 16:19:26 2016
New Revision: 3286
Log:
mips: small changes in VexGuestMIPS{32|64}State structs
Move host_EvC_FAILADDR and host_EvC_COUNTER fields to the top of the
structure, similar to other architectures.
This fixes
none/tests/libvexmultiarch_test (stderr)
on some MIPS platforms, as it avoids internal X86/AMD code generator
asserts.
Minor stylish changes included too.
Patch by Aleksandra Karadzic.
Modified:
trunk/priv/host_mips_defs.c
trunk/priv/host_mips_defs.h
trunk/priv/host_mips_isel.c
trunk/pub/libvex_guest_mips32.h
trunk/pub/libvex_guest_mips64.h
Modified: trunk/priv/host_mips_defs.c
==============================================================================
--- trunk/priv/host_mips_defs.c (original)
+++ trunk/priv/host_mips_defs.c Wed Dec 7 16:19:26 2016
@@ -36,9 +36,6 @@
#include "host_generic_regs.h"
#include "host_mips_defs.h"
-/* guest_COND offset. */
-#define COND_OFFSET(__mode64) (__mode64 ? 612 : 448)
-
/* Register number for guest state pointer in host code. */
#define GuestSP 23
Modified: trunk/priv/host_mips_defs.h
==============================================================================
--- trunk/priv/host_mips_defs.h (original)
+++ trunk/priv/host_mips_defs.h Wed Dec 7 16:19:26 2016
@@ -123,6 +123,9 @@
#define StackFramePointer(_mode64) hregMIPS_GPR30(_mode64)
#define StackPointer(_mode64) hregMIPS_GPR29(_mode64)
+/* guest_COND offset */
+#define COND_OFFSET(_mode64) ((_mode64) ? 588 : 448)
+
/* Num registers used for function calls */
#if defined(VGP_mips32_linux)
/* a0, a1, a2, a3 */
Modified: trunk/priv/host_mips_isel.c
==============================================================================
--- trunk/priv/host_mips_isel.c (original)
+++ trunk/priv/host_mips_isel.c Wed Dec 7 16:19:26 2016
@@ -61,9 +61,6 @@
/* FPR register class for mips32/64 */
#define HRcFPR(_mode64) ((_mode64) ? HRcFlt64 : HRcFlt32)
-/* guest_COND offset */
-#define COND_OFFSET(_mode64) ((_mode64) ? 612 : 448)
-
/*---------------------------------------------------------*/
/*--- ISelEnv ---*/
/*---------------------------------------------------------*/
Modified: trunk/pub/libvex_guest_mips32.h
==============================================================================
--- trunk/pub/libvex_guest_mips32.h (original)
+++ trunk/pub/libvex_guest_mips32.h Wed Dec 7 16:19:26 2016
@@ -40,82 +40,86 @@
typedef
struct {
+ /* 0 */ UInt host_EvC_FAILADDR;
+ /* 4 */ UInt host_EvC_COUNTER;
+
/* CPU Registers */
- /* 0 */ UInt guest_r0; /* Hardwired to 0 */
- /* 4 */ UInt guest_r1; /* Assembler temporary */
- /* 8 */ UInt guest_r2; /* Values for function returns ...*/
- /* 12 */ UInt guest_r3; /* ...and expression evaluation */
- /* 16 */ UInt guest_r4; /* Function arguments */
- /* 20 */ UInt guest_r5;
- /* 24 */ UInt guest_r6;
- /* 28 */ UInt guest_r7;
- /* 32 */ UInt guest_r8; /* Temporaries */
- /* 36 */ UInt guest_r9;
- /* 40 */ UInt guest_r10;
- /* 44 */ UInt guest_r11;
- /* 48 */ UInt guest_r12;
- /* 52 */ UInt guest_r13;
- /* 56 */ UInt guest_r14;
- /* 60 */ UInt guest_r15;
- /* 64 */ UInt guest_r16; /* Saved temporaries */
- /* 68 */ UInt guest_r17;
- /* 72 */ UInt guest_r18;
- /* 76 */ UInt guest_r19;
- /* 80 */ UInt guest_r20;
- /* 84 */ UInt guest_r21;
- /* 88 */ UInt guest_r22;
- /* 92 */ UInt guest_r23;
- /* 96 */ UInt guest_r24; /* Temporaries */
- /* 100 */ UInt guest_r25;
- /* 104 */ UInt guest_r26; /* Reserved for OS kernel */
- /* 108 */ UInt guest_r27;
- /* 112 */ UInt guest_r28; /* Global pointer */
- /* 116 */ UInt guest_r29; /* Stack pointer */
- /* 120 */ UInt guest_r30; /* Frame pointer */
- /* 124 */ UInt guest_r31; /* Return address */
- /* 128 */ UInt guest_PC; /* Program counter */
- /* 132 */ UInt guest_HI; /* Multiply and divide register higher result */
- /* 136 */ UInt guest_LO; /* Multiply and divide register lower result */
+ /* 8 */ UInt guest_r0; /* Hardwired to 0. */
+ /* 12 */ UInt guest_r1; /* Assembler temporary */
+ /* 16 */ UInt guest_r2; /* Values for function returns ...*/
+ /* 20 */ UInt guest_r3; /* ... and expression evaluation */
+ /* 24 */ UInt guest_r4; /* Function arguments */
+ /* 28 */ UInt guest_r5;
+ /* 32 */ UInt guest_r6;
+ /* 36 */ UInt guest_r7;
+ /* 40 */ UInt guest_r8; /* Temporaries */
+ /* 44 */ UInt guest_r9;
+ /* 48 */ UInt guest_r10;
+ /* 52 */ UInt guest_r11;
+ /* 56 */ UInt guest_r12;
+ /* 60 */ UInt guest_r13;
+ /* 64 */ UInt guest_r14;
+ /* 68 */ UInt guest_r15;
+ /* 72 */ UInt guest_r16; /* Saved temporaries */
+ /* 76 */ UInt guest_r17;
+ /* 80 */ UInt guest_r18;
+ /* 84 */ UInt guest_r19;
+ /* 88 */ UInt guest_r20;
+ /* 92 */ UInt guest_r21;
+ /* 96 */ UInt guest_r22;
+ /* 100 */ UInt guest_r23;
+ /* 104 */ UInt guest_r24; /* Temporaries */
+ /* 108 */ UInt guest_r25;
+ /* 112 */ UInt guest_r26; /* Reserved for OS kernel */
+ /* 116 */ UInt guest_r27;
+ /* 120 */ UInt guest_r28; /* Global pointer */
+ /* 124 */ UInt guest_r29; /* Stack pointer */
+ /* 128 */ UInt guest_r30; /* Frame pointer */
+ /* 132 */ UInt guest_r31; /* Return address */
+ /* 136 */ UInt guest_PC; /* Program counter */
+ /* 140 */ UInt guest_HI; /* Multiply and divide reg higher result */
+ /* 144 */ UInt guest_LO; /* Multiply and divide reg lower result */
+ /* 148 */ UInt _padding1;
/* FPU Registers */
- /* 144 */ ULong guest_f0; /* Floating point general purpose registers */
- /* 152 */ ULong guest_f1;
- /* 160 */ ULong guest_f2;
- /* 168 */ ULong guest_f3;
- /* 176 */ ULong guest_f4;
- /* 184 */ ULong guest_f5;
- /* 192 */ ULong guest_f6;
- /* 200 */ ULong guest_f7;
- /* 208 */ ULong guest_f8;
- /* 216 */ ULong guest_f9;
- /* 224 */ ULong guest_f10;
- /* 232 */ ULong guest_f11;
- /* 240 */ ULong guest_f12;
- /* 248 */ ULong guest_f13;
- /* 256 */ ULong guest_f14;
- /* 264 */ ULong guest_f15;
- /* 272 */ ULong guest_f16;
- /* 280 */ ULong guest_f17;
- /* 288 */ ULong guest_f18;
- /* 296 */ ULong guest_f19;
- /* 304 */ ULong guest_f20;
- /* 312 */ ULong guest_f21;
- /* 320 */ ULong guest_f22;
- /* 328 */ ULong guest_f23;
- /* 336 */ ULong guest_f24;
- /* 344 */ ULong guest_f25;
- /* 352 */ ULong guest_f26;
- /* 360 */ ULong guest_f27;
- /* 368 */ ULong guest_f28;
- /* 376 */ ULong guest_f29;
- /* 384 */ ULong guest_f30;
- /* 392 */ ULong guest_f31;
-
- /* 400 */ UInt guest_FIR;
- /* 404 */ UInt guest_FCCR;
- /* 408 */ UInt guest_FEXR;
- /* 412 */ UInt guest_FENR;
- /* 416 */ UInt guest_FCSR;
+ /* 152 */ ULong guest_f0; /* Floating point general purpose registers */
+ /* 160 */ ULong guest_f1;
+ /* 168 */ ULong guest_f2;
+ /* 176 */ ULong guest_f3;
+ /* 184 */ ULong guest_f4;
+ /* 192 */ ULong guest_f5;
+ /* 200 */ ULong guest_f6;
+ /* 208 */ ULong guest_f7;
+ /* 216 */ ULong guest_f8;
+ /* 224 */ ULong guest_f9;
+ /* 232 */ ULong guest_f10;
+ /* 240 */ ULong guest_f11;
+ /* 248 */ ULong guest_f12;
+ /* 256 */ ULong guest_f13;
+ /* 264 */ ULong guest_f14;
+ /* 272 */ ULong guest_f15;
+ /* 280 */ ULong guest_f16;
+ /* 288 */ ULong guest_f17;
+ /* 296 */ ULong guest_f18;
+ /* 304 */ ULong guest_f19;
+ /* 312 */ ULong guest_f20;
+ /* 320 */ ULong guest_f21;
+ /* 328 */ ULong guest_f22;
+ /* 336 */ ULong guest_f23;
+ /* 344 */ ULong guest_f24;
+ /* 352 */ ULong guest_f25;
+ /* 360 */ ULong guest_f26;
+ /* 368 */ ULong guest_f27;
+ /* 376 */ ULong guest_f28;
+ /* 384 */ ULong guest_f29;
+ /* 392 */ ULong guest_f30;
+ /* 400 */ ULong guest_f31;
+
+ /* 408 */ UInt guest_FIR;
+ /* 412 */ UInt guest_FCCR;
+ /* 416 */ UInt guest_FEXR;
+ /* 420 */ UInt guest_FENR;
+ /* 424 */ UInt guest_FCSR;
/* TLS pointer for the thread. It's read-only in user space.
On Linux it is set in user space by various thread-related
@@ -126,36 +130,34 @@
environments, the UserLocal register is a pointer to a
thread-specific storage block.
*/
- /* 420 */ UInt guest_ULR;
+ /* 428 */ UInt guest_ULR;
/* Emulation notes */
- /* 424 */ UInt guest_EMNOTE;
+ /* 432 */ UInt guest_EMNOTE;
+
+ /* For clflush: record start and length of area to invalidate. */
+ /* 436 */ UInt guest_CMSTART;
+ /* 440 */ UInt guest_CMLEN;
+ /* 444 */ UInt guest_NRADDR;
- /* For clflush: record start and length of area to invalidate */
- /* 428 */ UInt guest_CMSTART;
- /* 432 */ UInt guest_CMLEN;
- /* 436 */ UInt guest_NRADDR;
-
- /* 440 */ UInt host_EvC_FAILADDR;
- /* 444 */ UInt host_EvC_COUNTER;
- /* 448 */ UInt guest_COND;
+ /* 448 */ UInt guest_COND;
/* MIPS32 DSP ASE(r2) specific registers. */
- /* 452 */ UInt guest_DSPControl;
- /* 456 */ ULong guest_ac0;
- /* 464 */ ULong guest_ac1;
- /* 472 */ ULong guest_ac2;
- /* 480 */ ULong guest_ac3;
+ /* 452 */ UInt guest_DSPControl;
+ /* 456 */ ULong guest_ac0;
+ /* 464 */ ULong guest_ac1;
+ /* 472 */ ULong guest_ac2;
+ /* 480 */ ULong guest_ac3;
- /* 488 */ UInt guest_CP0_status;
+ /* 488 */ UInt guest_CP0_status;
- /* 492 */ UInt padding;
+ /* 492 */ UInt _padding2;
} VexGuestMIPS32State;
/*---------------------------------------------------------------*/
/*--- Utility functions for MIPS32 guest stuff. ---*/
/*---------------------------------------------------------------*/
-/* ALL THE FOLLOWING ARE VISIBLE TO LIBRARY CLIENT */
+/* ALL THE FOLLOWING ARE VISIBLE TO LIBRARY CLIENT. */
/* Initialise all guest MIPS32 state. */
Modified: trunk/pub/libvex_guest_mips64.h
==============================================================================
--- trunk/pub/libvex_guest_mips64.h (original)
+++ trunk/pub/libvex_guest_mips64.h Wed Dec 7 16:19:26 2016
@@ -46,84 +46,87 @@
typedef
struct {
+ /* 0 */ ULong host_EvC_FAILADDR;
+ /* 8 */ UInt host_EvC_COUNTER;
+ /* 12 */ UInt _padding1;
+
/* CPU Registers */
- /* 0 */ ULong guest_r0; /* Hardwired to 0 */
- /* 8 */ ULong guest_r1; /* Assembler temporary */
- /* 16 */ ULong guest_r2; /* Values for function returns ...*/
- /* 24 */ ULong guest_r3; /* ...and expression evaluation */
- /* 32 */ ULong guest_r4; /* Function arguments */
- /* 40 */ ULong guest_r5;
- /* 48 */ ULong guest_r6;
- /* 56 */ ULong guest_r7;
- /* 64 */ ULong guest_r8;
- /* 72 */ ULong guest_r9;
- /* 80 */ ULong guest_r10;
- /* 88 */ ULong guest_r11;
- /* 96 */ ULong guest_r12; /* Temporaries */
- /* 104 */ ULong guest_r13;
- /* 112 */ ULong guest_r14;
- /* 120 */ ULong guest_r15;
- /* 128 */ ULong guest_r16; /* Saved temporaries */
- /* 136 */ ULong guest_r17;
- /* 144 */ ULong guest_r18;
- /* 152 */ ULong guest_r19;
- /* 160 */ ULong guest_r20;
- /* 168 */ ULong guest_r21;
- /* 176 */ ULong guest_r22;
- /* 184 */ ULong guest_r23;
- /* 192 */ ULong guest_r24; /* Temporaries */
- /* 200 */ ULong guest_r25;
- /* 208 */ ULong guest_r26; /* Reserved for OS kernel */
- /* 216 */ ULong guest_r27;
- /* 224 */ ULong guest_r28; /* Global pointer */
- /* 232 */ ULong guest_r29; /* Stack pointer */
- /* 240 */ ULong guest_r30; /* Frame pointer */
- /* 248 */ ULong guest_r31; /* Return address */
- /* 256 */ ULong guest_PC; /* Program counter */
- /* 264 */ ULong guest_HI; /* Multiply and divide reg higher result */
- /* 272 */ ULong guest_LO; /* Multiply and divide reg lower result */
+ /* 16 */ ULong guest_r0; /* Hardwired to 0. */
+ /* 24 */ ULong guest_r1; /* Assembler temporary */
+ /* 32 */ ULong guest_r2; /* Values for function returns ...*/
+ /* 40 */ ULong guest_r3; /* ... and expression evaluation */
+ /* 48 */ ULong guest_r4; /* Function arguments */
+ /* 56 */ ULong guest_r5;
+ /* 64 */ ULong guest_r6;
+ /* 72 */ ULong guest_r7;
+ /* 80 */ ULong guest_r8;
+ /* 88 */ ULong guest_r9;
+ /* 96 */ ULong guest_r10;
+ /* 104 */ ULong guest_r11;
+ /* 112 */ ULong guest_r12; /* Temporaries */
+ /* 120 */ ULong guest_r13;
+ /* 128 */ ULong guest_r14;
+ /* 136 */ ULong guest_r15;
+ /* 144 */ ULong guest_r16; /* Saved temporaries */
+ /* 152 */ ULong guest_r17;
+ /* 160 */ ULong guest_r18;
+ /* 168 */ ULong guest_r19;
+ /* 176 */ ULong guest_r20;
+ /* 184 */ ULong guest_r21;
+ /* 192 */ ULong guest_r22;
+ /* 200 */ ULong guest_r23;
+ /* 208 */ ULong guest_r24; /* Temporaries */
+ /* 216 */ ULong guest_r25;
+ /* 224 */ ULong guest_r26; /* Reserved for OS kernel */
+ /* 232 */ ULong guest_r27;
+ /* 240 */ ULong guest_r28; /* Global pointer */
+ /* 248 */ ULong guest_r29; /* Stack pointer */
+ /* 256 */ ULong guest_r30; /* Frame pointer */
+ /* 264 */ ULong guest_r31; /* Return address */
+ /* 272 */ ULong guest_PC; /* Program counter */
+ /* 280 */ ULong guest_HI; /* Multiply and divide reg higher result */
+ /* 288 */ ULong guest_LO; /* Multiply and divide reg lower result */
/* FPU Registers */
- /* 280 */ ULong guest_f0; /* Floting point gen purpose registers */
- /* 288 */ ULong guest_f1;
- /* 296 */ ULong guest_f2;
- /* 304 */ ULong guest_f3;
- /* 312 */ ULong guest_f4;
- /* 320 */ ULong guest_f5;
- /* 328 */ ULong guest_f6;
- /* 336 */ ULong guest_f7;
- /* 344 */ ULong guest_f8;
- /* 352 */ ULong guest_f9;
- /* 360 */ ULong guest_f10;
- /* 368 */ ULong guest_f11;
- /* 376 */ ULong guest_f12;
- /* 384 */ ULong guest_f13;
- /* 392 */ ULong guest_f14;
- /* 400 */ ULong guest_f15;
- /* 408 */ ULong guest_f16;
- /* 416 */ ULong guest_f17;
- /* 424 */ ULong guest_f18;
- /* 432 */ ULong guest_f19;
- /* 440 */ ULong guest_f20;
- /* 448 */ ULong guest_f21;
- /* 456 */ ULong guest_f22;
- /* 464 */ ULong guest_f23;
- /* 472 */ ULong guest_f24;
- /* 480 */ ULong guest_f25;
- /* 488 */ ULong guest_f26;
- /* 496 */ ULong guest_f27;
- /* 504 */ ULong guest_f28;
- /* 512 */ ULong guest_f29;
- /* 520 */ ULong guest_f30;
- /* 528 */ ULong guest_f31;
-
- /* 536 */ UInt guest_FIR;
- /* 540 */ UInt guest_FCCR;
- /* 544 */ UInt guest_FEXR;
- /* 548 */ UInt guest_FENR;
- /* 552 */ UInt guest_FCSR;
-
- /* 556 */ UInt guest_CP0_status;
+ /* 296 */ ULong guest_f0; /* Floating point gen. purpose registers */
+ /* 304 */ ULong guest_f1;
+ /* 312 */ ULong guest_f2;
+ /* 320 */ ULong guest_f3;
+ /* 328 */ ULong guest_f4;
+ /* 336 */ ULong guest_f5;
+ /* 344 */ ULong guest_f6;
+ /* 352 */ ULong guest_f7;
+ /* 360 */ ULong guest_f8;
+ /* 368 */ ULong guest_f9;
+ /* 376 */ ULong guest_f10;
+ /* 384 */ ULong guest_f11;
+ /* 392 */ ULong guest_f12;
+ /* 400 */ ULong guest_f13;
+ /* 408 */ ULong guest_f14;
+ /* 416 */ ULong guest_f15;
+ /* 424 */ ULong guest_f16;
+ /* 432 */ ULong guest_f17;
+ /* 440 */ ULong guest_f18;
+ /* 448 */ ULong guest_f19;
+ /* 456 */ ULong guest_f20;
+ /* 464 */ ULong guest_f21;
+ /* 472 */ ULong guest_f22;
+ /* 480 */ ULong guest_f23;
+ /* 488 */ ULong guest_f24;
+ /* 496 */ ULong guest_f25;
+ /* 504 */ ULong guest_f26;
+ /* 512 */ ULong guest_f27;
+ /* 520 */ ULong guest_f28;
+ /* 528 */ ULong guest_f29;
+ /* 536 */ ULong guest_f30;
+ /* 544 */ ULong guest_f31;
+
+ /* 552 */ UInt guest_FIR;
+ /* 556 */ UInt guest_FCCR;
+ /* 560 */ UInt guest_FEXR;
+ /* 564 */ UInt guest_FENR;
+ /* 568 */ UInt guest_FCSR;
+ /* 572 */ UInt guest_CP0_status;
/* TLS pointer for the thread. It's read-only in user space. On Linux it
is set in user space by various thread-related syscalls.
@@ -132,29 +135,27 @@
UserLocal register, if it is implemented. In some operating
environments, the UserLocal register is a pointer to a thread-specific
storage block.
- */
- ULong guest_ULR; /* 560 */
+ */
+ /* 576 */ ULong guest_ULR;
/* Emulation notes */
- UInt guest_EMNOTE; /* 568 */
+ /* 584 */ UInt guest_EMNOTE;
+ /* 588 */ UInt guest_COND;
/* For clflush: record start and length of area to invalidate */
- ULong guest_CMSTART; /* 576 */
- ULong guest_CMLEN; /* 584 */
+ /* 592 */ ULong guest_CMSTART;
+ /* 600 */ ULong guest_CMLEN;
- ULong guest_NRADDR; /* 592 */
+ /* 608 */ ULong guest_NRADDR;
- ULong host_EvC_FAILADDR; /* 600 */
- UInt host_EvC_COUNTER; /* 608 */
- UInt guest_COND; /* 612 */
- UInt padding[2];
+ /* 616 */ ULong _padding2;
} VexGuestMIPS64State;
/*---------------------------------------------------------------*/
/*--- Utility functions for MIPS64 guest stuff. ---*/
/*---------------------------------------------------------------*/
-/* ALL THE FOLLOWING ARE VISIBLE TO LIBRARY CLIENT */
+/* ALL THE FOLLOWING ARE VISIBLE TO LIBRARY CLIENT. */
/* Initialise all guest MIPS64 state. */
|
|
From: <sv...@va...> - 2016-12-06 14:07:36
|
Author: petarj
Date: Tue Dec 6 14:07:30 2016
New Revision: 16179
Log:
Update memcheck/tests/amd64-linux ignore list
Add access_below_sp file to the ignore list.
Non-functional change.
Modified:
trunk/memcheck/tests/amd64-linux/ (props changed)
|
|
From: <sv...@va...> - 2016-12-06 13:47:40
|
Author: petarj
Date: Tue Dec 6 13:47:33 2016
New Revision: 16178
Log:
mips: add fadvise64 to svn ignore list
More housekeeping after r16175.
Add fadvise64 executable to the ignore list.
Modified:
trunk/memcheck/tests/mips32/ (props changed)
trunk/memcheck/tests/mips64/ (props changed)
|
|
From: Petar J. <mip...@gm...> - 2016-12-06 13:04:05
|
On Tue, Dec 6, 2016 at 10:50 AM, <sv...@va...> wrote: > Author: mjw > Date: Tue Dec 6 09:50:47 2016 > New Revision: 16177 > > Log: > Adjust line number in mcblocklistsearch.stderrB.exp. > > valgrind svn r16173 "Add CLEAR_CALLER_SAVED_REGS in leak-tree test" > added one extra line to memcheck/tests/leak-tree.c which is used in > gdbserver_tests/mcblocklistsearch.vgtest. Adjust the line numbers in > the exp file to match. > Thanks. Regards, Petar |
|
From: Petar J. <mip...@gm...> - 2016-12-06 13:03:20
|
On Tue, Dec 6, 2016 at 9:47 AM, <sv...@va...> wrote: > Author: iraisr > Date: Tue Dec 6 08:47:30 2016 > New Revision: 16176 > > Log: > Some housekeeping related to recent r16175. > > Modified: > trunk/memcheck/tests/mips32/ (props changed) > trunk/memcheck/tests/mips32/Makefile.am > trunk/memcheck/tests/mips64/ (props changed) > trunk/memcheck/tests/mips64/Makefile.am > > Modified: trunk/memcheck/tests/mips32/Makefile.am > ============================================================================== > --- trunk/memcheck/tests/mips32/Makefile.am (original) > +++ trunk/memcheck/tests/mips32/Makefile.am Tue Dec 6 08:47:30 2016 > @@ -1,6 +1,9 @@ > > include $(top_srcdir)/Makefile.tool-tests.am > > +dist_noinst_SCRIPTS = \ > + filter_stderr > + > EXTRA_DIST = $(noinst_SCRIPTS) \ > fadvise64.stderr.exp fadvise64.stdout.exp fadvise64.vgtest > > > Modified: trunk/memcheck/tests/mips64/Makefile.am > ============================================================================== > --- trunk/memcheck/tests/mips64/Makefile.am (original) > +++ trunk/memcheck/tests/mips64/Makefile.am Tue Dec 6 08:47:30 2016 > @@ -1,6 +1,9 @@ > > include $(top_srcdir)/Makefile.tool-tests.am > > +dist_noinst_SCRIPTS = \ > + filter_stderr > + > EXTRA_DIST = $(noinst_SCRIPTS) \ > fadvise64.stderr.exp fadvise64.stdout.exp fadvise64.vgtest > I missed that, thanks. Regards, Petar |
|
From: <sv...@va...> - 2016-12-06 09:50:54
|
Author: mjw
Date: Tue Dec 6 09:50:47 2016
New Revision: 16177
Log:
Adjust line number in mcblocklistsearch.stderrB.exp.
valgrind svn r16173 "Add CLEAR_CALLER_SAVED_REGS in leak-tree test"
added one extra line to memcheck/tests/leak-tree.c which is used in
gdbserver_tests/mcblocklistsearch.vgtest. Adjust the line numbers in
the exp file to match.
Modified:
trunk/gdbserver_tests/mcblocklistsearch.stderrB.exp
Modified: trunk/gdbserver_tests/mcblocklistsearch.stderrB.exp
==============================================================================
--- trunk/gdbserver_tests/mcblocklistsearch.stderrB.exp (original)
+++ trunk/gdbserver_tests/mcblocklistsearch.stderrB.exp Tue Dec 6 09:50:47 2016
@@ -6,8 +6,8 @@
Breakpoint 1, f () at leak-tree.c:42
42 t->l = mk(); // B
Continuing.
-Breakpoint 2, main () at leak-tree.c:67
-67 PRINT_LEAK_COUNTS(stderr);
+Breakpoint 2, main () at leak-tree.c:68
+68 PRINT_LEAK_COUNTS(stderr);
Searching for pointers to 0x........
*0x........ points at 0x........
Address 0x........ is 0 bytes inside data symbol "t"
|
|
From: <sv...@va...> - 2016-12-06 08:47:37
|
Author: iraisr
Date: Tue Dec 6 08:47:30 2016
New Revision: 16176
Log:
Some housekeeping related to recent r16175.
Modified:
trunk/memcheck/tests/mips32/ (props changed)
trunk/memcheck/tests/mips32/Makefile.am
trunk/memcheck/tests/mips64/ (props changed)
trunk/memcheck/tests/mips64/Makefile.am
Modified: trunk/memcheck/tests/mips32/Makefile.am
==============================================================================
--- trunk/memcheck/tests/mips32/Makefile.am (original)
+++ trunk/memcheck/tests/mips32/Makefile.am Tue Dec 6 08:47:30 2016
@@ -1,6 +1,9 @@
include $(top_srcdir)/Makefile.tool-tests.am
+dist_noinst_SCRIPTS = \
+ filter_stderr
+
EXTRA_DIST = $(noinst_SCRIPTS) \
fadvise64.stderr.exp fadvise64.stdout.exp fadvise64.vgtest
Modified: trunk/memcheck/tests/mips64/Makefile.am
==============================================================================
--- trunk/memcheck/tests/mips64/Makefile.am (original)
+++ trunk/memcheck/tests/mips64/Makefile.am Tue Dec 6 08:47:30 2016
@@ -1,6 +1,9 @@
include $(top_srcdir)/Makefile.tool-tests.am
+dist_noinst_SCRIPTS = \
+ filter_stderr
+
EXTRA_DIST = $(noinst_SCRIPTS) \
fadvise64.stderr.exp fadvise64.stdout.exp fadvise64.vgtest
|
|
From: <sv...@va...> - 2016-12-05 18:00:14
|
Author: petarj
Date: Mon Dec 5 18:00:01 2016
New Revision: 16175
Log:
mips: add regression test for fadvise64
Add regression tests for fadvise64.
Change by A Rikalo.
Added:
trunk/memcheck/tests/mips32/
trunk/memcheck/tests/mips32/Makefile.am
trunk/memcheck/tests/mips32/fadvise64.c
trunk/memcheck/tests/mips32/fadvise64.stderr.exp
trunk/memcheck/tests/mips32/fadvise64.stdout.exp
trunk/memcheck/tests/mips32/fadvise64.vgtest
trunk/memcheck/tests/mips32/filter_stderr (with props)
trunk/memcheck/tests/mips64/
trunk/memcheck/tests/mips64/Makefile.am
trunk/memcheck/tests/mips64/fadvise64.c (with props)
trunk/memcheck/tests/mips64/fadvise64.stderr.exp
trunk/memcheck/tests/mips64/fadvise64.stdout.exp
trunk/memcheck/tests/mips64/fadvise64.vgtest
trunk/memcheck/tests/mips64/filter_stderr (with props)
Modified:
trunk/configure.ac
trunk/memcheck/tests/Makefile.am
Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac (original)
+++ trunk/configure.ac Mon Dec 5 18:00:01 2016
@@ -4356,6 +4356,8 @@
memcheck/tests/ppc32/Makefile
memcheck/tests/ppc64/Makefile
memcheck/tests/s390x/Makefile
+ memcheck/tests/mips32/Makefile
+ memcheck/tests/mips64/Makefile
memcheck/tests/vbit-test/Makefile
cachegrind/Makefile
cachegrind/tests/Makefile
Modified: trunk/memcheck/tests/Makefile.am
==============================================================================
--- trunk/memcheck/tests/Makefile.am (original)
+++ trunk/memcheck/tests/Makefile.am Mon Dec 5 18:00:01 2016
@@ -10,6 +10,12 @@
if VGCONF_ARCHS_INCLUDE_AMD64
SUBDIRS += amd64
endif
+if VGCONF_ARCHS_INCLUDE_MIPS32
+SUBDIRS += mips32
+endif
+if VGCONF_ARCHS_INCLUDE_MIPS64
+SUBDIRS += mips64
+endif
if VGCONF_ARCHS_INCLUDE_PPC32
SUBDIRS += ppc32
endif
@@ -50,7 +56,7 @@
DIST_SUBDIRS = x86 amd64 ppc32 ppc64 s390x linux \
darwin solaris x86-linux amd64-linux arm64-linux \
- x86-solaris amd64-solaris \
+ x86-solaris amd64-solaris mips32 mips64 \
common .
dist_noinst_SCRIPTS = \
Added: trunk/memcheck/tests/mips32/Makefile.am
==============================================================================
--- trunk/memcheck/tests/mips32/Makefile.am (added)
+++ trunk/memcheck/tests/mips32/Makefile.am Mon Dec 5 18:00:01 2016
@@ -0,0 +1,8 @@
+
+include $(top_srcdir)/Makefile.tool-tests.am
+
+EXTRA_DIST = $(noinst_SCRIPTS) \
+ fadvise64.stderr.exp fadvise64.stdout.exp fadvise64.vgtest
+
+check_PROGRAMS = \
+ fadvise64
Added: trunk/memcheck/tests/mips32/fadvise64.c
==============================================================================
--- trunk/memcheck/tests/mips32/fadvise64.c (added)
+++ trunk/memcheck/tests/mips32/fadvise64.c Mon Dec 5 18:00:01 2016
@@ -0,0 +1,21 @@
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+
+#define BAD_FD 42
+
+int main() {
+ int x;
+
+ (void)posix_fadvise(x, 1, 2, POSIX_FADV_NORMAL);
+ (void)posix_fadvise(BAD_FD, x, 2, POSIX_FADV_NORMAL);
+ (void)posix_fadvise(BAD_FD, 1, x, POSIX_FADV_NORMAL);
+ (void)posix_fadvise(BAD_FD, 1, 2, x);
+
+ x = posix_fadvise(BAD_FD, 1, 2, POSIX_FADV_NORMAL);
+
+ if (x != EBADF)
+ fprintf(stderr, "Unexpected return value: %d\n", x);
+
+ return 0;
+}
Added: trunk/memcheck/tests/mips32/fadvise64.stderr.exp
==============================================================================
--- trunk/memcheck/tests/mips32/fadvise64.stderr.exp (added)
+++ trunk/memcheck/tests/mips32/fadvise64.stderr.exp Mon Dec 5 18:00:01 2016
@@ -0,0 +1,24 @@
+Syscall param fadvise64(fd) contains uninitialised byte(s)
+ ...
+ by 0x........: main (fadvise64.c:10)
+
+Syscall param fadvise64(offset_low) contains uninitialised byte(s)
+ ...
+ by 0x........: main (fadvise64.c:11)
+
+Syscall param fadvise64(offset_high) contains uninitialised byte(s)
+ ...
+ by 0x........: main (fadvise64.c:11)
+
+Syscall param fadvise64(len_low) contains uninitialised byte(s)
+ ...
+ by 0x........: main (fadvise64.c:12)
+
+Syscall param fadvise64(len_high) contains uninitialised byte(s)
+ ...
+ by 0x........: main (fadvise64.c:12)
+
+Syscall param fadvise64(advice) contains uninitialised byte(s)
+ ...
+ by 0x........: main (fadvise64.c:13)
+
Added: trunk/memcheck/tests/mips32/fadvise64.stdout.exp
==============================================================================
(empty)
Added: trunk/memcheck/tests/mips32/fadvise64.vgtest
==============================================================================
--- trunk/memcheck/tests/mips32/fadvise64.vgtest (added)
+++ trunk/memcheck/tests/mips32/fadvise64.vgtest Mon Dec 5 18:00:01 2016
@@ -0,0 +1,2 @@
+prog: fadvise64
+vgopts: -q
Added: trunk/memcheck/tests/mips32/filter_stderr
==============================================================================
--- trunk/memcheck/tests/mips32/filter_stderr (added)
+++ trunk/memcheck/tests/mips32/filter_stderr Mon Dec 5 18:00:01 2016
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+../filter_stderr "$@"
Added: trunk/memcheck/tests/mips64/Makefile.am
==============================================================================
--- trunk/memcheck/tests/mips64/Makefile.am (added)
+++ trunk/memcheck/tests/mips64/Makefile.am Mon Dec 5 18:00:01 2016
@@ -0,0 +1,8 @@
+
+include $(top_srcdir)/Makefile.tool-tests.am
+
+EXTRA_DIST = $(noinst_SCRIPTS) \
+ fadvise64.stderr.exp fadvise64.stdout.exp fadvise64.vgtest
+
+check_PROGRAMS = \
+ fadvise64
Added: trunk/memcheck/tests/mips64/fadvise64.c
==============================================================================
--- trunk/memcheck/tests/mips64/fadvise64.c (added)
+++ trunk/memcheck/tests/mips64/fadvise64.c Mon Dec 5 18:00:01 2016
@@ -0,0 +1 @@
+link ../mips32/fadvise64.c
\ No newline at end of file
Added: trunk/memcheck/tests/mips64/fadvise64.stderr.exp
==============================================================================
--- trunk/memcheck/tests/mips64/fadvise64.stderr.exp (added)
+++ trunk/memcheck/tests/mips64/fadvise64.stderr.exp Mon Dec 5 18:00:01 2016
@@ -0,0 +1,16 @@
+Syscall param fadvise64(fd) contains uninitialised byte(s)
+ ...
+ by 0x........: main (fadvise64.c:10)
+
+Syscall param fadvise64(offset) contains uninitialised byte(s)
+ ...
+ by 0x........: main (fadvise64.c:11)
+
+Syscall param fadvise64(len) contains uninitialised byte(s)
+ ...
+ by 0x........: main (fadvise64.c:12)
+
+Syscall param fadvise64(advice) contains uninitialised byte(s)
+ ...
+ by 0x........: main (fadvise64.c:13)
+
Added: trunk/memcheck/tests/mips64/fadvise64.stdout.exp
==============================================================================
(empty)
Added: trunk/memcheck/tests/mips64/fadvise64.vgtest
==============================================================================
--- trunk/memcheck/tests/mips64/fadvise64.vgtest (added)
+++ trunk/memcheck/tests/mips64/fadvise64.vgtest Mon Dec 5 18:00:01 2016
@@ -0,0 +1,2 @@
+prog: fadvise64
+vgopts: -q
Added: trunk/memcheck/tests/mips64/filter_stderr
==============================================================================
--- trunk/memcheck/tests/mips64/filter_stderr (added)
+++ trunk/memcheck/tests/mips64/filter_stderr Mon Dec 5 18:00:01 2016
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+../filter_stderr "$@"
|
|
From: <sv...@va...> - 2016-12-05 16:54:14
|
Author: petarj
Date: Mon Dec 5 16:54:06 2016
New Revision: 16174
Log:
Remove second definition of typedef ‘Time’
Remove redefinition of typedef ‘Time’ already defined in pub_tool_xtree.h
This fixes warning/error:
ms_main.c:633:14: warning: redefinition of typedef ‘Time’ [-Wpedantic]
typedef Long Time;
Modified:
trunk/massif/ms_main.c
Modified: trunk/massif/ms_main.c
==============================================================================
--- trunk/massif/ms_main.c (original)
+++ trunk/massif/ms_main.c Mon Dec 5 16:54:06 2016
@@ -627,11 +627,6 @@
// limit again, we again cull and then take them even more slowly, and so
// on.
-// Time is measured either in i or ms or bytes, depending on the --time-unit
-// option. It's a Long because it can exceed 32-bits reasonably easily, and
-// because we need to allow negative values to represent unset times.
-typedef Long Time;
-
#define UNUSED_SNAPSHOT_TIME -333 // A conspicuous negative number.
typedef
|
|
From: <sv...@va...> - 2016-12-05 16:29:31
|
Author: petarj
Date: Mon Dec 5 16:29:24 2016
New Revision: 16173
Log:
Add CLEAR_CALLER_SAVED_REGS in leak-tree test
Motivation for this change is similar to what has already been done in other
leak-* tests. That is, call CLEAR_CALLER_SAVED_REGS (currently used only on
PPC and MIPS arches) to clear temporary registers that might be holding
pointers lost in a previously called function.
This fixes memcheck/tests/leak-tree failure on some MIPS platforms.
Patch by Aleksandar Rikalo.
Modified:
trunk/memcheck/tests/leak-tree.c
Modified: trunk/memcheck/tests/leak-tree.c
==============================================================================
--- trunk/memcheck/tests/leak-tree.c (original)
+++ trunk/memcheck/tests/leak-tree.c Mon Dec 5 16:29:24 2016
@@ -62,6 +62,7 @@
// See leak-cases.c for why we do the work in f().
f();
+ CLEAR_CALLER_SAVED_REGS;
GET_FINAL_LEAK_COUNTS;
PRINT_LEAK_COUNTS(stderr);
|
|
From: <sv...@va...> - 2016-12-05 16:03:32
|
Author: petarj
Date: Mon Dec 5 16:03:21 2016
New Revision: 16172
Log:
mips: implement CLEAR_CALLER_SAVED_REGS for memcheck tests
Implement CLEAR_CALLER_SAVED_REGS macro that is used for some memcheck
tests. This is done in order to clear temporary registers that still
might be holding pointers to lost memory regions.
Similar change has been made for PPC.
This fixes the following tests:
memcheck/tests/leak-cases-full (stderr)
memcheck/tests/leak-cases-summary (stderr)
memcheck/tests/leak-cycle (stderr)
memcheck/tests/lks (stderr)
on some MIPS platforms.
Patch by Aleksandar Rikalo.
Modified:
trunk/memcheck/tests/leak.h
Modified: trunk/memcheck/tests/leak.h
==============================================================================
--- trunk/memcheck/tests/leak.h (original)
+++ trunk/memcheck/tests/leak.h Mon Dec 5 16:03:21 2016
@@ -60,6 +60,54 @@
__asm__ __volatile__( "li 11, 0" : : :/*trash*/"r11" ); \
__asm__ __volatile__( "li 12, 0" : : :/*trash*/"r12" ); \
} while (0)
+#elif (__mips == 32)
+#define CLEAR_CALLER_SAVED_REGS \
+ do { \
+ __asm__ __volatile__ ("move $1, $0 \n\t" /* at = 0 */ \
+ "move $2, $0 \n\t" /* v0 = 0 */ \
+ "move $3, $0 \n\t" /* v1 = 0 */ \
+ "move $4, $0 \n\t" /* a0 = 0 */ \
+ "move $5, $0 \n\t" /* a1 = 0 */ \
+ "move $6, $0 \n\t" /* a2 = 0 */ \
+ "move $7, $0 \n\t" /* a3 = 0 */ \
+ "move $8, $0 \n\t" /* t0 = 0 */ \
+ "move $9, $0 \n\t" /* t1 = 0 */ \
+ "move $10, $0 \n\t" /* t2 = 0 */ \
+ "move $11, $0 \n\t" /* t3 = 0 */ \
+ "move $12, $0 \n\t" /* t4 = 0 */ \
+ "move $13, $0 \n\t" /* t5 = 0 */ \
+ "move $14, $0 \n\t" /* t6 = 0 */ \
+ "move $15, $0 \n\t" /* t7 = 0 */ \
+ "move $24, $0 \n\t" /* t8 = 0 */ \
+ "move $25, $0 \n\t" /* t9 = 0 */ \
+ : : : "$1", "$2", "$3", "$4", "$5", "$6", "$7", \
+ "$8", "$9", "$10", "$11", "$12", "$13", \
+ "$14", "$15", "$24", "$25"); \
+ } while (0)
+#elif (__mips == 64)
+#define CLEAR_CALLER_SAVED_REGS \
+ do { \
+ __asm__ __volatile__ ("move $1, $0 \n\t" /* at = 0 */ \
+ "move $2, $0 \n\t" /* v0 = 0 */ \
+ "move $3, $0 \n\t" /* v1 = 0 */ \
+ "move $4, $0 \n\t" /* a0 = 0 */ \
+ "move $5, $0 \n\t" /* a1 = 0 */ \
+ "move $6, $0 \n\t" /* a2 = 0 */ \
+ "move $7, $0 \n\t" /* a3 = 0 */ \
+ "move $8, $0 \n\t" /* a4 = 0 */ \
+ "move $9, $0 \n\t" /* a5 = 0 */ \
+ "move $10, $0 \n\t" /* a6 = 0 */ \
+ "move $11, $0 \n\t" /* a7 = 0 */ \
+ "move $12, $0 \n\t" /* t0 = 0 */ \
+ "move $13, $0 \n\t" /* t1 = 0 */ \
+ "move $14, $0 \n\t" /* t2 = 0 */ \
+ "move $15, $0 \n\t" /* t3 = 0 */ \
+ "move $24, $0 \n\t" /* t8 = 0 */ \
+ "move $25, $0 \n\t" /* t9 = 0 */ \
+ : : : "$1", "$2", "$3", "$4", "$5", "$6", "$7", \
+ "$8", "$9", "$10", "$11", "$12", "$13", \
+ "$14", "$15", "$24", "$25"); \
+ } while (0)
#else
#define CLEAR_CALLER_SAVED_REGS /*nothing*/
#endif
|
|
From: Austin E. <aus...@gm...> - 2016-12-05 07:23:51
|
Howdy all,
Several months ago, a patch from Sebastian:
commit 44fbc018eda12bdee5c2c1e2e40dbdc6a81b27fd
Author: Sebastian Lackner <seb...@fd...>
Date: Thu Feb 12 11:09:34 2015 +0100
winebuild: Do not access memory below ESP when restoring thread
contexts.
Based on a patch by John Reiser.
for https://bugs.winehq.org/show_bug.cgi?id=14367
Caused problems for running Wine under Valgrind:
https://bugs.kde.org/show_bug.cgi?id=344139
There are patches floating around for both Wine and Valgrind (see
previous link), but from what I've seen so far, both projects aren't a
fan of the current patches.
Given that Wine developers like using Valgrind to check for problems,
and I know Julian would like to use Wine with Valgrind, I feel like some
solution to this problem can be found. Since my efforts at trying to run
messages between the two projects hasn't solved it yet, I figured an
email thread would work better ;).
--
-Austin
GPG: 14FB D7EA A041 937B
|
|
From: <sv...@va...> - 2016-12-04 04:06:32
|
Author: rhyskidd
Date: Sun Dec 4 04:06:25 2016
New Revision: 16171
Log:
Update SVN ignore propset for tests/libc_test. n-i-bz. Refer r16097.
Modified:
trunk/tests/ (props changed)
|
|
From: <sv...@va...> - 2016-12-04 04:00:18
|
Author: rhyskidd
Date: Sun Dec 4 04:00:11 2016
New Revision: 16170
Log:
Update SVN ignore propset for include/vgversion.h. n-i-bz.
Modified:
trunk/include/ (props changed)
|
|
From: <sv...@va...> - 2016-12-04 03:50:39
|
Author: rhyskidd
Date: Sun Dec 4 03:50:33 2016
New Revision: 16169
Log:
Fix typo in syswrap-darwin log output. n-i-bz.
Modified:
trunk/coregrind/m_syswrap/syswrap-darwin.c
Modified: trunk/coregrind/m_syswrap/syswrap-darwin.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-darwin.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-darwin.c Sun Dec 4 03:50:33 2016
@@ -226,7 +226,7 @@
"WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.\n"
);
VG_(debugLog)(
- 1, "syswrap-linux",
+ 1, "syswrap-darwin",
"run_a_thread_NORETURN(tid=%u): "
"WARNING: exiting thread has err_disablement_level = %u\n",
tid, tst->err_disablement_level
|