From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15444 invoked by alias); 29 Aug 2002 21:35:43 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 15410 invoked from network); 29 Aug 2002 21:35:43 -0000 Received: from unknown (HELO crack.them.org) (65.125.64.184) by sources.redhat.com with SMTP; 29 Aug 2002 21:35:43 -0000 Received: from nevyn.them.org ([66.93.61.169] ident=mail) by crack.them.org with asmtp (Exim 3.12 #1 (Debian)) id 17kXtL-0006he-00; Thu, 29 Aug 2002 17:35:55 -0500 Received: from drow by nevyn.them.org with local (Exim 3.35 #1 (Debian)) id 17kWyD-0006Iq-00; Thu, 29 Aug 2002 17:36:53 -0400 Date: Thu, 29 Aug 2002 14:37:00 -0000 From: Daniel Jacobowitz To: Andrew Cagney Cc: gdb-patches@sources.redhat.com Subject: Re: [rfc] 16 bit real-mode for the i386 Message-ID: <20020829213653.GA24048@nevyn.them.org> Mail-Followup-To: Andrew Cagney , gdb-patches@sources.redhat.com References: <3D6E8453.5080306@ges.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3D6E8453.5080306@ges.redhat.com> User-Agent: Mutt/1.5.1i X-SW-Source: 2002-08/txt/msg00999.txt.bz2 On Thu, Aug 29, 2002 at 04:30:11PM -0400, Andrew Cagney wrote: > Hello, > > The attached modifies i386-tdep.c so that there is a ``set i386 > real-mode'' command (doco to go). > > When real-mode is enabled, GDB computes the ``20 bit'' ``stop address'' > (aka PC but not to be confused with $pc ... :-) from both the $cs and > $pc registers. That way, core GDB sees a cannonical PC address that > (regardless of $cs) will match a ``20 bit'' breakpoint address. > > Thoughts? > > I'm desperatly trying to come up with a test-case mind. This is a > rewrite of an old old patch (that hacked breakpoint.c) and the original > testcase has been lost :-( > > Andrew Now, my i386 knowledge is a bit rusty. But: > +static CORE_ADDR > +i386_read_pc (ptid_t ptid) > +{ > + CORE_ADDR pc = read_register_pid (PC_REGNUM, ptid); > + if (i386_real_mode_p) > + { > + CORE_ADDR cs = read_register_pid (CS_REGNUM, ptid); > + pc = pc + (cs << 4); > + } > + return pc; > +} > + > +static void > +i386_write_pc (CORE_ADDR pc, ptid_t ptid) > +{ > + if (i386_real_mode_p) > + { > + CORE_ADDR cs = read_register_pid (CS_REGNUM, ptid); > + pc = pc - (cs << 4); > + } > + write_register_pid (PC_REGNUM, pc, ptid); > +} > + Left shift of _four_? Surely the PC is more than four bits. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer