From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19419 invoked by alias); 6 May 2009 17:12:38 -0000 Received: (qmail 19354 invoked by uid 22791); 6 May 2009 17:12:33 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mx2.redhat.com (HELO mx2.redhat.com) (66.187.237.31) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 06 May 2009 17:12:17 +0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n46HCFTV024794; Wed, 6 May 2009 13:12:15 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n46HCENb016515; Wed, 6 May 2009 13:12:14 -0400 Received: from zebedee.pink (vpn-12-130.rdu.redhat.com [10.11.12.130]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n46HCC3V000777; Wed, 6 May 2009 13:12:12 -0400 Message-ID: <4A01C4EB.4070408@redhat.com> Date: Wed, 06 May 2009 17:19:00 -0000 From: Andrew Haley User-Agent: Thunderbird 2.0.0.17 (X11/20081009) MIME-Version: 1.0 To: Dave Korn CC: java@gcc.gnu.org, "gcc@gcc.gnu.org" Subject: Re: [JAVA,libtool] Big libjava is biiiig. References: <4A01B55C.6060700@gmail.com> <4A01B621.7020609@gmail.com> <4A01BD26.30707@redhat.com> <4A01C128.2020500@gmail.com> In-Reply-To: <4A01C128.2020500@gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org X-SW-Source: 2009-05/txt/msg00156.txt.bz2 Dave Korn wrote: > Andrew Haley wrote: >> Dave Korn wrote: >> >>> 1) Would this be a reasonable approach, specifically i) in adding a configure >>> option to cause sublibraries to be built, and ii) in using gmake's $(filter) >>> construct to crudely subdivide the libraries like this? >> At program startup the first library would be loaded, it would load >> the next, and so on. There are a few parts of libgcj that are truly >> independent, but I suspect that you'd always load almost all of it. >> So, you'd have longer startup time for loading all those files. > > Compared to a single DLL that is unusably malformed because it exceeds > system limits, that's still an improvement :) > >> With regard to GNU libc platforms: >> >> You'd no longer be able to make so much use of fast calls between >> functions in the same library; you'd have to go via the PLT. >> >> Also, dl_iterate_phdr() is used a great deal (for finding exception >> regions, garbage collection, etc.) and it linearly scans the libraries >> that are loaded. So, the more libraries you have loaded, the slower >> it goes. >> >> Now, I don't know how much of these characteristics are shared by >> Windows, but I imagine some of them are. > > Yes, the inter-library calls would have to be dllimports and go through > stubs (one extra indirect branch). I don't know how dl_iterate_phdr works on > win32 but I imagine that it's also linear in the number of libs. > >> So, I suspect your best bet would be to split libgcj into core and >> non-core libraries and not slice much more thinly than that. I can >> advise you what is core and what isn't. > > Please do, I'll happily try that approach since it might significantly > simplify my inter-dependences problems. Here's a starter list of non-core packages: gnu/CORBA gnu/classpath/management gnu/java/awt/dnd/peer/gtk gnu/java/awt/dnd/peer/gtk gnu/java/awt/peer/gtk gnu/java/awt/peer/qt gnu/java/awt/peer/x gnu/java/beans gnu/java/lang/managementheaders gnu/java/math gnu/java/util/prefs/gconf gnu/java/util/prefs/gconf gnu/javax/management gnu/javax/rmi gnu/javax/sound/midi gnu/javax/sound/sampled/gstreamer) ignore gnu/xml/aelfred2 gnu/xml/dom gnu/xml/libxmlj gnu/xml/pipeline gnu/xml/stream gnu/xml/transform gnu/xml/util gnu/xml/validation gnu/xml/xpath java/lang/management javax/imageio javax/rmi javax/xml org/omg/CORBA org/omg/CORBA_2_3 org/omg/CosNaming org/omg/Dynamic org/omg/DynamicAny org/omg/IOP org/omg/Messaging org/omg/PortableInterceptor org/omg/PortableServer org/omg/SendingContext org/omg/stub org/relaxng org/w3c org/xml Andrew.