Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2584680
  • 博文数量: 351
  • 博客积分: 76
  • 博客等级: 上将
  • 技术积分: 3555
  • 用 户 组: 普通用户
  • 注册时间: 2004-11-13 21:27
文章分类

全部博文(351)

文章存档

2013年(1)

2012年(4)

2011年(7)

2010年(16)

2009年(34)

2008年(34)

2007年(34)

2006年(68)

2005年(82)

2004年(71)

分类: LINUX

2009-07-22 12:19:06

Linux X86默认是只有8k的kernel stack.当stack用完的时候,从core trace上是很难判断问题所在的。
可以用下面的代码计算stack还剩下多少。

    {
        long esp;
 
        __asm__ __volatile__("andl %%esp,%0" :
                    "=r" (esp) : "0" (THREAD_SIZE - 1));
        if (unlikely(esp < (sizeof(struct thread_info) + STACK_WARN))) {
            printk("stack overflow: %ld\n",
                esp - sizeof(struct thread_info));
            dump_stack();
        }
    }

这段代码是选择CONFIG_DEBUG_STACKOVERFLOW 时,
do_IRP()中的一段代码。
阅读(3594) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

flyboy2009-07-22 15:08:01

另一个非常有用的函数 static void show_stack_left(void) { long esp; __asm__ __volatile__("andl %%esp,%0" : "=r" (esp) : "0" (THREAD_SIZE - 1)); printk("stack left: %ld\n", esp - sizeof(struct thread_info)); }