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

Re: [Xen-devel] [PATCH v8 16/20] xenctx: Fix handling of !guest_protected_mode



On Thu, 2014-03-27 at 15:05 -0400, Don Slutz wrote:
> Start with adding the code to the 64 bit path that the 32 bit path
> has.

One for people who keep x86 in their brains, is it possible for a
processor to be in 64-bit non-protected mode?

> Next disable the "Stack Trace" or "Call Trace".
> 
> Finally allow stack dump.
> 
> Signed-off-by: Don Slutz <dslutz@xxxxxxxxxxx>
> ---
> v8:
>   A little more in the commit message.
> 
>  tools/xentrace/xenctx.c | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/xentrace/xenctx.c b/tools/xentrace/xenctx.c
> index 1d5b36e..1ab837e 100644
> --- a/tools/xentrace/xenctx.c
> +++ b/tools/xentrace/xenctx.c
> @@ -524,8 +524,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;
>  }
>  
> @@ -540,8 +545,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;
>  }
>  
> @@ -894,6 +904,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
> @@ -1032,7 +1045,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;



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