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 <dslutz@verizon.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
This commit is contained in:
Don Slutz authored and Ian Campbell committed 2014-04-04 09:28:09 +01:00
1 parent f1e64a60fd
commit 3e4b7e0c83
1 file changed
+15 -1
+15 -1
View File
@@ -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;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.