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
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
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