免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2577 | 回复: 3
打印 上一主题 下一主题

linux2.6内核中cpu_init堆栈初始化疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-27 16:36 |只看该作者 |倒序浏览
struct stack {
        u32 irq[3];
        u32 abt[3];
        u32 und[3];
} ____cacheline_aligned;
static struct stack stacks[NR_CPUS];
.........
unsigned int cpu = smp_processor_id();
struct stack *stk = &stacks[cpu];
        __asm__ (
        "msr        cpsr_c, %1\n\t"
        "add        sp, %0, %2\n\t"
        "msr        cpsr_c, %3\n\t"
        "add        sp, %0, %4\n\t"
        "msr        cpsr_c, %5\n\t"
        "add        sp, %0, %6\n\t"
        "msr        cpsr_c, %7"
            :
            : "r" (stk),
              "I" (PSR_F_BIT | PSR_I_BIT | IRQ_MODE),
              "I" (offsetof(struct stack, irq[0])),
              "I" (PSR_F_BIT | PSR_I_BIT | ABT_MODE),
              "I" (offsetof(struct stack, abt[0])),
              "I" (PSR_F_BIT | PSR_I_BIT | UND_MODE),
              "I" (offsetof(struct stack, und[0])),
              "I" (PSR_F_BIT | PSR_I_BIT | SVC_MODE)
            : "r14");

        u32 irq[3];
        u32 abt[3];
        u32 und[3];

这里好像是把&stacks->irq[0]\&stacks->abt[0]\&stacks->und[0]\赋给了sp。。怎么把结构体的成员地址赋给了堆栈指针?
让sp指向了结构体的成员。。。。。
这是什么意思。。。。。
求解。。。。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
2 [报告]
发表于 2011-12-27 17:32 |只看该作者
为不同模式设置栈,stack这个结构体把几种模式的栈都包含里去了。

        +----------+ <------  irq[0]
        |    12    |            
        |   bytes  |            
        +----------+ <------  abt[0]
        |          |      
        |          |      
        +----------+ <------  und[0]
        |          |      
        |          |      
        +----------+      

论坛徽章:
0
3 [报告]
发表于 2011-12-27 17:51 |只看该作者
你的意思是几个模式下的堆栈 都在stack这个结构体里面吗,,,
那堆栈多小啊 才12bytes  够用吗

论坛徽章:
0
4 [报告]
发表于 2013-05-10 16:26 |只看该作者
回复 3# wukui1008
最近正好看到这部分代码,这些异常模式的栈似乎确实只有12个byte,从entry-armv.S中可以看到,从中断进来后,只压入了3个寄存器的值,随后就跳到SVC模式了。
vector_\name:
...
         stmia   sp, {r0, lr}            @ save r0, lr
         mrs     lr, spsr
         str     lr, [sp, #8]            @ save spsr
...
         movs pc, lr -> 跳到SVC模式
...
.endm

http://blog.csdn.net/boarmy/article/details/8652768

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP