ARM: relocation out of range (when loading a module)

From: Alexander Holler
Date: Mon Jan 10 2011 - 13:53:01 EST


Hello,

I've build a kernel 2.6.37 for an armv5-device which includes an initramfs of about 16MB (uncompressed, result is a kernel of about 6MB) and I now getting errors when trying to load a module (which is included in that initramfs):

----------------------------
# modprobe ipv6
modprobe: 'kernel/net/ipv6/ipv6.ko': invalid module format
# dmesg | tail -n 1
[ 107.327672] ipv6: relocation out of range, section 2 reloc 0 sym 'snmp_mib_free'
----------------------------

To compile the kernel I've used gcc 4.5.2 and binutils 2.21.

If I apply the patch found at

http://lists.arm.linux.org.uk/lurker/message/20100729.090437.85f82ebd.en.html

the output from dmesg will be
----------------------------
[ 58.211776] ipv6: section 2 reloc 0 sym 'snmp_mib_free': relocation 28 out of range (0xbf0000a4 -> 0xc11b4858)
----------------------------

I don't know much about how the memory is organized and the relocation is done for arm, but reading that output it seems the 32MB limit is reached. Is that because of the initramfs (just speculating) and is there a workaround to still include such an initramfs in the kernel?

An excerpt from my config:

----------------------------
CONFIG_ARM_THUMB=y
...
# CONFIG_HIGHMEM is not set
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
# CONFIG_HIGHMEM is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_HAVE_MEMBLOCK=y
CONFIG_PAGEFLAGS_EXTENDED=y
----------------------------

Regards,

Alexander
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/