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

Reply via email to