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? Yes. > 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. Ralf