From mboxrd@z Thu Jan 1 00:00:00 1970 From: Don Slutz Subject: Re: [PATCH v5 09/17] xenctx: Add command line option -T (--tag-trace) Date: Mon, 24 Mar 2014 15:54:57 -0400 Message-ID: <53308D91.3070300@terremark.com> References: <1395342425-16260-1-git-send-email-dslutz@verizon.com> <1395342425-16260-10-git-send-email-dslutz@verizon.com> <1395413088.19839.117.camel@kazak.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1395413088.19839.117.camel@kazak.uk.xensource.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: Ian Campbell , Don Slutz Cc: Stefano Stabellini , George Dunlap , Don Slutz , Ian Jackson , xen-devel@lists.xen.org, Jan Beulich List-Id: xen-devel@lists.xenproject.org On 03/21/14 10:44, Ian Campbell wrote: > On Thu, 2014-03-20 at 15:06 -0400, Don Slutz wrote: >> If specified, add stack addr to Call and Stack trace. > This could safely be unconditional I think. > > Or if not then it should share an option with --tag-stack-dump, e.g. > -a,--print-addresses > Ok. >> @@ -755,9 +758,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("| "); >> + } > if (trace) > print stack work > print ": " > } > print ("| ") > > (the examples you gave have no vertical | in them -- are they out of > date?) Nope. These are non "-f -S" output. Here is "-f -S" output: xenctx -s /boot/System.map-2.6.32-279.2.1.el6.mpbios5.x86_64 -f -S 2 rip: ffffffff810387db native_safe_halt+0xb flags: 00000246 i z p rsp: ffffffff81a03ec8 rax: 0000000000000000 rcx: 0000000000000000 rdx: 0000000000000000 rbx: 0000000000000000 rsi: 0000000000000001 rdi: ffffffff81ddc228 rbp: ffffffff81a03ec8 r8: 0000000000000000 r9: 0000000000000000 r10: 000001f319222f0f r11: ffffffff81a03e68 r12: ffffffff81c03800 r13: 0000000000000000 r14: ffffffffffffffff r15: 000000000008a790 cs: 0010 ss: 0018 ds: 0018 es: 0018 fs: 0000 @ 0000000000000000 gs: 0000 @ ffff88000b400000/0000000000000000/ Code (instr addr ffffffff810387db) 44 00 00 fb c9 c3 0f 1f 40 00 55 48 89 e5 0f 1f 44 00 00 fb f4 c3 0f 1f 00 55 48 89 e5 0f 1f Stack: ffffffff81a03ee8 ffffffff810149cd ffffffff81a03fd8 ffffffff81c03800 ffffffff81a03f18 ffffffff81009e06 6db6db6db6db6db7 e8be668bda5ab5b6 0000000000000000 6db6db6db6db6db7 ffffffff81a03f28 ffffffff814e447a ffffffff81a03f68 ffffffff81c23f7b 8d0573d9e73df7bb ffffffff81c6b440 0000000002014024 0000000000000000 ffffffff81dd9000 ffffffff81a03fa8 Stack Trace: * [] native_safe_halt+0xb <-- |-- ffffffff81a03ee8 | [] default_idle+0x4d | ffffffff81a03fd8 | ffffffff81c03800 |-- ffffffff81a03f18 | [] cpu_idle+0xb6 | 6db6db6db6db6db7 | e8be668bda5ab5b6 | 0000000000000000 | 6db6db6db6db6db7 |-- ffffffff81a03f28 | [] rest_init+0x7a |-- ffffffff81a03f68 | [] start_kernel+0x424 | 8d0573d9e73df7bb | ffffffff81c6b440 | 0000000002014024 | 0000000000000000 | ffffffff81dd9000 | ffffffff81a03fa8 |-- ffffffff81a03f88 | [] x86_64_start_reservations+0x125 | ffffffff81a03fa8 | 0000000000000020 |-- ffffffff81a03fe8 | [] x86_64_start_kernel+0xfa | 0000000000000000 | 0000000000000000 | 81c28e0000103136 | 00000000ffffffff | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 |-- 0000000000000000 >> @@ -769,7 +778,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("|-- "); >> + } > Same comment as above. > >> print_stack_word(read_stack_word(p, width), width); >> printf("\n"); >> } >> @@ -780,7 +795,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 ? '|' : ' '); >> + } > and again (here the code duplication is especially intolerable) > >> print_stack_word(word, width); >> printf(">]"); >> print_symbol(word); >> @@ -796,13 +817,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(" [<"); >> + } > again. > >> 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(" "); >> + } > again. > > It almost like a print_stack_trace helper is in order. > > Ok, I will recode these all as routine that is basicly: + if ( xenctx.tag_call_trace ) + { + print_stack_word(stack, width); + printf(": "); + } -Don Slutz