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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).