diff mbox

[v2] oprofile: bump to version 0.9.9

Message ID 1400597676-7203-1-git-send-email-abrodkin@synopsys.com
State Accepted
Commit 8ad6acc02990de812601f14aaa65344054627cac
Headers show

Commit Message

Alexey Brodkin May 20, 2014, 2:54 p.m. UTC
Relese notes for 0.9.9 release are avaialble here:
http://oprofile.sourceforge.net/release-notes/oprofile-0.9.9

This release adds support for ARC architecture.

Also introduces new "ocount" program for collection of raw event counts.

With release of 0.9.9 we may drop back-ported patches:
oprofile-002-no-query-modules.patch - liblegacy was removed since 2.4 kernels
are no longer supported
http://sourceforge.net/p/oprofile/oprofile/ci/fcb818623bf1a638ef4f93dca9e90f8651899bf3/

oprofile-003-oprofile-ppc32-build-fix.patch
http://sourceforge.net/p/oprofile/oprofile/ci/fa889ea74b6b931e241a8cd57e90edc23cd7ab03/

oprofile-004-fix-ppc64-specific-libpfm-usage.patch
http://sourceforge.net/p/oprofile/oprofile/ci/79a183ed0d9611955714bfa1d6edb361d6bf5c2c/

oprofile-005-fix-up-configure-to-handle-architectures-that-do-not.patch
http://sourceforge.net/p/oprofile/oprofile/ci/ca6d916a6f8f0f8abbb4c9b6a97dd1a1615bb124/

But in 0.9.9 was introduced build breakage which was fixed later so adding
another back-ported patch
oprofile-002-Fix-compile-error-on-ppc-uClibc-platform-AT_BASE_PLA.patch
http://sourceforge.net/p/oprofile/oprofile/ci/08241f1b2c5a4d48020c82b509dc1076f51bf0bd/

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>

Cc: Gustavo Zacarias <gustavo@zacarias.com.ar>
Cc: Peter Korsgaard <jacmet@sunsite.dk>
Cc: Thomas De Schampheleire <patrickdepinguin@gmail.com>
Cc: Simon Dawson <spdawson@gmail.com>
Cc: Baruch Siach <baruch@tkos.co.il>
---

In v2 only mispelling of OPR_O_FILE_BINARIES is fixed.

Just in case made sure "ocount" was copied to target folder in "/usr/bin/ocount"

 ...-error-on-ppc-uClibc-platform-AT_BASE_PLA.patch |  78 +++++++++++
 .../oprofile/oprofile-002-no-query-modules.patch   |  21 ---
 .../oprofile-003-oprofile-ppc32-build-fix.patch    |  32 -----
 ...ofile-004-fix-ppc64-specific-libpfm-usage.patch | 105 --------------
 ...igure-to-handle-architectures-that-do-not.patch | 154 ---------------------
 package/oprofile/oprofile.mk                       |   3 +-
 6 files changed, 80 insertions(+), 313 deletions(-)
 create mode 100644 package/oprofile/oprofile-002-Fix-compile-error-on-ppc-uClibc-platform-AT_BASE_PLA.patch
 delete mode 100644 package/oprofile/oprofile-002-no-query-modules.patch
 delete mode 100644 package/oprofile/oprofile-003-oprofile-ppc32-build-fix.patch
 delete mode 100644 package/oprofile/oprofile-004-fix-ppc64-specific-libpfm-usage.patch
 delete mode 100644 package/oprofile/oprofile-005-fix-up-configure-to-handle-architectures-that-do-not.patch

Comments

Alexey Brodkin May 29, 2014, 9:43 p.m. UTC | #1
Dear Peter,

On Tue, 2014-05-20 at 18:54 +0400, Alexey Brodkin wrote:
> Relese notes for 0.9.9 release are avaialble here:
> http://oprofile.sourceforge.net/release-notes/oprofile-0.9.9
> 
> This release adds support for ARC architecture.
> 
> Also introduces new "ocount" program for collection of raw event counts.
> 
> With release of 0.9.9 we may drop back-ported patches:
> oprofile-002-no-query-modules.patch - liblegacy was removed since 2.4 kernels
> are no longer supported
> http://sourceforge.net/p/oprofile/oprofile/ci/fcb818623bf1a638ef4f93dca9e90f8651899bf3/
> 
> oprofile-003-oprofile-ppc32-build-fix.patch
> http://sourceforge.net/p/oprofile/oprofile/ci/fa889ea74b6b931e241a8cd57e90edc23cd7ab03/
> 
> oprofile-004-fix-ppc64-specific-libpfm-usage.patch
> http://sourceforge.net/p/oprofile/oprofile/ci/79a183ed0d9611955714bfa1d6edb361d6bf5c2c/
> 
> oprofile-005-fix-up-configure-to-handle-architectures-that-do-not.patch
> http://sourceforge.net/p/oprofile/oprofile/ci/ca6d916a6f8f0f8abbb4c9b6a97dd1a1615bb124/
> 
> But in 0.9.9 was introduced build breakage which was fixed later so adding
> another back-ported patch
> oprofile-002-Fix-compile-error-on-ppc-uClibc-platform-AT_BASE_PLA.patch
> http://sourceforge.net/p/oprofile/oprofile/ci/08241f1b2c5a4d48020c82b509dc1076f51bf0bd/
> 
> Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
> 
> Cc: Gustavo Zacarias <gustavo@zacarias.com.ar>
> Cc: Peter Korsgaard <jacmet@sunsite.dk>
> Cc: Thomas De Schampheleire <patrickdepinguin@gmail.com>
> Cc: Simon Dawson <spdawson@gmail.com>
> Cc: Baruch Siach <baruch@tkos.co.il>
> ---
> 
> In v2 only mispelling of OPR_O_FILE_BINARIES is fixed.
> 
> Just in case made sure "ocount" was copied to target folder in "/usr/bin/ocount"

I'm wondering if this patch could be applied sometime soon if there're
no objections?

Regards,
Alexey
Peter Korsgaard June 3, 2014, 9:41 p.m. UTC | #2
>>>>> "Alexey" == Alexey Brodkin <Alexey.Brodkin@synopsys.com> writes:

 > Relese notes for 0.9.9 release are avaialble here:
 > http://oprofile.sourceforge.net/release-notes/oprofile-0.9.9

 > This release adds support for ARC architecture.

 > Also introduces new "ocount" program for collection of raw event counts.

 > With release of 0.9.9 we may drop back-ported patches:
 > oprofile-002-no-query-modules.patch - liblegacy was removed since 2.4 kernels
 > are no longer supported
 > http://sourceforge.net/p/oprofile/oprofile/ci/fcb818623bf1a638ef4f93dca9e90f8651899bf3/

 > oprofile-003-oprofile-ppc32-build-fix.patch
 > http://sourceforge.net/p/oprofile/oprofile/ci/fa889ea74b6b931e241a8cd57e90edc23cd7ab03/

 > oprofile-004-fix-ppc64-specific-libpfm-usage.patch
 > http://sourceforge.net/p/oprofile/oprofile/ci/79a183ed0d9611955714bfa1d6edb361d6bf5c2c/

 > oprofile-005-fix-up-configure-to-handle-architectures-that-do-not.patch
 > http://sourceforge.net/p/oprofile/oprofile/ci/ca6d916a6f8f0f8abbb4c9b6a97dd1a1615bb124/

 > But in 0.9.9 was introduced build breakage which was fixed later so adding
 > another back-ported patch
 > oprofile-002-Fix-compile-error-on-ppc-uClibc-platform-AT_BASE_PLA.patch
 > http://sourceforge.net/p/oprofile/oprofile/ci/08241f1b2c5a4d48020c82b509dc1076f51bf0bd/

 > Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>

 > Cc: Gustavo Zacarias <gustavo@zacarias.com.ar>
 > Cc: Peter Korsgaard <jacmet@sunsite.dk>
 > Cc: Thomas De Schampheleire <patrickdepinguin@gmail.com>
 > Cc: Simon Dawson <spdawson@gmail.com>
 > Cc: Baruch Siach <baruch@tkos.co.il>
 > ---

 > In v2 only mispelling of OPR_O_FILE_BINARIES is fixed.

 > Just in case made sure "ocount" was copied to target folder in "/usr/bin/ocount"

Committed, thanks.
diff mbox

Patch

diff --git a/package/oprofile/oprofile-002-Fix-compile-error-on-ppc-uClibc-platform-AT_BASE_PLA.patch b/package/oprofile/oprofile-002-Fix-compile-error-on-ppc-uClibc-platform-AT_BASE_PLA.patch
new file mode 100644
index 0000000..1915541
--- /dev/null
+++ b/package/oprofile/oprofile-002-Fix-compile-error-on-ppc-uClibc-platform-AT_BASE_PLA.patch
@@ -0,0 +1,78 @@ 
+Upstream-Status: Backport
+
+From 08241f1b2c5a4d48020c82b509dc1076f51bf0bd Mon Sep 17 00:00:00 2001
+From: Maynard Johnson <maynardj@us.ibm.com>
+Date: Wed, 14 Aug 2013 15:40:44 -0500
+Subject: [PATCH] Fix compile error on ppc/uClibc platform: 'AT_BASE_PLATFORM'
+ undeclared'
+
+This issue was reported via bug #245.
+
+The method for obtaining cpu type on the ppc64 platform was recently
+modified to detect the case when we're running on a kernel that has
+not been updated to recognize the native processor type.  The cpu
+type returned in the case where the native processor type is newer
+than POWER7 will be "CPU_PPC64_ARCH_V1" (architected CPU type).
+The method used for detecting when the kernel does not recognize the
+native processor type is to inspect the aux vector and compare
+AT_PLATFORM and AT_BASE_PLATFORM. The 'AT_BASE_PLATFORM' was defined
+in glibc's elf.h around 5 years ago, but was never added to uClibc,
+so the code that implements the above-described method fails to compile
+on systems using uClibc.
+
+Since the above-described method of using the aux vector is only
+required for ppc64 systems, and ppc64-based platforms always use glibc
+(which has the AT_BASE_PLATFORM macro defined), we now wrap that code
+with '#if PPC64_ARCH' to prevent problems on other architectures.
+
+Signed-off-by: Maynard Johnson <maynardj@us.ibm.com>
+---
+ libop/op_cpu_type.c | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/libop/op_cpu_type.c b/libop/op_cpu_type.c
+index 44d6809..89d5a92 100644
+--- a/libop/op_cpu_type.c
++++ b/libop/op_cpu_type.c
+@@ -23,9 +23,16 @@
+ #include <elf.h>
+ #include <link.h>
+ 
++#include "config.h"
+ #include "op_cpu_type.h"
+ #include "op_hw_specific.h"
+ 
++/* A macro to be used for ppc64 architecture-specific code.  The '__powerpc__' macro
++ * is defined for both ppc64 and ppc32 architectures, so we must further qualify by
++ * including the 'HAVE_LIBPFM' macro, since that macro will be defined only for ppc64.
++ */
++#define PPC64_ARCH (HAVE_LIBPFM) && ((defined(__powerpc__) || defined(__powerpc64__)))
++
+ struct cpu_descr {
+ 	char const * pretty;
+ 	char const * name;
+@@ -176,6 +183,7 @@ static char * _get_cpuinfo_cpu_type(char * buf, int len, const char * prefix)
+ 	return _get_cpuinfo_cpu_type_line(buf, len, prefix, 1);
+ }
+ 
++#if PPC64_ARCH
+ // The aux vector stuff below is currently only used by ppc64 arch
+ static ElfW(auxv_t) * auxv_buf = NULL;
+ 
+@@ -312,6 +320,13 @@ static op_cpu _get_ppc64_cpu_type(void)
+ 	cpu_type = op_get_cpu_number(cpu_type_str);
+ 	return cpu_type;
+ }
++#else
++static op_cpu _get_ppc64_cpu_type(void)
++{
++	return CPU_NO_GOOD;
++}
++#endif
++
+ 
+ static op_cpu _get_arm_cpu_type(void)
+ {
+-- 
+1.9.0
+
diff --git a/package/oprofile/oprofile-002-no-query-modules.patch b/package/oprofile/oprofile-002-no-query-modules.patch
deleted file mode 100644
index 9f00da6..0000000
--- a/package/oprofile/oprofile-002-no-query-modules.patch
+++ /dev/null
@@ -1,21 +0,0 @@ 
-diff -urN oprofile-0.9.4-0rig//daemon/liblegacy/opd_kernel.c oprofile-0.9.4/daemon/liblegacy/opd_kernel.c
---- oprofile-0.9.4-0rig//daemon/liblegacy/opd_kernel.c	2005-05-04 04:47:03.000000000 +0200
-+++ oprofile-0.9.4/daemon/liblegacy/opd_kernel.c	2009-01-21 07:40:20.000000000 +0100
-@@ -270,6 +270,9 @@
-  */
- static void opd_drop_module_sample(unsigned long eip)
- {
-+	verbprintf(vmodule, "query_module not available on linux-2.6: %s\n", strerror(EPERM));
-+
-+#if	0
- 	char * module_names;
- 	char * name;
- 	size_t size = 1024;
-@@ -307,6 +310,7 @@
- 
- 	if (module_names)
- 		free(module_names);
-+#endif
- }
- 
- 
diff --git a/package/oprofile/oprofile-003-oprofile-ppc32-build-fix.patch b/package/oprofile/oprofile-003-oprofile-ppc32-build-fix.patch
deleted file mode 100644
index 0f609df..0000000
--- a/package/oprofile/oprofile-003-oprofile-ppc32-build-fix.patch
+++ /dev/null
@@ -1,32 +0,0 @@ 
-Upstream-Status: Backport
-
-From fa889ea74b6b931e241a8cd57e90edc23cd7ab03 Mon Sep 17 00:00:00 2001
-From: William Cohen <wcohen@redhat.com>
-Date: Mon, 15 Oct 2012 15:09:55 -0500
-Subject: [PATCH] OProfile doesn't build for 32-bit ppc; the operf_utils.cpp
- compile fails. Need to be able to build the 32-bit ppc
- version of oprofile to provide the 32-bit ppc java support
- libraries. The configure only handles the case of ppc64
- with perf support.
-
-Signed-off-by: William Cohen <wcohen@redhat.com>
----
- configure.ac |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index b739133..7449854 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -104,7 +104,7 @@ AC_DEFINE_UNQUOTED(HAVE_PERF_EVENTS, $HAVE_PERF_EVENTS, [Kernel support for perf
- if test "$HAVE_PERF_EVENTS" = "1"; then
- 	PFM_LIB=
- 	arch="`uname -m`"
--	if test "$arch" = "ppc64"; then
-+	if test "$arch" = "ppc64" || test "$arch" = "ppc"; then
- 		AC_CHECK_HEADER(perfmon/pfmlib.h,,[AC_MSG_ERROR([pfmlib.h not found; usually provided in papi devel package])])
- 		AC_CHECK_LIB(pfm,pfm_get_event_name, HAVE_LIBPFM3='1'; HAVE_LIBPFM='1', [
- 			AC_CHECK_LIB(pfm,pfm_get_os_event_encoding, HAVE_LIBPFM3='0'; HAVE_LIBPFM='1',
--- 
-1.7.9.7
-
diff --git a/package/oprofile/oprofile-004-fix-ppc64-specific-libpfm-usage.patch b/package/oprofile/oprofile-004-fix-ppc64-specific-libpfm-usage.patch
deleted file mode 100644
index d8a43de..0000000
--- a/package/oprofile/oprofile-004-fix-ppc64-specific-libpfm-usage.patch
+++ /dev/null
@@ -1,105 +0,0 @@ 
-From 8e36ad01ceb1257d05773b684dbe9358aecd3f71 Mon Sep 17 00:00:00 2001
-From: Maynard Johnson <maynardj@us.ibm.com>
-Date: Tue, 26 Feb 2013 13:41:27 -0600
-Subject: [PATCH] Fix PPC64-specific libpfm usage so it doesn't break ppc32
- architecture
-
-The configure check to determine whether we should use libpfm or not
-is intended only for the ppc64 architecture, but was incorrectly
-hitting on the ppc32 architecture, too.  Not only that, but it was using
-'uname' which is not a good idea in cross-compile situtations.
-
-Then, aside from that, we had several instances in the source code
-of the following:
-   #if (defined(__powerpc__) || defined(__powerpc64__))
-which incorrectly included ppc32 architecutre also, when it was intended
-for use as PPC64 architecture.
-
-This patch fixes both errors.
-
-Signed-off-by: Maynard Johnson <maynardj@us.ibm.com
----
- configure.ac                   |    5 ++---
- libperf_events/operf_utils.cpp |    4 ++--
- libperf_events/operf_utils.h   |    6 ++++++
- pe_profiling/operf.cpp         |   10 +++++-----
- 4 files changed, 15 insertions(+), 10 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
---- a/configure.ac
-+++ b/configure.ac
-@@ -100,11 +100,10 @@ else
- 	HAVE_PERF_EVENTS='0'
- fi
- AC_DEFINE_UNQUOTED(HAVE_PERF_EVENTS, $HAVE_PERF_EVENTS, [Kernel support for perf_events exists])
--
-+AC_CANONICAL_HOST
- if test "$HAVE_PERF_EVENTS" = "1"; then
- 	PFM_LIB=
--	arch="`uname -m`"
--	if test "$arch" = "ppc64" || test "$arch" = "ppc"; then
-+	if test "$host_cpu" = "powerpc64"; then
- 		AC_CHECK_HEADER(perfmon/pfmlib.h,,[AC_MSG_ERROR([pfmlib.h not found; usually provided in papi devel package])])
- 		AC_CHECK_LIB(pfm,pfm_get_event_name, HAVE_LIBPFM3='1'; HAVE_LIBPFM='1', [
- 			AC_CHECK_LIB(pfm,pfm_get_os_event_encoding, HAVE_LIBPFM3='0'; HAVE_LIBPFM='1',
-diff --git a/libperf_events/operf_utils.cpp b/libperf_events/operf_utils.cpp
---- a/libperf_events/operf_utils.cpp
-+++ b/libperf_events/operf_utils.cpp
-@@ -82,7 +82,7 @@ static event_t comm_event;
-  * the following method is to map the operf-record event value to a value that
-  * opreport can understand.
-  */
--#if (defined(__powerpc__) || defined(__powerpc64__))
-+#if PPC64_ARCH
- #define NIL_CODE ~0U
- 
- #if HAVE_LIBPFM3
-@@ -708,7 +708,7 @@ static void __handle_sample_event(event_
- 	} else if (event->header.misc == PERF_RECORD_MISC_USER) {
- 		in_kernel = false;
- 	}
--#if (defined(__powerpc__) || defined(__powerpc64__))
-+#if PPC64_ARCH
- 	else if (event->header.misc == PERF_RECORD_MISC_HYPERVISOR) {
- #define MAX_HYPERVISOR_ADDRESS 0xfffffffULL
- 		if (data.ip > MAX_HYPERVISOR_ADDRESS) {
-diff --git a/libperf_events/operf_utils.h b/libperf_events/operf_utils.h
---- a/libperf_events/operf_utils.h
-+++ b/libperf_events/operf_utils.h
-@@ -45,6 +45,12 @@ extern bool throttled;
- #define MMAP_WINDOW_SZ (32 * 1024 * 1024ULL)
- #endif
- 
-+/* A macro to be used for ppc64 architecture-specific code.  The '__powerpc__' macro
-+ * is defined for both ppc64 and ppc32 architectures, so we must further qualify by
-+ * including the 'HAVE_LIBPFM' macro, since that macro will be defined only for ppc64.
-+ */
-+#define PPC64_ARCH (HAVE_LIBPFM) && ((defined(__powerpc__) || defined(__powerpc64__)))
-+
- extern unsigned int op_nr_counters;
- 
- static inline size_t align_64bit(u64 x)
-diff --git a/pe_profiling/operf.cpp b/pe_profiling/operf.cpp
---- a/pe_profiling/operf.cpp
-+++ b/pe_profiling/operf.cpp
-@@ -1197,9 +1197,9 @@ static void _process_events_list(void)
- 		_get_event_code(&event);
- 		events.push_back(event);
- 	}
--#if (defined(__powerpc__) || defined(__powerpc64__))
-+#if PPC64_ARCH
- 	{
--		/* This section of code is for architectures such as ppc[64] for which
-+		/* This section of code is soley for the ppc64 architecture for which
- 		 * the oprofile event code needs to be converted to the appropriate event
- 		 * code to pass to the perf_event_open syscall.
- 		 */
-@@ -1244,7 +1244,7 @@ static void get_default_event(void)
- 	_get_event_code(&dft_evt);
- 	events.push_back(dft_evt);
- 
--#if (defined(__powerpc__) || defined(__powerpc64__))
-+#if PPC64_ARCH
- 	{
- 		/* This section of code is for architectures such as ppc[64] for which
- 		 * the oprofile event code needs to be converted to the appropriate event
diff --git a/package/oprofile/oprofile-005-fix-up-configure-to-handle-architectures-that-do-not.patch b/package/oprofile/oprofile-005-fix-up-configure-to-handle-architectures-that-do-not.patch
deleted file mode 100644
index 6d7a6ef..0000000
--- a/package/oprofile/oprofile-005-fix-up-configure-to-handle-architectures-that-do-not.patch
+++ /dev/null
@@ -1,154 +0,0 @@ 
-Upstream-Status: Backport
-
-From ca6d916a6f8f0f8abbb4c9b6a97dd1a1615bb124 Mon Sep 17 00:00:00 2001
-From: Maynard Johnson <maynardj@us.ibm.com>
-Date: Wed, 5 Dec 2012 10:16:35 -0600
-Subject: [PATCH] Fix up configure to handle architectures that do not
- implement perf_event_open
-
-This patch fixes the following problems:
-
-1) The configure script allows the user to pass a location to kernel
-headers (via --with-kernel option) such that, even if the running
-kernel does not have perf_events support, it may be possible to
-build operf (e.g., in cross-compile environments).  But the message
-'This kernel does not have perf_events support; falling back to legacy
-oprofile' was being displayed inappropriately in such cases.  This
-patch changes the configure script so that the "falling back to
-legacy oprofile" message will only be displayed if we're running
-on a kernel that does not have perf_events support AND the user
-did not pass specify the "--with-kernel" option.
-
-2) Some architectures don't even implement the perf_event_open syscall, so the
-configure script must do more than checking kernel version and whether or not
-perf_event.h is present in order to decide if perf_events is supported.
-This patch provides that extra capability.
-
-These problems were reported by Tony Jones <tonyj@suse.com>.
-
-Signed-off-by:  Maynard Johnson <maynardj@us.ibm.com>
----
- configure.ac                   |   74 +++++++++++++++++++++++++++++-----------
- utils/op_perf_events_checker.c |    6 ++--
- 2 files changed, 58 insertions(+), 22 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
---- a/configure.ac
-+++ b/configure.ac
-@@ -70,35 +70,70 @@ KERNELDIR=$withval)
- 
- 
- dnl Check kernel version for perf_events supported
--AC_MSG_CHECKING([kernel version supports perf_events])
- if test "$KERNELDIR" != ""; then
- 	KINC="$KERNELDIR/include"
-+	PERF_EVENT_FLAGS=" -I$KERNELDIR/include"
-+	AC_SUBST(PERF_EVENT_FLAGS)
-+	PERF_EVENT_H="$KERNELDIR/include/linux/perf_event.h"
-+else
-+	PERF_EVENT_H="/usr/include/linux/perf_event.h"
- fi
--AX_KERNEL_VERSION(2, 6, 31, <=, kernel_has_perf_events_support="yes",
-+
-+PERF_EVENT_H_EXISTS="no"
-+kernel_may_have_perf_events_support="no"
-+AX_KERNEL_VERSION(2, 6, 31, <=, kernel_may_have_perf_events_support="yes",
- kernel_has_perf_events_support="no")
- 
--if test "$kernel_has_perf_events_support" = "no"; then
--	AC_MSG_RESULT([This kernel does not have perf_events support; falling back to legacy oprofile])
-+dnl The AX_KERNEL_VERSION macro may return kernel_may_have_perf_events_support="yes",
-+dnl indicating a partial answer.  Some architectures do not implement the Performance
-+dnl Events Kernel Subsystem even with kernel versions > 2.6.31 -- i.e., not even
-+dnl implementing the perf_event_open syscall to return ENOSYS.  So the check below
-+dnl will identify and handle such situations.
-+
-+if test "$kernel_may_have_perf_events_support" = "yes"; then
-+	AC_CHECK_HEADER($PERF_EVENT_H,PERF_EVENT_H_EXISTS="yes")
-+	AC_MSG_CHECKING([kernel supports perf_events])
-+	if test "$PERF_EVENT_H_EXISTS" = "yes"; then
-+		rm -f test-for-PERF_EVENT_OPEN
-+		AC_LANG_CONFTEST(
-+			[AC_LANG_PROGRAM([[#include <linux/perf_event.h>
-+				#include <asm/unistd.h>
-+				#include <sys/types.h>
-+				#include <string.h>
-+			]],
-+			[[struct perf_event_attr attr;
-+				pid_t pid;
-+				memset(&attr, 0, sizeof(attr));
-+				attr.size = sizeof(attr);
-+				attr.sample_type = PERF_SAMPLE_IP;
-+				pid = getpid();
-+				syscall(__NR_perf_event_open, &attr, pid, 0, -1, 0);
-+				]])
-+		])
-+		$CC conftest.$ac_ext $CFLAGS $LDFLAGS $LIBS $PERF_EVENT_FLAGS -o test-for-PERF_EVENT_OPEN  > /dev/null 2>&1
-+		if test -f test-for-PERF_EVENT_OPEN; then
-+			kernel_has_perf_events_support="yes"
-+			AC_MSG_RESULT(yes)
-+		else
-+			AC_MSG_RESULT(no)
-+			kernel_has_perf_events_support="no"
-+		fi
-+	else
-+		AC_MSG_RESULT(unknown -- perf_event.h not found)
-+	fi
- else
--	AC_MSG_RESULT([This kernel has perf_events support])
-+	AC_MSG_RESULT(kernel supports perf_events... no)
-+	kernel_has_perf_events_support="no"
-+fi
-+AM_CONDITIONAL(BUILD_FOR_PERF_EVENT, test "$kernel_has_perf_events_support" = "yes")
-+
-+if test "$kernel_has_perf_events_support" = "yes"; then
-+	HAVE_PERF_EVENTS='1'
-+else
-+	HAVE_PERF_EVENTS='0'
-+	AC_MSG_RESULT([No perf_events support available; falling back to legacy oprofile])
- fi
- 
--if test "$KERNELDIR" == ""; then
--	PERF_EVENT_H="/usr/include/linux/perf_event.h"
--else
--	PERF_EVENT_H="$KERNELDIR/include/linux/perf_event.h"
--fi
--AC_CHECK_HEADER($PERF_EVENT_H,PERF_EVENT_H_EXISTS="yes")
--AM_CONDITIONAL(BUILD_FOR_PERF_EVENT, test -n "$PERF_EVENT_H_EXISTS")
--if test "$PERF_EVENT_H_EXISTS" = "yes"; then
--	HAVE_PERF_EVENTS='1'
--	if test "$KERNELDIR" != ""; then
--		PERF_EVENT_FLAGS=" -I$KERNELDIR/include"
--		AC_SUBST(PERF_EVENT_FLAGS)
--	fi
--else
--	HAVE_PERF_EVENTS='0'
--fi
- AC_DEFINE_UNQUOTED(HAVE_PERF_EVENTS, $HAVE_PERF_EVENTS, [Kernel support for perf_events exists])
- AC_CANONICAL_HOST
- if test "$HAVE_PERF_EVENTS" = "1"; then
-@@ -414,7 +449,7 @@ elif test "`getent passwd oprofile 2>/de
- 	fi
- fi
- 
--if  test "$PERF_EVENT_H_EXISTS" != "yes" && test "$kernel_has_perf_events_support" = "yes"; then
-+if  test "$PERF_EVENT_H_EXISTS" != "yes" && test "$kernel_may_have_perf_events_support" = "yes"; then
- 	echo "Warning: perf_event.h not found.  Please install the kernel headers package if you"
- 	echo "         want non-root support built into OProfile."
- fi
-diff --git a/utils/op_perf_events_checker.c b/utils/op_perf_events_checker.c
---- a/utils/op_perf_events_checker.c
-+++ b/utils/op_perf_events_checker.c
-@@ -49,8 +49,10 @@ int main(int argc, char **argv)
- 	}
- 
- #if HAVE_PERF_EVENTS
--	/* If perf_events syscall is not implemented, the syscall below will fail
--	 * with ENOSYS (38).  If implemented, but the processor type on which this
-+	/* Even if the perf_event_open syscall is implemented, the architecture may still
-+	 * not provide a full implementation of the perf_events subsystem, in which case,
-+	 * the syscall below will fail with ENOSYS (38).  If the perf_events subsystem is
-+	 * implemented for the architecture, but the processor type on which this
- 	 * program is running is not supported by perf_events, the syscall returns
- 	 * ENOENT (2).
- 	 */
diff --git a/package/oprofile/oprofile.mk b/package/oprofile/oprofile.mk
index 07a8ec9..e2e06b7 100644
--- a/package/oprofile/oprofile.mk
+++ b/package/oprofile/oprofile.mk
@@ -4,7 +4,7 @@ 
 #
 ################################################################################
 
-OPROFILE_VERSION = 0.9.8
+OPROFILE_VERSION = 0.9.9
 OPROFILE_SITE = http://downloads.sourceforge.net/project/oprofile/oprofile/oprofile-$(OPROFILE_VERSION)
 OPROFILE_LICENSE = GPLv2+
 OPROFILE_LICENSE_FILES = COPYING
@@ -17,6 +17,7 @@  OPROFILE_AUTORECONF = YES
 OPROFILE_BINARIES = utils/ophelp pp/opannotate pp/oparchive pp/opgprof
 OPROFILE_BINARIES += pp/opreport opjitconv/opjitconv daemon/oprofiled
 OPROFILE_BINARIES += utils/op-check-perfevents libabi/opimport
+OPROFILE_BINARIES += pe_counting/ocount
 
 # No perf_events support in kernel for avr32
 ifneq ($(BR2_avr32),y)