-
Notifications
You must be signed in to change notification settings - Fork 4
Reproducible Docker build for test cases in src/test #288
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
increases portability of the docker-helper, allowing it to be used similar to 'opam env'. strips almost all docker configuration from makefiles
I can't encounter this, even after forcing git to use crlf by default. You can try (very carefully) resetting the src/test directory: |
|
worked fine once I fixed the line endings in compiled.md5sum, which is how I knew the md5sums were fine, but the |
|
@l-kent For correct/syscall/gcc_O2, can I trouble you to build the test case with update: i've docker-installed ubuntu:22.04 and it looks like it has This leads to So, I feel justified in adding |
|
Diffs in We fail 54 tests compared to 30 failing in main. I'll take a look, maybe it's BAP-related. Edit: As of 05e7deb, indirect call tests are fixed and 38 tests fail. |
makes this not tied to specific adt files
Conflicts: .github/workflows/run-examples.yml docs/development/readme.md src/main/scala/ir/IRCursor.scala src/main/scala/ir/Program.scala src/test/correct/arrays_simple/clang/arrays_simple.expected src/test/correct/arrays_simple/clang/arrays_simple_gtirb.expected src/test/correct/basic_arrays_read/clang/basic_arrays_read.expected src/test/correct/basic_arrays_read/clang/basic_arrays_read_gtirb.expected src/test/correct/basic_arrays_read/clang_pic/basic_arrays_read.expected src/test/correct/basic_arrays_read/clang_pic/basic_arrays_read_gtirb.expected src/test/correct/basic_arrays_read/gcc/basic_arrays_read.expected src/test/correct/basic_arrays_read/gcc/basic_arrays_read_gtirb.expected src/test/correct/basic_arrays_read/gcc_pic/basic_arrays_read.expected src/test/correct/basic_arrays_read/gcc_pic/basic_arrays_read_gtirb.expected src/test/correct/basic_arrays_write/clang/basic_arrays_write.expected src/test/correct/basic_arrays_write/clang/basic_arrays_write_gtirb.expected src/test/correct/basic_arrays_write/clang_O2/basic_arrays_write.expected src/test/correct/basic_arrays_write/clang_O2/basic_arrays_write_gtirb.expected src/test/correct/basic_arrays_write/clang_pic/basic_arrays_write.expected src/test/correct/basic_arrays_write/clang_pic/basic_arrays_write_gtirb.expected src/test/correct/basic_assign_assign/clang/basic_assign_assign.expected src/test/correct/basic_assign_assign/clang/basic_assign_assign_gtirb.expected src/test/correct/basic_assign_assign/clang_pic/basic_assign_assign.expected src/test/correct/basic_assign_assign/clang_pic/basic_assign_assign_gtirb.expected src/test/correct/basic_assign_increment/clang/basic_assign_increment.expected src/test/correct/basic_assign_increment/clang/basic_assign_increment_gtirb.expected src/test/correct/basic_assign_increment/clang_pic/basic_assign_increment.expected src/test/correct/basic_assign_increment/clang_pic/basic_assign_increment_gtirb.expected src/test/correct/basic_function_call_caller/clang/basic_function_call_caller.expected src/test/correct/basic_function_call_caller/clang/basic_function_call_caller_gtirb.expected src/test/correct/basic_function_call_caller/clang_O2/basic_function_call_caller.expected src/test/correct/basic_function_call_caller/clang_O2/basic_function_call_caller_gtirb.expected src/test/correct/basic_function_call_caller/clang_pic/basic_function_call_caller.expected src/test/correct/basic_function_call_caller/clang_pic/basic_function_call_caller_gtirb.expected src/test/correct/basic_function_call_reader/clang/basic_function_call_reader.expected src/test/correct/basic_function_call_reader/clang/basic_function_call_reader_gtirb.expected src/test/correct/basic_function_call_reader/clang_O2/basic_function_call_reader.expected src/test/correct/basic_function_call_reader/clang_O2/basic_function_call_reader_gtirb.expected src/test/correct/basic_function_call_reader/clang_pic/basic_function_call_reader.expected src/test/correct/basic_function_call_reader/clang_pic/basic_function_call_reader_gtirb.expected src/test/correct/basic_lock_read/clang/basic_lock_read.expected src/test/correct/basic_lock_read/clang/basic_lock_read_gtirb.expected src/test/correct/basic_lock_read/clang_O2/basic_lock_read.expected src/test/correct/basic_lock_read/clang_O2/basic_lock_read_gtirb.expected src/test/correct/basic_lock_read/clang_pic/basic_lock_read.expected src/test/correct/basic_lock_read/clang_pic/basic_lock_read_gtirb.expected src/test/correct/basic_lock_security_read/clang/basic_lock_security_read.expected src/test/correct/basic_lock_security_read/clang/basic_lock_security_read_gtirb.expected src/test/correct/basic_lock_security_read/clang_O2/basic_lock_security_read.expected src/test/correct/basic_lock_security_read/clang_O2/basic_lock_security_read_gtirb.expected src/test/correct/basic_lock_security_read/clang_pic/basic_lock_security_read.expected src/test/correct/basic_lock_security_read/clang_pic/basic_lock_security_read_gtirb.expected src/test/correct/basic_lock_security_write/clang/basic_lock_security_write.expected src/test/correct/basic_lock_security_write/clang/basic_lock_security_write_gtirb.expected src/test/correct/basic_lock_security_write/clang_O2/basic_lock_security_write.expected src/test/correct/basic_lock_security_write/clang_O2/basic_lock_security_write_gtirb.expected src/test/correct/basic_lock_security_write/clang_pic/basic_lock_security_write.expected src/test/correct/basic_lock_security_write/clang_pic/basic_lock_security_write_gtirb.expected src/test/correct/basic_lock_unlock/clang/basic_lock_unlock.expected src/test/correct/basic_lock_unlock/clang/basic_lock_unlock_gtirb.expected src/test/correct/basic_lock_unlock/clang_pic/basic_lock_unlock.expected src/test/correct/basic_lock_unlock/clang_pic/basic_lock_unlock_gtirb.expected src/test/correct/basic_loop_assign/clang/basic_loop_assign.expected src/test/correct/basic_loop_assign/clang/basic_loop_assign_gtirb.expected src/test/correct/basic_loop_assign/clang_pic/basic_loop_assign.expected src/test/correct/basic_loop_assign/clang_pic/basic_loop_assign_gtirb.expected src/test/correct/basic_operation_evaluation/clang/basic_operation_evaluation.expected src/test/correct/basic_operation_evaluation/clang/basic_operation_evaluation_gtirb.expected src/test/correct/basic_operation_evaluation/gcc/basic_operation_evaluation.expected src/test/correct/basic_operation_evaluation/gcc/basic_operation_evaluation_gtirb.expected src/test/correct/basic_sec_policy_read/clang/basic_sec_policy_read.expected src/test/correct/basic_sec_policy_read/clang/basic_sec_policy_read_gtirb.expected src/test/correct/basic_sec_policy_read/clang_O2/basic_sec_policy_read.expected src/test/correct/basic_sec_policy_read/clang_O2/basic_sec_policy_read_gtirb.expected src/test/correct/basic_sec_policy_read/clang_pic/basic_sec_policy_read.expected src/test/correct/basic_sec_policy_read/clang_pic/basic_sec_policy_read_gtirb.expected src/test/correct/basic_sec_policy_write/clang/basic_sec_policy_write.expected src/test/correct/basic_sec_policy_write/clang/basic_sec_policy_write_gtirb.expected src/test/correct/basic_sec_policy_write/clang_O2/basic_sec_policy_write.expected src/test/correct/basic_sec_policy_write/clang_O2/basic_sec_policy_write_gtirb.expected src/test/correct/basic_sec_policy_write/clang_pic/basic_sec_policy_write.expected src/test/correct/basic_sec_policy_write/clang_pic/basic_sec_policy_write_gtirb.expected src/test/correct/basicassign_gamma0/clang/basicassign_gamma0.expected src/test/correct/basicassign_gamma0/clang/basicassign_gamma0_gtirb.expected src/test/correct/basicassign_gamma0/clang_pic/basicassign_gamma0.expected src/test/correct/basicassign_gamma0/clang_pic/basicassign_gamma0_gtirb.expected src/test/correct/basicfree/clang/basicfree.expected src/test/correct/basicfree/clang/basicfree_gtirb.expected src/test/correct/basicfree/gcc/basicfree.expected src/test/correct/basicfree/gcc/basicfree_gtirb.expected src/test/correct/cjump/clang/cjump.expected src/test/correct/cjump/clang/cjump_gtirb.expected src/test/correct/cjump/clang_pic/cjump.expected src/test/correct/cjump/clang_pic/cjump_gtirb.expected src/test/correct/cjump/gcc/cjump.expected src/test/correct/cjump/gcc/cjump_gtirb.expected src/test/correct/cjump/gcc_pic/cjump.expected src/test/correct/cjump/gcc_pic/cjump_gtirb.expected src/test/correct/floatingpoint/clang/floatingpoint_gtirb.expected src/test/correct/floatingpoint/gcc/floatingpoint_gtirb.expected src/test/correct/function/clang/function.expected src/test/correct/function/clang/function_gtirb.expected src/test/correct/function/clang_pic/function.expected src/test/correct/function/clang_pic/function_gtirb.expected src/test/correct/function/gcc/function.expected src/test/correct/function/gcc/function_gtirb.expected src/test/correct/function/gcc_pic/function.expected src/test/correct/function/gcc_pic/function_gtirb.expected src/test/correct/function1/gcc/function1.expected src/test/correct/function1/gcc/function1_gtirb.expected src/test/correct/function1/gcc_O2/function1.expected src/test/correct/function1/gcc_O2/function1_gtirb.expected src/test/correct/functionpointer/gcc/functionpointer_gtirb.expected src/test/correct/functionpointer/gcc_O2/functionpointer_gtirb.expected src/test/correct/functionpointer/gcc_pic/functionpointer_gtirb.expected src/test/correct/functions_with_params/clang/functions_with_params.expected src/test/correct/functions_with_params/clang/functions_with_params_gtirb.expected src/test/correct/functions_with_params/gcc/functions_with_params.expected src/test/correct/functions_with_params/gcc/functions_with_params_gtirb.expected src/test/correct/ifbranches/clang/ifbranches.expected src/test/correct/ifbranches/clang/ifbranches_gtirb.expected src/test/correct/ifbranches/clang_O2/ifbranches.expected src/test/correct/ifbranches/clang_O2/ifbranches_gtirb.expected src/test/correct/ifbranches/gcc/ifbranches.expected src/test/correct/ifbranches/gcc/ifbranches_gtirb.expected src/test/correct/ifbranches/gcc_O2/ifbranches.expected src/test/correct/ifbranches/gcc_O2/ifbranches_gtirb.expected src/test/correct/ifglobal/clang/ifglobal.expected src/test/correct/ifglobal/clang/ifglobal_gtirb.expected src/test/correct/ifglobal/clang_O2/ifglobal.expected src/test/correct/ifglobal/clang_O2/ifglobal_gtirb.expected src/test/correct/ifglobal/clang_pic/ifglobal.expected src/test/correct/ifglobal/clang_pic/ifglobal_gtirb.expected src/test/correct/indirect_call/gcc/indirect_call_gtirb.expected src/test/correct/indirect_call/gcc_pic/indirect_call_gtirb.expected src/test/correct/initialisation/clang/initialisation.expected src/test/correct/initialisation/clang/initialisation_gtirb.expected src/test/correct/initialisation/clang_O2/initialisation.expected src/test/correct/initialisation/clang_O2/initialisation_gtirb.expected src/test/correct/initialisation/clang_pic/initialisation.expected src/test/correct/initialisation/clang_pic/initialisation_gtirb.expected src/test/correct/jumptable2/clang/jumptable2_gtirb.expected src/test/correct/jumptable2/clang_O2/jumptable2_gtirb.expected src/test/correct/jumptable2/clang_pic/jumptable2_gtirb.expected src/test/correct/jumptable2/gcc/jumptable2_gtirb.expected src/test/correct/jumptable2/gcc_O2/jumptable2_gtirb.expected src/test/correct/jumptable2/gcc_pic/jumptable2_gtirb.expected src/test/correct/malloc_with_local/gcc/malloc_with_local.expected src/test/correct/malloc_with_local/gcc/malloc_with_local_gtirb.expected src/test/correct/malloc_with_local/gcc_O2/malloc_with_local.expected src/test/correct/malloc_with_local/gcc_O2/malloc_with_local_gtirb.expected src/test/correct/malloc_with_local2/gcc/malloc_with_local2.expected src/test/correct/malloc_with_local2/gcc/malloc_with_local2_gtirb.expected src/test/correct/malloc_with_local3/gcc/malloc_with_local3.expected src/test/correct/malloc_with_local3/gcc/malloc_with_local3_gtirb.expected src/test/correct/malloc_with_local3/gcc_O2/malloc_with_local3.expected src/test/correct/malloc_with_local3/gcc_O2/malloc_with_local3_gtirb.expected src/test/correct/multi_malloc/gcc/multi_malloc.expected src/test/correct/multi_malloc/gcc/multi_malloc_gtirb.expected src/test/correct/no_interference_update_x/clang/no_interference_update_x.expected src/test/correct/no_interference_update_x/clang/no_interference_update_x_gtirb.expected src/test/correct/no_interference_update_x/clang_pic/no_interference_update_x.expected src/test/correct/no_interference_update_x/clang_pic/no_interference_update_x_gtirb.expected src/test/correct/no_interference_update_y/clang/no_interference_update_y.expected src/test/correct/no_interference_update_y/clang/no_interference_update_y_gtirb.expected src/test/correct/no_interference_update_y/clang_pic/no_interference_update_y.expected src/test/correct/no_interference_update_y/clang_pic/no_interference_update_y_gtirb.expected src/test/correct/secret_write/clang/secret_write.expected src/test/correct/secret_write/clang/secret_write_gtirb.expected src/test/correct/secret_write/clang_O2/secret_write.expected src/test/correct/secret_write/clang_O2/secret_write_gtirb.expected src/test/correct/secret_write/clang_pic/secret_write.expected src/test/correct/secret_write/clang_pic/secret_write_gtirb.expected src/test/correct/secret_write/gcc/secret_write.expected src/test/correct/secret_write/gcc/secret_write_gtirb.expected src/test/correct/secret_write/gcc_O2/secret_write.expected src/test/correct/secret_write/gcc_O2/secret_write_gtirb.expected src/test/correct/secret_write/gcc_pic/secret_write.expected src/test/correct/secret_write/gcc_pic/secret_write_gtirb.expected src/test/correct/switch/clang/switch.expected src/test/correct/switch/clang/switch_gtirb.expected src/test/correct/switch/clang_O2/switch.expected src/test/correct/switch/clang_O2/switch_gtirb.expected src/test/correct/switch/gcc/switch.expected src/test/correct/switch/gcc/switch_gtirb.expected src/test/correct/switch/gcc_O2/switch.expected src/test/correct/switch/gcc_O2/switch_gtirb.expected src/test/correct/syscall/clang/syscall_gtirb.expected src/test/correct/syscall/clang_O2/syscall_gtirb.expected src/test/correct/syscall/gcc/syscall_gtirb.expected src/test/correct/syscall/gcc_O2/syscall_gtirb.expected src/test/correct/using_gamma_conditional/clang/using_gamma_conditional.expected src/test/correct/using_gamma_conditional/clang/using_gamma_conditional_gtirb.expected src/test/correct/using_gamma_conditional/clang_O2/using_gamma_conditional.expected src/test/correct/using_gamma_conditional/clang_O2/using_gamma_conditional_gtirb.expected src/test/correct/using_gamma_conditional/clang_pic/using_gamma_conditional.expected src/test/correct/using_gamma_conditional/clang_pic/using_gamma_conditional_gtirb.expected src/test/correct/using_gamma_write_z/clang/using_gamma_write_z.expected src/test/correct/using_gamma_write_z/clang/using_gamma_write_z_gtirb.expected src/test/correct/using_gamma_write_z/clang_pic/using_gamma_write_z.expected src/test/correct/using_gamma_write_z/clang_pic/using_gamma_write_z_gtirb.expected src/test/correct/using_gamma_write_z/gcc/using_gamma_write_z.expected src/test/correct/using_gamma_write_z/gcc/using_gamma_write_z_gtirb.expected src/test/correct/using_gamma_write_z/gcc_O2/using_gamma_write_z.expected src/test/correct/using_gamma_write_z/gcc_O2/using_gamma_write_z_gtirb.expected src/test/correct/using_gamma_write_z/gcc_pic/using_gamma_write_z.expected src/test/correct/using_gamma_write_z/gcc_pic/using_gamma_write_z_gtirb.expected src/test/incorrect/basicassign/clang/basicassign.expected src/test/incorrect/basicassign/clang/basicassign_gtirb.expected src/test/incorrect/basicassign/clang_O2/basicassign.expected src/test/incorrect/basicassign/clang_O2/basicassign_gtirb.expected src/test/incorrect/basicassign/clang_pic/basicassign.expected src/test/incorrect/basicassign/clang_pic/basicassign_gtirb.expected src/test/incorrect/basicassign/gcc/basicassign.expected src/test/incorrect/basicassign/gcc/basicassign_gtirb.expected src/test/incorrect/basicassign/gcc_O2/basicassign.expected src/test/incorrect/basicassign/gcc_O2/basicassign_gtirb.expected src/test/incorrect/basicassign/gcc_pic/basicassign.expected src/test/incorrect/basicassign/gcc_pic/basicassign_gtirb.expected src/test/incorrect/basicassign1/clang/basicassign1.expected src/test/incorrect/basicassign1/clang/basicassign1_gtirb.expected src/test/incorrect/basicassign1/clang_O2/basicassign1.expected src/test/incorrect/basicassign1/clang_O2/basicassign1_gtirb.expected src/test/incorrect/basicassign1/clang_pic/basicassign1.expected src/test/incorrect/basicassign1/clang_pic/basicassign1_gtirb.expected src/test/incorrect/basicassign1/gcc/basicassign1.expected src/test/incorrect/basicassign1/gcc/basicassign1_gtirb.expected src/test/incorrect/basicassign1/gcc_O2/basicassign1.expected src/test/incorrect/basicassign1/gcc_O2/basicassign1_gtirb.expected src/test/incorrect/basicassign1/gcc_pic/basicassign1.expected src/test/incorrect/basicassign1/gcc_pic/basicassign1_gtirb.expected src/test/incorrect/basicassign2/clang/basicassign2.expected src/test/incorrect/basicassign2/clang/basicassign2_gtirb.expected src/test/incorrect/basicassign2/clang_O2/basicassign2.expected src/test/incorrect/basicassign2/clang_O2/basicassign2_gtirb.expected src/test/incorrect/basicassign2/clang_pic/basicassign2.expected src/test/incorrect/basicassign2/clang_pic/basicassign2_gtirb.expected src/test/incorrect/basicassign2/gcc/basicassign2.expected src/test/incorrect/basicassign2/gcc/basicassign2_gtirb.expected src/test/incorrect/basicassign2/gcc_O2/basicassign2.expected src/test/incorrect/basicassign2/gcc_O2/basicassign2_gtirb.expected src/test/incorrect/basicassign2/gcc_pic/basicassign2.expected src/test/incorrect/basicassign2/gcc_pic/basicassign2_gtirb.expected src/test/incorrect/basicassign3/clang/basicassign3.expected src/test/incorrect/basicassign3/clang/basicassign3_gtirb.expected src/test/incorrect/basicassign3/clang_O2/basicassign3.expected src/test/incorrect/basicassign3/clang_O2/basicassign3_gtirb.expected src/test/incorrect/basicassign3/clang_pic/basicassign3.expected src/test/incorrect/basicassign3/clang_pic/basicassign3_gtirb.expected src/test/incorrect/basicassign3/gcc/basicassign3.expected src/test/incorrect/basicassign3/gcc/basicassign3_gtirb.expected src/test/incorrect/basicassign3/gcc_O2/basicassign3.expected src/test/incorrect/basicassign3/gcc_O2/basicassign3_gtirb.expected src/test/incorrect/basicassign3/gcc_pic/basicassign3.expected src/test/incorrect/basicassign3/gcc_pic/basicassign3_gtirb.expected src/test/incorrect/iflocal/clang/iflocal.expected src/test/incorrect/iflocal/clang/iflocal_gtirb.expected src/test/incorrect/iflocal/gcc/iflocal.expected src/test/incorrect/iflocal/gcc/iflocal_gtirb.expected src/test/make/lift-directories.mk src/test/procedure_summaries/procedure_summary3/gcc_O2/procedure_summary3.adt src/test/procedure_summaries/procedure_summary3/gcc_O2/procedure_summary3.gts src/test/procedure_summaries/procedure_summary3/gcc_O2/procedure_summary3.relf src/test/readme.md src/test/scala/IndirectCallTests.scala src/test/scala/LiveVarsAnalysisTests.scala
this introduces the src/test/make/docker-helper.sh script which is a (hopefully) developer-friendly method for lifting examples in a Docker container provided by [pac-nix][]. to ensure reproducibility, this uses an x86_64-linux docker container with cross-compiler provided by nix. for more details, also see #288. the usage is comprehensively documented in [nix-docker-build readme]. the general flow is: 1. activate the docker-helper.sh environment: `eval $(docker-helper.sh env)`. (you will need to re-run this if you close your terminal) 2. pull the docker image: `docker-helper.sh pull` 3. start the docker container: `docker-helper.sh start` 4. (optional) clean the directory you want to lift: `make SUBDIRS=extraspec_incorrect/malloc_memcpy_strlen_memset_free clean` 5. compile and lift the directory: `make SUBDIRS=extraspec_incorrect/malloc_memcpy_strlen_memset_free` 6. commit the results (eventually, we want to move the binaries into another repo. but until then, committing is fine.) [pac-nix]: https://github.com/katrinafyi/pac-nix/ [nix-docker-build readme]: https://github.com/UQ-PAC/BASIL/blob/nix-docker-build/src/test/readme.md
this introduces the src/test/make/docker-helper.sh script which is a (hopefully) developer-friendly method for lifting examples in a Docker container provided by [pac-nix][]. to ensure reproducibility, this uses an x86_64-linux docker container with cross-compiler provided by nix. for more details, see #288 which the docker-helper.sh is stolen from. the usage is comprehensively documented in [readme]. the general flow is: 1. activate the docker-helper.sh environment: `eval $(docker-helper.sh env)`. (you will need to re-run this if you close your terminal) 2. pull the docker image: `docker-helper.sh pull` 3. start the docker container: `docker-helper.sh start` 4. (optional) clean the directory you want to lift: `make SUBDIRS=extraspec_incorrect/malloc_memcpy_strlen_memset_free clean` 5. compile and lift the directory: `make SUBDIRS=extraspec_incorrect/malloc_memcpy_strlen_memset_free` 6. commit the results (eventually, we want to move the binaries into an out-of-repo location. but until then, committing is probably fine.) [pac-nix]: https://github.com/katrinafyi/pac-nix/ [readme]: https://github.com/UQ-PAC/BASIL/blob/docker-helper/src/test/readme.md this PR does not make any changes to the existing examples. it only serves to make the Docker container available and accessible for people who want to use it as a uniform lifting environment. I do think that all examples should eventually be re-lifted using a consistent method, but this will come later.
This has been my pet project for a while and my continuous focus for the last week and a bit. It has been through a fair bit of beta-testing to work out some kinks. Hopefully, it is a well-prepared change.
The effect of this PR is to remove all of the committed lifter outputs from src/test/ and replace them with a system to compile and lift them in a reproducible way. This is done with a Docker image which contains fixed versions of the required tools, a number of scripts to tie it together, and hashes recorded within the repository in place of the committed files.
Please see https://github.com/UQ-PAC/BASIL/blob/nix-docker-build/src/test/readme.md for documentation about the Docker build. If you want to try out the changes, that readme should have all the steps needed (let me know if anything is not clear).
Note! The SystemTests are not passing. I will need some help to work these out, since the changes to ADT/GTIRB files might be very large since they were last updated in the repository.
There are obvious benefits:
We foresaw the following pain points and have worked to reduce them:
There are also drawbacks / limitations.
Anticipated questions:
Catalogue of changed files:
To make the changes easier to see, I have made a diff which excludes all the generated file changes: https://gist.github.com/katrinafyi/23f9a7de5b99cf1843814ccb72302e18.
In summary,
Orthogonal but related changes:
TODO