Merge tag 'kbuild-fixes-v6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/masahi...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 31 Mar 2024 18:23:51 +0000 (11:23 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 31 Mar 2024 18:23:51 +0000 (11:23 -0700)
Pull Kbuild fixes from Masahiro Yamada:

 - Deduplicate Kconfig entries for CONFIG_CXL_PMU

 - Fix unselectable choice entry in MIPS Kconfig, and forbid this
   structure

 - Remove unused include/asm-generic/export.h

 - Fix a NULL pointer dereference bug in modpost

 - Enable -Woverride-init warning consistently with W=1

 - Drop KCSAN flags from *.mod.c files

* tag 'kbuild-fixes-v6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
  kconfig: Fix typo HEIGTH to HEIGHT
  Documentation/llvm: Note s390 LLVM=1 support with LLVM 18.1.0 and newer
  kbuild: Disable KCSAN for autogenerated *.mod.c intermediaries
  kbuild: make -Woverride-init warnings more consistent
  modpost: do not make find_tosym() return NULL
  export.h: remove include/asm-generic/export.h
  kconfig: do not reparent the menu inside a choice block
  MIPS: move unselectable FIT_IMAGE_FDT_EPM5 out of the "System type" choice
  cxl: remove CONFIG_CXL_PMU entry in drivers/cxl/Kconfig

31 files changed:
Documentation/kbuild/llvm.rst
arch/mips/Kconfig
drivers/cxl/Kconfig
drivers/gpu/drm/amd/display/dc/dce110/Makefile
drivers/gpu/drm/amd/display/dc/dce112/Makefile
drivers/gpu/drm/amd/display/dc/dce120/Makefile
drivers/gpu/drm/amd/display/dc/dce60/Makefile
drivers/gpu/drm/amd/display/dc/dce80/Makefile
drivers/gpu/drm/i915/Makefile
drivers/gpu/drm/xe/Makefile
drivers/net/ethernet/renesas/sh_eth.c
drivers/pinctrl/aspeed/Makefile
fs/proc/Makefile
include/asm-generic/export.h [deleted file]
kernel/bpf/Makefile
mm/Makefile
scripts/Makefile.extrawarn
scripts/Makefile.modfinal
scripts/kconfig/conf.c
scripts/kconfig/lkc.h
scripts/kconfig/lxdialog/checklist.c
scripts/kconfig/lxdialog/dialog.h
scripts/kconfig/lxdialog/inputbox.c
scripts/kconfig/lxdialog/menubox.c
scripts/kconfig/lxdialog/textbox.c
scripts/kconfig/lxdialog/util.c
scripts/kconfig/lxdialog/yesno.c
scripts/kconfig/mconf.c
scripts/kconfig/menu.c
scripts/kconfig/parser.y
scripts/mod/modpost.c

index b1d97fafddcfc990d91d101a0166dd616acfe717..bb5c44f8bd1c49cd88263c94200405479eea8325 100644 (file)
@@ -178,7 +178,7 @@ yet. Bug reports are always welcome at the issue tracker below!
      - ``LLVM=1``
    * - s390
      - Maintained
-     - ``CC=clang``
+     - ``LLVM=1`` (LLVM >= 18.1.0), ``CC=clang`` (LLVM < 18.1.0)
    * - um (User Mode)
      - Maintained
      - ``LLVM=1``
index 06ef440d16ce71bef0092d64e47526690735197c..516dc7022bd74a46a9187019ba37618f9aeb2b00 100644 (file)
@@ -619,15 +619,6 @@ config MACH_EYEQ5
 
        bool
 
-config FIT_IMAGE_FDT_EPM5
-       bool "Include FDT for Mobileye EyeQ5 development platforms"
-       depends on MACH_EYEQ5
-       default n
-       help
-         Enable this to include the FDT for the EyeQ5 development platforms
-         from Mobileye in the FIT kernel image.
-         This requires u-boot on the platform.
-
 config MACH_NINTENDO64
        bool "Nintendo 64 console"
        select CEVT_R4K
@@ -1011,6 +1002,15 @@ config CAVIUM_OCTEON_SOC
 
 endchoice
 
+config FIT_IMAGE_FDT_EPM5
+       bool "Include FDT for Mobileye EyeQ5 development platforms"
+       depends on MACH_EYEQ5
+       default n
+       help
+         Enable this to include the FDT for the EyeQ5 development platforms
+         from Mobileye in the FIT kernel image.
+         This requires u-boot on the platform.
+
 source "arch/mips/alchemy/Kconfig"
 source "arch/mips/ath25/Kconfig"
 source "arch/mips/ath79/Kconfig"
index 67998dbd1d46b49dc623a0929c262174965bb601..5f3c9c5529b96040da1816a315e94eb00eaf9443 100644 (file)
@@ -144,17 +144,4 @@ config CXL_REGION_INVALIDATION_TEST
          If unsure, or if this kernel is meant for production environments,
          say N.
 
-config CXL_PMU
-       tristate "CXL Performance Monitoring Unit"
-       default CXL_BUS
-       depends on PERF_EVENTS
-       help
-         Support performance monitoring as defined in CXL rev 3.0
-         section 13.2: Performance Monitoring. CXL components may have
-         one or more CXL Performance Monitoring Units (CPMUs).
-
-         Say 'y/m' to enable a driver that will attach to performance
-         monitoring units and provide standard perf based interfaces.
-
-         If unsure say 'm'.
 endif
index f0777d61c2cbb6b93d689392a097da89c80b5ff2..c307f040e48fc6f5c44c8c3be259294091cb285b 100644 (file)
@@ -23,7 +23,7 @@
 # Makefile for the 'controller' sub-component of DAL.
 # It provides the control and status of HW CRTC block.
 
-CFLAGS_$(AMDDALPATH)/dc/dce110/dce110_resource.o = $(call cc-disable-warning, override-init)
+CFLAGS_$(AMDDALPATH)/dc/dce110/dce110_resource.o = -Wno-override-init
 
 DCE110 = dce110_timing_generator.o \
 dce110_compressor.o dce110_opp_regamma_v.o \
index 7e92effec89447e7a8978c7339f02d08a3048f9a..683866797709ba6490b2eb30e13899b758c12176 100644 (file)
@@ -23,7 +23,7 @@
 # Makefile for the 'controller' sub-component of DAL.
 # It provides the control and status of HW CRTC block.
 
-CFLAGS_$(AMDDALPATH)/dc/dce112/dce112_resource.o = $(call cc-disable-warning, override-init)
+CFLAGS_$(AMDDALPATH)/dc/dce112/dce112_resource.o = -Wno-override-init
 
 DCE112 = dce112_compressor.o
 
index 1e3ef68a452a568462cc085845536e6c8c0cb8bc..8f508e66274805be3f400bad8a3231898b9179b9 100644 (file)
@@ -24,7 +24,7 @@
 # It provides the control and status of HW CRTC block.
 
 
-CFLAGS_$(AMDDALPATH)/dc/dce120/dce120_resource.o = $(call cc-disable-warning, override-init)
+CFLAGS_$(AMDDALPATH)/dc/dce120/dce120_resource.o = -Wno-override-init
 
 DCE120 = dce120_timing_generator.o
 
index fee331accc0e7c3d3cefb418f1b5275b8759f9a7..eede83ad91fa0d4131d5f43cbb22e213973cab45 100644 (file)
@@ -23,7 +23,7 @@
 # Makefile for the 'controller' sub-component of DAL.
 # It provides the control and status of HW CRTC block.
 
-CFLAGS_$(AMDDALPATH)/dc/dce60/dce60_resource.o = $(call cc-disable-warning, override-init)
+CFLAGS_$(AMDDALPATH)/dc/dce60/dce60_resource.o = -Wno-override-init
 
 DCE60 = dce60_timing_generator.o dce60_hw_sequencer.o \
        dce60_resource.o
index 7eefffbdc9253f840133a3e0ed6f8c4d74e4fa57..fba189d26652d63306ee0b6b034a84994a4c2def 100644 (file)
@@ -23,7 +23,7 @@
 # Makefile for the 'controller' sub-component of DAL.
 # It provides the control and status of HW CRTC block.
 
-CFLAGS_$(AMDDALPATH)/dc/dce80/dce80_resource.o = $(call cc-disable-warning, override-init)
+CFLAGS_$(AMDDALPATH)/dc/dce80/dce80_resource.o = -Wno-override-init
 
 DCE80 = dce80_timing_generator.o
 
index 3ef6ed41e62b4a05af99cb9e91f8dbe250b7a684..4c2f85632391a669c35012439094250e5e9c6dc5 100644 (file)
@@ -33,9 +33,9 @@ endif
 subdir-ccflags-$(CONFIG_DRM_I915_WERROR) += -Werror
 
 # Fine grained warnings disable
-CFLAGS_i915_pci.o = $(call cc-disable-warning, override-init)
-CFLAGS_display/intel_display_device.o = $(call cc-disable-warning, override-init)
-CFLAGS_display/intel_fbdev.o = $(call cc-disable-warning, override-init)
+CFLAGS_i915_pci.o = -Wno-override-init
+CFLAGS_display/intel_display_device.o = -Wno-override-init
+CFLAGS_display/intel_fbdev.o = -Wno-override-init
 
 # Support compiling the display code separately for both i915 and xe
 # drivers. Define I915 when building i915.
index 5a428ca00f10f23b72c1b700a88e0da0d4de78d4..c29a850859ad5a6af449d0e05d4ce8c6d3c2173e 100644 (file)
@@ -172,8 +172,8 @@ subdir-ccflags-$(CONFIG_DRM_XE_DISPLAY) += \
        -Ddrm_i915_gem_object=xe_bo \
        -Ddrm_i915_private=xe_device
 
-CFLAGS_i915-display/intel_fbdev.o = $(call cc-disable-warning, override-init)
-CFLAGS_i915-display/intel_display_device.o = $(call cc-disable-warning, override-init)
+CFLAGS_i915-display/intel_fbdev.o = -Wno-override-init
+CFLAGS_i915-display/intel_display_device.o = -Wno-override-init
 
 # Rule to build SOC code shared with i915
 $(obj)/i915-soc/%.o: $(srctree)/drivers/gpu/drm/i915/soc/%.c FORCE
index 475e1e8c1d35f37845616e8653c01a62b3984491..0786eb0da39143da2ba2a550e3b936fc2669ec5f 100644 (file)
@@ -50,7 +50,7 @@
  * the macros available to do this only define GCC 8.
  */
 __diag_push();
-__diag_ignore(GCC, 8, "-Woverride-init",
+__diag_ignore_all("-Woverride-init",
              "logic to initialize all and then override some is OK");
 static const u16 sh_eth_offset_gigabit[SH_ETH_MAX_REGISTER_OFFSET] = {
        SH_ETH_OFFSET_DEFAULTS,
index 489ea1778353f730e51612f313f6283de36225f2..db2a7600ae2bdeec935f0056db71187b9a73d6b2 100644 (file)
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0-only
 # Aspeed pinctrl support
 
-ccflags-y += $(call cc-option,-Woverride-init)
+ccflags-y += -Woverride-init
 obj-$(CONFIG_PINCTRL_ASPEED)   += pinctrl-aspeed.o pinmux-aspeed.o
 obj-$(CONFIG_PINCTRL_ASPEED_G4)        += pinctrl-aspeed-g4.o
 obj-$(CONFIG_PINCTRL_ASPEED_G5)        += pinctrl-aspeed-g5.o
index bd08616ed8bad7937173183eb08634c9526a4e90..7b4db9c56e6a77d3f0abd4a4e687542a734bb8d7 100644 (file)
@@ -5,7 +5,7 @@
 
 obj-y   += proc.o
 
-CFLAGS_task_mmu.o      += $(call cc-option,-Wno-override-init,)
+CFLAGS_task_mmu.o      += -Wno-override-init
 proc-y                 := nommu.o task_nommu.o
 proc-$(CONFIG_MMU)     := task_mmu.o
 
diff --git a/include/asm-generic/export.h b/include/asm-generic/export.h
deleted file mode 100644 (file)
index 570cd4d..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-#ifndef __ASM_GENERIC_EXPORT_H
-#define __ASM_GENERIC_EXPORT_H
-
-/*
- * <asm/export.h> and <asm-generic/export.h> are deprecated.
- * Please include <linux/export.h> directly.
- */
-#include <linux/export.h>
-
-#endif
index 368c5d86b5b7c81da952e5fd5fe3bab06d9d748b..e497011261b897784db588160df007554552a60d 100644 (file)
@@ -4,7 +4,7 @@ ifneq ($(CONFIG_BPF_JIT_ALWAYS_ON),y)
 # ___bpf_prog_run() needs GCSE disabled on x86; see 3193c0836f203 for details
 cflags-nogcse-$(CONFIG_X86)$(CONFIG_CC_IS_GCC) := -fno-gcse
 endif
-CFLAGS_core.o += $(call cc-disable-warning, override-init) $(cflags-nogcse-yy)
+CFLAGS_core.o += -Wno-override-init $(cflags-nogcse-yy)
 
 obj-$(CONFIG_BPF_SYSCALL) += syscall.o verifier.o inode.o helpers.o tnum.o log.o token.o
 obj-$(CONFIG_BPF_SYSCALL) += bpf_iter.o map_iter.o task_iter.o prog_iter.o link_iter.o
index e4b5b75aaec9c1192e3a60e922d90f0704155615..4abb40b911ec43c60cce7971ea69de9917f2c277 100644 (file)
@@ -29,8 +29,7 @@ KCOV_INSTRUMENT_mmzone.o := n
 KCOV_INSTRUMENT_vmstat.o := n
 KCOV_INSTRUMENT_failslab.o := n
 
-CFLAGS_init-mm.o += $(call cc-disable-warning, override-init)
-CFLAGS_init-mm.o += $(call cc-disable-warning, initializer-overrides)
+CFLAGS_init-mm.o += -Wno-override-init
 
 mmu-y                  := nommu.o
 mmu-$(CONFIG_MMU)      := highmem.o memory.o mincore.o \
index 3ce5d503a6da98efe3b7ec8b62138c5e12eb258c..c5af566e911ae77f7b4838b78a8ef8348d5360db 100644 (file)
@@ -114,6 +114,8 @@ KBUILD_CFLAGS += $(call cc-disable-warning, format-overflow)
 KBUILD_CFLAGS += $(call cc-disable-warning, format-truncation)
 KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
 
+KBUILD_CFLAGS += -Wno-override-init # alias for -Wno-initializer-overrides in clang
+
 ifdef CONFIG_CC_IS_CLANG
 # Clang before clang-16 would warn on default argument promotions.
 ifneq ($(call clang-min-version, 160000),y)
@@ -151,10 +153,6 @@ KBUILD_CFLAGS += -Wtype-limits
 KBUILD_CFLAGS += $(call cc-option, -Wmaybe-uninitialized)
 KBUILD_CFLAGS += $(call cc-option, -Wunused-macros)
 
-ifdef CONFIG_CC_IS_CLANG
-KBUILD_CFLAGS += -Winitializer-overrides
-endif
-
 KBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN2
 
 else
@@ -164,9 +162,7 @@ KBUILD_CFLAGS += -Wno-missing-field-initializers
 KBUILD_CFLAGS += -Wno-type-limits
 KBUILD_CFLAGS += -Wno-shift-negative-value
 
-ifdef CONFIG_CC_IS_CLANG
-KBUILD_CFLAGS += -Wno-initializer-overrides
-else
+ifdef CONFIG_CC_IS_GCC
 KBUILD_CFLAGS += -Wno-maybe-uninitialized
 endif
 
index 8568d256d6fbff5dfc4b9553f9b829ed92b258e3..79fcf27316864f467cca39e1853f5579b16e148a 100644 (file)
@@ -23,7 +23,7 @@ modname = $(notdir $(@:.mod.o=))
 part-of-module = y
 
 quiet_cmd_cc_o_c = CC [M]  $@
-      cmd_cc_o_c = $(CC) $(filter-out $(CC_FLAGS_CFI) $(CFLAGS_GCOV), $(c_flags)) -c -o $@ $<
+      cmd_cc_o_c = $(CC) $(filter-out $(CC_FLAGS_CFI) $(CFLAGS_GCOV) $(CFLAGS_KCSAN), $(c_flags)) -c -o $@ $<
 
 %.mod.o: %.mod.c FORCE
        $(call if_changed_dep,cc_o_c)
index b5730061872baea05947ca95ec94391a0a468e36..965bb40c50e5170a1341d662e5be7607a866e928 100644 (file)
@@ -552,11 +552,6 @@ static int conf_choice(struct menu *menu)
                        continue;
                }
                sym_set_tristate_value(child->sym, yes);
-               for (child = child->list; child; child = child->next) {
-                       indent += 2;
-                       conf(child);
-                       indent -= 2;
-               }
                return 1;
        }
 }
index e69d7c59d930272e177618e440c42bee1e8bbce6..e7cc9e985c4f0679db316f09d0afb001cc07de7c 100644 (file)
@@ -89,7 +89,7 @@ void menu_add_visibility(struct expr *dep);
 struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep);
 void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep);
 void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep);
-void menu_finalize(struct menu *parent);
+void menu_finalize(void);
 void menu_set_type(int type);
 
 extern struct menu rootmenu;
index 31d0a89fbeb7ac69e2348b902047226cd9551ba0..75493302fb857027dd086b7336ec7372415e24b7 100644 (file)
@@ -119,7 +119,7 @@ int dialog_checklist(const char *title, const char *prompt, int height,
        }
 
 do_resize:
-       if (getmaxy(stdscr) < (height + CHECKLIST_HEIGTH_MIN))
+       if (getmaxy(stdscr) < (height + CHECKLIST_HEIGHT_MIN))
                return -ERRDISPLAYTOOSMALL;
        if (getmaxx(stdscr) < (width + CHECKLIST_WIDTH_MIN))
                return -ERRDISPLAYTOOSMALL;
index 2d15ba893fbf8945147e15b43190bd60cbf0ecfa..f6c2ebe6d1f91d9f6086245c2469a158a8a4b9fa 100644 (file)
@@ -162,17 +162,17 @@ int on_key_esc(WINDOW *win);
 int on_key_resize(void);
 
 /* minimum (re)size values */
-#define CHECKLIST_HEIGTH_MIN 6 /* For dialog_checklist() */
+#define CHECKLIST_HEIGHT_MIN 6 /* For dialog_checklist() */
 #define CHECKLIST_WIDTH_MIN 6
-#define INPUTBOX_HEIGTH_MIN 2  /* For dialog_inputbox() */
+#define INPUTBOX_HEIGHT_MIN 2  /* For dialog_inputbox() */
 #define INPUTBOX_WIDTH_MIN 2
-#define MENUBOX_HEIGTH_MIN 15  /* For dialog_menu() */
+#define MENUBOX_HEIGHT_MIN 15  /* For dialog_menu() */
 #define MENUBOX_WIDTH_MIN 65
-#define TEXTBOX_HEIGTH_MIN 8   /* For dialog_textbox() */
+#define TEXTBOX_HEIGHT_MIN 8   /* For dialog_textbox() */
 #define TEXTBOX_WIDTH_MIN 8
-#define YESNO_HEIGTH_MIN 4     /* For dialog_yesno() */
+#define YESNO_HEIGHT_MIN 4     /* For dialog_yesno() */
 #define YESNO_WIDTH_MIN 4
-#define WINDOW_HEIGTH_MIN 19   /* For init_dialog() */
+#define WINDOW_HEIGHT_MIN 19   /* For init_dialog() */
 #define WINDOW_WIDTH_MIN 80
 
 int init_dialog(const char *backtitle);
index 1dcfb288ee63630e7e73be6fe28f1fd1a3bc5857..3c6e24b20f5be618164a1c7025fc2ed6bed8a4a5 100644 (file)
@@ -43,7 +43,7 @@ int dialog_inputbox(const char *title, const char *prompt, int height, int width
                strcpy(instr, init);
 
 do_resize:
-       if (getmaxy(stdscr) <= (height - INPUTBOX_HEIGTH_MIN))
+       if (getmaxy(stdscr) <= (height - INPUTBOX_HEIGHT_MIN))
                return -ERRDISPLAYTOOSMALL;
        if (getmaxx(stdscr) <= (width - INPUTBOX_WIDTH_MIN))
                return -ERRDISPLAYTOOSMALL;
index 0e333284e947bcf35b1c69043d83df205e8e98f7..6e6244df0c56e395fde3e8a15b2ef22da81069a9 100644 (file)
@@ -172,7 +172,7 @@ int dialog_menu(const char *title, const char *prompt,
 do_resize:
        height = getmaxy(stdscr);
        width = getmaxx(stdscr);
-       if (height < MENUBOX_HEIGTH_MIN || width < MENUBOX_WIDTH_MIN)
+       if (height < MENUBOX_HEIGHT_MIN || width < MENUBOX_WIDTH_MIN)
                return -ERRDISPLAYTOOSMALL;
 
        height -= 4;
index 058ed0e5bbd545fe1c18baf339b5e71cc9b6702d..0abaf635978f9856f2683bf7bb2cd2ef0c6e7701 100644 (file)
@@ -175,7 +175,7 @@ int dialog_textbox(const char *title, const char *tbuf, int initial_height,
 
 do_resize:
        getmaxyx(stdscr, height, width);
-       if (height < TEXTBOX_HEIGTH_MIN || width < TEXTBOX_WIDTH_MIN)
+       if (height < TEXTBOX_HEIGHT_MIN || width < TEXTBOX_WIDTH_MIN)
                return -ERRDISPLAYTOOSMALL;
        if (initial_height != 0)
                height = initial_height;
index 3fb7508b68a240f69e31f06c5f9c753fc7129a34..f18e2a89f6135dad5fadfba1e80c06ac6c800e6e 100644 (file)
@@ -291,7 +291,7 @@ int init_dialog(const char *backtitle)
        getyx(stdscr, saved_y, saved_x);
 
        getmaxyx(stdscr, height, width);
-       if (height < WINDOW_HEIGTH_MIN || width < WINDOW_WIDTH_MIN) {
+       if (height < WINDOW_HEIGHT_MIN || width < WINDOW_WIDTH_MIN) {
                endwin();
                return -ERRDISPLAYTOOSMALL;
        }
index bcaac9b7bab2cafb17b82d5e447ae778c68ff618..b57d25e1549fe4308d062bc74214042b9b539d0a 100644 (file)
@@ -32,7 +32,7 @@ int dialog_yesno(const char *title, const char *prompt, int height, int width)
        WINDOW *dialog;
 
 do_resize:
-       if (getmaxy(stdscr) < (height + YESNO_HEIGTH_MIN))
+       if (getmaxy(stdscr) < (height + YESNO_HEIGHT_MIN))
                return -ERRDISPLAYTOOSMALL;
        if (getmaxx(stdscr) < (width + YESNO_WIDTH_MIN))
                return -ERRDISPLAYTOOSMALL;
index f4bb391d50cf997c0a66ca3e54ceb062f6cea54e..c0969097447da5bf735e05c59d23db8cb916964a 100644 (file)
@@ -659,9 +659,9 @@ static void conf_choice(struct menu *menu)
                dialog_clear();
                res = dialog_checklist(prompt ? prompt : "Main Menu",
                                        radiolist_instructions,
-                                       MENUBOX_HEIGTH_MIN,
+                                       MENUBOX_HEIGHT_MIN,
                                        MENUBOX_WIDTH_MIN,
-                                       CHECKLIST_HEIGTH_MIN);
+                                       CHECKLIST_HEIGHT_MIN);
                selected = item_activate_selected();
                switch (res) {
                case 0:
index 8498481e6afe36786b969efb6551528c1156ea05..3b822cd110f478376e7ee4fe518f368023863f3d 100644 (file)
@@ -282,7 +282,7 @@ static void sym_check_prop(struct symbol *sym)
        }
 }
 
-void menu_finalize(struct menu *parent)
+static void _menu_finalize(struct menu *parent, bool inside_choice)
 {
        struct menu *menu, *last_menu;
        struct symbol *sym;
@@ -296,7 +296,12 @@ void menu_finalize(struct menu *parent)
                 * and propagate parent dependencies before moving on.
                 */
 
-               if (sym && sym_is_choice(sym)) {
+               bool is_choice = false;
+
+               if (sym && sym_is_choice(sym))
+                       is_choice = true;
+
+               if (is_choice) {
                        if (sym->type == S_UNKNOWN) {
                                /* find the first choice value to find out choice type */
                                current_entry = parent;
@@ -394,7 +399,7 @@ void menu_finalize(struct menu *parent)
                        }
                }
 
-               if (sym && sym_is_choice(sym))
+               if (is_choice)
                        expr_free(parentdep);
 
                /*
@@ -402,8 +407,8 @@ void menu_finalize(struct menu *parent)
                 * moving on
                 */
                for (menu = parent->list; menu; menu = menu->next)
-                       menu_finalize(menu);
-       } else if (sym) {
+                       _menu_finalize(menu, is_choice);
+       } else if (!inside_choice && sym) {
                /*
                 * Automatic submenu creation. If sym is a symbol and A, B, C,
                 * ... are consecutive items (symbols, menus, ifs, etc.) that
@@ -463,7 +468,7 @@ void menu_finalize(struct menu *parent)
                        /* Superset, put in submenu */
                        expr_free(dep2);
                next:
-                       menu_finalize(menu);
+                       _menu_finalize(menu, false);
                        menu->parent = parent;
                        last_menu = menu;
                }
@@ -582,6 +587,11 @@ void menu_finalize(struct menu *parent)
        }
 }
 
+void menu_finalize(void)
+{
+       _menu_finalize(&rootmenu, false);
+}
+
 bool menu_has_prompt(struct menu *menu)
 {
        if (!menu->prompt)
index b45bfaf0a02b1234f49dd328a350a1de8f2641df..7fb996612c966075883d945f4a8174653f025d66 100644 (file)
@@ -515,7 +515,7 @@ void conf_parse(const char *name)
                menu_add_prompt(P_MENU, "Main menu", NULL);
        }
 
-       menu_finalize(&rootmenu);
+       menu_finalize();
 
        menu = &rootmenu;
        while (menu) {
index 6b37039c9e927bc3ffcad77b82e3e9f95d7bf0a7..2f5b91da5afa9ea768caaf0c3e1d1e253fcdfc48 100644 (file)
@@ -1007,6 +1007,8 @@ static Elf_Sym *find_fromsym(struct elf_info *elf, Elf_Addr addr,
 
 static Elf_Sym *find_tosym(struct elf_info *elf, Elf_Addr addr, Elf_Sym *sym)
 {
+       Elf_Sym *new_sym;
+
        /* If the supplied symbol has a valid name, return it */
        if (is_valid_name(elf, sym))
                return sym;
@@ -1015,8 +1017,9 @@ static Elf_Sym *find_tosym(struct elf_info *elf, Elf_Addr addr, Elf_Sym *sym)
         * Strive to find a better symbol name, but the resulting name may not
         * match the symbol referenced in the original code.
         */
-       return symsearch_find_nearest(elf, addr, get_secindex(elf, sym),
-                                     true, 20);
+       new_sym = symsearch_find_nearest(elf, addr, get_secindex(elf, sym),
+                                        true, 20);
+       return new_sym ? new_sym : sym;
 }
 
 static bool is_executable_section(struct elf_info *elf, unsigned int secndx)