Hi Nick, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on kbuild/for-next] [also build test WARNING on linus/master v5.13] [cannot apply to kbuild/kconfig next-20210709] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Nick-Alcock/kbuild-bring-back-tristate-conf/20210710-072558 base: https://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git for-next config: s390-randconfig-r012-20210709 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 8d69635ed9ecf36fd0ca85906bfde17949671cbe) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install s390 cross compiling tool for clang build # apt-get install binutils-s390x-linux-gnu # https://github.com/0day-ci/linux/commit/af04f89ab6ea4f6ffbd83ee71afe1e8a0df26ee1 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Nick-Alcock/kbuild-bring-back-tristate-conf/20210710-072558 git checkout af04f89ab6ea4f6ffbd83ee71afe1e8a0df26ee1 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=s390 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All warnings (new ones prefixed by >>): In file included from kernel/kallsyms.c:25: In file included from include/linux/filter.h:13: In file included from include/linux/skbuff.h:31: In file included from include/linux/dma-mapping.h:10: In file included from include/linux/scatterlist.h:9: In file included from arch/s390/include/asm/io.h:75: include/asm-generic/io.h:464:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __raw_readb(PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:477:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); ~~~~~~~~~~ ^ include/uapi/linux/byteorder/big_endian.h:36:59: note: expanded from macro '__le16_to_cpu' #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x)) ^ include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16' #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x)) ^ In file included from kernel/kallsyms.c:25: In file included from include/linux/filter.h:13: In file included from include/linux/skbuff.h:31: In file included from include/linux/dma-mapping.h:10: In file included from include/linux/scatterlist.h:9: In file included from arch/s390/include/asm/io.h:75: include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); ~~~~~~~~~~ ^ include/uapi/linux/byteorder/big_endian.h:34:59: note: expanded from macro '__le32_to_cpu' #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x)) ^ include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32' #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) ^ In file included from kernel/kallsyms.c:25: In file included from include/linux/filter.h:13: In file included from include/linux/skbuff.h:31: In file included from include/linux/dma-mapping.h:10: In file included from include/linux/scatterlist.h:9: In file included from arch/s390/include/asm/io.h:75: include/asm-generic/io.h:501:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writeb(value, PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:511:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:521:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:609:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] readsb(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:617:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] readsw(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:625:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] readsl(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:634:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] writesb(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:643:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] writesw(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ include/asm-generic/io.h:652:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] writesl(PCI_IOBASE + addr, buffer, count); ~~~~~~~~~~ ^ kernel/kallsyms.c:581:12: warning: no previous prototype for function 'arch_get_kallsym' [-Wmissing-prototypes] int __weak arch_get_kallsym(unsigned int symnum, unsigned long *value, ^ kernel/kallsyms.c:581:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int __weak arch_get_kallsym(unsigned int symnum, unsigned long *value, ^ static >> kernel/kallsyms.c:688:7: warning: variable 'mod_idx' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] if (kallsyms_module_offsets) ^~~~~~~~~~~~~~~~~~~~~~~ kernel/kallsyms.c:708:35: note: uninitialized use occurs here iter->hint_builtin_module_idx = mod_idx; ^~~~~~~ kernel/kallsyms.c:688:3: note: remove the 'if' if its condition is always true if (kallsyms_module_offsets) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ kernel/kallsyms.c:675:23: note: initialize the variable 'mod_idx' to silence this warning unsigned long mod_idx; ^ = 0 14 warnings generated. vim +688 kernel/kallsyms.c 580 > 581 int __weak arch_get_kallsym(unsigned int symnum, unsigned long *value, 582 char *type, char *name) 583 { 584 return -EINVAL; 585 } 586 587 static int get_ksymbol_arch(struct kallsym_iter *iter) 588 { 589 int ret = arch_get_kallsym(iter->pos - kallsyms_num_syms, 590 &iter->value, &iter->type, 591 iter->name); 592 593 if (ret < 0) { 594 iter->pos_arch_end = iter->pos; 595 return 0; 596 } 597 598 return 1; 599 } 600 601 static int get_ksymbol_mod(struct kallsym_iter *iter) 602 { 603 int ret = module_get_kallsym(iter->pos - iter->pos_arch_end, 604 &iter->value, &iter->type, 605 iter->name, iter->module_name, 606 &iter->exported); 607 iter->builtin_module_names = NULL; 608 609 if (ret < 0) { 610 iter->pos_mod_end = iter->pos; 611 return 0; 612 } 613 614 return 1; 615 } 616 617 /* 618 * ftrace_mod_get_kallsym() may also get symbols for pages allocated for ftrace 619 * purposes. In that case "__builtin__ftrace" is used as a module name, even 620 * though "__builtin__ftrace" is not a module. 621 */ 622 static int get_ksymbol_ftrace_mod(struct kallsym_iter *iter) 623 { 624 int ret = ftrace_mod_get_kallsym(iter->pos - iter->pos_mod_end, 625 &iter->value, &iter->type, 626 iter->name, iter->module_name, 627 &iter->exported); 628 iter->builtin_module_names = NULL; 629 630 if (ret < 0) { 631 iter->pos_ftrace_mod_end = iter->pos; 632 return 0; 633 } 634 635 return 1; 636 } 637 638 static int get_ksymbol_bpf(struct kallsym_iter *iter) 639 { 640 int ret; 641 642 strlcpy(iter->module_name, "bpf", MODULE_NAME_LEN); 643 iter->exported = 0; 644 iter->builtin_module_names = NULL; 645 ret = bpf_get_kallsym(iter->pos - iter->pos_ftrace_mod_end, 646 &iter->value, &iter->type, 647 iter->name); 648 if (ret < 0) { 649 iter->pos_bpf_end = iter->pos; 650 return 0; 651 } 652 653 return 1; 654 } 655 656 /* 657 * This uses "__builtin__kprobes" as a module name for symbols for pages 658 * allocated for kprobes' purposes, even though "__builtin__kprobes" is not a 659 * module. 660 */ 661 static int get_ksymbol_kprobe(struct kallsym_iter *iter) 662 { 663 strlcpy(iter->module_name, "__builtin__kprobes", MODULE_NAME_LEN); 664 iter->exported = 0; 665 iter->builtin_module_names = NULL; 666 return kprobe_get_kallsym(iter->pos - iter->pos_bpf_end, 667 &iter->value, &iter->type, 668 iter->name) < 0 ? 0 : 1; 669 } 670 671 /* Returns space to next name. */ 672 static unsigned long get_ksymbol_core(struct kallsym_iter *iter, int kallmodsyms) 673 { 674 unsigned off = iter->nameoff; 675 unsigned long mod_idx; 676 677 iter->exported = 0; 678 iter->value = kallsyms_sym_address(iter->pos); 679 680 iter->type = kallsyms_get_symbol_type(off); 681 682 iter->module_name[0] = '\0'; 683 iter->builtin_module_names = NULL; 684 685 off = kallsyms_expand_symbol(off, iter->name, ARRAY_SIZE(iter->name)); 686 #ifdef CONFIG_KALLMODSYMS 687 if (kallmodsyms) { > 688 if (kallsyms_module_offsets) 689 mod_idx = 690 get_builtin_module_idx(iter->value, 691 iter->hint_builtin_module_idx); 692 693 /* 694 * This is a built-in module iff the tables of built-in modules 695 * (address->module name mappings) and module names are known, 696 * and if the address was found there, and if the corresponding 697 * module index is nonzero. All other cases mean off the end of 698 * the binary or in a non-modular range in between one or more 699 * modules. (Also guard against a corrupt kallsyms_objfiles 700 * array pointing off the end of kallsyms_modules.) 701 */ 702 if (kallsyms_modules != NULL && kallsyms_module_names != NULL && 703 mod_idx != (unsigned long) -1 && 704 kallsyms_modules[mod_idx] != 0 && 705 kallsyms_modules[mod_idx] < kallsyms_module_names_len) 706 iter->builtin_module_names = 707 &kallsyms_module_names[kallsyms_modules[mod_idx]]; 708 iter->hint_builtin_module_idx = mod_idx; 709 } 710 #endif 711 return off - iter->nameoff; 712 } 713 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org