This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA 3/5] Prec: x86 segment register support: target


> Date: Mon, 22 Mar 2010 07:35:00 -0700
> From: "H.J. Lu" <hjl.tools@gmail.com>
> 
> On Mon, Mar 22, 2010 at 7:02 AM, Hui Zhu <teawater@gmail.com> wrote:
> > Thanks Michael and Daniel.
> >
> > I make a patch to add base of segments registers to x86-32:
> > (gdb) info reg
> > eax ? ? ? ? ? ?0xffffd514 ? ? ? -10988
> > ecx ? ? ? ? ? ?0x1eda96c5 ? ? ? 517641925
> > edx ? ? ? ? ? ?0x1 ? ? ?1
> > ebx ? ? ? ? ? ?0xf7fb1ff4 ? ? ? -134537228
> > esp ? ? ? ? ? ?0xffffd488 ? ? ? 0xffffd488
> > ebp ? ? ? ? ? ?0xffffd488 ? ? ? 0xffffd488
> > esi ? ? ? ? ? ?0x8048510 ? ? ? ?134513936
> > edi ? ? ? ? ? ?0x80483d0 ? ? ? ?134513616
> > eip ? ? ? ? ? ?0x8048487 ? ? ? ?0x8048487 <main+3>
> > eflags ? ? ? ? 0x246 ? ?[ PF ZF IF ]
> > cs ? ? ? ? ? ? 0x23 ? ? 35
> > ss ? ? ? ? ? ? 0x2b ? ? 43
> > ds ? ? ? ? ? ? 0x2b ? ? 43
> > es ? ? ? ? ? ? 0x2b ? ? 43
> > fs ? ? ? ? ? ? 0x0 ? ? ?0
> > gs ? ? ? ? ? ? 0x63 ? ? 99
> > cs_base ? ? ? ?0x0 ? ? ?0
> > ss_base ? ? ? ?0x0 ? ? ?0
> > ds_base ? ? ? ?0x0 ? ? ?0
> > es_base ? ? ? ?0x0 ? ? ?0
> > fs_base ? ? ? ?0x0 ? ? ?0
> > gs_base ? ? ? ?0xf7e528d0 ? ? ? -135976752
> >
> > I try it in x86-32 pc and 32bit code in x86-64. ?It works OK.
> >
> > Please help me review it.
> >
> > Best regards,
> > Hui
> >
> > 2010-03-22 ?Hui Zhu ?<teawater@gmail.com>
> >
> > ? ? ? ?* features/i386/32bit-linux.xml (org.gnu.gdb.i386.linux): Add
> > ? ? ? ?cs_base, ss_base, ds_base, es_base, fs_base and gs_base.
> > ? ? ? ?* i386-tdep.h (i386_segment_base_regnum): New enum.
> > ? ? ? ?* amd64-linux-nat.c (GDT_ENTRY_TLS_MIN,
> > ? ? ? ?GDT_ENTRY_TLS_MAX): New marco.
> > ? ? ? ?(ps_get_thread_area): New extern.
> > ? ? ? ?(amd64_linux_fetch_inferior_registers): Add
> > ? ? ? ?code to get 32 bits segment registers base.
> > ? ? ? ?* i386-linux-nat.c (GDT_ENTRY_TLS_ENTRIES,
> > ? ? ? ?GDT_ENTRY_TLS_MIN,
> > ? ? ? ?GDT_ENTRY_TLS_MAX): New marco.
> > ? ? ? ?(ps_get_thread_area): New extern.
> > ? ? ? ?(i386_linux_fetch_inferior_registers): Add
> > ? ? ? ?code to get segment registers base.
> 
> Are we going to support them on other OSes? If not,
> the contents of i386_segment_base_regnum should be
> moved to i386-linux-tdep.h and those values should
> be after
> 
> /* Register number for the "orig_eax" pseudo-register.  If this
>    pseudo-register contains a value >= 0 it is interpreted as the
>    system call number that the kernel is supposed to restart.  */
> #define I386_LINUX_ORIG_EAX_REGNUM I386_SSE_NUM_REGS
> 
> In any cases, they shouldn't be hard-coded to any values.
> Otherwise, it won't work with AVX, which will add more registers.

In any case; this stuff will have to wait until we're done withe the
AVX stuff, which I'll be looking at again tonight.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]