CodeSourcery G++编译器的BUG

在使用CodeSourcery的arm编译器进行DM6467内核开发时,遇到一个莫名其妙的空指针问题,出问题的代码是这样的:

CodeSourcery G++编译器的BUG_第1张图片

在这里连续两个printk中都输出了pdev->resouce的值,但是这两个printk里面的输出值是不一样的,第一个输出可以得到正常的指针值,但是第二个printk则会输出null空指针!

用仿真器连过去看了一下反汇编的结果:

CodeSourcery G++编译器的BUG_第2张图片

连续两个prink产生的代码差异居然如此之大,而且在第一个printk之前居然还多了个memcpy的调用!!

显然在这里编译器产生了一个莫名其妙的错误!果断放弃这个编译器。

此编译器版本为:

Using built-in specs.

Target: arm-none-linux-gnueabi

Configured with:/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/src/gcc-4.3/configure--build=i686-pc-linux-gnu --host=i686-pc-linux-gnu--target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap--disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld--with-specs='%{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables}'--enable-languages=c,c++ --enable-shared --enable-symvers=gnu--enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2009q1-203'--with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls--prefix=/opt/codesourcery--with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc--with-build-sysroot=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/libc--with-gmp=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/obj/host-libs-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr--with-mpfr=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/obj/host-libs-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr--disable-libgomp --enable-poison-system-directories--with-build-time-tools=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/bin--with-build-time-tools=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/bin

Thread model: posix

gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203)





你可能感兴趣的:(DM6467,GCC)