Adds support in macaw-aarch32 for conditional returns. These are not supported in core macaw, and are thus architecture-specific block terminators. This required changes to the type of arch-specific block terminators. Before, `ArchTermStmt` was only parameterized by a state thread (`ids`). This meant that they could not contain macaw (or crucible) values. Some work on. AArch32 requires being able to store condition values in arch terminators (to support conditional returns). This change modifies the `ArchTermStmt` to enable this, which requires a bit of plumbing through various definitions and some extra instances. In support of actually using this, it also became necessary to plumb fallthrough block labels through the architecture-specific terminator translation in macaw-symbolic. Note that this change was overdue, as the PowerPC backend was storing macaw values in a way that would have rendered them unusable in the macaw-ppc-symbolic translation, had any interpretation been provided. These new changes will enable a handler to be written for the conditional PowerPC trap instructions. PowerPC, x86, and ARM have been updated. Improves the macaw-aarch32 tests. There is now a command line option to save the generated macaw IR for each discovered function to /tmp. Note that this reuses some infrastructure from the macaw-symbolic tests. This shared functionality should be extracted into a macaw-testing library.
957 B
Revision history for macaw-base
Next
Features
API Changes
-
Architecture-specific block terminators can now contain macaw values
This changed the type of the architecture extension block terminators from
ArchTermStmt ids
toArchTermStmt f
wheref ~ Value arch ids
at the macaw level. -
Architecture backends can now configure the block classification during the discovery phase
The interface to configure block classification is exposed through the
ArchitectureInfo
. Note that clients that have not created their ownArchitectureInfo
from scratch should be unaffected (which is the vast majority). -
The post-discovery AST types are now exported from
Data.Macaw.Discovery.ParsedContents
It is recommended that future references to these types be done through this module. They are re-exported from their original location (
Data.Macaw.Discovery.State
) for backwards compatibility. One day that is likely to change.