aboutsummaryrefslogtreecommitdiff
path: root/lib/arm/jump-patch.h
blob: b19e90f2acd78c6200eaa126a9b441dd8eddc0a7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#include "dis.h"
#define MAX_JUMP_PATCH_SIZE 8
#define MAX_REWRITTEN_SIZE (12 * 4) /* actually should be less */

static inline int jump_patch_size(uintptr_t pc, uintptr_t dpc,
                                  struct arch_dis_ctx arch) {
    return 8;
}

static inline void make_jump_patch(void **codep, uintptr_t pc, uintptr_t dpc,
                                   struct arch_dis_ctx arch) {
    if (arch.pc_low_bit)
        op32(codep, 0xf000f8df);
    else
        op32(codep, 0xe51ff004);
    op32(codep, (uint32_t) pc);
}