From owner-freebsd-current Fri Nov 8 2:42:21 2002 Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id EA05A37B401; Fri, 8 Nov 2002 02:42:18 -0800 (PST) Received: from fasterix.frmug.org (fasterix.frmug.org [137.194.36.1]) by mx1.FreeBSD.org (Postfix) with ESMTP id 105C243E3B; Fri, 8 Nov 2002 02:42:18 -0800 (PST) (envelope-from pb@fasterix.frmug.org) Received: from fasterix.frmug.org (localhost [127.0.0.1]) by fasterix.frmug.org (8.12.6/8.12.5) with ESMTP id gA8AajuE060800 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Fri, 8 Nov 2002 11:36:45 +0100 (CET) (envelope-from pb@fasterix.frmug.org) Received: (from pb@localhost) by fasterix.frmug.org (8.12.6/8.12.6/Submit) id gA8AaivG060799; Fri, 8 Nov 2002 11:36:44 +0100 (CET) Date: Fri, 8 Nov 2002 11:36:44 +0100 From: Pierre Beyssac To: Dag-Erling Smorgrav Cc: Gerald Pfeifer , Krzysztof J?druczyk , freebsd-current@freebsd.org, Poul-Henning Kamp , Pierre Beyssac Subject: Re: Wine-2002.10.07 port on FreeBSD 5.0-current Message-ID: <20021108103644.GA60686@fasterix.frmug.org> References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="vkogqOf2sHV7VnPd" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i X-message-flag: Warning! Use of Microsoft Outlook is dangerous and makes your system susceptible to worms and viruses Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG --vkogqOf2sHV7VnPd Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Wed, Oct 30, 2002 at 05:29:39PM +0100, Dag-Erling Smorgrav wrote: > That revision doesn't change the structure, just how it is defined, so > binary compatibility is not an issue. As for source compatibility, > just use the DBREG_DRX macro, which exists in both -STABLE and > -CURRENT (it was merged into -STABLE two years ago). It's too bad source compatibility hasn't been preserved. This macro is a real PITA to use with a static structure (see my Wine patch below). Argument d is not properly parenthesized, I'll commit the following patch if nobody objects: - #define DBREG_DRX(d,x) (d->dr[(x)]) /* reference dr0 - dr7 by - register number */ + #define DBREG_DRX(d,x) ((d)->dr[(x)]) /* reference dr0 - dr7 by + register number */ Now for Gerald and Krzysztof, could you try the attached patch? Works for me under current at least. I'll test it under stable then I'll send it to Wine. -- Pierre Beyssac pb@fasterix.frmug.org pb@fasterix.freenix.org Free domains: http://www.eu.org/ or mail dns-manager@EU.org --vkogqOf2sHV7VnPd Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="context_i386.c.patch" --- context_i386.c.orig Wed Aug 14 22:59:03 2002 +++ context_i386.c Fri Nov 8 11:29:34 2002 @@ -373,6 +373,15 @@ struct dbreg dbregs; if (ptrace( PTRACE_GETDBREGS, pid, (caddr_t) &dbregs, 0 ) == -1) goto error; +#ifdef DBREG_DRX + /* needed for FreeBSD, the structure fields have changed under 5.x */ + context->Dr0 = DBREG_DRX((&dbregs), 0); + context->Dr1 = DBREG_DRX((&dbregs), 1); + context->Dr2 = DBREG_DRX((&dbregs), 2); + context->Dr3 = DBREG_DRX((&dbregs), 3); + context->Dr6 = DBREG_DRX((&dbregs), 6); + context->Dr7 = DBREG_DRX((&dbregs), 7); +#else context->Dr0 = dbregs.dr0; context->Dr1 = dbregs.dr1; context->Dr2 = dbregs.dr2; @@ -380,6 +389,8 @@ context->Dr6 = dbregs.dr6; context->Dr7 = dbregs.dr7; #endif + +#endif } if (flags & CONTEXT_FLOATING_POINT) { @@ -437,6 +448,17 @@ { #ifdef PTRACE_SETDBREGS struct dbreg dbregs; +#ifdef DBREG_DRX + /* needed for FreeBSD, the structure fields have changed under 5.x */ + DBREG_DRX((&dbregs), 0) = context->Dr0; + DBREG_DRX((&dbregs), 1) = context->Dr1; + DBREG_DRX((&dbregs), 2) = context->Dr2; + DBREG_DRX((&dbregs), 3) = context->Dr3; + DBREG_DRX((&dbregs), 4) = 0; + DBREG_DRX((&dbregs), 5) = 0; + DBREG_DRX((&dbregs), 6) = context->Dr6; + DBREG_DRX((&dbregs), 7) = context->Dr7; +#else dbregs.dr0 = context->Dr0; dbregs.dr1 = context->Dr1; dbregs.dr2 = context->Dr2; @@ -445,6 +467,7 @@ dbregs.dr5 = 0; dbregs.dr6 = context->Dr6; dbregs.dr7 = context->Dr7; +#endif if (ptrace( PTRACE_SETDBREGS, pid, (caddr_t) &dbregs, 0 ) == -1) goto error; #endif --vkogqOf2sHV7VnPd-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message