SimpleScalar is a CPU simulator that is very useful for computer architecture research. However, it has not been updated for a long time, and I've found a couple of small bugs. Additionally, it took me a bit of work to be able to figure out how to compile a binary without linking against the C library.
Typically SimpleScalar binaries link against the C library. This is fine unless you are mucking around with the CPU internals and have broken backwards compatibility. I've created a minimal "library" that you can use to link C programs: libinit.s. Basically, the steps are:
as -o libinit.o libinit.s
)gcc -c program.c
). You may wish to use the -ffast-math
switch to get GCC to convert some math function calls into instructions. For example, it will convert calls to the C library's sqrt
function into calls to the sqrt
instruction.ld -o program program.o libinit.o
)The result is a C program that does not use the C library. Of course, this also means you can't use any of the C library functions, such as printf
or malloc
. You may also need my loader patch to get SimpleScalar to execute your binary.
The SimpleScalar loader has a bug: it will fail to run binaries if they are missing some sections. Here is a tiny patch to the loader to fix this problem. Without this patch, it will print: fatal: could not read text section from executable." Interestingly enough, the Alpha code already had part of this fix.
SimpleScalar runs just fine under Mac OS X. However, to get it to build you will need to apply my quick and dirty patch This patch applies cleanly against simplesim-3v0d-1.tgz
. It passes all the tests, and I've used it for a course project so I'm reasonably confident that it is correct. Note: To apply the patch use patch -p0 < simplesim-3-macosx.patch
. If you need more help using GNU patch, check out the manual.
Jasson Casey contributed an updated patch for SimpleScalar 3v0e for recent version of Mac OS X. I haven't tested this version, but you should probably start here if you have a recent Mac: simplesim-3v0e-macosx.patch.bz2