MIPS binutils-2.17和gcc-3.3.6一起正常编译的方法
前面写过了binutils-2.17可以和gcc-3.4.6一起正常编译,不过既然我已经为了让binutils-2.17和gcc-3.3.6费了不少劲,干脆也介绍一下。
不能一起编译的原因主要是binutils-2.17中mips部分将DIFF_EXPR_OK以及相关的东西都给去掉了,这样一个section中的符号被另一个section引用会产生问题,最终在binutils-2.17/gas/expr.c 1877行出错。而 gcc-3.3.6中的libgcc2.c恰巧会产生一个section中的符号被另一个section引用的MIPS代码。而binutils-2.15能根其一起编译的原因很简单,DIFF_EXPR_OK以及相关的代码都在。
具体解决方式为:
binutils-2.17 /gas/config/tc-mips.h
在165行加入
#define UNDEFINED_DIFFERENCE_OK
binutils-2.17/gas/expr.c
1873行
#ifdef DIFF_EXPR_OK
换为
#if ((defined DIFF_EXPR_OK) || (defined TC_MIPS))
这样再编译就可以让gcc-3.3.6正常编译了。
当然具体有啥后果我就不好说了,呵呵。
不能一起编译的原因主要是binutils-2.17中mips部分将DIFF_EXPR_OK以及相关的东西都给去掉了,这样一个section中的符号被另一个section引用会产生问题,最终在binutils-2.17/gas/expr.c 1877行出错。而 gcc-3.3.6中的libgcc2.c恰巧会产生一个section中的符号被另一个section引用的MIPS代码。而binutils-2.15能根其一起编译的原因很简单,DIFF_EXPR_OK以及相关的代码都在。
具体解决方式为:
binutils-2.17 /gas/config/tc-mips.h
在165行加入
#define UNDEFINED_DIFFERENCE_OK
binutils-2.17/gas/expr.c
1873行
#ifdef DIFF_EXPR_OK
换为
#if ((defined DIFF_EXPR_OK) || (defined TC_MIPS))
这样再编译就可以让gcc-3.3.6正常编译了。
当然具体有啥后果我就不好说了,呵呵。


0 Comments:
发表评论
<< Home