From: Don Slutz <dslutz@verizon.com>
To: George Dunlap <george.dunlap@eu.citrix.com>,
Ian Campbell <Ian.Campbell@citrix.com>,
Don Slutz <dslutz@verizon.com>
Cc: Don Slutz <Don@CloudSwitch.com>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
Ian Jackson <ian.jackson@eu.citrix.com>,
Jan Beulich <jbeulich@suse.com>,
xen-devel@lists.xen.org
Subject: Re: [PATCH v8 03/20] xenctx: Add -n (--display-stack-pages) option to output larger stack
Date: Tue, 01 Apr 2014 16:28:38 -0400 [thread overview]
Message-ID: <533B2176.6080402@terremark.com> (raw)
In-Reply-To: <533ABE41.2020901@eu.citrix.com>
On 04/01/14 09:25, George Dunlap wrote:
> On 04/01/2014 02:19 PM, Ian Campbell wrote:
>> On Thu, 2014-03-27 at 15:05 -0400, Don Slutz wrote:
>>> Important: This is the stack size (also known as stack limit) to
>>> display not the configured stack size.
>>>
>>> Note: use with caution (easy to get garbage).
>>>
>>> Below is a pictures of a configured 3 page stack, and where
>>> the SP currently is. Each box is a page.
>>>
>>> -n 1 -n 2 -n 3
>>>
>>> +------------------+
>>> | |
>>> | |
>>> | |
>>> | |
>>> SP --> | | * * *
>>> +------------------+ | |
>>> | | | |
>>> | | | |
>>> | | | |
>>> | | | |
>>> | | * |
>>> +------------------+ |
>>> | | |
>>> | | |
>>> | | |
>>> | | |
>>> | | *
>>> +------------------+
>>>
>>> Display using "-n 3" since the used stack pages is 3.
>>
>> Stacks grow downwards on all of the architectures we support. Perhaps
>> that is why the rest of us find your diagrams so confusing?
>>
I expect so. I can flip the picture (and add relative address) to help. I was basing
the layout to match the stack output:
Call Trace:
[<ffffffff81346898>] io_serial_out+0x18 <--
ffff880032bb1310: [<ffffffff81346f51>] serial8250_console_putchar+0x31
ffff880032bb1330: [<ffffffff813428de>] uart_console_write+0x3e
ffff880032bb1338: [<ffffffff8100bc0e>] apic_timer_interrupt+0xe
ffff880032bb1370: [<ffffffff813472ad>] serial8250_console_write+0xbd
ffff880032bb13c0: [<ffffffff8106b8f5>] __call_console_drivers+0x75
ffff880032bb13f0: [<ffffffff8106b95a>] _call_console_drivers+0x4a
ffff880032bb1410: [<ffffffff8106be6e>] release_console_sem+0x4e
ffff880032bb1450: [<ffffffff8106c628>] vprintk+0x248
ffff880032bb14f0: [<ffffffff814fd363>] printk+0x41
ffff880032bb3f20: [<ffffffff8100204c>] do_one_initcall+0x3c
ffff880032bb3f50: [<ffffffff810b0eb1>] sys_init_module+0xe1
ffff880032bb3f80: [<ffffffff8100b0f2>] system_call_fastpath+0x16
Adding (my) boxes (note not fully to scale):
+------------------------------------------------------------------------------+
| |
| |
| |
| |
| |
| |
| [<ffffffff81346898>] io_serial_out+0x18 <-- |
SP->| ffff880032bb1310: [<ffffffff81346f51>] serial8250_console_putchar+0x31 |
| ffff880032bb1330: [<ffffffff813428de>] uart_console_write+0x3e |
| ffff880032bb1338: [<ffffffff8100bc0e>] apic_timer_interrupt+0xe |
| ffff880032bb1370: [<ffffffff813472ad>] serial8250_console_write+0xbd |
| ffff880032bb13c0: [<ffffffff8106b8f5>] __call_console_drivers+0x75 |
| ffff880032bb13f0: [<ffffffff8106b95a>] _call_console_drivers+0x4a |
| ffff880032bb1410: [<ffffffff8106be6e>] release_console_sem+0x4e |
| ffff880032bb1450: [<ffffffff8106c628>] vprintk+0x248 |
| ffff880032bb14f0: [<ffffffff814fd363>] printk+0x41 |
| |
| |
| |
+------------------------------------------------------------------------------+
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
+------------------------------------------------------------------------------+
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| ffff880032bb3f20: [<ffffffff8100204c>] do_one_initcall+0x3c |
| ffff880032bb3f50: [<ffffffff810b0eb1>] sys_init_module+0xe1 |
| ffff880032bb3f80: [<ffffffff8100b0f2>] system_call_fastpath+0x16 |
| |
+------------------------------------------------------------------------------+
>> I drew my example to you the way I did for a reason.
>>
Sorry, I did not notice that.
>> Also, should the other end of the *---* line from SP (the bottom in your
>> diagram above) not be aligned to a page boundary, after all -n works in
>> pages.
>>
I am happy to do it either way. I think of the page breaks to not be part of memory.
>>
>>> @@ -664,6 +667,8 @@ static int print_stack(vcpu_guest_context_any_t *ctx, int vcpu, int width)
>>>
>>> stack_limit = ((stack_pointer(ctx) + XC_PAGE_SIZE)
>>> & ~((guest_word_t) XC_PAGE_SIZE - 1));
>>> + if ( xenctx.nr_stack_pages > 1 )
>>> + stack_limit += (xenctx.nr_stack_pages - 1) * XC_PAGE_SIZE;
>>
>> The if here is still redundant.
>>
Will drop.
>>> printf("\n");
>>> printf("Stack:\n");
>>> for (i=1; i<5 && stack < stack_limit; i++) {
>>> @@ -834,18 +839,24 @@ static void usage(void)
>>> kernel_start);
>>> printf(" -a, --all display more registers\n");
>>> printf(" -C, --all-vcpus print info for all vcpus\n");
>>> + printf(" -n PAGES, --display-stack-pages=PAGES\n");
>>> + printf(" Display N pages from the stack pointer. (default %d)\n",
>>> + DEFAULT_NR_STACK_PAGES);
>>> + printf(" Changes stack limit. Note: use with caution (easy\n");
>>> + printf(" to get garbage).\n");
>>
>> Doesn't it go without saying that if you go off the bottom of the stack
>> you will get garbage?
>
> Only if you know that the tool doesn't know where the end of the stack is. (Although hopefully the wording, "Display N pages" should give you a hint.)
>
> But what is "changes stack limit" supposed to mean?
>
Partly it is used in the next patch's usage output:
-l <lines>, --lines <lines>
change the number of lines output for Stack. (default 5)
Can be specified as MAX. Note: Fewer lines will be output
if stack limit reached.
And it was the best term I know of to say in a few words:
The output of stack starts at the current SP and stops when the
end of N page(s) is/are reached.
-Don Slutz
> -George
>
next prev parent reply other threads:[~2014-04-01 20:28 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-27 19:05 [PATCH v8 00/20] xenctx: Many changes Don Slutz
2014-03-27 19:05 ` [PATCH v8 01/20] xenctx: clean up usage output Don Slutz
2014-03-27 19:05 ` [PATCH v8 02/20] xenctx: Clean up stack trace when hypercall_page not in symbol table Don Slutz
2014-03-27 19:05 ` [PATCH v8 03/20] xenctx: Add -n (--display-stack-pages) option to output larger stack Don Slutz
2014-04-01 13:19 ` Ian Campbell
2014-04-01 13:25 ` George Dunlap
2014-04-01 20:28 ` Don Slutz [this message]
2014-04-02 10:39 ` Ian Campbell
2014-03-27 19:05 ` [PATCH v8 04/20] xenctx: Add command line options -b (--bytes-per-line) and -l (--lines) Don Slutz
2014-04-01 14:30 ` Ian Campbell
2014-03-27 19:05 ` [PATCH v8 05/20] xenctx: Add command line option -D (--decode-as-ascii) Don Slutz
2014-04-01 13:27 ` Ian Campbell
2014-03-27 19:05 ` [PATCH v8 06/20] xenctx: Add command line option -t (--tag-stack-dump) Don Slutz
2014-03-27 19:05 ` [PATCH v8 07/20] xenctx: Change print_symbol to do the space before Don Slutz
2014-03-27 19:05 ` [PATCH v8 08/20] xenctx: More info on failed to map page Don Slutz
2014-03-27 19:05 ` [PATCH v8 09/20] xenctx: Add output of stack address to Call and Stack Trace Don Slutz
2014-04-01 13:28 ` Ian Campbell
2014-03-27 19:05 ` [PATCH v8 10/20] xenctx: Add -m (--memory) <maddr> option to dump memory at maddr Don Slutz
2014-04-01 13:30 ` Ian Campbell
2014-03-27 19:05 ` [PATCH v8 11/20] xenctx: Add error output if --all-vcpus (-C) and [VCPU] are both specified Don Slutz
2014-04-01 13:44 ` Ian Campbell
2014-04-01 18:24 ` Don Slutz
2014-03-27 19:05 ` [PATCH v8 12/20] xenctx: Add -d (--dump-as-stack) <daddr> option to dump memory at daddr as a stack Don Slutz
2014-04-01 13:46 ` Ian Campbell
2014-04-01 18:23 ` Don Slutz
2014-03-27 19:05 ` [PATCH v8 13/20] xenctx: change is_kernel_text() into kernel_addr() Don Slutz
2014-04-01 14:10 ` Ian Campbell
2014-04-01 21:33 ` Don Slutz
2014-04-02 10:34 ` Ian Campbell
2014-04-02 17:08 ` Don Slutz
2014-03-27 19:05 ` [PATCH v8 14/20] xenctx: Add convert of more registers to symbols Don Slutz
2014-04-01 14:11 ` Ian Campbell
2014-04-01 17:25 ` Don Slutz
2014-03-27 19:05 ` [PATCH v8 15/20] xenctx: Add output of vcpu value and state for --all-vcpus Don Slutz
2014-03-27 19:05 ` [PATCH v8 16/20] xenctx: Fix handling of !guest_protected_mode Don Slutz
2014-04-01 14:14 ` Ian Campbell
2014-04-01 18:35 ` Don Slutz
2014-04-02 10:41 ` Ian Campbell
2014-03-27 19:05 ` [PATCH v8 17/20] xenctx: Allow output for offline vcpu when specified Don Slutz
2014-04-01 14:24 ` Ian Campbell
2014-04-01 19:24 ` Don Slutz
2014-04-02 10:42 ` Ian Campbell
2014-03-27 19:05 ` [PATCH v8 18/20] xenctx: Add 16 bit output Don Slutz
2014-04-01 14:25 ` Ian Campbell
2014-04-01 18:53 ` Don Slutz
2014-03-27 19:05 ` [PATCH v8 19/20] xenctx: Fix print_ctx_32on64's print_special call Don Slutz
2014-04-01 14:27 ` Ian Campbell
2014-03-27 19:05 ` [PATCH v8 20/20] xenctx: Ensure errno is not zero on error in xc_translate_foreign_address() Don Slutz
2014-04-01 14:30 ` Ian Campbell
2014-04-01 20:49 ` Don Slutz
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=533B2176.6080402@terremark.com \
--to=dslutz@verizon.com \
--cc=Don@CloudSwitch.com \
--cc=Ian.Campbell@citrix.com \
--cc=george.dunlap@eu.citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=xen-devel@lists.xen.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.