Mailing-List: contact cygwin-apps-help AT cygwin DOT com; run by ezmlm Sender: cygwin-apps-owner AT cygwin DOT com List-Subscribe: List-Archive: List-Post: List-Help: , Mail-Followup-To: cygwin-apps AT cygwin DOT com Delivered-To: mailing list cygwin-apps AT cygwin DOT com Message-ID: <20020425094116.76666.qmail@web14507.mail.yahoo.com> Date: Thu, 25 Apr 2002 19:41:16 +1000 (EST) From: =?iso-8859-1?q?Danny=20Smith?= Subject: Re: cygwin ld import library issue fix (removing unused "_nm_" symbols) To: Ralf Habacker , Kde-Cygwin , Binutils , Cygwin-Apps In-Reply-To: <001101c1ec3c$27465c40$651c440a@BRAMSCHE> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit --- Ralf Habacker wrote: > Hi, > this patch fixes an cygwin ld issue (GNU ld version 2.11.92 20011001) I've > encountered while analysing the runtime linking performance for kde. > > Background: > > The ld-auto-import stuff introduces additional symbols (_nm_...) in the > import > library which are only needed for data exports. > Unfortunally this symbols are generated for every export. > Additional ld rexports imported "_nm_" symbols from other dlls, so one get > symbols like "_nm___nm__scanf" for example. > > One can say this isn't a real problem and the answer is yes ... for little > dll's. > But if you look in the below mentioned import libraries, one can save about > 30% > of the import libraries size. > For the kde 2.2.2 devel libs and base package this would save about 26MB. > And this seems to be a fact for applying this fix. > > without patch > -rwxrwxrwx 1 1002 Kein 3190016 Apr 20 19:12 libkdecore.dll.a > -rwxrwxrwx 1 1002 Kein 7526 Apr 20 19:01 libkdefakes.dll.a > -rwxrwxrwx 1 1002 Kein 5693370 Apr 20 01:16 libkdeui.dll.a > > > with patch > -rwxrwxrwx 1 1002 Kein 2126660 Apr 25 10:48 libkdecore.dll.a > -rwxrwxrwx 1 1002 Kein 1448 Apr 25 10:45 libkdefakes.dll.a > -rwxrwxrwx 1 1002 Kein 3622512 Apr 25 11:06 libkdeui.dll.a > > > $ diff pe-dll.c.orig pe-dll.c -ubBp > --- pe-dll.c.orig Wed Apr 24 09:48:59 2002 > +++ pe-dll.c Thu Apr 25 08:33:08 2002 > @@ -248,6 +250,8 @@ static autofilter_entry_type autofilter_ > /* Do __imp_ explicitly to save time. */ > { "__rtti_", 7 }, > { "__builtin_", 10 }, > + // RH: prevent generating reimported functions > + { "_nm_", 4 }, > /* Don't export symbols specifying internal DLL layout. */ > { "_head_", 6 }, > { "_fmode", 6 }, > @@ -1789,6 +1793,8 @@ make_one (exp, parent) > quick_symbol (abfd, U ("_imp__"), exp->internal_name, "", id5, BSF_GLOBAL, > 0); > /* Symbol to reference ord/name of imported > symbol, used to implement auto-import. */ > + /* RH: only for auto-imported data */ > + if (exp->flag_data) > quick_symbol (abfd, U("_nm__"), exp->internal_name, "", id6, BSF_GLOBAL, > 0); > if (pe_dll_compat_implib) > quick_symbol (abfd, U ("__imp_"), exp->internal_name, "", > > Any comments ? > > Regards > Ralf Habacker > > Yes, this looks very nice, but does it works against current CVS? I hope you can say yes. Danny. http://messenger.yahoo.com.au - Yahoo! Messenger - A great way to communicate long-distance for FREE!