From: Don Slutz Date: Thu, 3 Apr 2014 19:07:07 +0000 (-0400) Subject: xenctx: Fix handling of !guest_protected_mode X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~5261 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=3e4b7e0c83cc984f5a02e9d8e7f7153b9be22c40;p=xen.git xenctx: Fix handling of !guest_protected_mode Start with adding the code to the 64 bit path that the 32 bit path has. Next disable the "Stack Trace" or "Call Trace". Finally allow stack dump. Signed-off-by: Don Slutz Acked-by: Ian Campbell --- diff --git a/tools/xentrace/xenctx.c b/tools/xentrace/xenctx.c index fa300b5c95..3804bd3c8f 100644 --- a/tools/xentrace/xenctx.c +++ b/tools/xentrace/xenctx.c @@ -498,8 +498,13 @@ static guest_word_t instr_pointer(vcpu_guest_context_any_t *ctx) r += ctx->x32.user_regs.cs << NONPROT_MODE_SEGMENT_SHIFT; } else + { r = ctx->x64.user_regs.rip; + if ( !guest_protected_mode ) + r += ctx->x64.user_regs.cs << NONPROT_MODE_SEGMENT_SHIFT; + } + return r; } @@ -514,8 +519,13 @@ static guest_word_t stack_pointer(vcpu_guest_context_any_t *ctx) r += ctx->x32.user_regs.ss << NONPROT_MODE_SEGMENT_SHIFT; } else + { r = ctx->x64.user_regs.rsp; + if ( !guest_protected_mode ) + r += ctx->x64.user_regs.ss << NONPROT_MODE_SEGMENT_SHIFT; + } + return r; } @@ -865,6 +875,9 @@ static int print_stack(vcpu_guest_context_any_t *ctx, int vcpu, int width, return -1; } + if ( !guest_protected_mode ) + return 0; + if(xenctx.stack_trace) printf("Stack Trace:\n"); else @@ -1003,7 +1016,8 @@ static void dump_ctx(int vcpu) #ifndef NO_TRANSLATION if (print_code(&ctx, vcpu)) return; - if ( kernel_addr(instr_pointer(&ctx)) >= KERNEL_TEXT_ADDR ) + if ( !guest_protected_mode || + kernel_addr(instr_pointer(&ctx)) >= KERNEL_TEXT_ADDR ) if ( print_stack(&ctx, vcpu, guest_word_size, stack_pointer(&ctx)) ) return;