https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108106
--- Comment #7 from H.J. Lu <hjl.tools at gmail dot com> --- It is about -mshared: [hjl@gnu-cfl-3 tmp]$ cat foo.s jmp __interceptor_sigsetjmp .globl __interceptor_sigsetjmp __interceptor_sigsetjmp: nop [hjl@gnu-cfl-3 tmp]$ as -o foo.o foo.s [hjl@gnu-cfl-3 tmp]$ readelf -rW foo.o There are no relocations in this file. [hjl@gnu-cfl-3 tmp]$ as -o foo.o foo.s -mshared [hjl@gnu-cfl-3 tmp]$ readelf -rW foo.o Relocation section '.rela.text' at offset 0xc8 contains 1 entry: Offset Info Type Symbol's Value Symbol's Name + Addend 0000000000000001 0000000100000004 R_X86_64_PLT32 0000000000000005 __interceptor_sigsetjmp - 4 [hjl@gnu-cfl-3 tmp]$ The assembler option: '-mno-shared' On ELF target, the assembler normally optimizes out non-PLT relocations against defined non-weak global branch targets with default visibility. The '-mshared' option tells the assembler to generate code which may go into a shared library where all non-weak global branch targets with default visibility can be preempted. The resulting code is slightly bigger. This option only affects the handling of branch instructions. The older assembler generates R_X86_64_PC32 relocation.