1

我已将 u-boot 移植到我的 android4.2 源并使用 android 工具链,它的 gcc 版本为 4.6.x-google 20120106。

我的构建环境:Ubuntu 10.04,主机 gcc 版本 4.4.3。

我的平台是arm-v7,cotex-a5。

问题是有时u-boot会遇到如下编译错误(我用multijob构建android):

target thumb C++: libGLES_trace <= frameworks/native/opengl/libs/GLES_trace/src/gltrace_context.cpp

    CC  ispi.c

target thumb C++: libGLES_trace <= frameworks/native/opengl/libs/GLES_trace/src/gltrace_egl.cpp

    CC  spl.c

target thumb C++: libGLES_trace <= frameworks/native/opengl/libs/GLES_trace/src/gltrace_eglapi.cpp

    MAKE    arch/arm/lib/
    CC  timer.c
cc1: error: unrecognized command line option '-mshort-load-bytes'

make[2]: *** [/home/jenkins/workspace/droid-4.2.2_r1/out/target/product/aere/obj/u-boot/arch/arm/cpu/armv7/rda/timer.o] Error 1

make[1]: *** [/home/jenkins/workspace/droid-4.2.2_r1/out/target/product/aere/obj/u-boot/arch/arm/cpu/armv7/rda/librda.o] Error 2

make[1]: Leaving directory `/home/jenkins/workspace/rdadroid-4.2.2_r1/u-boot'
make: *** [out/target/product/aere/obj/u-boot/u-boot.img] Error 2

make: *** Waiting for unfinished jobs....

但是如果我再次构建它,编译错误就会消失。</p>

我知道3.5之后的GCC不支持该-mshort-load-bytes选项,但是我的gcc-version是4.6,我检查了include/generated/cc_options.mk,如果构建失败,内容是:

CC_OPTIONS += -marm
CC_OPTIONS += -mno-thumb-interwork
CC_OPTIONS += -mabi=apcs-gnu
CC_OPTIONS += -mabi=aapcs-linux
CC_OPTIONS += -march=armv7-a
CC_OPTIONS += -fno-stack-protector
CC_OPTIONS += -Wno-format-nonliteral
CC_OPTIONS += -Wno-format-security
CC_OPTIONS += -fstack-usage
CC_OPTIONS += -fno-toplevel-reorder
CC_OPTIONS += -mshort-load-bytes

如果成功,则没有CC_OPTIONS += -mshort-load-bytes.

那么,任何人都可以告诉我如何调试这个问题?谢谢你!

4

1 回答 1

0

-mshort-load-bytes是一个旧选项,在 GCC 3 中已被-malignment-traps. 它只对 ARMv4 之前的旧版本 ARM 架构很重要。它告诉 GCC 通过从未short对齐的位置加载字(4 字节)值来不加载(2 字节)值,因为这会导致对齐陷阱。

参考资料:gcc 3.0.2gcc 2.95.3文档。

于 2015-04-10T18:30:22.647 回答