[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