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
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.
Perhaps a single
extern struct op_mips_model plat_op_model;
That must be defined by each different implementation. Deciding one
which implementation would then be done at compile time instead of runtime.
I don't have a patch for this yet, but that is what I am thinking of doing.