commit ef501aa609f49c06df9f33c9a7330dffd71b31b3
Author: Maynard Johnson <maynardj@us.ibm.com>
Date: Thu Oct 31 11:11:06 2013 -0500
Fix handling of default named unit masks longer than 11 chars
The handling of default unit masks that are names instead of hex
values is new with oprofile 0.9.9. I've discovered a bug in this
handling when the name exceeds 11 characters. For example, on
Sandybridge, the following ocount command fails:
[mpjohn@oc1757000783 test-stuff]$ ocount -e l1d_blocks ls
Cannot find unit mask bank_confli for l1d_blocks
Unable to find unit mask info for bank_confli for event l1d_blocks
This problem was due to the char array ('mask') being too small.
Signed-off-by: Maynard Johnson <maynardj@us.ibm.com>
diff --git a/libpe_utils/op_pe_utils.cpp b/libpe_utils/op_pe_utils.cpp
index 177835e..9e2addb 100644
--- a/libpe_utils/op_pe_utils.cpp
+++ b/libpe_utils/op_pe_utils.cpp
@@ -413,8 +413,8 @@ static void _get_event_code(operf_event_t * event, op_cpu cpu_type)
#if defined(__i386__) || defined(__x86_64__)
+ char mask[OP_MAX_UM_NAME_LEN];
// Setup EventSelct[11:8] field for AMD
- char mask[12];
const char * vendor_AMD = "AuthenticAMD";
if (op_is_cpu_vendor((char *)vendor_AMD)) {
config = base_code & 0xF00ULL;