Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15529932
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: LINUX

2010-11-30 16:58:12

android编译kernel时toolchain出现的bug问题page-writeback.c

arm-eabi-gcc -Wp,-MD,mm/.page-writeback.o.d  -nostdinc -isystem /vobs/works/froyo/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/include -Iinclude  -I/vobs/works/froyo/kernel/arch/arm/include -include include/linux/autoconf.h -D__KERNEL__ -mlittle-endian -Iarch/arm/mach-sc8800g/include -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -marm -mabi=aapcs-linux -mno-thumb-interwork -funwind-tables -D__LINUX_ARM_ARCH__=5 -march=armv5te -mtune=arm9tdmi -msoft-float -Uarm -Wframe-larger-than=1024 -fno-stack-protector -fomit-frame-pointer -g -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-dwarf2-cfi-asm -fconserve-stack   -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(page_writeback)"  -D"KBUILD_MODNAME=KBUILD_STR(page_writeback)"  -c -o mm/.tmp_page-writeback.o mm/page-writeback.c

出现如下错误
CC      mm/page-writeback.o
mm/page-writeback.c: In function 'write_cache_pages':
mm/page-writeback.c:820: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See < for instructions.
make[1]: *** [mm/page-writeback.o] Error 1
make: *** [mm] Error 2

---------------------------------------------------------
后来将mm/page-writeback.c文件的第918行注释掉即可,正常编译通过
// BUG_ON(PageWriteback(page));
后来预编译该文件,发现BUG_ON(PageWriteback(page));等效于
   do { if (__builtin_expect(!!(PageWriteback(page)), 0)) __bug("mm/page-writeback.c", 918); } while(0);
或者在kernel hacking的Kernel debugging关闭时
   do { if (__builtin_expect(!!(PageWriteback(page)), 0)) do { *(int *)0 = 0; } while (1); } while(0);
故使用如下方式等效,仍然出现如上编译错误
// BUG_ON(PageWriteback(page));
if (__builtin_expect(!!(PageWriteback(page)), 0)) {
    printk(KERN_CRIT"kernel BUG at %s:%d!\n", __FILE__, __LINE__);
    *(int *)0 = 0;

    /* Avoid "noreturn function does return" */
    for (;;);
}
最后发现将for (;;);去掉之后即可编译通过,但是这样就破坏了代码原来的逻辑,所以可以使用如下方式替换:
// BUG_ON(PageWriteback(page));
/*
 * To avoid the android 2.2 arm-eabi-gcc 4.40 toolchain's bug,
 * so you can compile the kernel properly [luther.gliethttp]
 */
if (__builtin_expect(!!(PageWriteback(page)), 0)) {
    printk(KERN_CRIT"kernel BUG at %s:%d!\n", __FILE__, __LINE__);
    *(int *)0 = 0;

    /* Avoid "noreturn function does return" */
    // for (;;);
    asm volatile ("b .");
}

---------------------------------------------------------
发现kernel使用android的prebuilt/linux-x86/toolchain/arm-eabi-4.4.0下的arm-eabi-gcc不能编译通过,该现象在去年8月15号就已经存在,今天很多人都出现了该问题!

锁定到Thu Jan 21 14:24:36 2010 -0800日期之后的toolchain开始就不能编译我们的kernel,具体信息如下:

在该4b06260a916be762d0dd1b93e97306f1b90e3889 哈希之前的toolchain-->arm-eabi-gcc可以正常编译,从Mon Jan 25 09:53:00 2010 -0800的406fda666bb7c8dd4de3294c3827a27c8fd4119c版本开始就不能正常使用arm-eabi-gcc编译kernel了,大家可以尝试一下:
尝试步骤如下:

1. 进入kernel执行如下命令
git clean -xdf
2. 导出arm-eabi-工具链所处系统路径
export PATH=/home/luther.gliethttp/froyo/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin:$PATH
3. 编译
make -j4或make -j4 V=1


目录froyo/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0


commit 406fda666bb7c8dd4de3294c3827a27c8fd4119c
Author: Ying Wang
Date:   Mon Jan 25 09:53:00 2010 -0800

    Check in historical sdk versions.
    
    .jar and .aidl files are copied from released sdks.

commit 4b06260a916be762d0dd1b93e97306f1b90e3889
Merge: 9e332ec e48ddfc
Author: Kenny Root
Date:   Thu Jan 21 14:24:36 2010 -0800

    Merge "Updated flex-2.5.4a binary, now works on 10.5 and 10.6."

commit d49c952991fc41108ca48ce44f7c51e873aacd45
Author: Jing Yu
Date:   Mon Jan 18 12:38:37 2010 -0800

    Check in a new prebuilt toolchain.
   
    GCC synced to @37473-p2. Android-toolchain synced to 153083-p9.
 
阅读(4691) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-12-01 15:05:03

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com