From: Rusty R. <ru...@ru...> - 2011-08-23 04:08:59
|
On Mon, 22 Aug 2011 23:38:43 +0200, Richard Weinberger <ri...@no...> wrote: > Hi! > > UserModeLinux is using the arch specific module functions from > arch/x86/kernel/module.c. > On i386 this works perfectly fine but on x86_64 it causes problems. > > apply_relocate_add() assumes modules compiled with -mcmodel=kernel > because the kernel lives in the negative 2GiB of the address space. > This assumption is not true for UML. > On an UML instance with more than 512MiB of memory no modules can be > loaded because vmalloc() locates the module near the 2GiB limit and the > ELF relocations causes an overflow. (Detected by "if ((s64)val != *(s32 > *)loc)" in apply_relocate_add()). > > Now I'm not sure how to fix this. > Mostly because I'm not a module loader nor an ELF expert. 8-) I think you need to write your own routines. It shouldn't be that hard, just keep implementing relocations until you're done :) Cheers, Rusty. |