Current linux-5.17.1 on fresh gcc-12 fails to build with errors like: ERROR: modpost: "__popcountdi2" [drivers/net/ethernet/broadcom/bnx2x/bnx2x.ko] undefined! ERROR: modpost: "__popcountdi2" [drivers/gpu/drm/amd/amdgpu/amdgpu.ko] undefined! It is occasionally seen by others on previous gcc versions as well: https://lkml.org/lkml/2021/7/11/261 https://lkml.org/lkml/2018/10/24/403 '__popcountdi2' are inserted by gcc for code like the following from 'drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_execution.c': static inline enum mod_hdcp_status validate_bksv(struct mod_hdcp *hdcp) { uint64_t n = 0; uint8_t count = 0; u8 bksv[sizeof(n)] = { }; memcpy(bksv, hdcp->auth.msg.hdcp1.bksv, sizeof(hdcp->auth.msg.hdcp1.bksv)); n = *(uint64_t *)bksv; /* Here gcc inserts 'count = __builtin_popcount(n);' */ while (n) { count++; n &= (n - 1); } return (count == 20) ? MOD_HDCP_STATUS_SUCCESS : MOD_HDCP_STATUS_HDCP1_INVALID_BKSV; } Note that gcc can insert it regardless of -mno-* options. How should linux.git handle it? A few options come to mind: - Perhaps use libgcc.a directly. - Just implement '__popcountdi2'. Example definition from libgcc: https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgcc/libgcc2.c;hb=HEAD#l846 - Or workaround it with -fno-builtin-popcount in Makefiles. CCing people who can help routing it and/or deciding on the fix: amd-gfx@xxxxxxxxxxxxxxxxxxxxx, Joe Perches, linux-kbuild@xxxxxxxxxxxxxxx, Jakub Jelinek, Segher Boessenkool, Thomas Gleixner,Peter Zijlstra, Andy Lutomirski. WDYT? Thanks! -- Sergei