GCC 4.4.3下编译SimpleScalar 3.2

1.安装环境
GCC-4.4.3

2.软件下载
首先到上下载以下三个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 HOST=i386-Ubuntu-linux ;格式为 机器类型-公司-系统

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 <varargs.h>."

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

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

第五个错误:

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’中:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwjpdx.html