Sergey Bugaev, le dim. 24 nov. 2024 14:35:33 +0300, a ecrit:
> Reduced further:
> 
> --8<------
> struct hurd_sigstate;
> 
> typedef struct
> {

[... the content doesn't actually matter]

>   unsigned int reply_port;
> } 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---

Could it be simply because __builtin_unreachable tells gcc that the
function is not supposed to actually execute, just because it doesn't
know that the retq asm snippet is indeed a noreturn? Can we tell gcc
that?

Samuel

Reply via email to