75e0b5f010
When building perf for arm64 I hit a warning (and be treated as an error) like below: aarch64-oe-linux-gcc -o .../scripts/perl/Perf-Trace-Util/Context.o -c -Wbad-function-cast \ ... scripts/perl/Perf-Trace-Util/Context.c In file included from .../usr/lib64/perl/5.14.3/CORE/perl.h:2464:0, from Context.xs:23: /.../usr/lib64/perl/5.14.3/CORE/handy.h:108:0: error: "bool" redefined [-Werror] # define bool char ^ In file included from /.../usr/src/kernel/tools/include/linux/types.h:4:0, from /.../usr/src/kernel/arch/arm64/include/uapi/asm/sigcontext.h:19, from /.../usr/include/bits/sigcontext.h:27, from /.../usr/include/signal.h:340, from /.../usr/include/sys/param.h:28, from /.../usr/lib64/perl/5.14.3/CORE/perl.h:678, from Context.xs:23: /.../usr/lib/aarch64-oe-linux/gcc/aarch64-oe-linux/4.9.2/include/stdbool.h:33:0: note: this is the location of the previous definition #define bool _Bool Looks like the failure is caused by arm64 uapi/asm/sigcontext.h, which includes linux/types.h while other archs not. Current perl consider this problem: http://perl5.git.perl.org/perl.git/commit/bd31be4baa3ee68abdb92c0db3200efe0fad903b However there are users which use old version of perl. This patch includes stdbool.h before Context.xs and define HAS_BOOL to prevent perl'e headers define its own 'bool'. Code is learn from perl's git tree. Signed-off-by: Wang Nan <wangnan0@huawei.com> Acked-by: Jiri Olsa <jolsa@redhat.com> Acked-by: Namhyung Kim <namhyung@kernel.org> Cc: Li Zefan <lizefan@huawei.com> Link: http://lkml.kernel.org/r/1421671397-4659-1-git-send-email-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
||
---|---|---|
.. | ||
lib/Perf/Trace | ||
Context.c | ||
Context.xs | ||
Makefile.PL | ||
README | ||
typemap |
Perf-Trace-Util version 0.01 ============================ This module contains utility functions for use with perf script. Core.pm and Util.pm are pure Perl modules; Core.pm contains routines that the core perf support for Perl calls on and should always be 'used', while Util.pm contains useful but optional utility functions that scripts may want to use. Context.pm contains the Perl->C interface that allows scripts to access data in the embedding perf executable; scripts wishing to do that should 'use Context.pm'. The Perl->C perf interface is completely driven by Context.xs. If you want to add new Perl functions that end up accessing C data in the perf executable, you add desciptions of the new functions here. scripting_context is a pointer to the perf data in the perf executable that you want to access - it's passed as the second parameter, $context, to all handler functions. After you do that: perl Makefile.PL # to create a Makefile for the next step make # to create Context.c edit Context.c to add const to the char* file = __FILE__ line in XS(boot_Perf__Trace__Context) to silence a warning/error. You can delete the Makefile, object files and anything else that was generated e.g. blib and shared library, etc, except for of course Context.c You should then be able to run the normal perf make as usual. INSTALLATION Building perf with perf script Perl scripting should install this module in the right place. You should make sure libperl and ExtUtils/Embed.pm are installed first e.g. apt-get install libperl-dev or yum install perl-ExtUtils-Embed. DEPENDENCIES This module requires these other modules and libraries: None COPYRIGHT AND LICENCE Copyright (C) 2009 by Tom Zanussi <tzanussi@gmail.com> This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.0 or, at your option, any later version of Perl 5 you may have available. Alternatively, this software may be distributed under the terms of the GNU General Public License ("GPL") version 2 as published by the Free Software Foundation.