From 2f38795e7fd1b9ddcb386095453e7ebc6d2ea89f Mon Sep 17 00:00:00 2001 From: David Mosberger Date: Mon, 3 Mar 2003 22:51:00 -0800 Subject: [PATCH] ia64: Correct region_start calculation in kernel unwinder. --- arch/ia64/kernel/unwind.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/arch/ia64/kernel/unwind.c b/arch/ia64/kernel/unwind.c index c41cdee801336..fb6f8fb235093 100644 --- a/arch/ia64/kernel/unwind.c +++ b/arch/ia64/kernel/unwind.c @@ -736,7 +736,7 @@ static void desc_prologue (int body, unw_word rlen, unsigned char mask, unsigned char grsave, struct unw_state_record *sr) { - int i; + int i, region_start; if (!(sr->in_body || sr->first_region)) finish_prologue(sr); @@ -748,19 +748,20 @@ desc_prologue (int body, unw_word rlen, unsigned char mask, unsigned char grsave return; } + region_start = sr->region_start + sr->region_len; + for (i = 0; i < sr->epilogue_count; ++i) pop(sr); sr->epilogue_count = 0; sr->epilogue_start = UNW_WHEN_NEVER; - if (!body) - push(sr); - - sr->region_start += sr->region_len; + sr->region_start = region_start; sr->region_len = rlen; sr->in_body = body; if (!body) { + push(sr); + for (i = 0; i < 4; ++i) { if (mask & 0x8) set_reg(sr->curr.reg + unw.save_order[i], UNW_WHERE_GR, -- 2.53.0