Skip to content

Commit 564ddb8

Browse files
committed
adaded additional transform macros for pairing registers to variables and load-effective-address primitives
1 parent 92ffcf8 commit 564ddb8

2 files changed

Lines changed: 49 additions & 1 deletion

File tree

modules/include/shiva_module.h

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,67 @@
3333
#define SHIVA_T_PAIR_W6(var) register int64_t var asm("w6");
3434
#define SHIVA_T_PAIR_W7(var) register int64_t var asm("w7");
3535

36+
37+
/*
38+
* XXX
39+
* The following macros use register x9. This means you can't use
40+
* more than one macro at a time without clobbering x9.
41+
*
42+
* In the future: Allow the developer to select the register as it
43+
* greatly depends on the function being transformed.
44+
*/
3645
#define SHIVA_T_PAIR_BP_16(var) asm volatile ("ldr x9, [x29, #16]"); \
3746
register int64_t var asm("x9");
47+
#define SHIVA_T_PAIR_BP_24(var) asm volatile ("ldr x9, [x29, #24]"); \
48+
register int64_t var asm("x9");
3849
#define SHIVA_T_PAIR_BP_32(var) asm volatile ("ldr x9, [x29, #32]"); \
3950
register int64_t var asm("x9");
51+
#define SHIVA_T_PAIR_BP_40(var) asm volatile ("ldr x9, [x29, #40]"); \
52+
register int64_t var asm("x9");
4053
#define SHIVA_T_PAIR_BP_48(var) asm volatile ("ldr x9, [x29, #48]"); \
4154
register int64_t var asm("x9");
55+
#define SHIVA_T_PAIR_BP_56(var) asm volatile ("ldr x9, [x29, #56]"); \
56+
register int64_t var asm("x9");
4257
#define SHIVA_T_PAIR_BP_64(var) asm volatile ("ldr x9, [x29, #64]"); \
4358
register int64_t var asm("x9");
59+
#define SHIVA_T_PAIR_BP_72(var) asm volatile ("ldr x9, [x29, #64"); \
60+
register int64_t var asm("x9");
4461
#define SHIVA_T_PAIR_BP_80(var) asm volatile ("ldr x9, [x29, #80]"); \
4562
register int64_t var asm("x9");
63+
#define SHIVA_T_PAIR_BP_88(var) asm volatile ("ldr x9, [x29, #88]"); \
64+
register int64_t var asm("x9");
4665
#define SHIVA_T_PAIR_BP_96(var) asm volatile ("ldr x9, [x29, #96]"); \
4766
register int64_t var asm("x9");
4867

68+
69+
#define SHIVA_T_LEA_BP_16(var) asm volatile ("mov x9, x29\n" \
70+
"add x9, x9, #16"); \
71+
register int64_t var asm("x9");
72+
73+
#define SHIVA_T_LEA_BP_24(var) asm volatile ("mov x9, x29\n" \
74+
"add x9, x9, #24"); \
75+
register int64_t var asm("x9");
76+
77+
#define SHIVA_T_LEA_BP_32(var) asm volatile ("mov x9, x29\n" \
78+
"add x9, x9, #32"); \
79+
register int64_t var asm("x9");
80+
81+
#define SHIVA_T_LEA_BP_40(var) asm volatile ("mov x9, x29\n" \
82+
"add x9, x9, #40"); \
83+
register int64_t var asm("x9");
84+
85+
#define SHIVA_T_LEA_BP_48(var) asm volatile ("mov x9, x29\n" \
86+
"add x9, x9, #48"); \
87+
register int64_t var asm("x9");
88+
89+
#define SHIVA_T_LEA_BP_56(var) asm volatile ("mov x9, x29\n" \
90+
"add x9, x9, #54"); \
91+
register int64_t var asm("x9");
92+
93+
#define SHIVA_T_LEA_BP_96(var) asm volatile ("mov x9, x29\n" \
94+
"add x9, x9, #96"); \
95+
register int64_t var asm("x9");
96+
4997
#define SHIVA_HELPER_CALL_EXTERNAL_ID "__shiva_helper_orig_func_"
5098

5199
#define SHIVA_HELPER_CALL_EXTERNAL(name) \

shiva.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ shiva_interp_mode(struct shiva_ctx *ctx)
236236
*/
237237
o_stack_end = ELF_PAGEALIGN(o_stack_addr, 0x1000);
238238
copy_len = o_stack_end - o_stack_addr;
239-
239+
240240
shiva_debug("o_stack_addr: %#lx o_stack_end: %#lx\n", o_stack_addr, o_stack_end);
241241
/*
242242
* shiva_ulexec_allocstack() returns a pointer that points to the very

0 commit comments

Comments
 (0)