[tarantool-patches] [PATCH 1/3] fiber: do not inline coro unwind function
Vladimir Davydov
vdavydov.dev at gmail.com
Thu Oct 25 12:28:29 MSK 2018
On Wed, Oct 10, 2018 at 07:39:24PM +0300, Georgy Kirichenko wrote:
> Call coro_unwcontext via function pointer to protect the
> function from inlining.
> ---
> src/backtrace.cc | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/src/backtrace.cc b/src/backtrace.cc
> index 2512bc045..66dcc0047 100644
> --- a/src/backtrace.cc
> +++ b/src/backtrace.cc
> @@ -363,12 +363,17 @@ __asm__ volatile(
> #endif
> }
>
> +typedef void (*coro_unwcontext_indirect_f)(unw_context_t *unw_context,
> + struct coro_context *coro_ctx);
> +/* Variable to process coro_unwcontext indirect call to avoid inlining. */
> +static volatile coro_unwcontext_indirect_f coro_unwcontext_indirect = coro_unwcontext;
> +
Why must not it be inlined? I think it deserves an explanation in
the comment.
Also, may be we'd better use NOINLINE attribute instead of function
pointer?
> void
> backtrace_foreach(backtrace_cb cb, coro_context *coro_ctx, void *cb_ctx)
> {
> unw_cursor_t unw_cur;
> unw_context_t unw_ctx;
> - coro_unwcontext(&unw_ctx, coro_ctx);
> + coro_unwcontext_indirect(&unw_ctx, coro_ctx);
> unw_init_local(&unw_cur, &unw_ctx);
> int frame_no = 0;
> unw_word_t sp = 0, old_sp = 0, ip, offset;
More information about the Tarantool-patches
mailing list