[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v5 11/17] xenctx: Add -d (--dump-as-stack) <daddr> option to dump memory at daddr as a stack.



On 03/21/14 10:57, Ian Campbell wrote:
On Thu, 2014-03-20 at 15:06 -0400, Don Slutz wrote:
@@ -797,14 +796,17 @@ 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(">]");
-
-    print_symbol(instr_pointer(ctx));
-    printf(" <--\n");
+    if ( !xenctx.do_stack )
Why not?

This code output's rip (instr_pointer(ctx)) which does not apply
in this case.

+    {
+        if ( xenctx.tag_call_trace )
+            printf(" %*s", width*2, "");
+        printf("%c [<", xenctx.stack_trace ? '*' : ' ');
+        print_stack_word(instr_pointer(ctx), width);
+        printf(">]");
+
+        print_symbol(instr_pointer(ctx));
+        printf(" <--\n");
+    }
      if (xenctx.frame_ptrs) {
          stack = stack_pointer(ctx);
          frame = frame_pointer(ctx);
@@ -944,13 +946,19 @@ static void dump_ctx(int vcpu)
          print_mem(&ctx, vcpu, guest_word_size, xenctx.mem_addr);
          return;
      }
+    if ( xenctx.do_stack )
+    {
+        print_stack(&ctx, vcpu, guest_word_size, xenctx.stk_addr);
+        return;
+    }
It's starting to seem like print_mem and print_stack should be called
from main instead of here. In other words actually have multiple modes
instead of tuffing things in as special cases here.

The issue is that ctx (vcpu_guest_context_any_t) does not exist
in main and is needed by map_page() (called from these).

dump_ctx() is the routine that gets this and guest_word_size,
guest_protected_mode, and ctxt_word_size.

And so yes, this part of dump_ctx() could be moved to main
and/or ctx could be made global.

Let me know if I should rework all this.



,
@@ -1110,6 +1121,11 @@ int main(int argc, char **argv)
              xenctx.do_memory = 1;
              do_default = 0;
              break;
+        case 'd':
+            xenctx.stk_addr = strtoull(optarg, NULL, 0);
You can reuse mem_addr here, can't you?



Nope.  If both -d and -m are specified, then both are done.


   -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®.