Skip to content

Commit fffed44

Browse files
committed
refactor: Improve debug experience with CFI directives and proper label naming in Thumb invokeNative
This change enhances debugging support and improves assembly code quality: 1. Add CFI (Call Frame Information) directives (.cfi_startproc, .cfi_def_cfa_offset, .cfi_offset, .cfi_endproc) to provide proper call frame information for debuggers 2. Improve label naming by using dot-prefixed conventions (.Lreturn, .Lcall_func, etc.) following assembly best practices 3. Minor optimization by moving stack pointer save earlier in the function These improvements enhance debugging capabilities and code maintainability while preserving functionality.
1 parent f6ce52f commit fffed44

1 file changed

Lines changed: 22 additions & 12 deletions

File tree

core/iwasm/common/arch/invokeNative_thumb.s

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ invokeNative:
1212
.globl _invokeNative
1313
_invokeNative:
1414
#endif /* end of BH_PLATFORM_DARWIN */
15-
15+
.cfi_startproc
1616
/*
1717
* Arguments passed in:
1818
*
@@ -24,34 +24,42 @@ _invokeNative:
2424
push {r4, r5, r6, r7}
2525
push {lr}
2626
sub sp, sp, #4 /* make sp 8 byte aligned */
27+
.cfi_def_cfa_offset 24
28+
.cfi_offset lr, -20
29+
.cfi_offset r4, -16
30+
.cfi_offset r5, -12
31+
.cfi_offset r6, -8
32+
.cfi_offset r7, -4
2733
mov ip, r0 /* ip = function ptr */
2834
mov r4, r1 /* r4 = argv */
2935
mov r5, r2 /* r5 = argc */
36+
mov r7, sp
37+
.cfi_def_cfa r7, 24
3038

3139
cmp r5, #1 /* at least one argument required: exec_env */
32-
blt return
40+
blt .Lreturn
3341

3442
mov r6, #0 /* increased stack size */
3543

3644
ldr r0, [r4] /* r0 = argv[0] = exec_env */
3745
add r4, r4, #4 /* r4 += 4 */
3846
cmp r5, #1
39-
beq call_func
47+
beq .Lcall_func
4048

4149
ldr r1, [r4] /* r1 = argv[1] */
4250
add r4, r4, #4
4351
cmp r5, #2
44-
beq call_func
52+
beq .Lcall_func
4553

4654
ldr r2, [r4] /* r2 = argv[2] */
4755
add r4, r4, #4
4856
cmp r5, #3
49-
beq call_func
57+
beq .Lcall_func
5058

5159
ldr r3, [r4] /* r3 = argv[3] */
5260
add r4, r4, #4
5361
cmp r5, #4
54-
beq call_func
62+
beq .Lcall_func
5563

5664
sub r5, r5, #4 /* argc -= 4, now we have r0 ~ r3 */
5765

@@ -66,29 +74,31 @@ _invokeNative:
6674
mov sp, r7
6775

6876
mov lr, r2 /* save r2 */
69-
loop_args: /* copy left arguments to stack */
77+
78+
.Lloop_args: /* copy left arguments to stack */
7079
cmp r5, #0
71-
beq call_func1
80+
beq .Lcall_func1
7281
ldr r2, [r4]
7382
add r4, r4, #4
7483
str r2, [r7]
7584
add r7, r7, #4
7685
sub r5, r5, #1
77-
b loop_args
86+
b .Lloop_args
7887

79-
call_func1:
88+
.Lcall_func1:
8089
mov r2, lr /* restore r2 */
8190

82-
call_func:
91+
.Lcall_func:
8392
blx ip
8493
add sp, sp, r6 /* restore sp */
8594

86-
return:
95+
.Lreturn:
8796
add sp, sp, #4 /* make sp 8 byte aligned */
8897
pop {r3}
8998
pop {r4, r5, r6, r7}
9099
mov lr, r3
91100
bx lr
101+
.cfi_endproc
92102
#if defined(__linux__) && defined(__ELF__)
93103
.section .note.GNU-stack,"",%progbits
94104
#endif

0 commit comments

Comments
 (0)