arm64: insn: Add aarch64_{get,set}_branch_offset
authorMarc Zyngier <marc.zyngier@arm.com>
Mon, 1 Jun 2015 09:47:39 +0000 (10:47 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Wed, 3 Jun 2015 14:43:24 +0000 (15:43 +0100)
commit10b48f7ef2a765452a583dbc256ed7da7fe7f1fc
tree698d280d1cab5c5539529b14ff8077d0409b9111
parent9acdc2af0c0b836183b7f31f630bbed341a7cf4d
arm64: insn: Add aarch64_{get,set}_branch_offset

In order to deal with branches located in alternate sequences,
but pointing to the main kernel text, it is required to extract
the relative displacement encoded in the instruction, and to be
able to update said instruction with a new offset (once it is
known).

For this, we introduce three new helpers:
- aarch64_insn_is_branch_imm is a predicate indicating if the
  instruction is an immediate branch
- aarch64_get_branch_offset returns a signed value representing
  the byte offset encoded in a branch instruction
- aarch64_set_branch_offset takes an instruction and an offset,
  and returns the corresponding updated instruction.

Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/insn.h
arch/arm64/kernel/insn.c