Greetings,
I'm trying to get modules to work on my R5000 little endian
target, linux 2.4.1 + modutils 2.4.2 .
When I insmod a module, I get error messages like:
[root@192 /]# insmod dummy.o
dummy.o: local symbol gcc2_compiled. with index 10 exceeds local_symtab_size 10
dummy.o: local symbol __gnu_compiled_c with index 11 exceeds local_symtab_size
10
dummy.o: local symbol __module_kernel_version with index 12 exceeds
local_symtab_size 10
dummy.o: local symbol set_multicast_list with index 13 exceeds
local_symtab_size 10
dummy.o: local symbol dummy_init with index 14 exceeds local_symtab_size 10
dummy.o: local symbol dummy_xmit with index 15 exceeds local_symtab_size 10
dummy.o: local symbol dummy_get_stats with index 18 exceeds local_symtab_size 10
dummy.o: local symbol dummy_init_module with index 21 exceeds local_symtab_size
10
dummy.o: local symbol dev_dummy with index 22 exceeds local_symtab_size 10
dummy.o: local symbol dummy_cleanup_module with index 26 exceeds
local_symtab_size 10
[root@192 /]#
Looking at the source code of modutils, I suspect that there is
something wrong with the ELF header of the module (the sh_info
field of the SYMTAB section is 0xa while it should be 0x17 ??).
ELF header is attached below. The command used to compile the
module is :
mipsel-linux-gcc -I/usr/src/linux/include/asm/gcc -D__KERNEL__
-I/usr/src/linux/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
-fno-strict-aliasing -G 0 -mno-abicalls -fno-pic -mcpu=r8000 -mips2 -Wa,--trap
-pipe -DMODULE -mlong-calls
I use egcs 1.2.1 + binutils 2.9.5. Is this a problem with my
binutils?
Tom
--
Elf header
e_ident = 7f 45 4c 46 1 1 1 0 0 0 0 0 0 0 0 0
e_ident[EI_CLASS] = ELFCLASS32
e_ident[EI_DATA] = ELFDATA2LSB
e_ident[EI_VERSION] = 1
e_type = ET_REL
e_machine = EM_MIPS
e_version = 1
e_entry = 0x0
e_phoff = 0x0
e_shoff = 0xa1c
e_flags = 0x30000101
e_ehsize = 52
e_phentsize = 0
e_phnum = 0
e_shentsize = 40
e_shnum = 15
e_shstrndx = 12
Section header #0
sh_name = <NULL>
sh_type = SHT_NULL
sh_flags = 0x0 (no flags)
sh_addr = 0x0
sh_offset = 0x0
sh_size = 0x0
sh_link = 0x0
sh_info = 0x0
sh_addralign = 0
sh_entsize = 0
Section header #1
sh_name = .text
sh_type = SHT_PROGBITS
sh_flags = 0x6 (Execinstr, Alloc)
sh_addr = 0x0
sh_offset = 0x40
sh_size = 0x220
sh_link = 0x0
sh_info = 0x0
sh_addralign = 16
sh_entsize = 0
Section header #2
sh_name = .rel.text
sh_type = SHT_REL
sh_flags = 0x0 (no flags)
sh_addr = 0x0
sh_offset = 0xf90
sh_size = 0x128
sh_link = 0xd
sh_info = 0x1
sh_addralign = 4
sh_entsize = 8
Section header #3
sh_name = .rela.text
sh_type = SHT_RELA
sh_flags = 0x0 (no flags)
sh_addr = 0x0
sh_offset = 0x10b8
sh_size = 0x0
sh_link = 0xd
sh_info = 0x1
sh_addralign = 4
sh_entsize = 12
Section header #4
sh_name = .data
sh_type = SHT_PROGBITS
sh_flags = 0x3 (Alloc, Write)
sh_addr = 0x0
sh_offset = 0x260
sh_size = 0x0
sh_link = 0x0
sh_info = 0x0
sh_addralign = 16
sh_entsize = 0
Section header #5
sh_name = .bss
sh_type = SHT_NOBITS
sh_flags = 0x3 (Alloc, Write)
sh_addr = 0x0
sh_offset = 0x260
sh_size = 0x130
sh_link = 0x0
sh_info = 0x0
sh_addralign = 16
sh_entsize = 0
Section header #6
sh_name = .reginfo
sh_type = <<< unknown sh_type (0x70000006) >>>
sh_flags = 0x2 (Alloc)
sh_addr = 0x0
sh_offset = 0x260
sh_size = 0x18
sh_link = 0x0
sh_info = 0x0
sh_addralign = 4
sh_entsize = 1
Section header #7
sh_name = .mdebug
sh_type = <<< unknown sh_type (0x70000005) >>>
sh_flags = 0x0 (no flags)
sh_addr = 0x0
sh_offset = 0x278
sh_size = 0x614
sh_link = 0x0
sh_info = 0x0
sh_addralign = 4
sh_entsize = 1
Section header #8
sh_name = .note
sh_type = SHT_NOTE
sh_flags = 0x0 (no flags)
sh_addr = 0x0
sh_offset = 0x88c
sh_size = 0x14
sh_link = 0x0
sh_info = 0x0
sh_addralign = 1
sh_entsize = 0
Section header #9
sh_name = .modinfo
sh_type = SHT_PROGBITS
sh_flags = 0x0 (no flags)
sh_addr = 0x0
sh_offset = 0x8a0
sh_size = 0x18
sh_link = 0x0
sh_info = 0x0
sh_addralign = 4
sh_entsize = 0
Section header #10
sh_name = .rodata
sh_type = SHT_PROGBITS
sh_flags = 0x2 (Alloc)
sh_addr = 0x0
sh_offset = 0x8c0
sh_size = 0xb0
sh_link = 0x0
sh_info = 0x0
sh_addralign = 16
sh_entsize = 0
Section header #11
sh_name = .comment
sh_type = SHT_PROGBITS
sh_flags = 0x0 (no flags)
sh_addr = 0x0
sh_offset = 0x970
sh_size = 0x37
sh_link = 0x0
sh_info = 0x0
sh_addralign = 1
sh_entsize = 0
Section header #12
sh_name = .shstrtab
sh_type = SHT_STRTAB
sh_flags = 0x0 (no flags)
sh_addr = 0x0
sh_offset = 0x9a7
sh_size = 0x72
sh_link = 0x0
sh_info = 0x0
sh_addralign = 1
sh_entsize = 0
Section header #13
sh_name = .symtab
sh_type = SHT_SYMTAB
sh_flags = 0x0 (no flags)
sh_addr = 0x0
sh_offset = 0xc74
sh_size = 0x1f0
sh_link = 0xe
sh_info = 0xa
sh_addralign = 4
sh_entsize = 16
Section header #14
sh_name = .strtab
sh_type = SHT_STRTAB
sh_flags = 0x0 (no flags)
sh_addr = 0x0
sh_offset = 0xe64
sh_size = 0x12a
sh_link = 0x0
sh_info = 0x0
sh_addralign = 1
sh_entsize = 0
Symbol Table: .symtab (@ 0xc74)
0. <NULL>, value=0, size=0, info=0, shndx=0
1. <NULL>, value=0, size=0, info=(local, section), shndx=.text(1)
2. <NULL>, value=0, size=0, info=(local, section), shndx=.data(4)
3. <NULL>, value=0, size=0, info=(local, section), shndx=.bss(5)
4. <NULL>, value=0, size=0, info=(local, section), shndx=.modinfo(9)
5. <NULL>, value=0, size=0, info=(local, section), shndx=.rodata(10)
6. <NULL>, value=0, size=0, info=(local, section), shndx=.reginfo(6)
7. <NULL>, value=0, size=0, info=(local, section), shndx=.mdebug(7)
8. <NULL>, value=0, size=0, info=(local, section), shndx=.note(8)
9. <NULL>, value=0, size=0, info=(local, section), shndx=.comment(11)
10. gcc2_compiled., value=0, size=0, info=0, shndx=.text(1)
11. __gnu_compiled_c, value=0, size=0, info=0, shndx=.text(1)
12. __module_kernel_version, value=0, size=21, info=(local, object),
shndx=.modinfo(9)
13. set_multicast_list, value=0, size=8, info=(local, func), shndx=.text(1)
14. dummy_init, value=8, size=168, info=(local, func), shndx=.text(1)
15. dummy_xmit, value=0xb0, size=124, info=(local, func), shndx=.text(1)
16. kmalloc, value=0, size=0, info=(global, notype), shndx=0
17. memset, value=0, size=0, info=(global, notype), shndx=0
18. dummy_get_stats, value=0x12c, size=8, info=(local, func), shndx=.text(1)
19. ether_setup, value=0, size=0, info=(global, notype), shndx=0
20. __kfree_skb, value=0, size=0, info=(global, notype), shndx=0
21. dummy_init_module, value=0x134, size=124, info=(local, func), shndx=.text(1)
22. dev_dummy, value=0, size=304, info=(local, object), shndx=.bss(5)
23. __this_module, value=0, size=0, info=(global, notype), shndx=0
24. dev_alloc_name, value=0, size=0, info=(global, notype), shndx=0
25. register_netdev, value=0, size=0, info=(global, notype), shndx=0
26. dummy_cleanup_module, value=0x1b0, size=104, info=(local, func),
shndx=.text(1)
27. unregister_netdev, value=0, size=0, info=(global, notype), shndx=0
28. kfree, value=0, size=0, info=(global, notype), shndx=0
29. init_module, value=0x134, size=124, info=(global, func), shndx=.text(1)
30. cleanup_module, value=0x1b0, size=104, info=(global, func), shndx=.text(1)
Relocation section .rel.text (2)
Index Offset Symbol Type
0. 1c 1 R_MIPS_HI16 (5)
1. 20 1 R_MIPS_LO16 (6)
2. 24 16 R_MIPS_HI16 (5)
3. 28 16 R_MIPS_LO16 (6)
4. 48 17 R_MIPS_HI16 (5)
5. 4c 17 R_MIPS_LO16 (6)
6. 5c 1 R_MIPS_HI16 (5)
7. 60 1 R_MIPS_LO16 (6)
8. 64 1 R_MIPS_HI16 (5)
9. 68 1 R_MIPS_LO16 (6)
10. 70 19 R_MIPS_HI16 (5)
11. 74 19 R_MIPS_LO16 (6)
12. 94 1 R_MIPS_26 (4)
13. 10c 20 R_MIPS_HI16 (5)
14. 110 20 R_MIPS_LO16 (6)
15. 138 3 R_MIPS_HI16 (5)
16. 13c 3 R_MIPS_LO16 (6)
17. 140 1 R_MIPS_HI16 (5)
18. 144 1 R_MIPS_LO16 (6)
19. 154 23 R_MIPS_HI16 (5)
20. 158 23 R_MIPS_LO16 (6)
21. 164 5 R_MIPS_HI16 (5)
22. 168 5 R_MIPS_LO16 (6)
23. 16c 24 R_MIPS_HI16 (5)
24. 170 24 R_MIPS_LO16 (6)
25. 184 25 R_MIPS_HI16 (5)
26. 188 25 R_MIPS_LO16 (6)
27. 1b8 3 R_MIPS_HI16 (5)
28. 1bc 3 R_MIPS_LO16 (6)
29. 1c0 27 R_MIPS_HI16 (5)
30. 1c4 27 R_MIPS_LO16 (6)
31. 1d4 28 R_MIPS_HI16 (5)
32. 1d8 28 R_MIPS_LO16 (6)
33. 1ec 17 R_MIPS_HI16 (5)
34. 1f0 17 R_MIPS_LO16 (6)
35. 200 1 R_MIPS_HI16 (5)
36. 204 1 R_MIPS_LO16 (6)
|