[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.