Commit Graph

37 Commits

Author SHA1 Message Date
Alessandro Di Federico c4221f1a4c Add a label to Analysis/check-* tests 2016-12-08 21:56:11 +01:00
Alessandro Di Federico f6b6138408 Introduce tests for the analyses
So far we only had end-to-end functionality testing. This commit
introduces a new part of the testsuite which allows to verify quickly if
the results that a certain analysis should give are changed or not. This
is vital to be able to make larger changes.

So far the test suite is composed by the most difficult case we support
(the uClibc ARM memset) and the typical lowering of switch statements
for ARM, MIPS and x86-64.

I'm so happy now.
2016-12-08 21:50:49 +01:00
Alessandro Di Federico a7f1097988 Improve testsuite
* Add a label for runtime and analysis tests
* Add support for per-test custom compile flags
2016-12-04 00:28:57 +01:00
Alessandro Di Federico f67f7aef77 Reorganize testsuite
So far the only tests we had were end to end tests to assess the
functionality of simple programs and, in particular, certain helper
functions. In the perspective of being able to test individual features,
and in particular check that we have no regressions in our analyses, we
isolated these end to end tests in the Runtime directory. We kept in the
root test directory the mechanism to compile a binary for a certain
architecture so that all the test types can use it.
2016-12-04 00:28:57 +01:00
Alessandro Di Federico bc6a732ad7 Don't compute function boundaries by default 2016-12-03 08:46:12 +01:00
Alessandro Di Federico 83ea2caacd Isolate ELF code and remove architecture parameter
This commit removes all the ELF-specific code from the `CodeGenerator`
class by creating a new class, `BinaryFile` which contains all the
information about the program that might be needed in an image format
independent way. However, `BinaryFile` has some fields which are
specific to ELF, we might want to address this when additional file
formats are supported.

A key benefit of isolating this code is that we can anticipate the
parsing of the input file, so that we have its architecture available
earlier than when `CodeGenerator` is instantiated, therefore we can drop
the `--architecture` parameter.
2016-12-03 08:46:12 +01:00
Alessandro Di Federico d48715494d Improve installation
* Use "$ORIGIN/../lib/" as RPATH when linking the installed binary
* Install also support material such as "support.c"
* Import the `translate` script for easy end-to-end translation
2016-09-22 22:44:16 +02:00
Alessandro Di Federico 59c871afc5 Make revamb portable
Add different search paths for QEMU components, in paritcular relative
to the program's path.
Also, install the revamb.
2016-09-22 18:45:59 +02:00
Alessandro Di Federico d01ee1f437 Copyright notices, license and credits 2016-09-21 01:45:26 +02:00
Alessandro Di Federico 53b1dfbb5d Improve autodetection of QEMU's location 2016-09-21 01:45:26 +02:00
Alessandro Di Federico b98c163c3e Implement the path function in support.c
The `path` function allows support.c to decide how to modify the path
opened by the translated program.
2016-09-21 01:45:26 +02:00
Alessandro Di Federico f0c12bfac4 Fixes to the testing infrastructure
* Disable PIE if enabled by default
* Link librt.so to compiled binaries (sometimes the QEMU runtime needs
  it)
* Replace `strtonum` with `int` in `awk` script
* Specify the compiler, not the triple
2016-09-21 01:45:26 +02:00
Alessandro Di Federico c7990ae60c Autodetect the compiler to use
Check in PATH if there's a compiler compatible with the supported ones
(i.e., using uclibc or musl) and use that triple.
2016-09-21 01:45:19 +02:00
Alessandro Di Federico 6c5c0ad8f7 Add support for using section information 2016-09-17 15:33:54 +02:00
Alessandro Di Federico 9487f0e400 Assign labels to tests 2016-09-17 15:33:54 +02:00
Alessandro Di Federico 994f518e14 Use ld.bfd linker as linker by default 2016-08-20 03:10:46 +02:00
Alessandro Di Federico 4e04f0eed5 Copy run-time files to build directory 2016-08-20 03:10:46 +02:00
Alessandro Di Federico db030d6757 Downgrade to CMake 2.8 2016-08-20 03:10:45 +02:00
Alessandro Di Federico 329fcb3707 Introduce tracing support 2016-08-20 03:10:45 +02:00
Alessandro Di Federico 0d035a93e1 Introduce clang support: fixes and cleanup 2016-08-20 03:10:45 +02:00
Alessandro Di Federico b74f09cad4 support.c: introduce unknownPC plus fixes
`unknownPC` is an extern function we expect to be linked to the output
which is called when we have to crash due to an unexpected jump target.

* Remove unused references to register variables, now only need the
  stack pointer
* Fix bug in how the auxiliary values were pushed on the stack.
* Push 0 HW_CAPs
* Implement some glib's functions
2016-04-14 16:10:13 +02:00
Alessandro Di Federico c8274af360 Let tests run from _start 2016-01-30 11:15:50 +01:00
Alessandro Di Federico 32b756510f Prepare stack for the translated program
* Create 3 constant global variables (`phdr_address`, `e_phentsize` and
  `e_phnum`) in the IR which will be used to populate the auxiliary
  vectors at run-time.
* Update compile options for `support.c` to ignore useless warnings and
  enable debug information
* Implement in `support.c` some functions required by QEMU run-time and
  other cleanups to make it compatible with programs translated from
  `_start`, not `root`
* Implement in `support.c` the `prepare_stack` function, which
  initializes the base of the stack with environment variables,
  arguments and auxiliary vectors
* Improve syscall support
2016-01-30 11:15:04 +01:00
Alessandro Di Federico 71f919675e Speedup compilation by using llc -O0 2016-01-30 10:57:15 +01:00
Alessandro Di Federico 0cffa717ed Use puts and itoa instead of printf in tests 2016-01-12 18:01:14 +01:00
Alessandro Di Federico ea61c896fb Introduce dependencies among tests 2016-01-12 18:00:51 +01:00
Alessandro Di Federico d510fea8c7 Simplify command line usage exploiting ELF info
* s/`importGlobalData`/`parseELF`/
* Save the entry point specified in the ELF header, which will be used
  if the user doesn't provide an address.
* Let parse `parseELF` take care of informing libtinycode about what
  has to be mmap'd and where.
* Remove some support scripts used during testing, now no longer
  necessary.
* Various cleanups
2016-01-09 13:37:03 +01:00
Alessandro Di Federico 51ca34634b global.c: a new test for access to global data 2016-01-07 14:17:39 +01:00
Alessandro Di Federico 8ca9156be3 Add a simple test for the getuid syscall 2016-01-04 21:47:34 +01:00
Alessandro Di Federico f36bc6b42f Introduce tests for floaing point operations 2015-12-04 23:45:50 +01:00
Alessandro Di Federico 1d4e3169eb Add support for indirect jumps and function calls
The main aim of these changes is to support `ret` instructions (that are
indirect jumps), so that function calls can now work properly.

* Emit a dummy call to a `@newPC` function to record where a new
  instruction in the original assembly started, what is its PC and its
  size. The `Size` parameter for these function call is initially zero,
  and it's updated later when a new instruction is met or the current
  basic block is terminated. All these calls, before the final emission
  of the IR are removed `InstructionTranslator::removeNewPCMarkers`.
* Transform translateMoveToPC into an LLVM pass
  (`TranslateDirectBranchesPass`).
* Implement `getNextPC`, which returns the next program counter by
  looking for a call to `@newpc` in the current basic block, and,
  recursively, in all the basic blocks dominating the current one. This
  function is used to force exploration of the basic block coming after
  a direct jump, which is paritcularly useful in case of a function call.
* Introduce `translateIndirectJumps`, which translates all the leftover
  writes to the PC, i.e. all the indirect ones, by diverting execution
  to a large switch statement mapping addresses in the original program
  to the corresponding basic blocks in the translated program.
* Introduce `function_call`, a simple test for function calls.
* Other minor changes and whitespace fixes.
2015-11-15 12:06:17 +01:00
Alessandro Di Federico e2efe161e0 Add support for MIPS
First time all tests pass!
2015-11-10 09:22:58 +01:00
Alessandro Di Federico 94864e49b5 Introduce support for virtual addresses
* mmap on the PTC side before doing any translation
* Update usages of virtual addresses
* Refactor options to have --load-at and --entry
* Update tests according to the changes
2015-11-10 00:05:21 +01:00
Alessandro Di Federico 91a01937cf Let support.c know about the target architecture 2015-11-07 15:02:12 +01:00
Alessandro Di Federico f6ae68516d Use llc from the given LLVM installation 2015-11-07 15:01:34 +01:00
Alessandro Di Federico 15cfbee422 Make reference to QEMU install path and dlopen an absolute path 2015-10-27 11:56:08 +01:00
Alessandro Di Federico 9cf82f36d8 Introduce testing framework
* Import single-function calculator
* Create a puppet CMake project for cross-compiling
* Create a CMake manager for the tests
2015-10-27 09:13:14 +01:00