Reduced further: --8<------ struct hurd_sigstate;
typedef struct { void *tcb; union dtv *dtv; unsigned int self_do_no_use; int __glibc_padding1; int multiple_threads; int gscope_flag; unsigned long sysinfo; unsigned long stack_guard; unsigned long pointer_guard; long __glibc_padding2[2]; int private_futex; int __glibc_padding3; void *__private_tm[4]; void *__private_ss; unsigned long long int ssp_base; unsigned int reply_port; struct hurd_sigstate *_hurd_sigstate; struct rtld_catch *rtld_catch; } tcbhead_t; void __sigreturn2 (struct hurd_sigstate *ss, unsigned long *usp, unsigned int sc_reply_port) { (* (unsigned int __seg_fs *) __builtin_offsetof (tcbhead_t, reply_port) = sc_reply_port); #ifdef ADD_NOP asm ("nop"); #endif asm volatile ("movq %0, %%rsp\n" "retq $128" : : "rm" (usp)); __builtin_unreachable (); } -------->8--- Reproducible on x86_64-linux-gnu gcc just as well: $ gcc anew.c -c -O2 $ objdump -d anew.o anew.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <__sigreturn2>: 0: 48 89 f4 mov %rsi,%rsp 3: c2 80 00 ret $0x80 $ gcc anew.c -c -O2 -D ADD_NOP $ objdump -d anew.o anew.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <__sigreturn2>: 0: 64 89 14 25 80 00 00 mov %edx,%fs:0x80 7: 00 8: 90 nop 9: 48 89 f4 mov %rsi,%rsp c: c2 80 00 ret $0x80 Sergey