[Bug 1500846] Re: valgrind missing TM instructions
Matthias Klose
doko at ubuntu.com
Wed Sep 30 17:32:33 UTC 2015
this is already fixed with today's upload.
** Changed in: valgrind (Ubuntu)
Status: Triaged => Fix Released
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to valgrind in Ubuntu.
https://bugs.launchpad.net/bugs/1500846
Title:
valgrind missing TM instructions
Status in valgrind package in Ubuntu:
Fix Released
Bug description:
valgrind fails on Ubuntu 15.10 Wily when debugging threaded
applicatoins. The issue is the TM instructions in the pthread lock
elision code:
dis_proc_ctl(ppc)(mfspr,SPR)(0x83)
disInstr(ppc): unhandled instruction: 0x7D2322A6
primary 31(0x1F), secondary 678(0x2A6)
==94927== valgrind: Unrecognised instruction at address 0x417f6e8.
==94927== at 0x417F6E8: __elide_lock (elide.h:52)
==94927== by 0x417F6E8: pthread_rwlock_wrlock (pthread_rwlock_wrlock.c:95)
==94927== by 0x10D65CDB: llvm::sys::RWMutexImpl::writer_acquire() (RWMutex.cpp:102)
==94927== by 0x10A149B7: lock (RWMutex.h:119)
==94927== by 0x10A149B7: SmartScopedWriter (RWMutex.h:166)
==94927== by 0x10A149B7: llvm::PassRegistry::addRegistrationListener(llvm::PassRegistrationListener*) (PassRegistry.cpp:121)
==94927== by 0x10A13767: llvm::PassNameParser::PassNameParser(llvm::cl::Option&) (Pass.cpp:228)
==94927== by 0x1040F54B: list<char [13], llvm::cl::desc, llvm::cl::OptionHidden> (CommandLine.h:1420)
==94927== by 0x1040F54B: __static_initialization_and_destruction_0 (LegacyPassManager.cpp:68)
==94927== by 0x1040F54B: _GLOBAL__sub_I_LegacyPassManager.cpp (LegacyPassManager.cpp:1912)
==94927== by 0x12359D63: __libc_csu_init (in /home/anton/llvm.install/bin/clang-3.8)
==94927== by 0x450348B: generic_start_main.isra.0 (libc-start.c:245)
==94927== by 0x4503733: (below main) (libc-start.c:94)
==94927== Your program just tried to execute an instruction that Valgrind
==94927== did not recognise. There are two possible reasons for this.
==94927== 1. Your program has a bug and erroneously jumped to a non-code
==94927== location. If you are running Memcheck and you just saw a
==94927== warning about a bad jump, it's probably your program's fault.
==94927== 2. The instruction is legitimate but Valgrind doesn't handle it,
==94927== i.e. it's Valgrind's fault. If you think this is the case or
==94927== you are not sure, please let us know and we'll try to fix it.
==94927== Either way, Valgrind will now raise a SIGILL signal which will
==94927== probably kill your program.
== Comment: #1 - Carl E. Love <carll at us.ibm.com> - 2015-09-17 12:21:09 ==
Anton
The instruction hex code for the unhandled instruction is 7D2322A6. You say it is a Transactional Memory instruction (TM). The format of the TM instructions has a primary opcode of 31, which matches your instruction.
The secondary instruction identifier for the TM instruction is in bits 21:30 which for you instruction is 0x153 = 339 decimal, assuming I didn't screw it up.
Looking at the Power ISA v2.07 I find the following TM instructions
and corresponding secondary identifiers:
tbegin. 654
tend. 686
tabort. 910
tabortwc. 782
tabortwci. 846
tabortdci. 878
tsr. 750
tcheck 718
I am not seeing a TM instruction with a secondary identifier of 339.
I did find the move instruction mfspr RT,SPR which has a primary
opcode of 31 and a secondary opcode of 339. The spr number is in bits
11:20 which is 0x245 = 581 decimal. Figure 17 in the ISA 2.07, page
881 does not list an SPR of 581.
The registers used with the TM instructions and spr numbers are:
TFHAR 128
TFIAR 129
TEXASR 130
TEXASRU 121
So, this doesn't seem to match either.
Can you send me the assembly code for the instruction so I can figure
out which TM instruction it is? Thanks for the help.
== Comment: #3 - William M. Schmidt <willschm at us.ibm.com> - 2015-09-18 16:20:56 ==
valgrind svn revision 3143.
== Comment: #4 - William M. Schmidt <willschm at us.ibm.com> - 2015-09-18 16:22:06 ==
(I meant to add this comment before the attachment).
(In reply to comment #0)
> valgrind fails on Ubuntu 15.10 Wily when debugging threaded applicatoins.
> The issue is the TM instructions in the pthread lock elision code:
>
> dis_proc_ctl(ppc)(mfspr,SPR)(0x83)
> disInstr(ppc): unhandled instruction: 0x7D2322A6
> primary 31(0x1F), secondary 678(0x2A6)
That message comes out of the default case when handling the mfspr
register number.
looks like valgrind in Wily is missing this patch:
r3143 | carll | 2015-04-22 11:15:41 -0500 (Wed, 22 Apr 2015) | 16 lines
Add support for the TEXASRU register.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/valgrind/+bug/1500846/+subscriptions
More information about the foundations-bugs
mailing list