From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 359 invoked by alias); 5 Aug 2004 02:02:16 -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 32741 invoked from network); 5 Aug 2004 02:02:14 -0000 Received: from unknown (HELO copland.kettenis.dyndns.org) (82.74.7.234) by sourceware.org with SMTP; 5 Aug 2004 02:02:14 -0000 Received: from copland.kettenis.dyndns.org (kettenis@localhost.kettenis.dyndns.org [127.0.0.1]) by copland.kettenis.dyndns.org (8.13.0/8.13.0) with ESMTP id i74Ltpcs029005 for ; Thu, 5 Aug 2004 00:10:51 +0200 (CEST) Received: (from kettenis@localhost) by copland.kettenis.dyndns.org (8.13.0/8.13.0/Submit) id i74Ltp4b024515; Wed, 4 Aug 2004 23:55:51 +0200 (CEST) Date: Thu, 05 Aug 2004 02:02:00 -0000 Message-Id: <200408042102.i74L2Mhw016597@copland.kettenis.dyndns.org> From: Mark Kettenis To: gdb-patches@sources.redhat.com Subject: [PATCH] Provide dummy SSE registers in i387_supply_fsave X-SW-Source: 2004-08/txt/msg00104.txt.bz2 Jim's patch to assert that target_fetch_registers did its job broke OpenBSD/i386 and probably most other i386 native debuggers. The attached patch fixes this. I am wondering however.how this affects other platforms and remote targets. Committed, Mark Index: ChangeLog from Mark Kettenis * i387-tdep.c (i387_supply_fsave): Provide summy values for the SSE registers. Index: i387-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/i387-tdep.c,v retrieving revision 1.41 diff -u -p -r1.41 i387-tdep.c --- i387-tdep.c 26 Jun 2004 23:20:30 -0000 1.41 +++ i387-tdep.c 4 Aug 2004 20:48:12 -0000 @@ -390,9 +390,11 @@ i387_supply_fsave (struct regcache *regc gdb_assert (tdep->st0_regnum >= I386_ST0_REGNUM); - /* Define I387_ST0_REGNUM such that we use the proper definitions - for REGCACHE's architecture. */ + /* Define I387_ST0_REGNUM and I387_NUM_XMM_REGS such that we use the + proper definitions for REGCACHE's architecture. */ + #define I387_ST0_REGNUM tdep->st0_regnum +#define I387_NUM_XMM_REGS tdep->num_xmm_regs for (i = I387_ST0_REGNUM; i < I387_XMM0_REGNUM; i++) if (regnum == -1 || regnum == i) @@ -419,7 +421,21 @@ i387_supply_fsave (struct regcache *regc else regcache_raw_supply (regcache, i, FSAVE_ADDR (regs, i)); } + + /* Provide dummy values for the SSE registers. */ + for (i = I387_XMM0_REGNUM; i < I387_MXCSR_REGNUM; i++) + if (regnum == -1 || regnum == i) + regcache_raw_supply (regcache, i, NULL); + if (regnum == -1 || regnum == I387_MXCSR_REGNUM) + { + char buf[4]; + + store_unsigned_integer (buf, 4, 0x1f80); + regcache_raw_supply (regcache, I387_MXCSR_REGNUM, buf); + } + #undef I387_ST0_REGNUM +#undef I387_NUM_XMM_REGS } /* Fill register REGNUM (if it is a floating-point register) in *FSAVE