diff options
Diffstat (limited to 'lib/arm64')
-rw-r--r-- | lib/arm64/jump-patch.h | 1 | ||||
-rw-r--r-- | lib/arm64/misc.h | 2 | ||||
-rw-r--r-- | lib/arm64/transform-dis-arm64.inc.h | 15 |
3 files changed, 17 insertions, 1 deletions
diff --git a/lib/arm64/jump-patch.h b/lib/arm64/jump-patch.h index aa818d3..cc94f90 100644 --- a/lib/arm64/jump-patch.h +++ b/lib/arm64/jump-patch.h @@ -1,7 +1,6 @@ #pragma once #include "arm64/assemble.h" #define MAX_JUMP_PATCH_SIZE 12 -#define MAX_REWRITTEN_SIZE (7 * 2 * 4) /* also conservative */ static inline int jump_patch_size(uintptr_t pc, uintptr_t dpc, UNUSED struct arch_dis_ctx arch, bool force) { diff --git a/lib/arm64/misc.h b/lib/arm64/misc.h index c7fa5c9..84bd638 100644 --- a/lib/arm64/misc.h +++ b/lib/arm64/misc.h @@ -4,4 +4,6 @@ #define TARGET_JUMP_PATCH_HDR "arm64/jump-patch.h" #define TARGET_TRANSFORM_DIS_HEADER "arm64/transform-dis-arm64.inc.h" #define MIN_INSN_SIZE 4 +#define TD_MAX_REWRITTEN_SIZE (7 * 2 * 4) /* also conservative */ struct arch_dis_ctx {}; +static inline void arch_dis_ctx_init(UNUSED struct arch_dis_ctx *ctx) {} diff --git a/lib/arm64/transform-dis-arm64.inc.h b/lib/arm64/transform-dis-arm64.inc.h index 682613a..af2d4c7 100644 --- a/lib/arm64/transform-dis-arm64.inc.h +++ b/lib/arm64/transform-dis-arm64.inc.h @@ -16,3 +16,18 @@ static NOINLINE UNUSED void transform_dis_pcrel(struct transform_dis_ctx *ctx, } } +static NOINLINE UNUSED void transform_dis_branch(struct transform_dis_ctx *ctx, + uintptr_t dpc, int cc) { +#ifdef TRANSFORM_DIS_VERBOSE + printf("transform_dis (%p): branch => %p\n", (void *) ctx->pc, (void *) dpc); +#endif + if (dpc >= ctx->pc_patch_start && dpc < ctx->pc_patch_end) { + ctx->err = SUBSTITUTE_ERR_FUNC_BAD_INSN_AT_START; + return; + } + /* TODO */ + (void) cc; +} + +static void transform_dis_pre_dis(UNUSED struct transform_dis_ctx *ctx) {} +static void transform_dis_post_dis(UNUSED struct transform_dis_ctx *ctx) {} |