[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 09/17] xenctx: Add command line option -T (--tag-trace)
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 <c9> 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: * [<ffffffff810387db>] native_safe_halt+0xb <-- |-- ffffffff81a03ee8 | [<ffffffff810149cd>] default_idle+0x4d | ffffffff81a03fd8 | ffffffff81c03800 |-- ffffffff81a03f18 | [<ffffffff81009e06>] cpu_idle+0xb6 | 6db6db6db6db6db7 | e8be668bda5ab5b6 | 0000000000000000 | 6db6db6db6db6db7 |-- ffffffff81a03f28 | [<ffffffff814e447a>] rest_init+0x7a |-- ffffffff81a03f68 | [<ffffffff81c23f7b>] start_kernel+0x424 | 8d0573d9e73df7bb | ffffffff81c6b440 | 0000000002014024 | 0000000000000000 | ffffffff81dd9000 | ffffffff81a03fa8 |-- ffffffff81a03f88 | [<ffffffff81c2333a>] x86_64_start_reservations+0x125 | ffffffff81a03fa8 | 0000000000000020 |-- ffffffff81a03fe8 | [<ffffffff81c23438>] 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 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |