2019-06-19 12:05:22

by Olof Johansson

[permalink] [raw]
Subject: [PATCH] objtool: Be lenient about -Wundef

Some libelf versions use undefined macros, which combined with newer GCC
makes for errors from system headers. This isn't overly useful to fail
compiling objtool for.

Error as seen:

cc1: all warnings being treated as errors
In file included from arch/x86/../../elf.h:10,
from arch/x86/decode.c:14:
/usr/include/libelf/gelf.h:25:5: error: "__LIBELF_INTERNAL__" is not defined, evaluates to 0 [-Werror=undef]
#if __LIBELF_INTERNAL__
^~~~~~~~~~~~~~~~~~~

For this reason, skip -Wundef on objtool.

Signed-off-by: Olof Johansson <[email protected]>
---
tools/objtool/Makefile | 2 ++
1 file changed, 2 insertions(+)

diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile
index 88158239622bc..0c49206c5216b 100644
--- a/tools/objtool/Makefile
+++ b/tools/objtool/Makefile
@@ -35,6 +35,8 @@ INCLUDES := -I$(srctree)/tools/include \
-I$(srctree)/tools/arch/$(HOSTARCH)/include/uapi \
-I$(srctree)/tools/objtool/arch/$(ARCH)/include
WARNINGS := $(EXTRA_WARNINGS) -Wno-switch-default -Wno-switch-enum -Wno-packed
+# Some system libelf versions uses undefined "#if <var>", so skip the warning/error
+WARNINGS += -Wno-undef
CFLAGS += -Werror $(WARNINGS) $(KBUILD_HOSTCFLAGS) -g $(INCLUDES) $(LIBELF_FLAGS)
LDFLAGS += $(LIBELF_LIBS) $(LIBSUBCMD) $(KBUILD_HOSTLDFLAGS)

--
2.11.0


2019-06-28 00:00:57

by Josh Poimboeuf

[permalink] [raw]
Subject: Re: [PATCH] objtool: Be lenient about -Wundef

On Wed, Jun 19, 2019 at 05:03:37AM -0700, Olof Johansson wrote:
> Some libelf versions use undefined macros, which combined with newer GCC
> makes for errors from system headers. This isn't overly useful to fail
> compiling objtool for.
>
> Error as seen:
>
> cc1: all warnings being treated as errors
> In file included from arch/x86/../../elf.h:10,
> from arch/x86/decode.c:14:
> /usr/include/libelf/gelf.h:25:5: error: "__LIBELF_INTERNAL__" is not defined, evaluates to 0 [-Werror=undef]
> #if __LIBELF_INTERNAL__
> ^~~~~~~~~~~~~~~~~~~
>
> For this reason, skip -Wundef on objtool.
>
> Signed-off-by: Olof Johansson <[email protected]>

Sorry for the delay, I was out last week and I'm still getting caught
up.

Which libelf was this? I'm guessing it's the old non-elfutils version
which has been unmaintained for 10 years (and which doesn't work with
objtool anyway).

It would be nice if we could figure out a way to detect that libelf and
report a more useful error for it.

--
Josh

2019-06-28 03:44:46

by Olof Johansson

[permalink] [raw]
Subject: Re: [PATCH] objtool: Be lenient about -Wundef

On Fri, Jun 28, 2019 at 8:00 AM Josh Poimboeuf <[email protected]> wrote:
>
> On Wed, Jun 19, 2019 at 05:03:37AM -0700, Olof Johansson wrote:
> > Some libelf versions use undefined macros, which combined with newer GCC
> > makes for errors from system headers. This isn't overly useful to fail
> > compiling objtool for.
> >
> > Error as seen:
> >
> > cc1: all warnings being treated as errors
> > In file included from arch/x86/../../elf.h:10,
> > from arch/x86/decode.c:14:
> > /usr/include/libelf/gelf.h:25:5: error: "__LIBELF_INTERNAL__" is not defined, evaluates to 0 [-Werror=undef]
> > #if __LIBELF_INTERNAL__
> > ^~~~~~~~~~~~~~~~~~~
> >
> > For this reason, skip -Wundef on objtool.
> >
> > Signed-off-by: Olof Johansson <[email protected]>
>
> Sorry for the delay, I was out last week and I'm still getting caught
> up.
>
> Which libelf was this? I'm guessing it's the old non-elfutils version
> which has been unmaintained for 10 years (and which doesn't work with
> objtool anyway).
>
> It would be nice if we could figure out a way to detect that libelf and
> report a more useful error for it.

Yeah, looks like my docker image pulled in the very old libelf 0.8.13,
but has elfutils available. I'll switch it over locally to resolve
this.


-Olof