https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82630
--- Comment #6 from Rafael Avila de Espindola <rafael.espindola at gmail dot com> --- (In reply to H.J. Lu from comment #3) > (In reply to Jakub Jelinek from comment #2) > > The problem is the assembler's special treatment of _GLOBAL_OFFSET_TABLE_, > > that > > .long _GLOBAL_OFFSET_TABLE_ or .quad _GLOBAL_OFFSET_TABLE_ on x86 doesn't > > actually assemble as normal relocation against that symbol, but as a special > > relocation. > > Should I change assembler to generate R_386_32 for > > .long _GLOBAL_OFFSET_TABLE_ I would love for the _GLOBAL_OFFSET_TABLE_ special case to go away, but for doing that gcc would first have to change from printing call __x86.get_pc_thunk.bx addl $_GLOBAL_OFFSET_TABLE_, %ebx to printing call __x86.get_pc_thunk.bx addl $_GLOBAL_OFFSET_TABLE_ - ., %ebx which already produces the exactly same binary with gas.