https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101726
--- Comment #2 from Stefan Kneifel <stefan.kneifel at bluewin dot ch> --- OK, so declaring the default function as local might make gcc assume that the function body is available in the same translation unit, thus rendering the relocation locally resolvable. Thus said, I tried to apply the following patch: --------------------------------------------------------- diff -ruN a/gcc/multiple_target.c b/gcc/multiple_target.c --- a/gcc/multiple_target.c 2021-07-28 11:09:49.000000000 +0200 +++ b/gcc/multiple_target.c 2021-08-03 14:45:00.341857265 +0200 @@ -172,7 +172,6 @@ /* FIXME: copy of cgraph_node::make_local that should be cleaned up in next stage1. */ - node->make_decl_local (); node->set_section (NULL); node->set_comdat_group (NULL); node->externally_visible = false; --------------------------------------------------------- and it seems to fix the problem (disassembler output of test case): --------------------------------------------------------- test.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <_Z3barv>: 0: e9 00 00 00 00 jmpq 5 <_Z3barv+0x5> 1: R_X86_64_PLT32 _Z3foov-0x4 Disassembly of section .text._Z3foov.resolver: 0000000000000000 <_Z3foov.resolver>: 0: 51 push %rcx 1: e8 00 00 00 00 callq 6 <_Z3foov.resolver+0x6> 2: R_X86_64_PLT32 __cpu_indicator_init-0x4 6: 48 8b 05 00 00 00 00 mov 0x0(%rip),%rax # d <_Z3foov.resolver+0xd> 9: R_X86_64_REX_GOTPCRELX __cpu_model-0x4 d: 8b 40 0c mov 0xc(%rax),%eax 10: 0f ba e0 0f bt $0xf,%eax 14: 73 09 jae 1f <_Z3foov.resolver+0x1f> 16: 48 8b 05 00 00 00 00 mov 0x0(%rip),%rax # 1d <_Z3foov.resolver+0x1d> 19: R_X86_64_REX_GOTPCRELX _Z3foov.avx512f.0-0x4 1d: eb 25 jmp 44 <_Z3foov.resolver+0x44> 1f: 0f ba e0 0a bt $0xa,%eax 23: 73 09 jae 2e <_Z3foov.resolver+0x2e> 25: 48 8b 05 00 00 00 00 mov 0x0(%rip),%rax # 2c <_Z3foov.resolver+0x2c> 28: R_X86_64_REX_GOTPCRELX _Z3foov.avx2.1-0x4 2c: eb 16 jmp 44 <_Z3foov.resolver+0x44> 2e: 0f ba e0 09 bt $0x9,%eax 32: 73 09 jae 3d <_Z3foov.resolver+0x3d> 34: 48 8b 05 00 00 00 00 mov 0x0(%rip),%rax # 3b <_Z3foov.resolver+0x3b> 37: R_X86_64_REX_GOTPCRELX _Z3foov.avx.2-0x4 3b: eb 07 jmp 44 <_Z3foov.resolver+0x44> 3d: 48 8b 05 00 00 00 00 mov 0x0(%rip),%rax # 44 <_Z3foov.resolver+0x44> 40: R_X86_64_REX_GOTPCRELX _Z3foov.default.3-0x4 44: 5a pop %rdx 45: c3 retq --------------------------------------------------------- However, as a total GCC greenhorn I'm absolutely not sure of any side effects that could be introduced by this hack ;-) so please Martin check that thoroughly, if it shouldn't be fixed in a more sophisticated way. It might revert the "Bug 81238" patch. Thank you very much!