From: Cary Coutant <cary@cup.hp.com>
To: linux-ia64@vger.kernel.org
Subject: Re: [Linux-ia64] Incorrect unwind data in entry.S
Date: Wed, 17 Jan 2001 18:54:26 +0000 [thread overview]
Message-ID: <marc-linux-ia64-105590693005063@msgid-missing> (raw)
In-Reply-To: <marc-linux-ia64-105590678205870@msgid-missing>
>There is, it just has a strange name: ".restore sp" actually generates
>an epilogue directive and the (optional) second argument specifies the
>epilogue count.
Yes, it looks like Intel added it to their assembler, and I was unaware
of it until now.
>The kernel unwinder does _not_ assume that the stack size is fixed
>throughout the entire procedure. I didn't think the unwind specs
>forces that either, but if I'm missing something please let me know.
On reflection, I agree. I didn't anticipate nested prologues modifying a
fixed frame size, but I did not rule that out in the specs.
There still seems to be a problem with the unwind data not matching the
actual frame state:
> .prologue; // prologue 1
> .unwabi @svr4, 'i';
> .fframe 400+16+(0);
> // assorted .spillsp directives
> .body
> mov r16=r0
> .prologue // prologue 2
> movl r28\x1f;
> ;;
> .fframe 576;
> adds sp=-576,sp;
> mov b7=r28;
> // assorted .savesp and .spillsp directives
> br.cond.sptk.many save_switch_stack;
> 1:
> br.call.sptk.few rp=ia64_handle_unaligned
>.ret21: .body
> movl r28\x1f;
> ;;
> mov b7=r28;
> br.cond.sptk.many load_switch_stack;
> 1: .restore sp; // pop prologue 2
> .prologue; // prologue 3
> .unwabi @svr4, 'i';
> .fframe 400+16+(0);
> .spillsp rp, (8 + 16)+(0);
> .spillsp ar.pfs, (16 + 16)+(0);
> .spillsp ar.unat, (24 + 16)+(0);
> .spillsp ar.fpsr, (312 + 16)+(0);
> .spillsp pr, (64 + 16)+(0);;
> .body;
> adds spW6,sp
> br.cond.sptk.many rp
>.endp ia64_prepare_handle_unaligned
Perhaps there's something in the first set of "assorted .spillsp
directives," but I don't see where the outer 416-byte stack frame is
being allocated or deallocated. The code then allocates an additional 576
bytes, but prologue 2 describes the *total* frame size as 576. It then
pops prologue 2, but doesn't deallocate the 576 bytes until the beginning
of body region 3, leaving a narrow window where the unwinder will think
the frame size is 416 bytes.
There must be something I'm missing here.
-cary
next prev parent reply other threads:[~2001-01-17 18:54 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2000-12-21 3:42 [Linux-ia64] Incorrect unwind data in entry.S Keith Owens
2001-01-05 18:48 ` David Mosberger
2001-01-06 0:51 ` Keith Owens
2001-01-06 1:58 ` David Mosberger
2001-01-16 23:41 ` Cary Coutant
2001-01-17 1:34 ` David Mosberger
2001-01-17 18:54 ` Cary Coutant [this message]
2001-01-17 20:04 ` David Mosberger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=marc-linux-ia64-105590693005063@msgid-missing \
--to=cary@cup.hp.com \
--cc=linux-ia64@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.