The traces use for the ece project were created using Valgrind (http://valgrind.kde.org/), which is runs on Linux. Valgrind instrument user executables by performing binary rewrites of the x86 machine language. A custom instrumentation "inst_fetch" was written to collect the data. A compressed tar archive of the version of valgrind used to produce the traces is in this directory, valgrind-2.2.0-ece463.tar.gz. Valgrind allows the instrumentation of regular user executables on Linux machines. With valgrind built, the traces were produced by with command lines like the following: /home/wcohen/valgrind-2.2.0-ece463/inst/bin/valgrind --tool=inst_fetch ./hello This will print out lines information about valgrind and also generate a trace file. The process number will be at the beginning of each information line. In the case of the previous command line the process was 13164. Thus, the instrumentation generates a trace file called trace.out.13164 The process of generating a executable with gcc was used. A very simple program hello.c is compile with gcc. Gcc actually has a number of steps to generate an executable, preprocessing the C input file, converting the C to assembly language, generating an object file from assembly, and linking the executable files together. These steps can be observed by using the "-v" option in gcc. The "-save-temps" keeps around the files used between the different steps. Below is what occurs for a compilation of hello from hello.c $ gcc -v hello.c -save-temps -o hello Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.3/specs Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux Thread model: posix gcc version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4) /usr/libexec/gcc/i386-redhat-linux/3.4.3/cc1 -E -quiet -v hello.c -o hello.i ignoring nonexistent directory "/usr/lib/gcc/i386-redhat-linux/3.4.3/../../../../i386-redhat-linux/include" #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/lib/gcc/i386-redhat-linux/3.4.3/include /usr/include End of search list. /usr/libexec/gcc/i386-redhat-linux/3.4.3/cc1 -fpreprocessed hello.i -quiet -dumpbase hello.c -auxbase hello -version -o hello.s GNU C version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4) (i386-redhat-linux) compiled by GNU C version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4). GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64210 as -V -Qy -o hello.o hello.s GNU assembler version 2.15.92.0.2 (i386-redhat-linux) using BFD version 2.15.92.0.2 20040927 /usr/libexec/gcc/i386-redhat-linux/3.4.3/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o hello /usr/lib/gcc/i386-redhat-linux/3.4.3/../../../crt1.o /usr/lib/gcc/i386-redhat-linux/3.4.3/../../../crti.o /usr/lib/gcc/i386-redhat-linux/3.4.3/crtbegin.o -L/usr/lib/gcc/i386-redhat-linux/3.4.3 -L/usr/lib/gcc/i386-redhat-linux/3.4.3 -L/usr/lib/gcc/i386-redhat-linux/3.4.3/../../.. hello.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i386-redhat-linux/3.4.3/crtend.o /usr/lib/gcc/i386-redhat-linux/3.4.3/../../../crtn.o A trace file is generated for each step. /home/wcohen/valgrind-2.2.0-ece463/inst/bin/valgrind --tool=inst_fetch /home/wcohen/valgrind-2.2.0-ece463/inst/bin/valgrind --tool=inst_fetch /usr/libexec/gcc/i386-redhat-linux/3.4.3/cc1 -E -quiet -v hello.c -o hello.i /home/wcohen/valgrind-2.2.0-ece463/inst/bin/valgrind --tool=inst_fetch /usr/libexec/gcc/i386-redhat-linux/3.4.3/cc1 -fpreprocessed hello.i -quiet -dumpbase hello.c -auxbase hello -version -o hello.s /home/wcohen/valgrind-2.2.0-ece463/inst/bin/valgrind --tool=inst_fetch as -V -Qy -o hello.o hello.s /home/wcohen/valgrind-2.2.0-ece463/inst/bin/valgrind --tool=inst_fetch /usr/libexec/gcc/i386-redhat-linux/3.4.3/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o hello /usr/lib/gcc/i386-redhat-linux/3.4.3/../../../crt1.o /usr/lib/gcc/i386-redhat-linux/3.4.3/../../../crti.o /usr/lib/gcc/i386-redhat-linux/3.4.3/crtbegin.o -L/usr/lib/gcc/i386-redhat-linux/3.4.3 -L/usr/lib/gcc/i386-redhat-linux/3.4.3 -L/usr/lib/gcc/i386-redhat-linux/3.4.3/../../.. hello.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i386-redhat-linux/3.4.3/crtend.o /usr/lib/gcc/i386-redhat-linux/3.4.3/../../../crtn.o /home/wcohen/valgrind-2.2.0-ece463/inst/bin/valgrind --tool=inst_fetch ./hello Due to the size the traces have been compressed with gzip. Gzip is available on most linux machines. You should be able to get gzip for other machines from http://www.gzip.org/. Table of traces uncomp file size operation ---------------------------------------- trace.out.13178 62143826 generate hello.i trace.out.13180 65222175 generate hello.s from preprocessed C (hello.i) trace.out.13182 4123320 generate hello.o from hello.s trace.out.13211 714665 generate hello executable trace.out.13217 328198 run hello executable -Will Cohen