我刚开始进入OS开发,用qemu模拟raspi2(cortex a7)。 现在我被卡住了,因为当cpu处于用户模式时我无法使用局部变量。
这是我的主程序的样子
#include <stdint.h>
uint32_t function_with_locals() {
uint32_t l1 = 5;
uint32_t l2 = 3;
return l1 - l2;
}
void kmain() {
__asm("cps 0b10000"); // cpu in user mode
uint64_t res = function_with_locals();
}
如果我在function_with_locals
中设置断点,这是来自gdb的帧信息
(gdb) i frame
Stack level 0, frame at 0x0:
pc = 0x9d4c in function_with_locals (kmain.c:10); saved pc = 0x9d84
called by frame at 0x10
source language c.
Arglist at 0xfffffff8, args:
Locals at 0xfffffff8, Previous frame's sp is 0x0
基本上我不能使用任何本地,因为当cpu处于用户模式时,它们存储在我在链接描述文件中定义的RAM之外。
但是,如果我将其更改为SVC模式l1
并且l2
完全在RAM内。
关于可能导致这种情况的任何指示?
由于