Skip to content

flyree/pinfi-routine

Repository files navigation

HOW TO USE PINFI:

1. Installation
- Make sure pin is installed.
- Create a directory under  <pin root>/source/tools, such as <pin root>/source/tools/pinfi
- Copy the top-level directory (everything except the example/ subdirectory) to <pin root>/source/tools/pinfi
- In the command line, type 'make' under <pin root>/source/tools/pinfi to compile the pinfi.
- After compiling pinfi, a folder called obj-intel64 will be created under the project folder.

2. Usage

- We provide a fault injection script located in example/, namely faultinject.py. There are several variables in the script need to be set based on your own configurations:
  - progbin: folder path to the benchmark under test
  - pinbin: path to the executable of pin
  - instcategorylib: path to instcategory.so which can be found under obj-intel64 folder.
  - instcountlib: path to instcount.so which can be found under obj-intel64 folder.
  - filib: path to faultinjection.so which can be found under obj-intel64 folder.
  - outputdir: std output generated by the benchmark under test.
  - errordir: error output generated by the benchmark under test.
  - basedir: golden output generated by the benchmark under test.
  - optionlist: configure parameters as desired based on the benchmark undertest.

- Put the instructions category (default is 'all') that are desired to be fault injected in pin.instcategory.txt under the directory where faultinject.py locates, and run faultinject.py to inject faults in the specified locations. We provide an example of the pin.instcategory.txt file in example/ as well.


For routine and FP injection:

the options are:

"fir": enbale routine fault injection (value e.g. 1)
"fifp": enable fp fault injection (value e.g. 1)
"rn": the name of the routine (value e.g. main)
    note: when you change this you need to make sure changing both instcount and faultinjection
"firange_l": the highest bit you want to inject (value e.g. 63)
"firange_r": the lowest bit you want to inject (value e.g. 0)

So the injection command could look like this:

./pin-3.5-97503-gac534ca30-gcc-linux/pin -t .pin-3.5-97503-gac534ca30-gcc-linux/source/tools/pinfi/obj-intel64/faultinjection.so -fioption AllInst -fir 1 -rn CollectDomainNodesToElemNodes -fifp 1 -firl 32 -firr 1 -idx 5 -- ./lulesh 10

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •