# git rev-parse -q --verify 0afaf52eff136daf4edc2aac3dc9793fa247ed0c^{commit} 0afaf52eff136daf4edc2aac3dc9793fa247ed0c already have revision, skipping fetch # git checkout -q -f -B kisskb 0afaf52eff136daf4edc2aac3dc9793fa247ed0c # git clean -qxdf # < git log -1 # commit 0afaf52eff136daf4edc2aac3dc9793fa247ed0c # Author: HONG Yifan # Date: Wed Jul 17 01:50:41 2024 +0000 # # kconfig: recursive checks drop file/lineno # # This prevents segfault when getting filename and lineno in recursive # checks. # # If the following snippet is found in Kconfig: # # [Test code 1] # # config FOO # bool # depends on BAR # select BAR # # ... without BAR defined; then there is a segfault. # # Kconfig:34:error: recursive dependency detected! # Kconfig:34: symbol FOO depends on BAR # make[4]: *** [scripts/kconfig/Makefile:85: allnoconfig] Segmentation fault # # This is because of the following. BAR is a fake entry created by # sym_lookup() with prop being NULL. In the recursive check, there is a # NULL check for prop to fall back to stack->sym->prop if stack->prop is # NULL. However, in this case, stack->sym points to the fake BAR entry # created by sym_lookup(), so prop is still NULL. prop was then referenced # without additional NULL checks, causing segfault. # # As the previous email thread suggests, the file and lineno for select is # also wrong: # # [Test code 2] # # config FOO # bool # # config BAR # bool # # config FOO # bool "FOO" # depends on BAR # select BAR # # $ make defconfig # *** Default configuration is based on 'x86_64_defconfig' # Kconfig:1:error: recursive dependency detected! # Kconfig:1: symbol FOO depends on BAR # Kconfig:4: symbol BAR is selected by FOO # [...] # # Kconfig:4 should be Kconfig:10. # # This patch deletes the wrong and segfault-prone filename/lineno # inference completely. With this patch, Test code 1 yields: # # error: recursive dependency detected! # symbol FOO depends on BAR # symbol BAR is selected by FOO # # Signed-off-by: HONG Yifan # Signed-off-by: Masahiro Yamada # < /opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux-ld --version # < git log --format=%s --max-count=1 0afaf52eff136daf4edc2aac3dc9793fa247ed0c # make -s -j 40 ARCH=powerpc O=/kisskb/build/kbuild_ppc64le_defconfig_powerpc-gcc5 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux- ppc64le_defconfig Using /kisskb/src/arch/powerpc/configs/ppc64_defconfig as base Merging /kisskb/src/arch/powerpc/configs/le.config # # merged configuration written to .config (needs make) # # < make -s -j 40 ARCH=powerpc O=/kisskb/build/kbuild_ppc64le_defconfig_powerpc-gcc5 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux- help # make -s -j 40 ARCH=powerpc O=/kisskb/build/kbuild_ppc64le_defconfig_powerpc-gcc5 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux- olddefconfig # make -s -j 40 ARCH=powerpc O=/kisskb/build/kbuild_ppc64le_defconfig_powerpc-gcc5 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux- Completed OK # rm -rf /kisskb/build/kbuild_ppc64le_defconfig_powerpc-gcc5 # Build took: 0:01:56.134152