]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
objtool: Clean up compiler flag usage
authorJosh Poimboeuf <jpoimboe@kernel.org>
Wed, 17 Sep 2025 16:03:33 +0000 (09:03 -0700)
committerJosh Poimboeuf <jpoimboe@kernel.org>
Tue, 14 Oct 2025 21:45:24 +0000 (14:45 -0700)
KBUILD_HOSTCFLAGS and KBUILD_HOSTLDFLAGS aren't defined when objtool is
built standalone.  Also, the EXTRA_WARNINGS flags are rather arbitrary.

Make things simpler and more consistent by specifying compiler flags
explicitly and tweaking the warnings.  Also make a few code tweaks to
make the new warnings happy.

Acked-by: Petr Mladek <pmladek@suse.com>
Tested-by: Joe Lawrence <joe.lawrence@redhat.com>
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
tools/objtool/Makefile
tools/objtool/check.c
tools/objtool/elf.c

index 8c20361dd100ef05a1a3a13be331ae93124ff2ce..fc82d47f2b9a71a063cefe9db32016f91044fb51 100644 (file)
@@ -23,6 +23,11 @@ LIBELF_LIBS  := $(shell $(HOSTPKG_CONFIG) libelf --libs 2>/dev/null || echo -lel
 
 all: $(OBJTOOL)
 
+WARNINGS := -Werror -Wall -Wextra -Wmissing-prototypes                 \
+           -Wmissing-declarations -Wwrite-strings                      \
+           -Wno-implicit-fallthrough -Wno-sign-compare                 \
+           -Wno-unused-parameter
+
 INCLUDES := -I$(srctree)/tools/include \
            -I$(srctree)/tools/include/uapi \
            -I$(srctree)/tools/arch/$(HOSTARCH)/include/uapi \
@@ -30,11 +35,11 @@ INCLUDES := -I$(srctree)/tools/include \
            -I$(srctree)/tools/objtool/include \
            -I$(srctree)/tools/objtool/arch/$(SRCARCH)/include \
            -I$(LIBSUBCMD_OUTPUT)/include
-# Note, EXTRA_WARNINGS here was determined for CC and not HOSTCC, it
-# is passed here to match a legacy behavior.
-WARNINGS := $(EXTRA_WARNINGS) -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs
-OBJTOOL_CFLAGS := -Werror $(WARNINGS) $(KBUILD_HOSTCFLAGS) -g $(INCLUDES) $(LIBELF_FLAGS)
-OBJTOOL_LDFLAGS := $(LIBELF_LIBS) $(LIBSUBCMD) $(KBUILD_HOSTLDFLAGS)
+
+OBJTOOL_CFLAGS  := -std=gnu11 -fomit-frame-pointer -O2 -g \
+                  $(WARNINGS) $(INCLUDES) $(LIBELF_FLAGS) $(HOSTCFLAGS)
+
+OBJTOOL_LDFLAGS := $(LIBSUBCMD) $(LIBELF_LIBS) $(HOSTLDFLAGS)
 
 # Allow old libelf to be used:
 elfshdr := $(shell echo '$(pound)include <libelf.h>' | $(HOSTCC) $(OBJTOOL_CFLAGS) -x c -E - 2>/dev/null | grep elf_getshdr)
index 49d2db7c7f5b2e71a19c4e21f18fc08ffa04291c..2bd35d11411bfd5d82c14f297b96bd0dae81f06a 100644 (file)
@@ -461,7 +461,7 @@ static int decode_instructions(struct objtool_file *file)
 
                for (offset = 0; offset < sec->sh.sh_size; offset += insn->len) {
                        if (!insns || idx == INSN_CHUNK_MAX) {
-                               insns = calloc(sizeof(*insn), INSN_CHUNK_SIZE);
+                               insns = calloc(INSN_CHUNK_SIZE, sizeof(*insn));
                                if (!insns) {
                                        ERROR_GLIBC("calloc");
                                        return -1;
@@ -607,7 +607,7 @@ static int init_pv_ops(struct objtool_file *file)
                return 0;
 
        nr = sym->len / sizeof(unsigned long);
-       file->pv_ops = calloc(sizeof(struct pv_state), nr);
+       file->pv_ops = calloc(nr, sizeof(struct pv_state));
        if (!file->pv_ops) {
                ERROR_GLIBC("calloc");
                return -1;
index 2ea6d591c3c298130540c85127b32fc5388813c5..c27edeed2dd03ade468f4464468adcfff9ec8ec0 100644 (file)
@@ -736,7 +736,7 @@ static int elf_update_symbol(struct elf *elf, struct section *symtab,
        }
 
        /* setup extended section index magic and write the symbol */
-       if ((shndx >= SHN_UNDEF && shndx < SHN_LORESERVE) || is_special_shndx) {
+       if (shndx < SHN_LORESERVE || is_special_shndx) {
                sym->sym.st_shndx = shndx;
                if (!shndx_data)
                        shndx = 0;