Commit 2f38795e authored by David Mosberger's avatar David Mosberger

ia64: Correct region_start calculation in kernel unwinder.

parent 0b25bc5e
...@@ -736,7 +736,7 @@ static void ...@@ -736,7 +736,7 @@ static void
desc_prologue (int body, unw_word rlen, unsigned char mask, unsigned char grsave, desc_prologue (int body, unw_word rlen, unsigned char mask, unsigned char grsave,
struct unw_state_record *sr) struct unw_state_record *sr)
{ {
int i; int i, region_start;
if (!(sr->in_body || sr->first_region)) if (!(sr->in_body || sr->first_region))
finish_prologue(sr); finish_prologue(sr);
...@@ -748,19 +748,20 @@ desc_prologue (int body, unw_word rlen, unsigned char mask, unsigned char grsave ...@@ -748,19 +748,20 @@ desc_prologue (int body, unw_word rlen, unsigned char mask, unsigned char grsave
return; return;
} }
region_start = sr->region_start + sr->region_len;
for (i = 0; i < sr->epilogue_count; ++i) for (i = 0; i < sr->epilogue_count; ++i)
pop(sr); pop(sr);
sr->epilogue_count = 0; sr->epilogue_count = 0;
sr->epilogue_start = UNW_WHEN_NEVER; sr->epilogue_start = UNW_WHEN_NEVER;
if (!body) sr->region_start = region_start;
push(sr);
sr->region_start += sr->region_len;
sr->region_len = rlen; sr->region_len = rlen;
sr->in_body = body; sr->in_body = body;
if (!body) { if (!body) {
push(sr);
for (i = 0; i < 4; ++i) { for (i = 0; i < 4; ++i) {
if (mask & 0x8) if (mask & 0x8)
set_reg(sr->curr.reg + unw.save_order[i], UNW_WHERE_GR, set_reg(sr->curr.reg + unw.save_order[i], UNW_WHERE_GR,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment