Bug #749
closedAlias Collision on 'init_module'
0%
Description
'ldv-git --force --no-update-meta --rule=08_1 --filter=isdn/capi/capidrv check' fails now at link stage of rule-instrumentor:
/opt/rule-instrumentor/aspectator/bin/linker: link error in '/home/tester/ldv/workdir/envs/1/work/work-4162cf64973df51fc885825bc9ca4d055891c49f/drivers/isdn/capi/capidrv.c/work/current--X--commands.xml--X--defaultshadows--X--08_1/artificial_env_1/csd_deg_dscv/20/dscv_tempdir/dscv/ri/08_1/drivers/isdn/i4l/isdn_common.o.usual': Alias Collision on 'init_module': aliases have different aliasees
Files
Updated by Alexey Khoroshilov almost 14 years ago
Updated by Evgeny Novikov almost 14 years ago
- File isdn_common.o.usual isdn_common.o.usual added
- File kcapi.o.usual kcapi.o.usual added
- File isdn_common.c.p isdn_common.c.p added
- File kcapi.c.p kcapi.c.p added
- Category set to LDV-Git
- Status changed from New to Open
- Assignee set to Pavel Shved
I investigate the given problem and found that the problem is in incorrectly formed cmdstream. So cmdstream contains two source code files both with module_init
function that of course leads to linking problem. The full list of linked objects are so (marked those of them which contains module_init
):
/drivers/isdn/capi/capidrv.o.general /drivers/isdn/i4l/isdn_v110.o.usual /drivers/isdn/capi/kcapi_proc.o.usual /drivers/base/power/main.o.usual /drivers/isdn/i4l/isdn_tty.o.usual /drivers/isdn/i4l/isdn_net.o.usual /drivers/isdn/i4l/isdn_common.o.usual (*) /drivers/isdn/capi/capiutil.o.usual /drivers/base/power/sysfs.o.usual /drivers/isdn/i4l/isdn_audio.o.usual /drivers/base/class.o.usual /drivers/base/dd.o.usual /drivers/base/power/wakeup.o.usual /drivers/base/core.o.usual /drivers/tty/tty_io.o.usual /drivers/base/bus.o.usual /drivers/isdn/i4l/isdn_ppp.o.usual /drivers/base/devres.o.usual /drivers/isdn/capi/kcapi.o.usual (*) -o /capidrv.ko.linked (here files are linked to)
I attached corresponding bitcode files and their source code files. If you will try simply something like this (LLVM linker can be found in the directory rule-instrumentor/aspectator/bin of installed ldv-tools):
llvm-2.6-bin/bin/llvm-ld isdn_common.o.usual kcapi.o.usual
you will gain the same problem as described:
llvm-ld: error: Cannot link file 'kcapi.o.usual': Alias Collision on 'init_module': aliases have different aliasees
I believe that the problem comes from ldv-git that forms cmdstream incorrectly for this case (especially since the problem came when Alexey updated the ldv-git after 2 months out-of-date state).
Updated by Evgeny Novikov almost 14 years ago
More details (but not all... there is no cmdstream file for example) can be found in the attached by Alexey file.
Updated by Evgeny Novikov almost 14 years ago
- Category changed from LDV-Git to 15
- Assignee changed from Pavel Shved to Evgeny Novikov
module_init
function is something like this:
module_init(cmodio_init);
static inline initcall_t __inittest(void) { return cmodio_init; } int init_module(void) __attribute__((alias("cmodio_init")));
I suggest that we really can remove it from code by means of small simple aspect extension and in fact it's the problem of llvm-ld.
Updated by Evgeny Novikov almost 14 years ago
I try to reproduce the given bug on pure linux-2.6.37.y (git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.37.y.git) without any cached and stored previously data and has neither the given problem nor #718. All works good. Now I'll try to obtain the list of linked drivers as the above one.
Updated by Evgeny Novikov almost 14 years ago
This list consists of just one object file:
drivers/isdn/capi/capidrv.o.general
Updated by Pavel Shved almost 14 years ago
Please, attach your metadata files for the commits you check. I'll check if there's any difference
$LDVGIT_BASE/envs/1/metadata/meta-<commit>
Updated by Alexey Khoroshilov almost 14 years ago
Updated by Evgeny Novikov almost 14 years ago
Updated by Pavel Shved almost 14 years ago
Joker's metadata contain no dependency data at all! Perhaps, the reason is in format of GCC debug dump, see #789.
Updated by Evgeny Novikov almost 14 years ago
Updated by Evgeny Novikov almost 14 years ago
Just see on file sizes. They are really too different!
Updated by Pavel Shved almost 14 years ago
Yeah, and your dump now contains the function calls. You may continue with fixing alias collision, and I'll merge the fix into master tomorrow.
Updated by Evgeny Novikov almost 14 years ago
Eugene Novikov wrote:
I try to reproduce the given bug on pure linux-2.6.37.y (git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.37.y.git) without any cached and stored previously data and has neither the given problem nor #718. All works good. Now I'll try to obtain the list of linked drivers as the above one.
Even with correct metadata I still has no problem as I've already described above.
May be different commit history causes this effect.
Updated by Evgeny Novikov almost 14 years ago
The given addition to all aspect models:
around: define(module_init(initfn)) {} around: define(module_exit(exitfn)) {}
should fix the problem with alias collisions.
It's tested now.
Updated by Pavel Shved almost 14 years ago
Eugene Novikov wrote:
It's tested now.
I don't see anything in the master branch... Is it tested, or is it being tested?
Updated by Evgeny Novikov almost 14 years ago
Now it's tested by Alexey since he has appropriate environment and often encounters the problem. If he'll see that the problem is fixed and new problems related with the fix don't arise on 08_1 model and on other aspect models then this will be pushed to the master.
Also we've keep in mind that after aspectator migration from LLVM platform these model fixes possibly should be canceled.
Updated by Pavel Shved almost 14 years ago
Eugene Novikov wrote:
Now it's tested by Alexey
Eugene, please! The correct usage is "the fix is being tested", to stress that it's both passive voice and the action that is taking place right now.
Also we've keep in mind that after aspectator migration from LLVM platform these model fixes possibly should be canceled.
Could you please create a new bug "migrate from LLVM to bare GCC" and mark this bug as related to that one? Just to collect such issues in one place...
Updated by Pavel Shved almost 14 years ago
- Priority changed from Urgent to Normal
Updated by Evgeny Novikov almost 14 years ago
Add this bug as blocker of Bug #876.
Updated by Evgeny Novikov over 13 years ago
- Status changed from Open to Resolved
- Published in build set to e2a8d1f
There is no more the given issue since we have moved aspectator from LLVM to GCC.
Updated by Pavel Shved over 13 years ago
- Status changed from Resolved to Closed
Updated by Evgeny Novikov about 12 years ago
- Project changed from Linux Driver Verification to C Instrumentation Framework
- Category deleted (
15)