X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS X-Spam-Check-By: sourceware.org Message-ID: <4A0B751A.30007@cygwin.com> Date: Wed, 13 May 2009 21:34:18 -0400 From: "Larry Hall (Cygwin)" Reply-To: cygwin AT cygwin DOT com User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.19) Gecko/20090101 Remi/2.0.0.19-1.fc8.remi Lightning/0.9 Thunderbird/2.0.0.19 Mnenhy/0.7.5.0 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: Question of the necessity of rebaseall References: <4A0B6BE4 DOT 1020905 AT cygwin DOT com> In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Lenik wrote: > On 2009-5-14 8:55, Larry Hall (Cygwin) wrote: >> Lenik wrote: >>> Imagebase in PE header is something a bit of optional, that means if >>> two dlls with same imagebase, the OS kernel will automaticly relocate >>> one of them, to put them in different virtual spaces. So, rebase >>> should be a utility for optimizing the overall start-up speed, to >>> reduce avoidable relocations, rather then fix start-up errors. >>> >>> Any idea? >> >> cygwin1.dll cannot be relocated if the fork semantics are to work. So >> while what you say above is true for apps in general, it's not true for >> Cygwin apps. >> > > I can't figure out how fork will break the relocation, for libraries > have been loaded, they're already relocated before invoke into fork, and > for libraries haven't been loaded, they don't need to share memory after > new processes created by fork. You have it backwards. Forking doesn't break the relocation. Relocation breaks forking. cygwin1.dll needs to have a very special memory layout to implement the fork semantics in Win32. If this memory layout is disrupted, fork breaks. Relocating cygwin1.dll disrupts the required memory layout. 'rebaseall' does its best to locate all Cygwin DLLs that it knows of into a layout that avoids collisions. This maintains the required memory layout so fork can do its job. -- Larry Hall http://www.rfk.com RFK Partners, Inc. (508) 893-9779 - RFK Office 216 Dalton Rd. (508) 893-9889 - FAX Holliston, MA 01746 _____________________________________________________________________ A: Yes. > Q: Are you sure? >> A: Because it reverses the logical flow of conversation. >>> Q: Why is top posting annoying in email? -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/