[prev in list] [next in list] [prev in thread] [next in thread]
List: oprofile-list
Subject: Re: 'precise_ip' compile error from OProfile Git tree
From: Maynard Johnson <maynardj () us ! ibm ! com>
Date: 2013-04-30 13:29:57
Message-ID: 517FC755.6070509 () us ! ibm ! com
[Download RAW message or body]
On 04/29/2013 08:13 PM, Langley, Scott E wrote:
> Hi Folks,
>
> I've trying to build OProfile from the latest source on a machine running SUSE \
> Enterprise Desktop Linux 11 SP2 with a recent Intel core7 CPU and I'm encountering \
> the following error:
> Making all in libperf_events
> make[2]: Entering directory `/local_static/git/oprofile/libperf_events'
> g++ -DHAVE_CONFIG_H -I. -I.. -I ../libabi -I ../libutil -I ../libutil++ -I \
> ../libop -I ../libdb -I ../libperf_events -g -O2 -MT operf_utils.o -MD -MP -MF \
> .deps/operf_utils.Tpo -c -o operf_utils.o operf_utils.cpp mv -f \
> .deps/operf_utils.Tpo .deps/operf_utils.Po g++ -DHAVE_CONFIG_H -I. -I.. -I \
> ../libabi -I ../libutil -I ../libutil++ -I ../libop -I ../libdb -I \
> ../libperf_events -g -O2 -MT operf_counter.o -MD -MP -MF .deps/operf_counter.Tpo \
> -c -o operf_counter.o operf_counter.cpp
> operf_counter.cpp: In constructor 'operf_counter::operf_counter(operf_event_t&, \
> bool, bool, bool, bool, int)': operf_counter.cpp:211: error: 'struct \
> perf_event_attr' has no member named 'precise_ip' make[2]: *** [operf_counter.o] \
> Error 1
*Andi*, the code that's failing to compile above was added in a patch you contributed \
(and which I accepted) on Oct 31, 2012. We did not take into consideration that the \
precise_ip field did not exist in earlier versions of perf_event.h. Below is a \
partial patch to fix this problem. It defines a new macro, HAVE_PERF_PRECISE_IP, \
which will be set to '1' if the field exists or '0' otherwise. What's missing in the \
patch is what to do -- if anything -- if HAVE_PERF_PRECISE_IP is '0'. Can you help \
with that part of the patch, please.
Thanks!
-Maynard
Index: op-master/configure.ac
===================================================================
--- op-master.orig/configure.ac
+++ op-master/configure.ac
@@ -156,6 +156,25 @@ if test "$kernel_has_perf_events_support
fi
AC_DEFINE_UNQUOTED(HAVE_PERF_GUEST_MACROS, $HAVE_PERF_GUEST_MACROS, \
[PERF_RECORD_MISC_GUEST_KERNEL is defined in perf_event.h]) rm -f \
test-for-PERF_GUEST* +
+ AC_MSG_CHECKING([whether precise_ip is defined in perf_event.h])
+ rm -f test-for-precise-ip
+ AC_LANG_CONFTEST(
+ [AC_LANG_PROGRAM([[#include <linux/perf_event.h>]],
+ [[struct perf_event_attr attr;
+ attr.precise_ip = 2;]])
+ ])
+ $CC conftest.$ac_ext $CFLAGS $LDFLAGS $LIBS $PERF_EVENT_FLAGS -o \
test-for-precise-ip > /dev/null 2>&1 + if test -f test-for-precise-ip; then
+ echo "yes"
+ HAVE_PERF_PRECISE_IP='1'
+ else
+ echo "no"
+ HAVE_PERF_PRECISE_IP='0'
+ fi
+ AC_DEFINE_UNQUOTED(HAVE_PERF_PRECISE_IP, $HAVE_PERF_PRECISE_IP, [precise_ip is \
defined in perf_event.h]) + rm -f test-for-precise-ip*
+
else
HAVE_PERF_EVENTS='0'
AC_MSG_RESULT([No perf_events support available; falling back to legacy oprofile])
Index: op-master/libperf_events/operf_counter.cpp
===================================================================
--- op-master.orig/libperf_events/operf_counter.cpp
+++ op-master/libperf_events/operf_counter.cpp
@@ -206,7 +206,7 @@ operf_counter::operf_counter(operf_event
if (separate_cpu)
attr.sample_type |= PERF_SAMPLE_CPU;
attr.type = PERF_TYPE_RAW;
-#if defined(__i386__) || defined(__x86_64__)
+#if ((defined(__i386__) || defined(__x86_64__)) && (HAVE_PERF_PRECISE_IP))
if (evt.evt_code & EXTRA_PEBS) {
attr.precise_ip = 2;
evt.evt_code ^= EXTRA_PEBS;
--------------------------------------------
>
>
> Here are my machine specs:
>
> uname -a
> Linux hyena 3.0.38-0.5-default #1 SMP Fri Aug 3 09:02:17 UTC 2012 (358029e) x86_64 \
> x86_64 x86_64 GNU/Linux
> cat /etc/SuSE-release
> SUSE Linux Enterprise Desktop 11 (x86_64)
> VERSION = 11
> PATCHLEVEL = 2
>
> cat /proc/cpuinfo
> processor : 0
> vendor_id : GenuineIntel
> cpu family : 6
> model : 58
> model name : Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
> stepping : 9
> cpu MHz : 1600.000
> cache size : 8192 KB
> physical id : 0
> siblings : 8
> core id : 0
> cpu cores : 4
> apicid : 0
> initial apicid : 0
> fpu : yes
> fpu_exception : yes
> cpuid level : 13
> wp : yes
> flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 \
> clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc \
> arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq \
> dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 x2apic \
> popcnt aes xsave avx f16c rdrand lahf_lm ida arat epb xsaveopt pln pts dtherm \
> tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms bogomips : 6785.06
> clflush size : 64
> cache_alignment : 64
> address sizes : 36 bits physical, 48 bits virtual
> power management:
> ...
>
> Any help or suggestions would be appreciated.
>
> Thanks.
>
------------------------------------------------------------------------------
Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET
Get 100% visibility into your production application - at no cost.
Code-level diagnostics for performance bottlenecks with <2% overhead
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap1
_______________________________________________
oprofile-list mailing list
oprofile-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oprofile-list
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic