Skip to content

Commit 1d255ce

Browse files
authored
refactor: Improve debug experience with CFI directives and proper label naming in Thumb invokeNative (#4719)
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 These improvements enhance debugging capabilities and code maintainability while preserving functionality. Signed-off-by: Huang Qi <[email protected]>
1 parent 53ffe45 commit 1d255ce

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

core/iwasm/common/arch/invokeNative_thumb.s

Lines changed: 20 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,40 @@ _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 */
3036

3137
cmp r5, #1 /* at least one argument required: exec_env */
32-
blt return
38+
blt .Lreturn
3339

3440
mov r6, #0 /* increased stack size */
3541

3642
ldr r0, [r4] /* r0 = argv[0] = exec_env */
3743
add r4, r4, #4 /* r4 += 4 */
3844
cmp r5, #1
39-
beq call_func
45+
beq .Lcall_func
4046

4147
ldr r1, [r4] /* r1 = argv[1] */
4248
add r4, r4, #4
4349
cmp r5, #2
44-
beq call_func
50+
beq .Lcall_func
4551

4652
ldr r2, [r4] /* r2 = argv[2] */
4753
add r4, r4, #4
4854
cmp r5, #3
49-
beq call_func
55+
beq .Lcall_func
5056

5157
ldr r3, [r4] /* r3 = argv[3] */
5258
add r4, r4, #4
5359
cmp r5, #4
54-
beq call_func
60+
beq .Lcall_func
5561

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

@@ -66,29 +72,31 @@ _invokeNative:
6672
mov sp, r7
6773

6874
mov lr, r2 /* save r2 */
69-
loop_args: /* copy left arguments to stack */
75+
76+
.Lloop_args: /* copy left arguments to stack */
7077
cmp r5, #0
71-
beq call_func1
78+
beq .Lcall_func1
7279
ldr r2, [r4]
7380
add r4, r4, #4
7481
str r2, [r7]
7582
add r7, r7, #4
7683
sub r5, r5, #1
77-
b loop_args
84+
b .Lloop_args
7885

79-
call_func1:
86+
.Lcall_func1:
8087
mov r2, lr /* restore r2 */
8188

82-
call_func:
89+
.Lcall_func:
8390
blx ip
8491
add sp, sp, r6 /* restore sp */
8592

86-
return:
93+
.Lreturn:
8794
add sp, sp, #4 /* make sp 8 byte aligned */
8895
pop {r3}
8996
pop {r4, r5, r6, r7}
9097
mov lr, r3
9198
bx lr
99+
.cfi_endproc
92100
#if defined(__linux__) && defined(__ELF__)
93101
.section .note.GNU-stack,"",%progbits
94102
#endif

0 commit comments

Comments
 (0)