From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: [PATCH v4 09/15] xenctx: Add command line option -T (--tag-call-trace) Date: Wed, 19 Mar 2014 16:20:00 +0000 Message-ID: <5329C3B0.9070909@eu.citrix.com> References: <1395180940-23901-1-git-send-email-dslutz@verizon.com> <1395180940-23901-10-git-send-email-dslutz@verizon.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1395180940-23901-10-git-send-email-dslutz@verizon.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Don Slutz , xen-devel@lists.xen.org Cc: Don Slutz , Ian Jackson , Ian Campbell , Jan Beulich , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org On 03/18/2014 10:15 PM, Don Slutz wrote: > If specified, add stack addr to call trace. > > Here is an example: > > Call Trace: > [] default_idle+0x29 <-- > ffffffff803ddf90: [] cpu_idle+0x95 > ffffffff803ddfa0: [] start_kernel+0x220 > ffffffff803ddfc0: [] x86_64_start_kernel+0x22f > > and > > Stack Trace: > * [] default_idle+0x29 <-- > ffffffff803ddf90: [] cpu_idle+0x95 > ffffffff803ddf98: 0000000000200800 > ffffffff803ddfa0: [] start_kernel+0x220 > ffffffff803ddfa8: 0000000000086800 > ffffffff803ddfb0: 0000000000000000 > ffffffff803ddfb8: ffffffff80430720 > ffffffff803ddfc0: [] x86_64_start_kernel+0x22f > ffffffff803ddfc8: 80008e000010019c > ffffffff803ddfd0: 00000000ffffffff > ffffffff803ddfd8: 0000000000000000 > ffffffff803ddfe0: 0000000000000000 > ffffffff803ddfe8: 0000000000200000 > ffffffff803ddff0: 0000000000000000 > ffffffff803ddff8: 0000000000000000 > > Signed-off-by: Don Slutz > --- > tools/xentrace/xenctx.c | 53 ++++++++++++++++++++++++++++++++++++++++++------- > 1 file changed, 46 insertions(+), 7 deletions(-) > > diff --git a/tools/xentrace/xenctx.c b/tools/xentrace/xenctx.c > index 22a1704..e5c45df 100644 > --- a/tools/xentrace/xenctx.c > +++ b/tools/xentrace/xenctx.c > @@ -40,6 +40,7 @@ static struct xenctx { > int lines; > int decode_as_ascii; > int tag_stack_dump; > + int tag_call_trace; > int all_vcpus; > int self_paused; > xc_dominfo_t dominfo; > @@ -732,6 +733,8 @@ static int print_stack(vcpu_guest_context_any_t *ctx, int vcpu, int width) > printf("Stack Trace:\n"); > else > printf("Call Trace:\n"); > + if ( xenctx.tag_call_trace ) > + printf(" %*s", width*2, ""); > printf("%c [<", xenctx.stack_trace ? '*' : ' '); > print_stack_word(instr_pointer(ctx), width); > printf(">]"); > @@ -747,9 +750,15 @@ static int print_stack(vcpu_guest_context_any_t *ctx, int vcpu, int width) > p = map_page(ctx, vcpu, stack); > if (!p) > return -1; > - printf("| "); > + if ( xenctx.tag_call_trace ) > + { > + print_stack_word(stack, width); > + printf(": | "); > + } else { > + printf("| "); > + } > print_stack_word(read_stack_word(p, width), width); > - printf(" \n"); > + printf("\n"); > stack += width; > } > } else { > @@ -761,7 +770,13 @@ static int print_stack(vcpu_guest_context_any_t *ctx, int vcpu, int width) > return -1; > frame = read_stack_word(p, width); > if (xenctx.stack_trace) { > - printf("|-- "); > + if ( xenctx.tag_call_trace ) > + { > + print_stack_word(stack, width); > + printf(": |-- "); > + } else { > + printf("|-- "); > + } > print_stack_word(read_stack_word(p, width), width); > printf("\n"); > } > @@ -772,7 +787,13 @@ static int print_stack(vcpu_guest_context_any_t *ctx, int vcpu, int width) > if (!p) > return -1; > word = read_stack_word(p, width); > - printf("%c [<", xenctx.stack_trace ? '|' : ' '); > + if ( xenctx.tag_call_trace ) > + { > + print_stack_word(stack, width); > + printf(": %c [<", xenctx.stack_trace ? '|' : ' '); > + } else { > + printf("%c [<", xenctx.stack_trace ? '|' : ' '); > + } > print_stack_word(word, width); > printf(">]"); > print_symbol(word); > @@ -788,13 +809,25 @@ static int print_stack(vcpu_guest_context_any_t *ctx, int vcpu, int width) > return -1; > word = read_stack_word(p, width); > if (is_kernel_text(word)) { > - printf(" [<"); > + if ( xenctx.tag_call_trace ) > + { > + print_stack_word(stack, width); > + printf(": [<"); > + } else { > + printf(" [<"); > + } > print_stack_word(word, width); > printf(">]"); > print_symbol(word); > printf("\n"); > } else if (xenctx.stack_trace) { > - printf(" "); > + if ( xenctx.tag_call_trace ) > + { > + print_stack_word(stack, width); > + printf(": "); > + } else { > + printf(" "); > + } > print_stack_word(word, width); > printf("\n"); > } > @@ -893,13 +926,15 @@ static void usage(void) > printf(" add a decode of Stack dump as ascii.\n"); > printf(" -t, --tag-stack-dump\n"); > printf(" add address on each line of Stack dump.\n"); > + printf(" -T, --tag-call-trace\n"); > + printf(" add address on each line of Call trace.\n"); Since this happens for either a call trace or a stack trace, would it make more sense to make the long version "--tag-trace", and the description say something like "add address on each line of the call or stack trace"? -George