Clueless comes with 2 example binary tools — how-address and
reuse-distance. Run make to build them.
This tools tells you how your programs’ memory addresses are made.
Usage /.how-address --help
Usage: how-address [OPTION...] TRACE
How memory addresses are made
-b, --heartbeat=N Print heartbeat every N instructions
-s, --simulate=N Simulate N instructions
-w, --warmup=N Skip the first N instructions
-?, --help Give this help list
--usage Give a short usage message
-V, --version Print program version
./how-address trace.champsimtrace.xz outputs a space separated table
that can be piped into a csv file. A table looks like this:
| ins | lvl0 | lvl1 | lvl2 | lvl3+ | t1 | t2 | t3 | t4 | t5 | t6 | t7 | t8+ | gtt | all |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 10000000 | 187632 | 758 | 41 | 13 | 50918 | 15617 | 4613 | 86 | 34 | 14 | 15 | 835 | 188444 | 379511 |
What do different columns mean?
- ins
- #instructions simulated.
- lvl0
- #directly leaked addresses.
- lvl1..lvl3+
- #indirectly leaked addresses. The number after lvl means the indirection level, i.e., the number of arithmetic instructions used to transform the value into the address.
- t1..t8+
- #loads used to combine into the address.
- gtt
- #values turning into addresses.
- all
- #all addresses.
This program tells you the reuse-distance of critical loads.