Support R_PPC_PLTREL24

It's emitted by clang 7. It's the same as R_PPC_REL24.

Signed-off-by: Vladimir Serbinenko <phcoder@google.com>
This commit is contained in:
Vladimir Serbinenko 2019-03-22 21:24:24 +01:00 committed by Vincent Batts
parent d422df6711
commit 28e02c29eb
2 changed files with 4 additions and 1 deletions

View file

@ -79,7 +79,8 @@ grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
max = rel + s->sh_size / s->sh_entsize; max = rel + s->sh_size / s->sh_entsize;
rel < max; rel < max;
rel++) rel++)
if (ELF_R_TYPE (rel->r_info) == GRUB_ELF_R_PPC_REL24) if (ELF_R_TYPE (rel->r_info) == GRUB_ELF_R_PPC_REL24
|| ELF_R_TYPE (rel->r_info) == GRUB_ELF_R_PPC_PLTREL24)
(*tramp)++; (*tramp)++;
} }
@ -122,6 +123,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
*(Elf_Half *) addr = value; *(Elf_Half *) addr = value;
break; break;
case GRUB_ELF_R_PPC_PLTREL24:
case GRUB_ELF_R_PPC_REL24: case GRUB_ELF_R_PPC_REL24:
{ {
Elf_Sword delta = value - (Elf_Word) addr; Elf_Sword delta = value - (Elf_Word) addr;

View file

@ -29,6 +29,7 @@ struct grub_module_verifier_arch archs[] = {
GRUB_ELF_R_PPC_ADDR16_HA, GRUB_ELF_R_PPC_ADDR16_HA,
GRUB_ELF_R_PPC_ADDR32, GRUB_ELF_R_PPC_ADDR32,
GRUB_ELF_R_PPC_REL32, GRUB_ELF_R_PPC_REL32,
GRUB_ELF_R_PPC_PLTREL24,
-1 -1
} }, } },
{ "sparc64", 8, 1, EM_SPARCV9, GRUB_MODULE_VERIFY_SUPPORTS_RELA, (int[]){ { "sparc64", 8, 1, EM_SPARCV9, GRUB_MODULE_VERIFY_SUPPORTS_RELA, (int[]){