Commit Graph

147 Commits

Author SHA1 Message Date
Tristan Ravitch
17d00036f1 Fix a bug with the syscall instruction semantics
The previous implementation missed an IP update, which is required to prevent
macaw from treating the syscall instruction as its own basic block.  Also factor
out the implementation of SC so that we can re-use it later for TW.
2017-11-04 22:42:01 -07:00
Tristan Ravitch
e765345a7b Add support for the Syscall arch-specific terminator 2017-11-04 16:23:12 -07:00
Tristan Ravitch
eaaa4abce7 Switch to a ContT-based PPCGenerator monad
This is required to support both block splitting and early returns due to other
block terminators.
2017-11-04 13:38:57 -07:00
Tristan Ravitch
f6d3f0f1de Save the simplified IP at each decoding step
If we don't do this, the saved IP is unsimplified and contains expressions,
which means that the next decoding step won't simplify properly (it would
require recursive simplification, which we would prefer to avoid).
2017-11-03 20:03:52 -07:00
Tristan Ravitch
6f475c4e79 Expand the simplifier
It is now architecture-independent and covers enough (in principle) to work for
PowerPC computed jumps
2017-11-03 18:18:07 -07:00
Ben Selfridge
e2a71d62ca Deleted a few turds 2017-11-03 16:36:06 -07:00
Ben Selfridge
8d530b4f3f Deleted old export of PPCWidth from PPCReg.hs 2017-11-03 15:23:24 -07:00
Ben Selfridge
eff3fa6425 Consolidated constraints into one: PPCArchConstraints 2017-11-03 15:20:46 -07:00
Ben Selfridge
7dd2a2a385 Merge branch 'master' of gitlab-ext.galois.com:macaw/macaw-semmc 2017-11-03 15:19:51 -07:00
Ben Selfridge
889c988d4b Added Base.hs, for some reason magit didn't warn me it hadn't been added 2017-11-03 15:18:05 -07:00
Tristan Ravitch
0e9b739503 Implement test_bit_dynamic in the TH translation of semantics
It translates to a BVTestBit (since here we know which bit to extract, whereas
we don't in the semantics).
2017-11-03 15:07:52 -07:00
Ben Selfridge
a7c7600a20 Removed unused functions from TH.hs and put them in a standalone module 2017-11-02 11:43:27 -07:00
Tristan Ravitch
c788aebab8 Update the dismantle submodule
This fixes a bug in parsing the stdu instruction that was causing our test to
implode.  It still isn't right, but it gets farther (and parses two instructions
out of the block).
2017-10-31 22:23:57 -07:00
Tristan Ravitch
81310c9c0f Implement a very simple simplifier for use in the disassembler
This simplifier just evaluates some constant forms that appear as IP value
updates.  This is enough to let us pass the check we need to without relying on
the full rewriter, which is too heavyweight for our needs.  Furthermore, macaw
itself calls the rewriter, so duplicating that effort is very wasteful.
2017-10-31 22:04:28 -07:00
David Johnson
c611717735
Tracing to track rewriting bug 2017-10-31 18:52:12 -07:00
Ben Selfridge
f3f07ff099 Adding rewriting to macaw-ppc translation 2017-10-27 21:08:47 -07:00
Ben Selfridge
16839e30c1 Test runs, fails at identifyCall 2017-10-27 14:29:04 -07:00
Ben Selfridge
bc2dc76be6 Working on findElfEntryPoint, which does a double-lookup for PowerPC. 2017-10-26 18:38:47 -07:00
Ben Selfridge
0a1d46c581 Finally have an actual PPC binary for test-just-exit test. 2017-10-25 15:02:16 -07:00
Ben Selfridge
be61b37569 fixed test case, which was x86. now it's powerpc. test still fails. 2017-10-24 17:22:57 -07:00
Ben Selfridge
2ada779a1f test-just-exit 2017-10-24 17:21:00 -07:00
Ben Selfridge
2a7213f416 Added a simple test, which fails. 2017-10-24 16:36:36 -07:00
Tristan Ravitch
0fb90e5d6b Update dismantle and semmc
This adds some more general instances needed for higher-level dependencies
2017-10-23 18:06:32 -07:00
Tristan Ravitch
8379d76da5 [ppc] Fix a bug in the translation of BVConcat
The second bitvector was never actually used
2017-10-23 09:47:12 -07:00
Tristan Ravitch
dd91bc2fe8 Rename the cabal.project file
Users should symlink the file the correct name locally; this makes it easier to
use the project as a submodule
2017-10-23 09:46:00 -07:00
Tristan Ravitch
ffaa912b74 Convert from applicative to nested binds in the TH code
This makes the generated splices much easier to read, which will be helpful for debugging.
2017-10-18 22:40:53 -07:00
Tristan Ravitch
28b7b68881 Fill out more of the PPC semantics translation
This covers all of the floating point used so far, as well as memory operations.
Note that this commit relies on changes that aren't pushed to macaw yet.
2017-10-18 17:48:07 -07:00
Tristan Ravitch
d893ce8dcb Fix the BVConcat translation 2017-10-18 17:47:29 -07:00
Tristan Ravitch
601ea06e07 Fix a TH bug
We were generating a literal TH expression when we meant to generate a splice
2017-10-18 17:46:47 -07:00
Tristan Ravitch
344b253bf8 Add missing cases for the XER reg 2017-10-18 17:42:42 -07:00
Tristan Ravitch
f2f3b33fca Convert floating point round to single precision 2017-10-18 17:42:42 -07:00
Ben Selfridge
74b5d85beb Added test skeleton, rearranged some TH stuff 2017-10-18 14:27:29 -07:00
Tristan Ravitch
ace4520846 Update to the latest macaw 2017-10-18 10:29:57 -07:00
Tristan Ravitch
49545299d9 Add cases for FP operation translation 2017-10-18 08:49:09 -07:00
Tristan Ravitch
13def38f25 Fix some compilation errors with an improved evaluator in semmc 2017-10-17 21:38:53 -07:00
Tristan Ravitch
2a7c5bd541 Extend the uninterpreted function evaluator
It is currently very messy because the ppc.is_r0 function breaks some
abstraction boundaries that make it very irregular.  There is some common code
that can probably be factored out, but it will still be a mess.

The other big change is handling the read_mem calls.
2017-10-17 19:16:31 -07:00
Tristan Ravitch
eb8b78b372 Add support for a number of new uninterpreted functions
This covers evaluating all of the statically-evaluated functions in expression
contexts (e.g., is_r0 and the memory reference extraction functions).

The expansion seems pretty reasonable.

There are still some cases to handle w.r.t. floating point elementary functions
and memory reads and writes, which need to be handled a bit differently.

Note: we also have to call the formula simplifier soon.
2017-10-17 17:07:03 -07:00
Ben Selfridge
ccd344f027 Merge branch 'master' of gitlab-ext.galois.com:macaw/macaw-semmc 2017-10-17 12:32:40 -07:00
Ben Selfridge
0649ea4f0c Nearly done with semmc->macaw, need to complete addEltTH function 2017-10-17 12:27:57 -07:00
Tristan Ravitch
07c48afe46 Add instantiations for some uninterpreted functions
This covers functions that are used to isolate locations to be defined from
composite operands (e.g., the base registers of memrr and memri operands).
2017-10-17 11:51:11 -07:00
Tristan Ravitch
db2da637b0 Update the semmc submodule 2017-10-16 23:27:44 -07:00
Tristan Ravitch
cf0a6df0da Simplify the sequencing of our generated monadic PPCGenerator actions
We were building up a list and calling sequence; instead, just generate a single
do block directly
2017-10-16 19:51:32 -07:00
Ben Selfridge
1a5946bd0d Nearly done with semmc -> macaw, need to complete a few more cases 2017-10-16 16:40:51 -07:00
Ben Selfridge
e2121de437 Finished bound variable case in addEltTH 2017-10-16 15:53:28 -07:00
Ben Selfridge
17e44dae2a Merge branch 'master' of gitlab-ext.galois.com:macaw/macaw-semmc 2017-10-16 15:37:49 -07:00
Ben Selfridge
fdf03c5c80 Rearranged a few things 2017-10-16 15:37:19 -07:00
Tristan Ravitch
792eb1aaf9 [ppc] Add a helper for turning operands into bitvectors
The main function is 'extractValue', which takes an operand and returns a macaw
bitvector for it (in the PPCGenerator monad).

There are still some missing cases for the memory operands.
2017-10-16 15:11:16 -07:00
Ben Selfridge
690687b0b6 started fixing up the BoundVar case 2017-10-16 14:15:12 -07:00
Ben Selfridge
62d26946dc merging because semmc is being weird 2017-10-16 11:38:38 -07:00
Ben Selfridge
ebe47b74fc work in progress TH translation 2017-10-16 11:35:12 -07:00