Implemented in TXL and C, muScalpel realizes μTrans and comprises 28k SLoCs, of which 16k is TXL, and 12k is C. muScalpel implements a custom version of GP. Unlike conventional GP, which creates an initial population from individuals that contain multiple statements, muScalpel generates an initial population of individuals with just 1 statement, uniformly selected. muScalpel’s underlying assumption is that our organs need very few of the statements in their donor. Starting from one LOC gives muScalpel the possibility to find small solutions quickly. muScalpel focuses on evolving the organ’s vein. muScalpel also inherits the limitations of TXL, such as its stack limit which precludes parsing large programs and its default C grammar’s inability to properly handle preprocessor directives.
As we all know, software is often difficult to build and run, due to dependencies on its development environment and target platform. muScalpel is no exception. Please keep in mind that we built and ran muScalpel only on 64-bit Ubuntu 14.04 LTS machine, with 16 GB RAM, SSD and 8 physical cores, with its TXL v10.6a-64 (14.7.13), gcc-4.8, cflow (GNU cflow) 1.4 installed. Any other configurations may have affect on the results of the replication of our experiments.
This website contains the source for muScalpel, muScalpel in binary form, and the data sets, including test suites, that underlie our experiments. To facilitate replicating our results, we have written a sequence of scripts that run a *single* run of each of our experiments. The name of the script identifies the experiment. We have worked hard to make each script bullet-proof and have it thoroughly check your environment for its dependencies and tell you what, if anything, is missing. Despite our best efforts, you may still encounter problems. If that happens, please contact us so we can work with you to resolve them.
Link to a script that runs all our experiments, as submitted to ISSTA 2015 artifact evaluation track. Here we also provide a dockerized version of our experiments.
Links to the scripts used for running each of the experiments.
For running an experiment untar it and run ./run.sh in the root folder. First we check if you have all the dependencies required for running muScalpel. If you don't have them, you may still chose to run the experiments, but muScalpel may crash, or the results may be affected. After the run finishes, all the results will be in DONOR-HOST/Host_BENEFICIARY. For example:
tar-xzvf RUN_IDCT-CFLOW.tar.gz && cd IDCT-CFLOW && ./run.sh
The results will be in: IDCT-CFLOW/Host_BENEFICIARY
The following Dockerfiles will run all the experiments in the paper. The first one will use a binary of muScalpel, while the second one builds muScalpel, and then execute the experiments with the compiled version. The Dockerfiles were tested with Docker version 1.0.1, build 990021a. After the run is complete, you will find the results in /home/muScalpelExperiments . Example usage:
sudo docker build -t development/muscalpelexperiments . , in a folder containing Dockerfile . It is recommended that the folders contains only the docker file.
sudo docker run -P -t -i --rm development/muscalpelexperiments /bin/bash will then open a docker container with the results of the experiments in /home/muScalpelExperiments .
Note: The Dockerfile will fail if your system does not meet the hardware specifications required for running the experiments.
The muScalpel prototype requires 64-bit Ubuntu 14.04, TXL, gcc-4.8, cflow and with at least 16 GB memory.
The muScalpel binary release was compiled on 64-bit Ubuntu 14.04. It contains an example run for the IDCT Donor - Cflow Host transplant, from the empirical study.
Path=/path/to/Cflow-IDCT_Transplant/ | #The path to the folder Cflow-IDCT_Transplant/ in the binary. The end ''/'' is required. |
muscalpel | #The name of our tool. |
--seeds_file ${Path}seed-file | #The file which contains the seeds for GI. |
--compiler_options ${Path}CFLAGS | #Options needed for compiling the code extracted from the donor (additional libraries for example). |
--host_target ${Path}Host/cflow-1.4/src/output-file.c | #The file in host where the marker __ADDGRAFTHERE__JUSTHERE is contained, the insertion point of the transplant. |
--donor_target ${Path}Donor/donor-source.c | The file in the donor that contains the core function. |
--donor_folder ${Path}Donor/ | #The path to the donor source code. |
--workspace $Path/ | #The workspace of the transplant. |
--core_function idct | #The core function of the transplant. |
2014 © Earl T. Barr, Mark Harman, Yue Jia, Alexandru Marginean, and Justyna Petke