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

Reply via email to