Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 56a974fa authored by Sam Ravnborg's avatar Sam Ravnborg
Browse files

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: default avatarSam Ravnborg <sam@ravnborg.org>
parent ae4ac123
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -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);
@@ -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;