From: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
To: famz@redhat.com
Cc: peter.maydell@linaro.org, mjt@tls.msk.ru, qemu-devel@nongnu.org,
alex@alex.org.uk, Paolo Bonzini <pbonzini@redhat.com>,
vilanova@ac.upc.edu, rth@twiddle.net
Subject: Re: [Qemu-devel] [PATCH v10 5/8] module: implement module loading
Date: Tue, 17 Sep 2013 16:50:17 +0800 [thread overview]
Message-ID: <523817C9.3060502@linux.vnet.ibm.com> (raw)
In-Reply-To: <20130916112917.GA21374@T430s.nay.redhat.com>
于 2013/9/16 19:29, Fam Zheng 写道:
> On Mon, 09/16 12:30, Paolo Bonzini wrote:
>> Il 16/09/2013 12:21, Daniel P. Berrange ha scritto:
>>> On Mon, Sep 16, 2013 at 12:18:54PM +0200, Paolo Bonzini wrote:
>>>> Il 16/09/2013 12:14, Daniel P. Berrange ha scritto:
>>>>> On Mon, Sep 16, 2013 at 12:09:47PM +0200, Paolo Bonzini wrote:
>>>>>> Il 16/09/2013 11:51, Fam Zheng ha scritto:
>>>>>>> On Mon, 09/16 11:44, Paolo Bonzini wrote:
>>>>>>>> Il 16/09/2013 10:59, Daniel P. Berrange ha scritto:
>>>>>>>>>> The init function of dynamic module is no longer with
>>>>>>>>>> __attribute__((constructor)) as static linked version, and need to be
>>>>>>>>>> explicitly called once loaded. The function name is mangled with per
>>>>>>>>>> configure fingerprint as:
>>>>>>>>>>
>>>>>>>>>> init_$(date +%s$$$RANDOM)
>>>>>>>> Does this work for a module that calls module_init multiple times?
>>>>>>> Why should a module calls module_init, instead of the main function?
>>>>>> I think you mean "why should a module calls register_module_init", and I
>>>>>> agree that with this patch a module will not call register_module_init.
>>>>>>
>>>>>> But a module is still using the module_init macro.
>>>>>>
>>>>>> With this patch, a module will not be able to use the module_init macro
>>>>>> twice. I am not sure this is an acceptable limitation, especially if we
>>>>>> do not have a dependency system within modules and/or load them with
>>>>>> G_MODULE_LOCAL/RTLD_LOCAL.
>>>>> Why would a module ever want to use the module_init macro twice ?
>>>> Because our coding standard is to have each source file do its own
>>>> one-time initialization, using static functions and an invocation of
>>>> module_init per source file.
>>> Is there ever a case where two source files, each using module_init
>>> will be compiled into the same .so loadable module. Looking at the
>>> uses of block_init(), I don't see any obvious candidates for trouble,
>>> all uses look like they'd be going into separate .so files.
>> Without inter-module exports, all of SPICE probably would have to be in
>> a single .so file. This includes spice-qemu-char.c and
>> hw/display/qxl.c, both of which use type_init.
>>
>> If we use G_MODULE_GLOBAL as a primitive system for intermodule exports,
>> then indeed this is a much smaller problem, but then we need a
>> dependency system. But I'm almost sure that Windows and maybe Darwin
>> lack support for the equivalent of G_MODULE_GLOBAL.
>>
> 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()?
>
I like this way since it keeps the old init behavior which delayed the
work with a list.
> 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?
>
> Fam
>
next prev parent reply other threads:[~2013-09-17 8:50 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-16 6:50 [Qemu-devel] [PATCH v10 0/8] Shared Library Module Support Fam Zheng
2013-09-16 6:50 ` [Qemu-devel] [PATCH v10 1/8] ui/Makefile.objs: delete unnecessary cocoa.o dependency Fam Zheng
2013-09-16 6:50 ` [Qemu-devel] [PATCH v10 2/8] make.rule: fix $(obj) to a real relative path Fam Zheng
2013-09-16 6:50 ` [Qemu-devel] [PATCH v10 3/8] rule.mak: allow per object cflags and libs Fam Zheng
2013-09-16 6:50 ` [Qemu-devel] [PATCH v10 4/8] build-sys: introduce common-obj-m and block-obj-m for DSO Fam Zheng
2013-09-16 6:50 ` [Qemu-devel] [PATCH v10 5/8] module: implement module loading Fam Zheng
2013-09-16 8:59 ` Daniel P. Berrange
2013-09-16 9:28 ` Fam Zheng
2013-09-16 22:16 ` Richard Henderson
2013-09-17 0:47 ` Fam Zheng
2013-09-16 9:44 ` Paolo Bonzini
2013-09-16 9:51 ` Fam Zheng
2013-09-16 10:09 ` Paolo Bonzini
2013-09-16 10:14 ` Daniel P. Berrange
2013-09-16 10:18 ` Paolo Bonzini
2013-09-16 10:21 ` Daniel P. Berrange
2013-09-16 10:30 ` Paolo Bonzini
2013-09-16 11:29 ` Fam Zheng
2013-09-16 11:33 ` Paolo Bonzini
2013-09-16 11:46 ` Fam Zheng
2013-09-16 22:31 ` Richard Henderson
2013-09-17 1:29 ` Fam Zheng
2013-09-17 5:40 ` Richard Henderson
2013-09-18 11:45 ` Paolo Bonzini
2013-09-18 14:44 ` Richard Henderson
2013-09-18 15:00 ` Paolo Bonzini
2013-09-17 8:50 ` Wenchao Xia [this message]
2013-09-16 10:57 ` Gerd Hoffmann
2013-09-16 11:00 ` Paolo Bonzini
2013-09-16 22:38 ` Richard Henderson
2013-09-16 10:24 ` Alex Bligh
2013-09-16 10:38 ` Paolo Bonzini
2013-09-16 11:00 ` Alex Bligh
2013-09-16 11:04 ` Daniel P. Berrange
2013-09-16 11:27 ` Alex Bligh
2013-09-16 11:08 ` Paolo Bonzini
2013-09-16 11:30 ` Alex Bligh
2013-09-17 8:26 ` Wenchao Xia
2013-09-16 10:43 ` Fam Zheng
2013-09-16 11:05 ` Daniel P. Berrange
2013-09-16 12:36 ` Gerd Hoffmann
2013-09-17 5:55 ` Fam Zheng
2013-09-17 6:33 ` Alex Bligh
2013-09-17 6:40 ` Fam Zheng
2013-09-16 6:50 ` [Qemu-devel] [PATCH v10 6/8] Makefile: install modules with "make install" Fam Zheng
2013-09-16 6:50 ` [Qemu-devel] [PATCH v10 7/8] .gitignore: ignore module related files (dll, so, mo) Fam Zheng
2013-09-16 6:50 ` [Qemu-devel] [PATCH v10 8/8] block: convert block drivers linked with libs to modules Fam Zheng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=523817C9.3060502@linux.vnet.ibm.com \
--to=xiawenc@linux.vnet.ibm.com \
--cc=alex@alex.org.uk \
--cc=famz@redhat.com \
--cc=mjt@tls.msk.ru \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=vilanova@ac.upc.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.