https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106834
--- Comment #10 from Alexander Monakov <amonakov at gcc dot gnu.org> --- Okay, so this should have been reported against Binutils, but since we are having the conversation here: the current behavior is not good, gas is silently selecting a different relocation kind for no clear reason. Why is it not a warning or an error? Note that if you assemble such GOT reference via NASM: extern _GLOBAL_OFFSET_TABLE_ default rel f: mov rax, [_GLOBAL_OFFSET_TABLE_ wrt ..gotpc] ret then t.o has 0000000000000000 <f>: 0: 48 8b 05 00 00 00 00 mov 0x0(%rip),%rax # 7 <f+0x7> 3: R_X86_64_GOTPCREL _GLOBAL_OFFSET_TABLE_-0x4 7: c3 ret and ld -shared --no-relax -o t.so t.o does not reject it and t.so has 0000000000001000 <f>: 1000: 48 8b 05 f1 1f 00 00 mov 0x1ff1(%rip),%rax # 2ff8 <_DYNAMIC+0xe0> 1007: c3 ret and without --no-relax: 0000000000001000 <f>: 1000: 48 8d 05 f9 1f 00 00 lea 0x1ff9(%rip),%rax # 3000 <_GLOBAL_OFFSET_TABLE_> 1007: c3 ret So I don't see the reason why it's special-cased in gas.