https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82303
--- Comment #15 from H.J. Lu <hjl.tools at gmail dot com> --- (In reply to Thomas Garnier from comment #14) > Correcting what I said before, it is about re-enabling switch folding (or > switch optimization). > > Basically without PIE (-fno-PIE) with -O2, a switch can be optimized to be: > > 0000000000000000 <phy_modes>: > 0: b8 00 00 00 00 mov $0x0,%eax > 1: R_X86_64_32 .rodata.str1.1 > 5: 83 ff 16 cmp $0x16,%edi > 8: 77 0a ja 14 <phy_modes+0x14> > a: 89 ff mov %edi,%edi > c: 48 8b 04 fd 00 00 00 mov 0x0(,%rdi,8),%rax > 13: 00 > 10: R_X86_64_32S .rodata > 14: c3 retq > The problem is that R_X86_64_32 isn't PIC: /usr/local/bin/ld: x.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a PIE object; recompile with -fPIC