X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-0.9 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,RCVD_NUMERIC_HELO,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org To: cygwin AT cygwin DOT com From: Lenik Subject: Re: Question of the necessity of rebaseall Date: Thu, 14 May 2009 09:49:57 +0800 Lines: 34 Message-ID: References: <4A0B6BE4 DOT 1020905 AT cygwin DOT com> <4A0B751A DOT 30007 AT cygwin DOT com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b3pre) Gecko/20090223 Thunderbird/3.0b2 In-Reply-To: <4A0B751A.30007@cygwin.com> X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: 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 On 2009-5-14 9:34, Larry Hall (Cygwin) wrote: > 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. > Could you explain in more detail? I can't find any document about this special memory layout. Thanks -- 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/