Skip to content

Commit 56a974f

Browse files
committed
kbuild: make better section mismatch reports on arm
With this change we can find more symbols hereby improving the readability of the warnings. Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
1 parent ae4ac12 commit 56a974f

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

scripts/mod/modpost.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -929,6 +929,26 @@ static int addend_386_rel(struct elf_info *elf, int rsection, Elf_Rela *r)
929929
return 0;
930930
}
931931

932+
static int addend_arm_rel(struct elf_info *elf, int rsection, Elf_Rela *r)
933+
{
934+
unsigned int r_typ = ELF_R_TYPE(r->r_info);
935+
936+
switch (r_typ) {
937+
case R_ARM_ABS32:
938+
/* From ARM ABI: (S + A) | T */
939+
r->r_addend = (int)(long)(elf->symtab_start + ELF_R_SYM(r->r_info));
940+
break;
941+
case R_ARM_PC24:
942+
/* From ARM ABI: ((S + A) | T) - P */
943+
r->r_addend = (int)(long)(elf->hdr + elf->sechdrs[rsection].sh_offset +
944+
(r->r_offset - elf->sechdrs[rsection].sh_addr));
945+
break;
946+
default:
947+
return 1;
948+
}
949+
return 0;
950+
}
951+
932952
static int addend_mips_rel(struct elf_info *elf, int rsection, Elf_Rela *r)
933953
{
934954
unsigned int r_typ = ELF_R_TYPE(r->r_info);
@@ -1051,6 +1071,10 @@ static void check_sec_ref(struct module *mod, const char *modname,
10511071
if (addend_386_rel(elf, i, &r))
10521072
continue;
10531073
break;
1074+
case EM_ARM:
1075+
if(addend_arm_rel(elf, i, &r))
1076+
continue;
1077+
break;
10541078
case EM_MIPS:
10551079
if (addend_mips_rel(elf, i, &r))
10561080
continue;

0 commit comments

Comments
 (0)