From owner-freebsd-current@FreeBSD.ORG Sat Aug 28 04:09:39 2004 Return-Path: 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 3757F16A4CE; Sat, 28 Aug 2004 04:09:39 +0000 (GMT) Received: from freebsd3.cimlogic.com.au (adsl-20-121.swiftdsl.com.au [218.214.20.121]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3CFC943D39; Sat, 28 Aug 2004 04:09:38 +0000 (GMT) (envelope-from jb@cimlogic.com.au) Received: by freebsd3.cimlogic.com.au (Postfix, from userid 102) id F30826A946; Sat, 28 Aug 2004 14:09:36 +1000 (EST) Date: Sat, 28 Aug 2004 14:09:36 +1000 From: John Birrell To: Brian Fundakowski Feldman Message-ID: <20040828040936.GO7113@freebsd3.cimlogic.com.au> References: <47158390.20040827112834@ulstu.ru> <20040827091556.GM7113@freebsd3.cimlogic.com.au> <1698443921.20040827135316@ulstu.ru> <200408271245.15447.mistry.7@osu.edu> <20040827230502.GS77326@green.homeunix.org> <20040828013612.GN7113@freebsd3.cimlogic.com.au> <20040828040118.GA1085@green.homeunix.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20040828040118.GA1085@green.homeunix.org> User-Agent: Mutt/1.4.2.1i cc: Angry Virus cc: freebsd-current@freebsd.org Subject: Re: Re[2]: Wine and mmap X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 28 Aug 2004 04:09:39 -0000 On Sat, Aug 28, 2004 at 12:01:18AM -0400, Brian Fundakowski Feldman wrote: > Is the problem that it specifically runs out of memory area but it's not > checking where it needs to? If so, I think you could hash out the solution > with a wrapper/workaround mmap() in userland first. The problem is that if the mmap kernel code is left to choose a map address, it tries to use memory above the highest value allocated. This conflicts with Wine because Wine needs to reserve the top half of a process' address space to be compatible with Win9X programs. Wine gobbles the upper memory as soon as it can (i.e. just after the base Wine process is loaded with it's linked libraries - libc). Once the memory has been reserved, Wine then goes ahead and loads the "DLL" libraries using the standard dlopen() call. The first one Wine tries to load fails because the upper-most address used by that time is the top of the process address space and it all ends in tears. What the mmap code needs (IMHO) to do is to find a hole in the address space if the upper memory is all allocated. -- John Birrell