Andes Workshop http://forum.andestech.com/ |
|
Error "unsupported relocation type 94" when insert module http://forum.andestech.com/viewtopic.php?f=10&t=902 |
Page 1 of 1 |
Author: | ianfeng [ Wed Dec 03, 2014 6:10 pm ] |
Post subject: | Error "unsupported relocation type 94" when insert module |
Question: Kernel will hand when insert module built by v3 Platform: XC7 with N1068A+AG101P Kernel: BSP321 built with nds32le-linux-glibc-v3 Module: ftgpio010 When inserting "ftgpio010.ko" module which is built by nds32le-linux-glibc-v3 toolchain, kernel will display following message and hand. ftgpio010: unsupported relocation type 94. It is OK with module built with v2 or v1 toolchain. Reason: It's due to v3 toolchain generate new relocation type and kernel doesn't support this type. Solution: Patches for BSP321 kernel source. Code: diff --git a/arch/nds32/include/asm/elf.h b/arch/nds32/include/asm/elf.h index 89ecdc0..ce2296c 100644 --- a/arch/nds32/include/asm/elf.h +++ b/arch/nds32/include/asm/elf.h @@ -79,6 +79,7 @@ do { \ #define R_NDS32_DWARF2_OP1_RELA 77 #define R_NDS32_DWARF2_OP2_RELA 78 #define R_NDS32_DWARF2_LEB_RELA 79 +#define R_NDS32_WORD_9_PCREL_RELA 94 #define R_NDS32_RELA_NOP_MIX 192 #define R_NDS32_RELA_NOP_MAX 255 diff --git a/arch/nds32/kernel/module.c b/arch/nds32/kernel/module.c index 0402edf..4018d90 100755 --- a/arch/nds32/kernel/module.c +++ b/arch/nds32/kernel/module.c @@ -260,7 +260,11 @@ apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab, unsigned int syminde return -ENOEXEC; do_reloc32( v - (Elf32_Addr)loc, loc, 0x01ffffff, 1, 0xff000000, 0, NEED_SWAP); break; - + case R_NDS32_WORD_9_PCREL_RELA: + if(exceed_limit((v - (Elf32_Addr)loc), 0x000000ff, module, rel, relindex, i)) + return -ENOEXEC; + do_reloc32( v - (Elf32_Addr)loc, loc, 0x000001ff, 1, 0xffffff00, 0, NEED_SWAP); + break; case R_NDS32_SDA15S3_RELA: case R_NDS32_SDA15S2_RELA: case R_NDS32_SDA15S1_RELA: Attachment: Commands to patch this file.Code: #cd linux2.6
#cp <file location>/reloc_patch.txt . #patch -p1 < reloc_patch.txt |
Page 1 of 1 | All times are UTC + 8 hours [ DST ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |