https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115132
--- Comment #2 from akrl at gcc dot gnu.org --- Hi Richard, thanks, yes I tried that already, the trouble is that our code looks more like this: ========= extern void flush_stack_call_func1 (void (*func) (void *arg), void *arg); extern void mark_threads (void); extern void mark_threads_callback (void *ignore); static inline void flush_stack_call_func (void (*func) (void *arg), void *arg) { __builtin_unwind_init (); flush_stack_call_func1 (func, arg); } void mark_threads (void) { flush_stack_call_func (mark_threads_callback, ((void *)0)); } [...] ========= Because we have several places where 'flush_stack_call_func' is used. Unfortunately as 'flush_stack_call_func' gets inlined the trick does not work. I'm not ecstatic at making 'flush_stack_call_func' not inlinable nor at marking all the functions where it is called with the attribute, but we'll have to find a way anyway I guess. Thanks Andrea