mordorwww 发表于 2016-08-15 17:26

arm的内核栈地址保存在哪里?

arm的内核栈地址保存在哪里?
是不是也象x86那样有个类似tss的东东保存内核栈地址

amarant 发表于 2016-08-16 09:19

这种问题看看 entry.S 就可以自己得出答案了
值得注意的是, arm64 架构可以配置为不同的 EL 使用各自的栈。
所以 kernel 完全可以不保存栈,切入内核直接使用内核的 sp_el1,切入用户使用 sp_el0.

chengxta 发表于 2016-08-16 11:10

arm使用sp保存堆栈指针,arm64支持4种异常模式el0~el3,el0对应用户模式,el1对应内核模式,每个异常模式可以有自己的sp: sp_el0~sp_el3;
也可以设置PSTATE.SP位,所有异常模式统一使用sp_el0;

补充个__switch_data代码,启动过程sp指向init_task栈地址:
__switch_data:
    .quad   __mmap_switched
    .quad   __bss_start         // x6
    .quad   __bss_stop          // x7
    ... ...
    .quad   init_thread_union + THREAD_START_SP // sp

__mmap_switched:
    // clear bss
    ldr x16,
    mov sp, x16
    ... ...
    b   start_kernel
页: [1]
查看完整版本: arm的内核栈地址保存在哪里?