linux-mips
[Top] [All Lists]

Re: OProfile cannot be loaded as module...

To: Ralf Baechle <ralf@linux-mips.org>
Subject: Re: OProfile cannot be loaded as module...
From: David Daney <ddaney@avtrex.com>
Date: Mon, 17 Oct 2005 13:14:01 -0700
Cc: linux-mips@linux-mips.org
In-reply-to: <20051013225520.GA3234@linux-mips.org>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <43470BCF.1070709@avtrex.com> <20051013225520.GA3234@linux-mips.org>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mozilla Thunderbird 1.0.7-1.1.fc3 (X11/20050929)
Ralf Baechle wrote:
On Fri, Oct 07, 2005 at 04:59:11PM -0700, David Daney wrote:


arch/mips/oprofile/common.c defines several symbols (op_model_mipsxx and op_model_rm9000) with __attribute__((weak)). It then assumes that ELF linking conventions will prevail and there will be no problems if they are undefined.

The problem is if you try to load oprofile as a module. The kernel module linker evidentially does not understand weak symbols and refuses to load the module because they are undefined.


Actually it contains code to handle weak symbols so this is a bit
surprising not last because STB_WEAK handling happen in the generic
module loader code and is being used by other architectures as well.

So if there's a problem with the module loader I'd prefer to solve that
instead of starting to kludge around it.


Fine, but what exactly are the semantics of __attribute__((weak)) in modules? It gets resolved when linking with other objects that make up the module. But what if the weak symbol can be resolved at module load time against symbols in either the kernel proper or other modules? What happens if the weak symbol can be resolved by a symbol in a module that is loaded after the one with the weak symbol? Does it get fixed up when the new module is loaded?


What compiler exactly are you using btw?


GCC-3.4.3 / binutils 2.16.91 20050817

David Daney.

<Prev in Thread] Current Thread [Next in Thread>