[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 03/14: Add separate functions for veneer patching
From: |
Andy Wingo |
Subject: |
[Guile-commits] 03/14: Add separate functions for veneer patching |
Date: |
Fri, 12 Jun 2020 10:18:41 -0400 (EDT) |
wingo pushed a commit to branch master
in repository guile.
commit aacaa6e38cda6154c5ab5d8d6bb2fe1b84feb256
Author: Icecream95 <ixn@keemail.me>
AuthorDate: Mon Apr 6 19:44:03 2020 +1200
Add separate functions for veneer patching
---
lightening/aarch64.c | 8 ++++++--
lightening/arm-cpu.c | 12 ++++++++++++
lightening/lightening.c | 6 ++++--
3 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/lightening/aarch64.c b/lightening/aarch64.c
index 2e52516..b605cc5 100644
--- a/lightening/aarch64.c
+++ b/lightening/aarch64.c
@@ -114,8 +114,12 @@ DEFINE_ENCODER(size, 2, 22, unsigned, uint32_t)
} \
}
-DEFINE_PATCHABLE_INSTRUCTION(jmp, simm26, JMP_WITH_VENEER, 2);
-DEFINE_PATCHABLE_INSTRUCTION(jcc, simm19, JCC_WITH_VENEER, 2);
+#define DEFINE_PATCHABLE_INSTRUCTIONS(name, kind, RELOC, rsh) \
+ DEFINE_PATCHABLE_INSTRUCTION(name, kind, RELOC, rsh); \
+ DEFINE_PATCHABLE_INSTRUCTION(veneer_##name, kind, RELOC, rsh);
+
+DEFINE_PATCHABLE_INSTRUCTIONS(jmp, simm26, JMP_WITH_VENEER, 2);
+DEFINE_PATCHABLE_INSTRUCTIONS(jcc, simm19, JCC_WITH_VENEER, 2);
DEFINE_PATCHABLE_INSTRUCTION(load_from_pool, simm19, LOAD_FROM_POOL, 2);
struct veneer
diff --git a/lightening/arm-cpu.c b/lightening/arm-cpu.c
index d96d57b..8e3b121 100644
--- a/lightening/arm-cpu.c
+++ b/lightening/arm-cpu.c
@@ -325,6 +325,12 @@ patch_jmp_offset(uint32_t *loc, int32_t v)
write_wide_thumb(loc, patch_thumb_jump(read_wide_thumb(loc), v));
}
+static void
+patch_veneer_jmp_offset(uint32_t *loc, int32_t v)
+{
+ patch_jmp_offset(loc, v);
+}
+
static jit_reloc_t
emit_thumb_jump(jit_state_t *_jit, uint32_t inst)
{
@@ -401,6 +407,12 @@ patch_jcc_offset(uint32_t *loc, int32_t v)
write_wide_thumb(loc, patch_thumb_cc_jump(read_wide_thumb(loc), v));
}
+static void
+patch_veneer_jcc_offset(uint32_t *loc, int32_t v)
+{
+ patch_jcc_offset(loc, v);
+}
+
static jit_reloc_t
emit_thumb_cc_jump(jit_state_t *_jit, uint32_t inst)
{
diff --git a/lightening/lightening.c b/lightening/lightening.c
index 8d4c3d7..0940263 100644
--- a/lightening/lightening.c
+++ b/lightening/lightening.c
@@ -107,9 +107,11 @@ static void emit_literal_pool(jit_state_t *_jit, enum
guard_pool guard);
static int32_t read_jmp_offset(uint32_t *loc);
static int offset_in_jmp_range(ptrdiff_t offset);
static void patch_jmp_offset(uint32_t *loc, ptrdiff_t offset);
+static void patch_veneer_jmp_offset(uint32_t *loc, ptrdiff_t offset);
static int32_t read_jcc_offset(uint32_t *loc);
static int offset_in_jcc_range(ptrdiff_t offset);
static void patch_jcc_offset(uint32_t *loc, ptrdiff_t offset);
+static void patch_veneer_jcc_offset(uint32_t *loc, ptrdiff_t offset);
static void patch_veneer(uint32_t *loc, jit_pointer_t addr);
static int32_t read_load_from_pool_offset(uint32_t *loc);
#endif
@@ -1367,11 +1369,11 @@ emit_literal_pool(jit_state_t *_jit, enum guard_pool
guard)
switch (entry->reloc.kind & JIT_RELOC_MASK) {
case JIT_RELOC_JMP_WITH_VENEER:
- patch_jmp_offset((uint32_t*) loc, diff);
+ patch_veneer_jmp_offset((uint32_t*) loc, diff);
emit_veneer(_jit, (void*) (uintptr_t) entry->value);
break;
case JIT_RELOC_JCC_WITH_VENEER:
- patch_jcc_offset((uint32_t*) loc, diff);
+ patch_veneer_jcc_offset((uint32_t*) loc, diff);
emit_veneer(_jit, (void*) (uintptr_t) entry->value);
break;
case JIT_RELOC_LOAD_FROM_POOL:
- [Guile-commits] branch master updated (fc13923 -> 3c32704), Andy Wingo, 2020/06/12
- [Guile-commits] 01/14: Switch CI to use Debian stable, Andy Wingo, 2020/06/12
- [Guile-commits] 02/14: Add flag bits to the jit_reloc_kind enum, Andy Wingo, 2020/06/12
- [Guile-commits] 05/14: Use an rsh of 0 for jumps on ARM, Andy Wingo, 2020/06/12
- [Guile-commits] 06/14: Return a function pointer from jit_address, Andy Wingo, 2020/06/12
- [Guile-commits] 08/14: Use bx instead of mov for jumps on ARM, Andy Wingo, 2020/06/12
- [Guile-commits] 09/14: Remove T2_BLXI, Andy Wingo, 2020/06/12
- [Guile-commits] 03/14: Add separate functions for veneer patching,
Andy Wingo <=
- [Guile-commits] 04/14: Add a test for local forward and backward jumps, Andy Wingo, 2020/06/12
- [Guile-commits] 07/14: Stop setting the thumb bit except on jumps to veneers, Andy Wingo, 2020/06/12
- [Guile-commits] 12/14: Add CI jobs for ARM in both instruction sets, Andy Wingo, 2020/06/12
- [Guile-commits] 11/14: Convert BLI to BLXI for jumps to ARM code, Andy Wingo, 2020/06/12
- [Guile-commits] 14/14: Update lightening, Andy Wingo, 2020/06/12
- [Guile-commits] 10/14: Always emit veneers for non-bl jumps to ARM code, Andy Wingo, 2020/06/12
- [Guile-commits] 13/14: Merge branch 'arm-fix' into 'master', Andy Wingo, 2020/06/12