Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Revert "kbuild: fix modpost segfault for 64bit mipsel kernel"

This reverts commit c8d8b837ebe4b4f11e1b0c4a2bdc358c697692ed, which
caused problems for the x86 build. Quoth Sam:

"It was discussed on mips list but apparently the fix was bogus. I
will not have time to look into it so mips can carry this local fix
until we get a proper fix in mainline."

Signed-off-by: Linus Torvalds <torvalds@osdl.org>

+2 -28
+2 -9
scripts/mod/modpost.c
··· 709 709 for (rela = start; rela < stop; rela++) { 710 710 Elf_Rela r; 711 711 const char *secname; 712 - unsigned int r_sym; 713 712 r.r_offset = TO_NATIVE(rela->r_offset); 714 - if (hdr->e_ident[EI_CLASS] == ELFCLASS64 && 715 - hdr->e_machine == EM_MIPS) { 716 - r_sym = ELF64_MIPS_R_SYM(rela->r_info); 717 - r_sym = TO_NATIVE(r_sym); 718 - } else { 719 - r_sym = ELF_R_SYM(TO_NATIVE(rela->r_info)); 720 - } 713 + r.r_info = TO_NATIVE(rela->r_info); 721 714 r.r_addend = TO_NATIVE(rela->r_addend); 722 - sym = elf->symtab_start + r_sym; 715 + sym = elf->symtab_start + ELF_R_SYM(r.r_info); 723 716 /* Skip special sections */ 724 717 if (sym->st_shndx >= SHN_LORESERVE) 725 718 continue;
-19
scripts/mod/modpost.h
··· 39 39 #define ELF_R_TYPE ELF64_R_TYPE 40 40 #endif 41 41 42 - /* The 64-bit MIPS ELF ABI uses an unusual reloc format. */ 43 - typedef struct 44 - { 45 - Elf32_Word r_sym; /* Symbol index */ 46 - unsigned char r_ssym; /* Special symbol for 2nd relocation */ 47 - unsigned char r_type3; /* 3rd relocation type */ 48 - unsigned char r_type2; /* 2nd relocation type */ 49 - unsigned char r_type1; /* 1st relocation type */ 50 - } _Elf64_Mips_R_Info; 51 - 52 - typedef union 53 - { 54 - Elf64_Xword r_info_number; 55 - _Elf64_Mips_R_Info r_info_fields; 56 - } _Elf64_Mips_R_Info_union; 57 - 58 - #define ELF64_MIPS_R_SYM(i) \ 59 - ((__extension__ (_Elf64_Mips_R_Info_union)(i)).r_info_fields.r_sym) 60 - 61 42 #if KERNEL_ELFDATA != HOST_ELFDATA 62 43 63 44 static inline void __endian(const void *src, void *dest, unsigned int size)