[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <8EA2C2C4116BF44AB370468FBF85A7770123AAB3A1@orsmsx504.amr.corp.intel.com>
Date: Wed, 3 Feb 2010 21:01:32 -0800
From: "Lu, Hongjiu" <hongjiu.lu@...el.com>
To: Roland McGrath <roland@...hat.com>
CC: "Siddha, Suresh B" <suresh.b.siddha@...el.com>,
Oleg Nesterov <oleg@...hat.com>,
"H. Peter Anvin" <hpa@...or.com>, Ingo Molnar <mingo@...e.hu>,
Thomas Gleixner <tglx@...utronix.de>,
LKML <linux-kernel@...r.kernel.org>,
"Lachner, Peter" <peter.lachner@...el.com>
Subject: RE: [patch] x86: ptrace and core-dump extensions for xstate
> > To support XSAVE, gdb needs to know XCR0 as well as XSTATE size.
> > We can get those info from kernel via system call or cpuid. I
> > prefer cpuid over system call.
>
> Suresh's patch puts this value in the xsave block, in what Suresh calls
> "sw_usable_bytes". See the asm/ptrace-abi.h comment in the patch you
> signed off on.
>
> How is that not sufficient? If it is indeed not sufficient to usefully
> interpret the xsave block, then how could an xsave block in a core dump
> file ever possibly be examined if it might not have been generated on the
> same system and kernel where the debugger is doing the examination? If
> the NT_X86_XSTATE note as implemented in Suresh's patch is indeed not
> entirely self-contained in this way, then NAK on that new note format.
>
I use it when reading core dump, which doesn't involve a system call.
I can analyze it on a totally different machine.
FWIW, there is the header file I have in gdb
---
/* XSAVE extended state information. */
/* The extended state status. */
enum xstate_status
{
XSTATE_UNKNOWN = 0,
XSTATE_UNSUPPORTED,
XSTATE_INITIALIZED
};
/* The extended state feature bits. */
#define bit_XSTATE_X87 (1ULL << 0)
#define bit_XSTATE_SSE (1ULL << 1)
#define bit_XSTATE_AVX (1ULL << 2)
/* Supported mask and size of the extended state. Used for qSupport. */
#define XSTATE_SSE_MASK 0x3
#define XSTATE_AVX_MASK 0x7
#define XSTATE_MAX_MASK 0x7
#define XSTATE_SSE_MASK_STRING "0x3"
#define XSTATE_AVX_MASK_STRING "0x7"
#define XSTATE_MAX_MASK_STRING "0x7"
#define XSTATE_SSE_SIZE 576
#define XSTATE_AVX_SIZE 832
#define XSTATE_MAX_SIZE 832
#define XSTATE_SSE_SIZE_STRING "576"
#define XSTATE_AVX_SIZE_STRING "832"
#define XSTATE_MAX_SIZE_STRING "832"
struct i386_xstate_type
{
/* The extended state status. */
enum xstate_status status;
/* The extended control register 0 (the XFEATURE_ENABLED_MASK
register). */
unsigned long long xcr0;
/* The extended state size in bytes. */
unsigned int size;
/* The extended state size in unit of int64. We use array of
int64 for better alignment. */
unsigned int n_of_int64;
};
extern struct i386_xstate_type i386_xstate;
extern void i386_xstate_init (void);
---
I don't need a system call to tell me xcr0 and size. If you
really want, you can put it in glibc and doesn't involve kernel.
We can use __cpu_features for it.
H.J.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists