2012-10-02 01:10:59

by Ben Guthro

[permalink] [raw]
Subject: linux-next: build failure in dwarf-regs.c

I pulled the latest bits up to
797b9e5ae93270ec27a1f1ed48cd697d01b2269f - but am seeing the following
build failure with gcc 4.6.3

CC arch/x86/util/dwarf-regs.o
arch/x86/util/dwarf-regs.c:72:13: error: no previous prototype for
'get_arch_regstr' [-Werror=missing-prototypes]
cc1: all warnings being treated as errors
make[3]: *** [arch/x86/util/dwarf-regs.o] Error 1
make[3]: Leaving directory
`/data/home/bguthro/dev/orc-newdev.git/linux/build/tools/tools/perf'
make[2]: *** [build-linux-tools] Error 2
make[2]: Leaving directory `/data/home/bguthro/dev/orc-newdev.git/linux'
make[1]: *** [install-kernel] Error 2
make[1]: Leaving directory `/data/home/bguthro/dev/orc-newdev.git/orc-kernel'
make: *** [dist-kernels] Error 2


git blame shows that line coming in from the following changeset -
though April is a long time ago in kernel time - so this must have
come in with some other merge in this 3.7 window

commit cd932c593995abee1d1a8a0bfe608f7d103d87ad
Author: Ian Munsie <[email protected]>
Date: Tue Apr 20 16:58:32 2010 +1000

perf: Move arch specific code into separate arch directory

The perf userspace tool included some architecture specific code to map
registers from the DWARF register number into the names used by the regs
and stack access API.

This moves the architecture specific code out into a separate
arch/x86 directory along with the infrastructure required to use it.

Signed-off-by: Ian Munsie <[email protected]>
Acked-by: Masami Hiramatsu <[email protected]>
Signed-off-by: Paul Mackerras <[email protected]>


Apologies to Ian, who may reciece this multiple times, as I worked out
some email bounce issues with LKML


2012-10-02 04:25:24

by Ian Munsie

[permalink] [raw]
Subject: Re: linux-next: build failure in dwarf-regs.c

Hey Ben,

Adding some people to CC...

Excerpts from Ben Guthro's message of 2012-10-02 11:02:59 +1000:
> I pulled the latest bits up to 797b9e5ae93270ec27a1f1ed48cd697d01b2269f -
> but am seeing the following build failure with gcc 4.6.3

Building that SHA works for me (on x86, haven't tried PPC yet)...

> CC arch/x86/util/dwarf-regs.o

Is this correct? i.e. Are you building perf for x86?

What commandline are you using to build?

Any exported environment variables that may be relevant?

What dev libraries does perf warn is missing (Is libdw-dev among them)?

> arch/x86/util/dwarf-regs.c:72:13: error: no previous prototype for
> 'get_arch_regstr' [-Werror=missing-prototypes]

Hmmm... util/include/dwarf-regs.h not included? DWARF_SUPPORT undefined
but still building that file for some reason?

Can't see any obvious way that could happen... You didn't happen to see
an warning along the lines of 'DWARF register mappings not defined for
x86' did you?

> `/data/home/bguthro/dev/orc-newdev.git/linux/build/tools/tools/perf'

I hope the two 'tools' here is just an O= artefact?

> git blame shows that line coming in from the following changeset - though
> April is a long time ago in kernel time

Especially when it's April from two years ago...

> - so this must have come in with some other merge in this 3.7 window

Seems likely, especially as (excerpt from git diff --stat v3.6 797b9e5
-- tools/perf):

tools/perf/arch/x86/Makefile | 3 +
tools/perf/arch/x86/include/perf_regs.h | 80 +++
tools/perf/Makefile | 173 ++++--

I see a few changes in there that may have caused this... Since I can't
reproduce this myself I can't narrow it down, so I'm adding David Ahern,
Namhyung Kim & Jiri Olsa to CC who have touched lines that look like the
might be relevant.

Ben: You should be able to narrow down the cause of the breakage a bit
more with git bisect start 797b9e5 v3.6 -- tools/perf/Makefile

Cheers,
-Ian

2012-10-02 11:39:25

by Ben Guthro

[permalink] [raw]
Subject: Re: linux-next: build failure in dwarf-regs.c

Hi Ian,

Once again - apologies for multiple copies of this email. Please reply
to this (plain text) version so it will get through LKML filters.

On Tue, Oct 2, 2012 at 12:24 AM, Ian Munsie <[email protected]> wrote:
>
>
> > CC arch/x86/util/dwarf-regs.o
>
> Is this correct? i.e. Are you building perf for x86?

Yes, x86_64, specifically.

>
> What commandline are you using to build?

cd /data/home/bguthro/dev/orc-newdev.git/linux/build/tools/tools/perf
&& make EXTRAVERSION=-orc

>
> Any exported environment variables that may be relevant?

none that I can think of.

>
> What dev libraries does perf warn is missing (Is libdw-dev among them)?

make[3]: Entering directory
`/data/home/bguthro/dev/orc-newdev.git/linux/build/tools/tools/perf'
Makefile:502: No libunwind found, disabling post unwind support.
Please install libunwind-dev[el] >= 0.99
Makefile:537: No libdw.h found or old libdw.h found or elfutils is
older than 0.138, disables dwarf support. Please install new
elfutils-devel/libdw-dev
Makefile:567: No libaudit.h found, disables 'trace' tool, please
install audit-libs-devel or libaudit-dev
Makefile:580: newt not found, disables TUI support. Please install
newt-devel or libnewt-dev
Makefile:752: No bfd.h/libbfd found, install
binutils-dev[el]/zlib-static to gain symbol demangling

Actually - I hadn't noticed these warnings before.

After installing libdw-dev - the perf build completed successfully.
Perhaps this should be fatal, rather than a warning?

Thanks for your help

Ben

2012-10-02 13:11:01

by Jiri Olsa

[permalink] [raw]
Subject: [PATCH] perf tool: Fix build for NO_DWARF=1 case

On Tue, Oct 02, 2012 at 07:39:23AM -0400, Ben Guthro wrote:
> Hi Ian,
>
> Once again - apologies for multiple copies of this email. Please reply
> to this (plain text) version so it will get through LKML filters.
>
> On Tue, Oct 2, 2012 at 12:24 AM, Ian Munsie <[email protected]> wrote:
> >
> >
> > > CC arch/x86/util/dwarf-regs.o
> >
> > Is this correct? i.e. Are you building perf for x86?
>
> Yes, x86_64, specifically.
>
> >
> > What commandline are you using to build?
>
> cd /data/home/bguthro/dev/orc-newdev.git/linux/build/tools/tools/perf
> && make EXTRAVERSION=-orc
>
> >
> > Any exported environment variables that may be relevant?
>
> none that I can think of.
>
> >
> > What dev libraries does perf warn is missing (Is libdw-dev among them)?
>
> make[3]: Entering directory
> `/data/home/bguthro/dev/orc-newdev.git/linux/build/tools/tools/perf'
> Makefile:502: No libunwind found, disabling post unwind support.
> Please install libunwind-dev[el] >= 0.99
> Makefile:537: No libdw.h found or old libdw.h found or elfutils is
> older than 0.138, disables dwarf support. Please install new
> elfutils-devel/libdw-dev
> Makefile:567: No libaudit.h found, disables 'trace' tool, please
> install audit-libs-devel or libaudit-dev
> Makefile:580: newt not found, disables TUI support. Please install
> newt-devel or libnewt-dev
> Makefile:752: No bfd.h/libbfd found, install
> binutils-dev[el]/zlib-static to gain symbol demangling
>
> Actually - I hadn't noticed these warnings before.
>
> After installing libdw-dev - the perf build completed successfully.
> Perhaps this should be fatal, rather than a warning?
>
> Thanks for your help
>
> Ben

hi,
attached patch fixies the issue for me. Adding Arnaldo to the loop.

jirka


---
We need to include arch Makefile after we decide the NO_DWARF value,
otherwise we get might get build failure.

The reason is the arch Makefile could include objects based on
the NO_DWARF value, as it is for x86 case.

Cc: Peter Zijlstra <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Signed-off-by: Jiri Olsa <[email protected]>
---
tools/perf/Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/perf/Makefile b/tools/perf/Makefile
index 6958ba4..0ca8f45 100644
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -505,8 +505,6 @@ ifneq ($(call try-cc,$(SOURCE_LIBUNWIND),$(FLAGS_UNWIND)),y)
endif # Libunwind support
endif # NO_LIBUNWIND

--include arch/$(ARCH)/Makefile
-
ifneq ($(OUTPUT),)
BASIC_CFLAGS += -I$(OUTPUT)
endif
@@ -635,6 +633,8 @@ else
endif
endif

+-include arch/$(ARCH)/Makefile
+
disable-python = $(eval $(disable-python_code))
define disable-python_code
BASIC_CFLAGS += -DNO_LIBPYTHON
--
1.7.11.4

2012-10-02 21:45:49

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH] perf tool: Fix build for NO_DWARF=1 case

Em Tue, Oct 02, 2012 at 03:10:49PM +0200, Jiri Olsa escreveu:
> On Tue, Oct 02, 2012 at 07:39:23AM -0400, Ben Guthro wrote:
> > Actually - I hadn't noticed these warnings before.

> > After installing libdw-dev - the perf build completed successfully.
> > Perhaps this should be fatal, rather than a warning?

> attached patch fixies the issue for me. Adding Arnaldo to the loop.

[acme@sandy linux]$ make -j8 -C tools/perf/ LIBUNWIND_DIR=/opt/libunwind O=/home/acme/git/build/perf install
cc1: warnings being treated as errors
arch/x86/util/dwarf-regs.c:72: error: no previous prototype for ‘get_arch_regstr’
make: *** [/home/acme/git/build/perf/arch/x86/util/dwarf-regs.o] Error 1
make: *** Waiting for unfinished jobs....
make: Leaving directory `/home/git/linux/tools/perf'
[acme@sandy linux]$

- Arnaldo

2012-10-03 10:29:38

by Jiri Olsa

[permalink] [raw]
Subject: Re: [PATCH] perf tool: Fix build for NO_DWARF=1 case

On Tue, Oct 02, 2012 at 06:45:36PM -0300, Arnaldo Carvalho de Melo wrote:
> Em Tue, Oct 02, 2012 at 03:10:49PM +0200, Jiri Olsa escreveu:
> > On Tue, Oct 02, 2012 at 07:39:23AM -0400, Ben Guthro wrote:
> > > Actually - I hadn't noticed these warnings before.
>
> > > After installing libdw-dev - the perf build completed successfully.
> > > Perhaps this should be fatal, rather than a warning?
>
> > attached patch fixies the issue for me. Adding Arnaldo to the loop.
>
> [acme@sandy linux]$ make -j8 -C tools/perf/ LIBUNWIND_DIR=/opt/libunwind O=/home/acme/git/build/perf install
> cc1: warnings being treated as errors
> arch/x86/util/dwarf-regs.c:72: error: no previous prototype for ‘get_arch_regstr’
> make: *** [/home/acme/git/build/perf/arch/x86/util/dwarf-regs.o] Error 1
> make: *** Waiting for unfinished jobs....
> make: Leaving directory `/home/git/linux/tools/perf'
> [acme@sandy linux]$
>
> - Arnaldo

ugh.. forgot the way you build perf ;)
(also smells like 'automated make test' adept)

Anyway, there's Makefile dependency on PERF_HAVE_DWARF_REGS which
is defined in arch/x86/Makefile.

So, there's only one right place for '-include arch/$(ARCH)/Makefile'.
We should think of some other solution, since this seems fragile.

I checked your make and simple make with attached patch
(only x86_64 arch, and with and without libdw installed).

jirka


---
We need to include arch Makefile after we decide the NO_DWARF,
otherwise we get might get build failure.

The reason is the arch Makefile could include objects based on
the NO_DWARF value, as it is for x86 case.

Cc: Peter Zijlstra <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Signed-off-by: Jiri Olsa <[email protected]>
---
tools/perf/Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/perf/Makefile b/tools/perf/Makefile
index 6958ba4..c287c1d 100644
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -505,8 +505,6 @@ ifneq ($(call try-cc,$(SOURCE_LIBUNWIND),$(FLAGS_UNWIND)),y)
endif # Libunwind support
endif # NO_LIBUNWIND

--include arch/$(ARCH)/Makefile
-
ifneq ($(OUTPUT),)
BASIC_CFLAGS += -I$(OUTPUT)
endif
@@ -539,6 +537,8 @@ ifneq ($(call try-cc,$(SOURCE_DWARF),$(FLAGS_DWARF)),y)
NO_DWARF := 1
endif # Dwarf support

+-include arch/$(ARCH)/Makefile
+
ifndef NO_DWARF
ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
msg := $(warning DWARF register mappings have not been defined for architecture $(ARCH), DWARF support disabled);
--
1.7.11.4

2012-10-03 13:29:58

by Namhyung Kim

[permalink] [raw]
Subject: Re: [PATCH] perf tool: Fix build for NO_DWARF=1 case

Hi all,

On Wed, 3 Oct 2012 12:29:28 +0200, Jiri Olsa wrote:
> On Tue, Oct 02, 2012 at 06:45:36PM -0300, Arnaldo Carvalho de Melo wrote:
>> Em Tue, Oct 02, 2012 at 03:10:49PM +0200, Jiri Olsa escreveu:
>> > On Tue, Oct 02, 2012 at 07:39:23AM -0400, Ben Guthro wrote:
>> > > Actually - I hadn't noticed these warnings before.
>>
>> > > After installing libdw-dev - the perf build completed successfully.
>> > > Perhaps this should be fatal, rather than a warning?
>>
>> > attached patch fixies the issue for me. Adding Arnaldo to the loop.
>>
>> [acme@sandy linux]$ make -j8 -C tools/perf/ LIBUNWIND_DIR=/opt/libunwind O=/home/acme/git/build/perf install
>> cc1: warnings being treated as errors
>> arch/x86/util/dwarf-regs.c:72: error: no previous prototype for ‘get_arch_regstr’
>> make: *** [/home/acme/git/build/perf/arch/x86/util/dwarf-regs.o] Error 1
>> make: *** Waiting for unfinished jobs....
>> make: Leaving directory `/home/git/linux/tools/perf'
>> [acme@sandy linux]$
>>
>> - Arnaldo
>
> ugh.. forgot the way you build perf ;)
> (also smells like 'automated make test' adept)
>
> Anyway, there's Makefile dependency on PERF_HAVE_DWARF_REGS which
> is defined in arch/x86/Makefile.
>
> So, there's only one right place for '-include arch/$(ARCH)/Makefile'.
> We should think of some other solution, since this seems fragile.
>
> I checked your make and simple make with attached patch
> (only x86_64 arch, and with and without libdw installed).

I posted similar patch few days ago and it slipped into acme/perf/core:

https://lkml.org/lkml/2012/9/28/194

Can you reproduce it with above change? Anyway, my apologies, sorry for
the inconvenience.

Thanks,
Namhyung