GCC 4.4.3下编译SimpleScalar 3.2(一)

2014-11-24 09:22:26 · 作者: · 浏览: 0

1.安装环境
GCC-4.4.3


2.软件下载
首先到http://www.simplescalar.com/tools.html上下载以下三个tar包。
simplesim-3v0d.tgz
simpletools-2v0.tgz
simpleutils-2v0.tgz
整个安装过程只需这个三个软件包即可。


3.安装过程


3.1 解压缩


假设把这三个软件包放在目录/root下。我们新建一个simplescalar目录,并将这三个包复制放入。然后解压缩,再将三个压缩包删除。命令如下,假设当前在/root下。


mkdir simplescalar


cp *.tgz simplescalar/


cd simplescalar/


tar –zxvf simplesim-3v0d.tgz


tar –zxvf simpletools-2v0.tgz


tar –zxvf simpleutils-2v0.tgz


rm –f *.tgz


3.2 设置环境变量


需设置三个环境变量,以方便后面的安装,不设置也行。


export TARGET=sslittle-na-sstrix ;设置为小字端机器


export IDIR=/root/simplescalar ;将结果安装到/root/simplescalar


3.3 编译binutils2.5.2


进入binutils2.5.2并配置一下,然后编译,安装。在这里将遇到许多问题,后面将会


一一举出。命令如下:


cd binutils-2.5.2


./configure -host=$HOST -target=$TARGET -with-gnu-as -with-gnu-ld -prefix=$IDIR


make


首先会碰到第一个编译错误:


gcc -c -g -I. -I./../include strerror.c


strerror.c:467: 错误: 对‘sys_nerr’的静态声明出现在非静态声明之后


/usr/include/bits/sys_errlist.h:27: 错误: ‘sys_nerr’的上一个声明在此


strerror.c:468: 错误: 与‘sys_errlist’类型冲突


/usr/include/bits/sys_errlist.h:28: 错误: ‘sys_errlist’的上一个声明在此


make[1]: *** [strerror.o] 错误 1


make[1]:正在离开目录 `/root/simplescalar/binutils-2.5.2/libiberty'


make: *** [all-libiberty] 错误 2


解决:进入/root/simplescalar/binutils-2.5.2/libiberty 打开strerror.c,在第25行加入#undef NEED_sys_errlist


第二个错误:


bison -y -d ./ldgram.y


make[1]: bison:命令未找到


make[1]: *** [ldgram.c] 错误 127


make[1]:正在离开目录 `/root/simplescalar/binutils-2.5.2/ld'


make: *** [all-ld] 错误 2


这是由于没有安装bison的缘故,执行apt-get install flex bison安装bison


第三个错误:


./ldlex.l: 在函数‘yy_input’中:


./ldlex.l:477: 错误: ‘yy_current_buffer’未声明(在此函数内第一次使用)


./ldlex.l:477: 错误: (即使在一个函数内多次出现,每个未声明的标识符在其


./ldlex.l:477: 错误: 所在的函数内也只报告一次。)


make[1]: *** [ldlex.o] 错误 1


make[1]:正在离开目录 `/root/simplescalar/binutils-2.5.2/ld'


make: *** [all-ld] 错误 2


解决:进入/root/simplescalar/binutils-2.5.2/ld,打开ldlex.l 定位到476行,将小写的yy_current_buffer改为大写的YY_CURRENT_BUFFER。


第四个错误:


/usr/lib/gcc/i486-linux-gnu/4.3.3/include/varargs.h:4:2: 错误: #error "GCC no longer implements ."


/usr/lib/gcc/i486-linux-gnu/4.3.3/include/varargs.h:5:2: 错误: #error "Revise your code to use ."


解决:进入/root/simplescalar/binutils-2.5.2/ld,打开ldmisc.c,定位到24行,将#include改为#include


第五个错误:


ldmisc.c: 在函数‘info_msg’中:


ldmisc.c:344: 错误: expected declaration specifiers before ‘va_dcl’


ldmisc.c:348:15: 错误: 宏“va_start”需要 2 个参数,但只给出了 1 个


ldmisc.c:357: 错误: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘va_dcl’


解决:


这是因为在stdarg.h里已经不再支持 va_dcl,所以编译无法通过。


修改如下:


《《屏蔽掉函数内部分~~》》eg:


343 void info_msg(const char* fmt, va_list ap)


344 //va_dcl


345 {


346 /* char *fmt;


347 va_list arg;


348 va_start(arg);


349 fmt = va_arg(arg, char *);


350 vfinfo(stdout, fmt, arg);


351 va_end(arg);


352 */


353 }


终于没错了,make install一下。发现simplescalar下多了一个bin文件夹


3.4 编译simplescalar


这个步骤比较简单,编译过程中没有错误。


cd simplesim-3.0


make config-pisa ;使它支持PISA,不然最后无法使用


make


3.5 编译gcc-2.6.3


这个步骤可能会碰到较多问题。


cd gcc-2.6.3


./configure -hose=$HOST -target=$TARGET -with-gnu-as -with-gnu-ld -prefix=$IDIR


make


第一个问题:


cccp.c:194: 错误: 与‘sys_errlist’类型冲突


/usr/include/bits/sys_errlist.h:28: 错误: ‘sys_errlist’的上一个声明在此


解决:进入/root/simplescalar/gcc-2.6.3,打开cccp.c,定位到191,在上一行加入#define bsd4_4


第二个问题:


gcc -c -DCROSS_COMPILE -DIN_GCC -DPOSIX -g -I. -I. -I./config sdbout.c


sdbout.c:57:18: 错误: syms.h:没有该文件或目录


sdbout.c: 在函数‘gen_fake_label’中:


经过确认,在GCC-4.3.3之下存在gsyms.h而不存在syms.h,所以需改变这里的宏定义,解决方法是在这段代码之前(53行处)加一个 #undef USG,这样就会将gs