From 09f8df9f7e1166be48cdd6b1caba0f6771dd753e Mon Sep 17 00:00:00 2001 From: Kimplul Date: Fri, 4 Aug 2023 21:16:34 +0300 Subject: add simple patching mechanism --- src/copyjit.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/copyjit.c') diff --git a/src/copyjit.c b/src/copyjit.c index 393c8e1..0de85d3 100644 --- a/src/copyjit.c +++ b/src/copyjit.c @@ -471,6 +471,23 @@ void compile_start(ctx_t *ctx) ctx->pc = ctx->buf; } +reloc_t compile_placeholder(ctx_t *ctx, compile_callback_t call) +{ + reloc_t r = {0}; + r.addr = call(ctx, 0); + + /* the immediate is the last sizeof(uintptr_t) bytes of the generated + * instruction + * (at least we assume, the user could've passed anything to our callback) */ + r.imm = ((uintptr_t *)ctx->pc) - 1; + return r; +} + +void compile_patch(reloc_t reloc, void *addr) +{ + *reloc.imm = (uintptr_t)addr; +} + void compile_finish(ctx_t *ctx) { __builtin___clear_cache(ctx->buf, ctx->buf + ctx->size); -- cgit v1.3