[jimc:dd-fix-2g] BUILD REGRESSION 664531695395972a1684dbc3604731db280b479e

jim.cromie at gmail.com jim.cromie at gmail.com
Tue Jun 13 13:43:42 EDT 2023


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 at 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 at 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 ?



More information about the Kernelnewbies mailing list