diff mbox

ARM: fix perf build with uclibc toolchains

Message ID 201108091324.17750.florian@openwrt.org (mailing list archive)
State New, archived
Headers show

Commit Message

Florian Fainelli Aug. 9, 2011, 11:24 a.m. UTC
libio.h is not provided by uClibc, in order to be able to test the
definition of __UCLIBC__ we need to include stdlib.h, which also
includes stddef.h, providing the definition of 'NULL'.

Signed-off-by: Florian Fainelli <florian@openwrt.org>
---

Comments

Will Deacon Aug. 9, 2011, 8:08 p.m. UTC | #1
Hi Florian,

On Tue, Aug 09, 2011 at 12:24:17PM +0100, Florian Fainelli wrote:
> libio.h is not provided by uClibc, in order to be able to test the
> definition of __UCLIBC__ we need to include stdlib.h, which also
> includes stddef.h, providing the definition of 'NULL'.
> 
> Signed-off-by: Florian Fainelli <florian@openwrt.org>
> ---
> diff --git a/tools/perf/arch/arm/util/dwarf-regs.c b/tools/perf/arch/arm/util/dwarf-regs.c
> index fff6450..e8d5c55 100644
> --- a/tools/perf/arch/arm/util/dwarf-regs.c
> +++ b/tools/perf/arch/arm/util/dwarf-regs.c
> @@ -8,7 +8,10 @@
>   * published by the Free Software Foundation.
>   */
>  
> +#include <stdlib.h>
> +#ifndef __UCLIBC__
>  #include <libio.h>
> +#endif
>  #include <dwarf-regs.h>
>  
>  struct pt_regs_dwarfnum {

Nice to see somebody trying to get this going with uclinux! I'll give this a
quick compile-check on my boards and then I'll include it in my perf-fixes
branch for 3.1.

Cheers,

Will
Will Deacon Aug. 10, 2011, 10:21 a.m. UTC | #2
On Tue, Aug 09, 2011 at 09:08:53PM +0100, Will Deacon wrote:
> On Tue, Aug 09, 2011 at 12:24:17PM +0100, Florian Fainelli wrote:
> > libio.h is not provided by uClibc, in order to be able to test the
> > definition of __UCLIBC__ we need to include stdlib.h, which also
> > includes stddef.h, providing the definition of 'NULL'.
> > 
> > Signed-off-by: Florian Fainelli <florian@openwrt.org>
> > ---
> > diff --git a/tools/perf/arch/arm/util/dwarf-regs.c b/tools/perf/arch/arm/util/dwarf-regs.c
> > index fff6450..e8d5c55 100644
> > --- a/tools/perf/arch/arm/util/dwarf-regs.c
> > +++ b/tools/perf/arch/arm/util/dwarf-regs.c
> > @@ -8,7 +8,10 @@
> >   * published by the Free Software Foundation.
> >   */
> >  
> > +#include <stdlib.h>
> > +#ifndef __UCLIBC__
> >  #include <libio.h>
> > +#endif
> >  #include <dwarf-regs.h>
> >  
> >  struct pt_regs_dwarfnum {
> 
> Nice to see somebody trying to get this going with uclinux! I'll give this a
> quick compile-check on my boards and then I'll include it in my perf-fixes
> branch for 3.1.

Seems happy enough on my MMU boards. Since you're using this on noMMU
platforms, does that mean that you can build a static perf binary out of the
box or do you need further patches for this?

Will
Florian Fainelli Aug. 10, 2011, 10:56 a.m. UTC | #3
On Wednesday 10 August 2011 12:21:55 Will Deacon wrote:
> On Tue, Aug 09, 2011 at 09:08:53PM +0100, Will Deacon wrote:
> > On Tue, Aug 09, 2011 at 12:24:17PM +0100, Florian Fainelli wrote:
> > > libio.h is not provided by uClibc, in order to be able to test the
> > > definition of __UCLIBC__ we need to include stdlib.h, which also
> > > includes stddef.h, providing the definition of 'NULL'.
> > > 
> > > Signed-off-by: Florian Fainelli <florian@openwrt.org>
> > > ---
> > > diff --git a/tools/perf/arch/arm/util/dwarf-regs.c
> > > b/tools/perf/arch/arm/util/dwarf-regs.c index fff6450..e8d5c55 100644
> > > --- a/tools/perf/arch/arm/util/dwarf-regs.c
> > > +++ b/tools/perf/arch/arm/util/dwarf-regs.c
> > > @@ -8,7 +8,10 @@
> > > 
> > >   * published by the Free Software Foundation.
> > >   */
> > > 
> > > +#include <stdlib.h>
> > > +#ifndef __UCLIBC__
> > > 
> > >  #include <libio.h>
> > > 
> > > +#endif
> > > 
> > >  #include <dwarf-regs.h>
> > >  
> > >  struct pt_regs_dwarfnum {
> > 
> > Nice to see somebody trying to get this going with uclinux! I'll give
> > this a quick compile-check on my boards and then I'll include it in my
> > perf-fixes branch for 3.1.
> 
> Seems happy enough on my MMU boards. Since you're using this on noMMU
> platforms, does that mean that you can build a static perf binary out of
> the box or do you need further patches for this?

uClibc is not only for noMMU boards, I just built an uclibc toolchain for arm 
targetting realview and run-tested this with qemu. This was the only patch 
required to cross-compile perf for me. I also tested this with eglibc.

By the way, perf top reports no even being generated for realview under qemu, 
is that normal?
--
Florian
Will Deacon Aug. 10, 2011, 12:26 p.m. UTC | #4
On Wed, Aug 10, 2011 at 11:56:00AM +0100, Florian Fainelli wrote:
> On Wednesday 10 August 2011 12:21:55 Will Deacon wrote:
> > On Tue, Aug 09, 2011 at 09:08:53PM +0100, Will Deacon wrote:
> > > On Tue, Aug 09, 2011 at 12:24:17PM +0100, Florian Fainelli wrote:
> > > > libio.h is not provided by uClibc, in order to be able to test the
> > > > definition of __UCLIBC__ we need to include stdlib.h, which also
> > > > includes stddef.h, providing the definition of 'NULL'.
> > > > 
> > > > Signed-off-by: Florian Fainelli <florian@openwrt.org>
> > > > ---
> > > > diff --git a/tools/perf/arch/arm/util/dwarf-regs.c
> > > > b/tools/perf/arch/arm/util/dwarf-regs.c index fff6450..e8d5c55 100644
> > > > --- a/tools/perf/arch/arm/util/dwarf-regs.c
> > > > +++ b/tools/perf/arch/arm/util/dwarf-regs.c
> > > > @@ -8,7 +8,10 @@
> > > > 
> > > >   * published by the Free Software Foundation.
> > > >   */
> > > > 
> > > > +#include <stdlib.h>
> > > > +#ifndef __UCLIBC__
> > > > 
> > > >  #include <libio.h>
> > > > 
> > > > +#endif
> > > > 
> > > >  #include <dwarf-regs.h>
> > > >  
> > > >  struct pt_regs_dwarfnum {
> > > 
> > > Nice to see somebody trying to get this going with uclinux! I'll give
> > > this a quick compile-check on my boards and then I'll include it in my
> > > perf-fixes branch for 3.1.
> > 
> > Seems happy enough on my MMU boards. Since you're using this on noMMU
> > platforms, does that mean that you can build a static perf binary out of
> > the box or do you need further patches for this?
> 
> uClibc is not only for noMMU boards, I just built an uclibc toolchain for arm 
> targetting realview and run-tested this with qemu. This was the only patch 
> required to cross-compile perf for me. I also tested this with eglibc.

Ok, great. Cross-compiling perf usually just causes endless pain for me.

> By the way, perf top reports no even being generated for realview under qemu, 
> is that normal?

My guess is that qemu isn't emulating the cycle counter, which is required
to generate interrupts for use by perf. You could try disabling
HW_PERF_EVENTS which will force perf to fall back to a CPU tick instead.

Will
Florian Fainelli Aug. 10, 2011, 1:08 p.m. UTC | #5
On Wednesday 10 August 2011 14:26:48 Will Deacon wrote:
> On Wed, Aug 10, 2011 at 11:56:00AM +0100, Florian Fainelli wrote:
> > On Wednesday 10 August 2011 12:21:55 Will Deacon wrote:
> > > On Tue, Aug 09, 2011 at 09:08:53PM +0100, Will Deacon wrote:
> > > > On Tue, Aug 09, 2011 at 12:24:17PM +0100, Florian Fainelli wrote:
> > > > > libio.h is not provided by uClibc, in order to be able to test the
> > > > > definition of __UCLIBC__ we need to include stdlib.h, which also
> > > > > includes stddef.h, providing the definition of 'NULL'.
> > > > > 
> > > > > Signed-off-by: Florian Fainelli <florian@openwrt.org>
> > > > > ---
> > > > > diff --git a/tools/perf/arch/arm/util/dwarf-regs.c
> > > > > b/tools/perf/arch/arm/util/dwarf-regs.c index fff6450..e8d5c55
> > > > > 100644 --- a/tools/perf/arch/arm/util/dwarf-regs.c
> > > > > +++ b/tools/perf/arch/arm/util/dwarf-regs.c
> > > > > @@ -8,7 +8,10 @@
> > > > > 
> > > > >   * published by the Free Software Foundation.
> > > > >   */
> > > > > 
> > > > > +#include <stdlib.h>
> > > > > +#ifndef __UCLIBC__
> > > > > 
> > > > >  #include <libio.h>
> > > > > 
> > > > > +#endif
> > > > > 
> > > > >  #include <dwarf-regs.h>
> > > > >  
> > > > >  struct pt_regs_dwarfnum {
> > > > 
> > > > Nice to see somebody trying to get this going with uclinux! I'll give
> > > > this a quick compile-check on my boards and then I'll include it in
> > > > my perf-fixes branch for 3.1.
> > > 
> > > Seems happy enough on my MMU boards. Since you're using this on noMMU
> > > platforms, does that mean that you can build a static perf binary out
> > > of the box or do you need further patches for this?
> > 
> > uClibc is not only for noMMU boards, I just built an uclibc toolchain for
> > arm targetting realview and run-tested this with qemu. This was the only
> > patch required to cross-compile perf for me. I also tested this with
> > eglibc.
> 
> Ok, great. Cross-compiling perf usually just causes endless pain for me.
> 
> > By the way, perf top reports no even being generated for realview under
> > qemu, is that normal?
> 
> My guess is that qemu isn't emulating the cycle counter, which is required
> to generate interrupts for use by perf. You could try disabling
> HW_PERF_EVENTS which will force perf to fall back to a CPU tick instead.

That did it, thanks a lot Will.
--
Florian
diff mbox

Patch

diff --git a/tools/perf/arch/arm/util/dwarf-regs.c b/tools/perf/arch/arm/util/dwarf-regs.c
index fff6450..e8d5c55 100644
--- a/tools/perf/arch/arm/util/dwarf-regs.c
+++ b/tools/perf/arch/arm/util/dwarf-regs.c
@@ -8,7 +8,10 @@ 
  * published by the Free Software Foundation.
  */
 
+#include <stdlib.h>
+#ifndef __UCLIBC__
 #include <libio.h>
+#endif
 #include <dwarf-regs.h>
 
 struct pt_regs_dwarfnum {