Loading scripts/mod/modpost.c +24 −0 Original line number Diff line number Diff line Loading @@ -929,6 +929,26 @@ static int addend_386_rel(struct elf_info *elf, int rsection, Elf_Rela *r) return 0; } static int addend_arm_rel(struct elf_info *elf, int rsection, Elf_Rela *r) { unsigned int r_typ = ELF_R_TYPE(r->r_info); switch (r_typ) { case R_ARM_ABS32: /* From ARM ABI: (S + A) | T */ r->r_addend = (int)(long)(elf->symtab_start + ELF_R_SYM(r->r_info)); break; case R_ARM_PC24: /* From ARM ABI: ((S + A) | T) - P */ r->r_addend = (int)(long)(elf->hdr + elf->sechdrs[rsection].sh_offset + (r->r_offset - elf->sechdrs[rsection].sh_addr)); break; default: return 1; } return 0; } static int addend_mips_rel(struct elf_info *elf, int rsection, Elf_Rela *r) { unsigned int r_typ = ELF_R_TYPE(r->r_info); Loading Loading @@ -1051,6 +1071,10 @@ static void check_sec_ref(struct module *mod, const char *modname, if (addend_386_rel(elf, i, &r)) continue; break; case EM_ARM: if(addend_arm_rel(elf, i, &r)) continue; break; case EM_MIPS: if (addend_mips_rel(elf, i, &r)) continue; Loading Loading
scripts/mod/modpost.c +24 −0 Original line number Diff line number Diff line Loading @@ -929,6 +929,26 @@ static int addend_386_rel(struct elf_info *elf, int rsection, Elf_Rela *r) return 0; } static int addend_arm_rel(struct elf_info *elf, int rsection, Elf_Rela *r) { unsigned int r_typ = ELF_R_TYPE(r->r_info); switch (r_typ) { case R_ARM_ABS32: /* From ARM ABI: (S + A) | T */ r->r_addend = (int)(long)(elf->symtab_start + ELF_R_SYM(r->r_info)); break; case R_ARM_PC24: /* From ARM ABI: ((S + A) | T) - P */ r->r_addend = (int)(long)(elf->hdr + elf->sechdrs[rsection].sh_offset + (r->r_offset - elf->sechdrs[rsection].sh_addr)); break; default: return 1; } return 0; } static int addend_mips_rel(struct elf_info *elf, int rsection, Elf_Rela *r) { unsigned int r_typ = ELF_R_TYPE(r->r_info); Loading Loading @@ -1051,6 +1071,10 @@ static void check_sec_ref(struct module *mod, const char *modname, if (addend_386_rel(elf, i, &r)) continue; break; case EM_ARM: if(addend_arm_rel(elf, i, &r)) continue; break; case EM_MIPS: if (addend_mips_rel(elf, i, &r)) continue; Loading