rmodtool: Add support for aarch64

BUG=chrome-os-partner:31615
BRANCH=None
TEST=Compiles succesfully, rmodule created and loaded for ryu

Change-Id: I4f3a5dbb8fc8150aa670d2e6fed56a6774feb4a6
Signed-off-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://chromium-review.googlesource.com/214329
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Tested-by: Furquan Shaikh <furquan@chromium.org>
Commit-Queue: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Furquan Shaikh 2014-08-26 15:21:15 -07:00 committed by chrome-internal-fetch
commit 24ad4383a9

View file

@ -104,6 +104,31 @@ static int should_emit_arm(struct rmod_context *ctx, Elf64_Rela *rel)
return (type == R_ARM_ABS32);
}
static int valid_reloc_aarch64(struct rmod_context *ctx, Elf64_Rela *rel)
{
int type;
type = ELF64_R_TYPE(rel->r_info);
return (type == R_AARCH64_ADR_PREL_PG_HI21 ||
type == R_AARCH64_ADD_ABS_LO12_NC ||
type == R_AARCH64_JUMP26 ||
type == R_AARCH64_LDST32_ABS_LO12_NC ||
type == R_AARCH64_CALL26 ||
type == R_AARCH64_ABS64 ||
type == R_AARCH64_LD_PREL_LO19 ||
type == R_AARCH64_ADR_PREL_LO21);
}
static int should_emit_aarch64(struct rmod_context *ctx, Elf64_Rela *rel)
{
int type;
type = ELF64_R_TYPE(rel->r_info);
return (type == R_AARCH64_ABS64);
}
static struct arch_ops reloc_ops[] = {
{
.arch = EM_386,
@ -115,6 +140,11 @@ static struct arch_ops reloc_ops[] = {
.valid_type = valid_reloc_arm,
.should_emit = should_emit_arm,
},
{
.arch = EM_AARCH64,
.valid_type = valid_reloc_aarch64,
.should_emit = should_emit_aarch64,
},
};
/*