diff --git a/src/backtrace.cc b/src/backtrace.cc
index 4a2f2157a291b40bdb1f99743f3944bc05455c17..a86255e1f1b032b5fd04ead9c1bd317bbe4c9aa1 100644
--- a/src/backtrace.cc
+++ b/src/backtrace.cc
@@ -371,21 +371,21 @@ backtrace_foreach(backtrace_cb cb, coro_context *coro_ctx, void *cb_ctx)
 	coro_unwcontext(&unw_ctx, coro_ctx);
 	unw_init_local(&unw_cur, &unw_ctx);
 	int frame_no = 0;
-	unw_word_t sp, old_sp = 0, ip, offset;
+	unw_word_t sp = 0, old_sp = 0, ip, offset;
 	int unw_status, demangle_status;
 	char *demangle_buf = NULL;
 	size_t demangle_buf_len = 0;
 
 	while ((unw_status = unw_step(&unw_cur)) > 0) {
 		const char *proc;
+		old_sp = sp;
 		unw_get_reg(&unw_cur, UNW_REG_IP, &ip);
+		unw_get_reg(&unw_cur, UNW_REG_SP, &sp);
 		if (sp == old_sp) {
 			say_debug("unwinding error: previous frame "
 				  "identical to this frame (corrupt stack?)");
 			goto out;
 		}
-		old_sp = sp;
-		unw_get_reg(&unw_cur, UNW_REG_SP, &sp);
 		proc = get_proc_name(&unw_cur, &offset, false);
 
 		char *cxxname = abi::__cxa_demangle(proc, demangle_buf,