From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3094 invoked by alias); 6 Sep 2009 06:52:43 -0000 Received: (qmail 3082 invoked by uid 22791); 6 Sep 2009 06:52:41 -0000 X-SWARE-Spam-Status: No, hits=-0.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_24,J_CHICKENPOX_25,J_CHICKENPOX_28,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-px0-f188.google.com (HELO mail-px0-f188.google.com) (209.85.216.188) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 06 Sep 2009 06:52:34 +0000 Received: by pxi26 with SMTP id 26so1879260pxi.13 for ; Sat, 05 Sep 2009 23:52:32 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.7.10 with SMTP id 10mr431928wfg.137.1252219952111; Sat, 05 Sep 2009 23:52:32 -0700 (PDT) In-Reply-To: References: <4A999BC3.5020606@vmware.com> <4AA1CFD1.4000502@vmware.com> <200909050814.n858EvHR016392@brahms.sibelius.xs4all.nl> From: Hui Zhu Date: Sun, 06 Sep 2009 06:52:00 -0000 Message-ID: Subject: Re: [RFA/prec] Make i386 handle segment register better To: Mark Kettenis , Michael Snyder Cc: gdb-patches@sourceware.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-09/txt/msg00143.txt.bz2 Hi guys, Sorry I didn't do more test for this patch on amd64 before I check it in. But this patch really work not very good in amd64. For example: Process record: i386_process_record addr =3D 0x7ffff7b13cc9 signal =3D 0 Process record: add mem addr =3D 0xffffffffffffffa8 len =3D 4 to record lis= t. Process record: error reading memory at addr =3D 0xffffffffffffffa8 len =3D= 4. Process record: failed to record execution log. Program received signal SIGTRAP, Trace/breakpoint trap. 0x00007ffff7b13cc9 in pause () from /lib/libc.so.6 (gdb) disassemble Dump of assembler code for function pause: 0x00007ffff7b13c70 : cmpl $0x0,0x2c93d1(%rip) # 0x7ffff7d= dd048 0x00007ffff7b13c77 : jne 0x7ffff7b13c89 0x00007ffff7b13c79 : mov $0x22,%eax 0x00007ffff7b13c7e : syscall 0x00007ffff7b13c80 : cmp $0xfffffffffffff001,%rax 0x00007ffff7b13c86 : jae 0x7ffff7b13cbd 0x00007ffff7b13c88 : retq 0x00007ffff7b13c89 : sub $0x18,%rsp 0x00007ffff7b13c8d : callq 0x7ffff7b60770 0x00007ffff7b13c92 : mov %rax,(%rsp) 0x00007ffff7b13c96 : mov $0x22,%eax 0x00007ffff7b13c9b : syscall 0x00007ffff7b13c9d : mov (%rsp),%rdi 0x00007ffff7b13ca1 : mov %rax,0x8(%rsp) 0x00007ffff7b13ca6 : callq 0x7ffff7b60740 0x00007ffff7b13cab : mov 0x8(%rsp),%rax 0x00007ffff7b13cb0 : add $0x18,%rsp 0x00007ffff7b13cb4 : cmp $0xfffffffffffff001,%rax 0x00007ffff7b13cba : jae 0x7ffff7b13cbd 0x00007ffff7b13cbc : retq 0x00007ffff7b13cbd : mov 0x2c42cc(%rip),%rcx # 0x7ffff7dd7f90 0x00007ffff7b13cc4 : xor %edx,%edx 0x00007ffff7b13cc6 : sub %rax,%rdx 0x00007ffff7b13cc9 : mov %edx,%fs:(%rcx) 0x00007ffff7b13ccc : or $0xffffffffffffffff,%rax 0x00007ffff7b13cd0 : jmp 0x7ffff7b13cbc End of assembler dump. (gdb) info reg rax 0xfffffffffffffffc -4 rbx 0x4007c0 4196288 rcx 0xffffffffffffffa8 -88 rdx 0x4 4 rsi 0x0 0 rdi 0x1 1 rbp 0x7fffffffe2e0 0x7fffffffe2e0 rsp 0x7fffffffe2b8 0x7fffffffe2b8 r8 0x7fffffffe210 140737488347664 r9 0x7fffffffe170 140737488347504 r10 0x7fffffffe040 140737488347200 r11 0x346 838 r12 0x400640 4195904 r13 0x7fffffffe3b0 140737488348080 r14 0x0 0 r15 0x0 0 rip 0x7ffff7b13cc9 0x7ffff7b13cc9 eflags 0x313 [ CF AF TF IF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x0 0 gs 0x0 0 fctrl 0x37f 895 fstat 0x0 0 ftag 0xffff 65535 fiseg 0x0 0 fioff 0x0 0 foseg 0x0 0 fooff 0x0 0 fop 0x0 0 mxcsr 0x1f80 [ IM DM ZM OM UM PM ] (gdb) record stop Delete recorded log and stop recording?(y or n) y Process record: record_close (gdb) set disassemble-next-line on (gdb) si 0x00007ffff7b13ccc in pause () from /lib/libc.so.6 0x00007ffff7b13ccc : 48 83 c8 ff or $0xffffffffffffffff,%rax (gdb) info registers rax 0xfffffffffffffffc -4 rbx 0x4007c0 4196288 rcx 0xffffffffffffffa8 -88 rdx 0x4 4 rsi 0x0 0 rdi 0x1 1 rbp 0x7fffffffe2e0 0x7fffffffe2e0 rsp 0x7fffffffe2b8 0x7fffffffe2b8 r8 0x7fffffffe210 140737488347664 r9 0x7fffffffe170 140737488347504 r10 0x7fffffffe040 140737488347200 r11 0x346 838 r12 0x400640 4195904 r13 0x7fffffffe3b0 140737488348080 r14 0x0 0 r15 0x0 0 rip 0x7ffff7b13ccc 0x7ffff7b13ccc eflags 0x313 [ CF AF TF IF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x0 0 gs 0x0 0 fctrl 0x37f 895 fstat 0x0 0 ftag 0xffff 65535 fiseg 0x0 0 fioff 0x0 0 foseg 0x0 0 fooff 0x0 0 fop 0x0 0 mxcsr 0x1f80 [ IM DM ZM OM UM PM ] (gdb) x 0x7ffff7dd7f90 0x7ffff7dd7f90: 0xffffffa8 (gdb) x 0xffffffa8 0xffffffa8: Cannot access memory at address 0xffffffa8 (gdb) x 0xffffffffffffffa8 0xffffffffffffffa8: Cannot access memory at address 0xffffffffffffffa8 (gdb) The fs is same with gs, but "mov %edx,%fs:(%rcx)" is not same with "mov %edx,(%rcx)". I think remove this patch from gdb-cvs-head before 7.0 branch and make the segment reg clear is better. What do you think about it? Thanks, Hui On Sat, Sep 5, 2009 at 23:37, Hui Zhu wrote: > On Sat, Sep 5, 2009 at 16:14, Mark Kettenis wrot= e: >>> Date: Fri, 04 Sep 2009 19:41:21 -0700 >>> From: Michael Snyder >>> >>> Hui Zhu wrote: >>> > On Sun, Aug 30, 2009 at 05:21, Michael Snyder wro= te: >>> >>> >> And this one is also an if/else. =A0So I guess my questions are: >>> >> >>> >> 1) Should you use an "else" in the "String ops" case? >>> > >>> > OK. >>> > >>> >> 2) Should we go ahead and record the register changes, >>> >> even though we can't record the memory change? >>> > >>> > I think even if we cannot record the memory change. =A0Keep record the >>> > change of reg is better. >>> > >>> >> 3) Should this be a warning, rather than just a debug message? >>> >> I think yes, because if this happens, it actually means that the >>> >> record log will be inaccurate. >>> >> >>> > OK. >>> > >>> > >>> > I make a new patch for it. =A0Please help me review it. >>> >>> I think I like this version. >>> Want to check it in? > > Thanks for you help, Michael. > >> >> The code is basically ok, but I'd like to ask Hui to avoid using >> meaningless variable names like "tmp". > > Thanks for remind me, Mark. > > I checked in this patch with change the "tmp" to "orv". > > > Hui > > >> >>> > 2009-08-30 =A0Hui Zhu =A0 >>> > >>> > =A0 =A0 =A0 =A0 * i386-tdep.c (i386_record_s): Add orig_addr. >>> > =A0 =A0 =A0 =A0 (i386_record_check_override): New function. >>> > =A0 =A0 =A0 =A0 (i386_record_lea_modrm): Call i386_record_check_overr= ide. >>> > =A0 =A0 =A0 =A0 (i386_process_record): Ditto. >>> > >>> > --- >>> > =A0i386-tdep.c | =A0103 ++++++++++++++++++++++++++++++++++-----------= --------------- >>> > =A01 file changed, 59 insertions(+), 44 deletions(-) >>> > >>> > --- a/i386-tdep.c >>> > +++ b/i386-tdep.c >>> > @@ -2867,6 +2867,7 @@ struct i386_record_s >>> > =A0{ >>> > =A0 =A0struct gdbarch *gdbarch; >>> > =A0 =A0struct regcache *regcache; >>> > + =A0CORE_ADDR orig_addr; >>> > =A0 =A0CORE_ADDR addr; >>> > =A0 =A0int aflag; >>> > =A0 =A0int dflag; >>> > @@ -3147,6 +3148,26 @@ no_rm: >>> > =A0 =A0return 0; >>> > =A0} >>> > >>> > +static int >>> > +i386_record_check_override (struct i386_record_s *irp) >>> > +{ >>> > + =A0if (irp->override >=3D 0 && irp->override !=3D X86_RECORD_DS_REG= NUM) >>> > + =A0 =A0{ >>> > + =A0 =A0 =A0ULONGEST tmp, ds; >>> > + >>> > + =A0 =A0 =A0regcache_raw_read_unsigned (irp->regcache, >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= irp->regmap[irp->override], >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= &tmp); >>> > + =A0 =A0 =A0regcache_raw_read_unsigned (irp->regcache, >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= irp->regmap[X86_RECORD_DS_REGNUM], >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= &ds); >>> > + =A0 =A0 =A0if (tmp !=3D ds) >>> > + =A0 =A0 =A0 =A0return 1; >>> > + =A0 =A0} >>> > + >>> > + =A0return 0; >>> > +} >>> > + >>> > =A0/* Record the value of the memory that willbe changed in current i= nstruction >>> > =A0 =A0 to "record_arch_list". >>> > =A0 =A0 Return -1 if something wrong. */ >>> > @@ -3157,13 +3178,12 @@ i386_record_lea_modrm (struct i386_recor >>> > =A0 =A0struct gdbarch *gdbarch =3D irp->gdbarch; >>> > =A0 =A0uint64_t addr; >>> > >>> > - =A0if (irp->override >=3D 0) >>> > + =A0if (i386_record_check_override (irp)) >>> > =A0 =A0 =A0{ >>> > - =A0 =A0 =A0if (record_debug) >>> > - =A0 =A0 =A0 printf_unfiltered (_("Process record ignores the memory= change " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"of instruct= ion at address %s because it " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"can't get t= he value of the segment register.\n"), >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0paddress (gdbarc= h, irp->addr)); >>> > + =A0 =A0 =A0warning (_("Process record ignores the memory change " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "of instruction at address %s becau= se it " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "can't get the value of the segment= register."), >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 paddress (gdbarch, irp->orig_addr)); >>> > =A0 =A0 =A0 =A0return 0; >>> > =A0 =A0 =A0} >>> > >>> > @@ -3221,6 +3241,7 @@ i386_process_record (struct gdbarch *gdb >>> > =A0 =A0memset (&ir, 0, sizeof (struct i386_record_s)); >>> > =A0 =A0ir.regcache =3D regcache; >>> > =A0 =A0ir.addr =3D addr; >>> > + =A0ir.orig_addr =3D addr; >>> > =A0 =A0ir.aflag =3D 1; >>> > =A0 =A0ir.dflag =3D 1; >>> > =A0 =A0ir.override =3D -1; >>> > @@ -4039,14 +4060,13 @@ reswitch: >>> > =A0 =A0 =A0 =A0/* mov EAX */ >>> > =A0 =A0 =A0case 0xa2: >>> > =A0 =A0 =A0case 0xa3: >>> > - =A0 =A0 =A0if (ir.override >=3D 0) >>> > + =A0 =A0 =A0if (i386_record_check_override (&ir)) >>> > =A0 =A0 =A0 =A0 =A0{ >>> > - =A0 =A0 =A0 =A0 if (record_debug) >>> > - =A0 =A0 =A0 =A0 =A0 printf_unfiltered (_("Process record ignores th= e memory change " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"of = instruction at address 0x%s because " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"it = can't get the value of the segment " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"reg= ister.\n"), >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0paddress= (gdbarch, ir.addr)); >>> > + =A0 =A0 =A0 =A0 warning (_("Process record ignores the memory chang= e " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "of instruction at address = 0x%s because " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "it can't get the value of = the segment " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "register."), >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 paddress (gdbarch, ir.orig_addr= )); >>> > =A0 =A0 =A0 =A0 } >>> > =A0 =A0 =A0 =A0else >>> > =A0 =A0 =A0 =A0 { >>> > @@ -4458,27 +4478,24 @@ reswitch: >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0ir.regmap[X86_RECORD_REDI_REGNUM], >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0&tmpulongest); >>> > >>> > - =A0 =A0 =A0 =A0 =A0regcache_raw_read_unsigned (ir.regcache, >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0ir.regmap[X86_RECORD_ES_REGNUM], >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0&es); >>> > - =A0 =A0 =A0 =A0 =A0regcache_raw_read_unsigned (ir.regcache, >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0ir.regmap[X86_RECORD_DS_REGNUM], >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0&ds); >>> > - =A0 =A0 =A0 =A0 =A0if (ir.aflag && (es !=3D ds)) >>> > + =A0 =A0 =A0 =A0 =A0ir.override =3D X86_RECORD_ES_REGNUM; >>> > + =A0 =A0 =A0 =A0 =A0if (ir.aflag && i386_record_check_override (&ir)) >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0{ >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* addr +=3D ((uint32_t) read_register= (I386_ES_REGNUM)) << 4; */ >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_debug) >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0printf_unfiltered (_("Process record= ignores the memory " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0"change of instruction at address 0x%s " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0"because it can't get the value of the " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0"ES segment register.\n"), >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= paddress (gdbarch, ir.addr)); >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0warning (_("Process record ignores the m= emory " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "change of instruct= ion at address 0x%s " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "because it can't g= et the value of the " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "ES segment registe= r."), >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 paddress (gdbarch, ir.o= rig_addr)); >>> > + =A0 =A0 =A0 =A0 =A0 =A0} >>> > + =A0 =A0 =A0 =A0 =A0else >>> > + =A0 =A0 =A0 =A0 =A0 =A0{ >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem (tmpulonges= t, 1 << ir.ot)) >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -1; >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0} >>> > >>> > =A0 =A0 =A0 =A0 =A0 =A0if (prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_= RECX_REGNUM); >>> > - =A0 =A0 =A0 =A0 =A0if (record_arch_list_add_mem (tmpulongest, 1 << = ir.ot)) >>> > - =A0 =A0 =A0 =A0 =A0 =A0return -1; >>> > =A0 =A0 =A0 =A0 =A0 =A0if (opcode =3D=3D 0xa4 || opcode =3D=3D 0xa5) >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_= RESI_REGNUM); >>> > =A0 =A0 =A0 =A0 =A0 =A0I386_RECORD_ARCH_LIST_ADD_REG (X86_RECORD_REDI= _REGNUM); >>> > @@ -5086,15 +5103,14 @@ reswitch: >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 opcode =3D opcode << 8 | ir.modrm; >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 goto no_support; >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>> > - =A0 =A0 =A0 =A0 =A0 if (ir.override >=3D 0) >>> > + =A0 =A0 =A0 =A0 =A0 if (i386_record_check_override (&ir)) >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (record_debug) >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 printf_unfiltered (_("Process recor= d ignores the memory " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0"change of instruction at " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0"address %s because it can't get " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0"the value of the segment " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0"register.\n"), >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0paddress (gdbarch, ir.addr)); >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 warning (_("Process record ignores the = memory " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "change of inst= ruction at " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "address %s bec= ause it can't get " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "the value of t= he segment " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "register."), >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 paddress (gdbarch, = ir.orig_addr)); >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>> > =A0 =A0 =A0 =A0 =A0 =A0 else >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>> > @@ -5138,15 +5154,14 @@ reswitch: >>> > =A0 =A0 =A0 =A0 =A0 else >>> > =A0 =A0 =A0 =A0 =A0 =A0 { >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* sidt */ >>> > - =A0 =A0 =A0 =A0 =A0 =A0 if (ir.override >=3D 0) >>> > + =A0 =A0 =A0 =A0 =A0 =A0 if (i386_record_check_override (&ir)) >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (record_debug) >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 printf_unfiltered (_("Process r= ecord ignores the memory " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0"change of instruction at " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0"address %s because it can't get " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0"the value of the segment " >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0"register.\n"), >>> > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0paddress (gdbarch, ir.addr)); >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 warning (_("Process record ignores = the memory " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "change of = instruction at " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "address %s= because it can't get " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "the value = of the segment " >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "register."= ), >>> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 paddress (gdbar= ch, ir.orig_addr)); >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 else >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { >>> >>> >> >