From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>, Tim Deegan <tim@xen.org>
Subject: Re: [Patch v4 1/4] x86/stack: Refactor show_trace()
Date: Wed, 20 Nov 2013 14:11:18 +0000 [thread overview]
Message-ID: <528CC306.1090108@citrix.com> (raw)
In-Reply-To: <528CC9C902000078001050CF@nat28.tlf.novell.com>
On 20/11/13 13:40, Jan Beulich wrote:
>>>> On 20.11.13 at 14:09, Andrew Cooper <andrew.cooper3@citrix.com> wrote:
>> +static void show_trace(const struct cpu_user_regs *regs)
>> +{
>> + unsigned long *sp = ESP_BEFORE_EXCEPTION(regs);
> So you correctly made it a pointer here...
>
>> +
>> + printk("Xen call trace:\n");
>> +
>> + /*
>> + * If RIP looks sensible, or the top of the stack doesn't, print RIP at
>> + * the top of the stack trace.
>> + */
>> + if ( is_active_kernel_text(regs->rip) ||
>> + !is_active_kernel_text(*sp) )
> ... and de-reference it here ...
>
>> + printk(" [<%p>] %pS\n", _p(regs->rip), _p(regs->rip));
>> + /*
>> + * Else RIP looks bad but the top of the stack looks good. Perhaps we
>> + * followed a wild function pointer? Lets assume the top of the stack is a
>> + * return address; print it and skip past so _show_trace() doesn't print
>> + * it again.
>> + */
>> + else
>> + {
>> + printk(" [<%p>] %pS\n", _p(*sp), _p(*sp));
>> + sp++;
>> + }
>> +
>> + _show_trace(*sp, regs->rbp);
> ... but then you now also de-reference it here? How did that end
> up producing sane stack dumps?
>
> Since one of the two _show_trace() variants wants a pointer here
> anyway, you would probably best switch its first argument and use
> the inverse casting in the other variant.
>
> Jan
>
Huh - I appear to have tested the debug build twice rather than 1 debug
and 1 non-debug build. I clearly need to be rather more careful!
I am not so certain about changing the _show_trace() prototype. The
naive algorithm wants everything as pointers, while the frame-pointer
algorithm wants everything as integers. Switching to passing by pointer
would require an equal amount of ugly casting back to an integer for
get_printable_stack_bottom() etc.
Personally I would prefer to keep as integers to be in line with the
registers; I think it looks more natural to take sp as a resister value
and cast it to a pointer to look at the stack, than passing around a
pointer and casting it to an integer for bounds.
~Andrew
next prev parent reply other threads:[~2013-11-20 14:11 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-20 13:09 [Patch v4 0/4] Xen stack trace printing improvements Andrew Cooper
2013-11-20 13:09 ` [Patch v4 1/4] x86/stack: Refactor show_trace() Andrew Cooper
2013-11-20 13:40 ` Jan Beulich
2013-11-20 14:11 ` Andrew Cooper [this message]
2013-11-20 14:22 ` Jan Beulich
2013-11-20 14:30 ` [Patch v5 " Andrew Cooper
2013-11-20 13:09 ` [Patch v4 2/4] x86/stack: Adjust boundary conditions for printed stacks Andrew Cooper
2013-11-20 13:09 ` [Patch v4 3/4] x86/stack: Change show_stack_overflow() to use frame pointers if available Andrew Cooper
2013-11-20 13:09 ` [Patch v4 4/4] DO NOT APPLY: Test code for interesting stack overflows Andrew Cooper
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=528CC306.1090108@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=JBeulich@suse.com \
--cc=tim@xen.org \
--cc=xen-devel@lists.xenproject.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.