--- zzzz-none-000/linux-2.6.32.61/arch/arm/kernel/module.c 2013-06-10 09:43:48.000000000 +0000 +++ ar10-7272-687/linux-2.6.32.61/arch/arm/kernel/module.c 2012-06-29 09:24:07.000000000 +0000 @@ -36,7 +36,7 @@ #endif #ifdef CONFIG_MMU -void *module_alloc(unsigned long size) +void *module_alloc(unsigned long size, char *name __attribute__ ((unused)), enum _module_alloc_type_ type __attribute__ ((unused))) { struct vm_struct *area; @@ -51,7 +51,7 @@ return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL_EXEC); } #else /* CONFIG_MMU */ -void *module_alloc(unsigned long size) +void *module_alloc(unsigned long size, char *name __attribute__ ((unused)), enum _module_alloc_type_ type __attribute__ ((unused))) { return size == 0 ? NULL : vmalloc(size); } @@ -121,6 +121,10 @@ return -ENOEXEC; } + if ((IS_ERR_VALUE(sym->st_value) || !sym->st_value) && + ELF_ST_BIND(sym->st_info) == STB_WEAK) + continue; + loc = dstsec->sh_addr + rel->r_offset; switch (ELF32_R_TYPE(rel->r_info)) {