From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47551) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VLhL0-0007KM-U5 for qemu-devel@nongnu.org; Mon, 16 Sep 2013 18:32:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VLhKs-0006Xn-GO for qemu-devel@nongnu.org; Mon, 16 Sep 2013 18:32:10 -0400 Received: from mail-pd0-x231.google.com ([2607:f8b0:400e:c02::231]:59692) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VLhKs-0006Xf-8x for qemu-devel@nongnu.org; Mon, 16 Sep 2013 18:32:02 -0400 Received: by mail-pd0-f177.google.com with SMTP id y10so4658753pdj.8 for ; Mon, 16 Sep 2013 15:32:01 -0700 (PDT) Sender: Richard Henderson Message-ID: <523786DD.5020406@twiddle.net> Date: Mon, 16 Sep 2013 15:31:57 -0700 From: Richard Henderson MIME-Version: 1.0 References: <20130916085902.GA6005@redhat.com> <5236D318.4080206@redhat.com> <20130916095121.GD22783@T430s.nay.redhat.com> <5236D8EB.9060700@redhat.com> <20130916101415.GH6005@redhat.com> <5236DB0E.5040302@redhat.com> <20130916102131.GI6005@redhat.com> <5236DDC7.1010908@redhat.com> <20130916112917.GA21374@T430s.nay.redhat.com> <5236EC72.20900@redhat.com> <20130916114641.GA22477@T430s.nay.redhat.com> In-Reply-To: <20130916114641.GA22477@T430s.nay.redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v10 5/8] module: implement module loading List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: famz@redhat.com Cc: peter.maydell@linaro.org, mjt@tls.msk.ru, qemu-devel@nongnu.org, alex@alex.org.uk, Paolo Bonzini , vilanova@ac.upc.edu On 09/16/2013 04:46 AM, Fam Zheng wrote: > On Mon, 09/16 13:33, Paolo Bonzini wrote: >> Il 16/09/2013 13:29, Fam Zheng ha scritto: >>> An idea for single .so file: >>> - before loads a .so, an empty initializer list is created. >>> - module_init adds a __attribute__((constructor)) function, which appends >>> its real initializer to the initializer list. So this function is >>> automatically called after dlopen(). >>> - make init_$(date +%s$$$RANDOM) a dummy symbol. >>> - module_load first checks the presense of the symbol, if yes, call the >>> functions in the initializer list. Else clean up and unload .so. >>> >>> Does this enable multiple calls of module_init()? >> >> Yes. Basically you are delaying the constructors; that would work. >> >>> OTOH. As for multiple spice modules, is it possible to solve it by having a >>> spice-common.o and link all spice modules to it, to share code? >> >> Looks like there is global state in ui/spice-core.c, so likely no. >> > > What if the modules can be loaded by name? Then in spice-qemu-char.so, it can > call require_module("spice-core") before initializing itself, which will load > this dependency if not yet. This may be the simplest implementation of > dependency resolving. Why oh why would you want to re-invent the dependencies that ld.so already provides? Link spice-qemu.char.so against spice-core.so. The DT_NEEDED entry will be recorded, and ld.so will do the right thing. Anything else sounds way too much like Not Invented Here. r~