On Mon, Oct 17, 2005 at 01:14:01PM -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?
No, it won't - and I don't think that would be a good idea. The potencial
for bugs is just too large.