我正在调用来自C的ARM汇编函数。我希望它在第一个bx lr
之后返回到C程序,而不是继续向下。
.global init_secure_monitor
init_secure_monitor:
bx lr
ldr r0, =msg
bl puts
mov pc, lr
/* code */
ldr r0, =msg
bl puts
@File ends
我可以看到2个msgs正在打印。但是没有人应该打印出来。我已使用这两种方法返回bx lr
和mov pc, lr
。
我做错了什么?
以下是C代码,我正在调用ARM。
// end secure memory | @ -------------------------
| movs pc, lr
printf("_reloc_begin: 0x%x\n", &_reloc_begin); |
printf("_reloc_end : 0x%x\n", &_reloc_end); |/*
| * Monitor Initialization
init_secure_monitor(norm_begin); | *
//init_secure_monitor(boot_linux_kernel_entry); | * This is called the first time the Secure world wishes to
//init_secure_monitor(normal_world_func); | * transit to the Normal world.
printf("You should not come to here!\n");