星期二, 十一月 28, 2006

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竟然能跟gcc-3.4.6一起用

前几天还提过binutils 2.17跟gcc-3.3.6不能一起编译的问题,俺明明记得俺后来用gcc-3.4.6也测试过有同样的问题,然后就换成了binutils-2.15没再弄。

今天俺突然来了兴致,决定解决一下这个问题顺便发到maillist上。找到了出问题的原因(发完这个日志一会单独写个日志介绍), 胡乱改了一下发现binutils-2.17能和gcc-3.3.6一起编译了,于是准备发帖子到MAILLIST。为了表示测试的充分,俺特地弄出
gcc-3.4.6一起编译看看,竟然发现我没改过的binutils也能跟gcc-3.4.6一起编译,早知道这样我折腾啥呢?晕!

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竟然能跟gcc-3.4.6一起用

前几天还提过binutils 2.17跟gcc-3.3.6不能一起编译的问题,俺明明记得俺后来用gcc-3.4.6也测试过有同样的问题,然后就换成了binutils-2.15没再弄。
今天俺突然来了兴致,决定解决一下这个问题顺便发到maillist上。找到了出问题的原因(发完这个日志一会单独写个日志介绍), 胡乱改了一下发现binutils-2.17能和gcc-3.3.6一起编译了,于是准备发帖子到MAILLIST。为了表示测试的充分,俺特地弄出
gcc-3.4.6一起编译看看,竟然发现我没改过的binutils也能跟gcc-3.4.6一起编译,早知道这样我折腾啥呢?晕!

星期四, 十一月 23, 2006

GAS可以输出JAVA CLASS了(JNL)

其实昨天就可以输出了,不过在加了一个\n之后有点小BUG,今天修正了这个BUG,现在都正常了。前几天在SF申请了项目,回头项目通过就发布在哪里。
JNL今年的计划基本是作完了,恭喜自己一下。:)

星期二, 十一月 14, 2006

BINUTILS 2.17带来的麻烦

想完整的编一套MIPS的东西放在QEMU上玩玩,先编译的BINUTILS 2.17,没问题,在编译GCC报错:
/home/zh/qemu/gccbuild/gcc/xgcc -B/home/zh/qemu/gccbuild/gcc/ -B/home/zh/mipseb-linux/bin/ -B/home/zh/mipseb-linux/lib/ -isystem /home/zh/mipseb-linux/include -O2  -DIN_GCC -DCROSS_COMPILE   -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -isystem ./include  -fPIC -g  -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -Dinhibit_libc -I. -I. -I../../gcc- 3.3.6/gcc -I../../gcc-3.3.6/gcc/. -I../../gcc-3.3.6/gcc/config -I../../gcc-3.3.6/gcc/../include  -DL_divdi3 -c ../../gcc-3.3.6/gcc/libgcc2.c -fexceptions -fnon-call-exceptions -o libgcc/./_divdi3.o
/tmp/ccqez6rl.s: Assembler messages:
/tmp/ccqez6rl.s:956: Error: operation combines symbols in different segments
make[2]: *** [libgcc/./_divdi3.o] Error 1
弄了一个2.15发现没有问题,网上一搜发现这个问题已经在04年有人提出了解决的PATCH, http://sources.redhat.com/ml/binutils/2004-05/msg00112.html
但是从CVS弄下来的当前版本这个问题还是没有得到解决,搜了一下MAILLIST发现也有几个人问同样的问题。不知道maintainer在TNND干什么呢。
只是一个符号相关的小问题,我懒得弄了,换2.15了事。