Trouble with __UNIQUE_ID Im getting an error which "shouldnt be possible", but is happening anyway. On Mon, Jun 12, 2023 at 2:55 PM kernel test robot <lkp@intel.com> wrote:
tree/branch: https://github.com/jimc/linux.git dd-fix-2g branch HEAD: 664531695395972a1684dbc3604731db280b479e drm-drivers: DRM_CLASSMAP_USE in 2nd batch of drivers, helpers
Error/Warning: (recently discovered and may have been fixed)
hppa-linux-ld: drivers/gpu/drm/nouveau/nouveau_drm.o:(__dyndbg_class_users+0x0): multiple definition of `__UNIQUE_ID_ddebug_class_user323'; drivers/gpu/drm/radeon/radeon_drv.o:(__dyndbg_class_users+0x0): first defined here include/drm/drm_print.h:421:9: error: implicit declaration of function '_dynamic_func_call_cls' [-Werror=implicit-function-declaration] riscv64-linux-ld: drivers/gpu/drm/gud/gud_drv.o:(__dyndbg_class_users+0x0): multiple definition of `__UNIQUE_ID_ddebug_class_user305'; drivers/gpu/drm/qxl/qxl_drv.o:(__dyndbg_class_users+0x0): first defined here riscv64-linux-ld: drivers/gpu/drm/nouveau/nouveau_drm.o:(__dyndbg_class_users+0x0): multiple definition of `__UNIQUE_ID_ddebug_class_user374'; drivers/gpu/drm/radeon/radeon_drv.o:(__dyndbg_class_users+0x0): first defined here
Error/Warning ids grouped by kconfigs:
gcc_recent_errors |-- parisc-allyesconfig | `-- multiple-definition-of-__UNIQUE_ID_ddebug_class_user323-drivers-gpu-drm-radeon-radeon_drv.o:(__dyndbg_class_users):first-defined-here |-- riscv-allyesconfig | |-- multiple-definition-of-__UNIQUE_ID_ddebug_class_user305-drivers-gpu-drm-qxl-qxl_drv.o:(__dyndbg_class_users):first-defined-here | `-- multiple-definition-of-__UNIQUE_ID_ddebug_class_user374-drivers-gpu-drm-radeon-radeon_drv.o:(__dyndbg_class_users):first-defined-here `-- x86_64-randconfig-a015-20230612 `-- include-drm-drm_print.h:error:implicit-declaration-of-function-_dynamic_func_call_cls
elapsed time: 756m
configs tested: 101 configs skipped: 6
tested configs: alpha allyesconfig gcc alpha defconfig gcc alpha randconfig-r022-20230612 gcc arc allyesconfig gcc arc defconfig gcc arc randconfig-r015-20230612 gcc arc randconfig-r043-20230612 gcc arm allmodconfig gcc arm allyesconfig gcc arm defconfig gcc arm randconfig-r046-20230612 clang arm64 allyesconfig gcc arm64 defconfig gcc csky defconfig gcc hexagon randconfig-r041-20230612 clang hexagon randconfig-r045-20230612 clang i386 allyesconfig gcc i386 buildonly-randconfig-r006-20230612 clang i386 debian-10.3 gcc i386 defconfig gcc i386 randconfig-i001-20230612 clang i386 randconfig-i002-20230612 clang i386 randconfig-i003-20230612 clang i386 randconfig-i004-20230612 clang i386 randconfig-i005-20230612 clang i386 randconfig-i006-20230612 clang i386 randconfig-i011-20230612 gcc i386 randconfig-i012-20230612 gcc i386 randconfig-i013-20230612 gcc i386 randconfig-i014-20230612 gcc i386 randconfig-i015-20230612 gcc i386 randconfig-i016-20230612 gcc i386 randconfig-r012-20230612 gcc i386 randconfig-r014-20230612 gcc i386 randconfig-r035-20230612 clang loongarch allmodconfig gcc loongarch allnoconfig gcc loongarch buildonly-randconfig-r001-20230612 gcc loongarch defconfig gcc m68k allmodconfig gcc m68k allyesconfig gcc m68k buildonly-randconfig-r004-20230612 gcc m68k defconfig gcc mips allmodconfig gcc mips allyesconfig gcc mips randconfig-r001-20230612 gcc mips randconfig-r011-20230612 clang mips randconfig-r021-20230612 clang nios2 defconfig gcc nios2 randconfig-r032-20230612 gcc openrisc randconfig-r013-20230612 gcc openrisc randconfig-r024-20230612 gcc parisc allyesconfig gcc parisc defconfig gcc parisc randconfig-r004-20230612 gcc parisc64 defconfig gcc powerpc allmodconfig gcc powerpc allnoconfig gcc powerpc buildonly-randconfig-r003-20230612 gcc powerpc buildonly-randconfig-r005-20230612 gcc riscv allmodconfig gcc riscv allnoconfig gcc riscv allyesconfig gcc riscv defconfig gcc riscv randconfig-r003-20230612 clang riscv randconfig-r042-20230612 gcc riscv rv32_defconfig gcc s390 allmodconfig gcc s390 allyesconfig gcc s390 defconfig gcc s390 randconfig-r016-20230612 gcc s390 randconfig-r025-20230612 gcc s390 randconfig-r033-20230612 clang s390 randconfig-r044-20230612 gcc sh allmodconfig gcc sh randconfig-r002-20230612 gcc sh randconfig-r031-20230612 gcc sh randconfig-r036-20230612 gcc sparc allyesconfig gcc sparc defconfig gcc um i386_defconfig gcc um x86_64_defconfig gcc x86_64 allyesconfig gcc x86_64 buildonly-randconfig-r002-20230612 clang x86_64 defconfig gcc x86_64 kexec gcc x86_64 randconfig-a001-20230612 clang x86_64 randconfig-a002-20230612 clang x86_64 randconfig-a003-20230612 clang x86_64 randconfig-a004-20230612 clang x86_64 randconfig-a005-20230612 clang x86_64 randconfig-a006-20230612 clang x86_64 randconfig-a011-20230612 gcc x86_64 randconfig-a012-20230612 gcc x86_64 randconfig-a013-20230612 gcc x86_64 randconfig-a014-20230612 gcc x86_64 randconfig-a015-20230612 gcc x86_64 randconfig-a016-20230612 gcc x86_64 randconfig-r005-20230612 clang x86_64 rhel-8.3-rust clang x86_64 rhel-8.3 gcc
-- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
the source of the error is this: /** * DYNDBG_CLASSMAP_USE - refer to a classmap, DEFINEd elsewhere. * @_var: name of the exported classmap var * * This registers a module's use of another module's classmap defn, so * dyndbg can authorize "class DRM_CORE ..." >control commands upon * this module. */ #define DYNDBG_CLASSMAP_USE(_var) \ DYNDBG_CLASSMAP_USE_(_var, __UNIQUE_ID(ddebug_class_user)) #define DYNDBG_CLASSMAP_USE_(_var, _uname) \ extern struct ddebug_class_map _var; \ struct ddebug_class_user __used \ __section("__dyndbg_class_users") _uname = { \ .user_mod_name = KBUILD_MODNAME, \ .map = &_var, \ } I have reproduced this locally, with various errors, depending upon config and make.cross args heres one example: AR vmlinux.a LD vmlinux.o ld: ld: DWARF error: could not find abbrev number 7629 drivers/gpu/drm/gud/gud_drv.o:(__dyndbg_class_users+0x0): multiple definition of `__UNIQUE_ID_ddebug_class_user303'; ld: DWARF error: could not find abbrev number 94 drivers/gpu/drm/qxl/qxl_drv.o:(__dyndbg_class_users+0x0): first defined here make[1]: *** [/home/jimc/projects/lx/wk-suren/scripts/Makefile.vmlinux_o:61: vmlinux.o] Error 1 make: *** [/home/jimc/projects/lx/wk-suren/Makefile:1231: vmlinux_o] Error 2 [jimc@frodo rand-046-clang]$ grep -E 'QXL|GUD' .config CONFIG_DRM_QXL=y CONFIG_DRM_GUD=y searching that error gives results suggesting an LTO linker error, but some of the hits are quite old. note- despite the path, this is not a clang error - I get a different message (but still an error) when using make.cross COMPILER=clang is there something subtle (or obvious) wrong with my macro ?