[tarantool-patches] [PATCH 1/3] fiber: do not inline coro unwind function
Georgy Kirichenko
georgy at tarantool.org
Wed Oct 10 19:39:24 MSK 2018
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;
+
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;
--
2.19.1
More information about the Tarantool-patches
mailing list