Commit 31a9883106cc ("perf record: Add clockid parameter") used
CLOCK_MONOTONIC_RAW in the struct clockid_map clockids[], but the
CLOCK_MONOTONIC_RAW macro is not defined in older releases (e.g., SLES
11 SP2), thus there is a building error when making perf:
builtin-record.c:738: error: ‘CLOCK_MONOTONIC_RAW’ undeclared here (not in a function)
make[2]: *** [builtin-record.o] Error 1
make[2]: *** Waiting for unfinished jobs....
LD bench/perf-in.o
LD tests/perf-in.o
make[1]: *** [perf-in.o] Error 2
make: *** [all] Error 2
So define this macro if it is not defined.
Signed-off-by: Yunlong Song <[email protected]>
---
tools/perf/builtin-record.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index cfdff50..5b0962a 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -731,6 +731,9 @@ struct clockid_map {
#ifndef CLOCK_TAI
#define CLOCK_TAI 11
#endif
+#ifndef CLOCK_MONOTONIC_RAW
+#define CLOCK_MONOTONIC_RAW 4
+#endif
static const struct clockid_map clockids[] = {
/* available for all events, NMI safe */
--
1.8.5.5
On Wed, Apr 08, 2015 at 12:02:28PM +0800, Yunlong Song wrote:
> Commit 31a9883106cc ("perf record: Add clockid parameter") used
> CLOCK_MONOTONIC_RAW in the struct clockid_map clockids[], but the
> CLOCK_MONOTONIC_RAW macro is not defined in older releases (e.g., SLES
> 11 SP2), thus there is a building error when making perf:
>
> builtin-record.c:738: error: ‘CLOCK_MONOTONIC_RAW’ undeclared here (not in a function)
Weird that, CLOCK_MONOTONIC_RAW is said to be in the kernel since
2.6.28, SLES11 SP2 is 3.0 based, SP1 is 2.6.32.
Now the original SLES11 started life with 2.6.27, so it looks like
someone forgot to update their kernel headers when upgrading.
On 2015/4/8 16:55, Peter Zijlstra wrote:
> On Wed, Apr 08, 2015 at 12:02:28PM +0800, Yunlong Song wrote:
>> Commit 31a9883106cc ("perf record: Add clockid parameter") used
>> CLOCK_MONOTONIC_RAW in the struct clockid_map clockids[], but the
>> CLOCK_MONOTONIC_RAW macro is not defined in older releases (e.g., SLES
>> 11 SP2), thus there is a building error when making perf:
>>
>> builtin-record.c:738: error: ‘CLOCK_MONOTONIC_RAW’ undeclared here (not in a function)
>
> Weird that, CLOCK_MONOTONIC_RAW is said to be in the kernel since
> 2.6.28, SLES11 SP2 is 3.0 based, SP1 is 2.6.32.
>
> Now the original SLES11 started life with 2.6.27, so it looks like
> someone forgot to update their kernel headers when upgrading.
>
>
>
> .
>
Hi, Peter,
SLES 11 SP2 uses linux-kernel-headers-2.6.32-1.4.13, which really defines CLOCK_MONOTONIC_RAW
in <linux/time.h>. But the perf.h which is included in builtin-record.c uses <time.h> rather
than <linux/time.h>, and <time.h> finally includes <bits/time.h>. Both <time.h> and <bits/time.h>
belong to glibc-devel package, which is glibc-devel-2.11.3-17.31.1 for SLES11 SP2, and it does
not define CLOCK_MONOTONIC_RAW indeed. However, for the latest OSes (or say distributions), the
corresponding glibc-devel packages have already defined CLOCK_MONOTONIC_RAW.
--
Thanks,
Yunlong Song
Em Wed, Apr 08, 2015 at 12:02:28PM +0800, Yunlong Song escreveu:
> Commit 31a9883106cc ("perf record: Add clockid parameter") used
> CLOCK_MONOTONIC_RAW in the struct clockid_map clockids[], but the
> CLOCK_MONOTONIC_RAW macro is not defined in older releases (e.g., SLES
> 11 SP2), thus there is a building error when making perf:
>
> builtin-record.c:738: error: ‘CLOCK_MONOTONIC_RAW’ undeclared here (not in a function)
> make[2]: *** [builtin-record.o] Error 1
> make[2]: *** Waiting for unfinished jobs....
> LD bench/perf-in.o
> LD tests/perf-in.o
> make[1]: *** [perf-in.o] Error 2
> make: *** [all] Error 2
>
> So define this macro if it is not defined.
Since I am fixing that pull request batch, I am folding this patch into
Peter's original, adding credit to you, ok?
- Arnaldo
> Signed-off-by: Yunlong Song <[email protected]>
> ---
> tools/perf/builtin-record.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> index cfdff50..5b0962a 100644
> --- a/tools/perf/builtin-record.c
> +++ b/tools/perf/builtin-record.c
> @@ -731,6 +731,9 @@ struct clockid_map {
> #ifndef CLOCK_TAI
> #define CLOCK_TAI 11
> #endif
> +#ifndef CLOCK_MONOTONIC_RAW
> +#define CLOCK_MONOTONIC_RAW 4
> +#endif
>
> static const struct clockid_map clockids[] = {
> /* available for all events, NMI safe */
> --
> 1.8.5.5
On 2015/4/8 21:03, Arnaldo Carvalho de Melo wrote:
> Em Wed, Apr 08, 2015 at 12:02:28PM +0800, Yunlong Song escreveu:
>> Commit 31a9883106cc ("perf record: Add clockid parameter") used
>> CLOCK_MONOTONIC_RAW in the struct clockid_map clockids[], but the
>> CLOCK_MONOTONIC_RAW macro is not defined in older releases (e.g., SLES
>> 11 SP2), thus there is a building error when making perf:
>>
>> builtin-record.c:738: error: ‘CLOCK_MONOTONIC_RAW’ undeclared here (not in a function)
>> make[2]: *** [builtin-record.o] Error 1
>> make[2]: *** Waiting for unfinished jobs....
>> LD bench/perf-in.o
>> LD tests/perf-in.o
>> make[1]: *** [perf-in.o] Error 2
>> make: *** [all] Error 2
>>
>> So define this macro if it is not defined.
>
> Since I am fixing that pull request batch, I am folding this patch into
> Peter's original, adding credit to you, ok?
>
> - Arnaldo
OK.
--
Thanks,
Yunlong Song
Em Wed, Apr 08, 2015 at 09:10:47PM +0800, Yunlong Song escreveu:
> On 2015/4/8 21:03, Arnaldo Carvalho de Melo wrote:
> > Em Wed, Apr 08, 2015 at 12:02:28PM +0800, Yunlong Song escreveu:
> >> Commit 31a9883106cc ("perf record: Add clockid parameter") used
> >> CLOCK_MONOTONIC_RAW in the struct clockid_map clockids[], but the
> >> CLOCK_MONOTONIC_RAW macro is not defined in older releases (e.g., SLES
> >> 11 SP2), thus there is a building error when making perf:
> >>
> >> builtin-record.c:738: error: ‘CLOCK_MONOTONIC_RAW’ undeclared here (not in a function)
> >> make[2]: *** [builtin-record.o] Error 1
> >> make[2]: *** Waiting for unfinished jobs....
> >> LD bench/perf-in.o
> >> LD tests/perf-in.o
> >> make[1]: *** [perf-in.o] Error 2
> >> make: *** [all] Error 2
> >>
> >> So define this macro if it is not defined.
> >
> > Since I am fixing that pull request batch, I am folding this patch into
> > Peter's original, adding credit to you, ok?
> >
> > - Arnaldo
>
> OK.
Thanks, that helps keeping the tree bisectable :-)
- Arnaldo