* Made Capstone an optional dependency (fixes#382).
* Introduced feature 'disas' for disassembly (related to #382).
* Made 'disas' a default feature in cretonne-tools.
* Fixed errors in src/compile.rs introduced by get_disassembler changes.
- Moves `use` statements before the function declaration.
- Returns an error if the disassembler cannot be found created.
This switches from a custom list of architectures to use the
target-lexicon crate.
- "set is_64bit=1; isa x86" is replaced with "target x86_64", and
similar for other architectures, and the `is_64bit` flag is removed
entirely.
- The `is_compressed` flag is removed too; it's no longer being used to
control REX prefixes on x86-64, ARM and Thumb are separate
architectures in target-lexicon, and we can figure out how to
select RISC-V compressed encodings when we're ready.
* Generate debug symbols in optimized builds.
This allows profiling tools to provide more accurate information,
especially details about inlined functions.
* Rewrite and optimize partition_slice
This improves the performance of the register allocation passes
which use LiveValueTracker.
It turns out that "cargo test --release" doesn't use
`[profile.release]`; it uses `[profile.bench]` instead; see
[here](https://doc.rust-lang.org/cargo/reference/manifest.html) for details.
So the plan to run the tests in optimized mode but with debug-assertions
enabled didn't actually work, and we had an actual failing unit test that
was hidden because assertions were disabled.
So, this makes test-all.sh just run the unit tests in debug mode, as is
the norm for Rust packages, and fixes the buggy test.
This also removes the `[profile.release]` override from the top-level
Cargo.toml file too. We don't need it now that we're not running tests
in release mode, and it had confused multiple people because it made
Cretonne's in-tree builds different from how Cretonne is built when used as
a dependency in other projects.
* Initial skeleton.
* Add basic faerie support.
This adds enough functionality to enable simple .o file writing through
faerie. This included adding the functionality to Module to support
RelocSink implementations.
* Add basic SimpleJIT support.
This adds enough functionality to enable a simple program to be jitted
and executed.
* Make declare_func_in_func take a Function instead of a Context.
It only needs the Function, and sometimes it's useful to call it from
places that don't have a full Context.
* Temporarily disable local and exported global variables in the Faerie backend.
Faerie assumes these variables use pc-relative offset instructions, and
Cretonne is not yet emitting those instructions.
* FaerieBackend depends on PIC.
Faerie itself only supports PIC objects for now, so add an assert to
Cretonne to check that it's using a PIC target flag.
* SimpleJIT support for data objects.
* Preliminary faerie support for data objects.
* Support for data objects in faerie using the new colocated flag.
* Unit tests for DataContext and friends.
* Add a Module::consume() function.
This consumes the Module and returns the contained Backend, so that
users can call Backend-specific functions with it. For example, the
Faerie backend has functions to write an object file.
* Update the new crates to version 0.4.4.
* Make FaerieBackend own its TargetIsa.
This simplifies its interface, as it eliminates a lifetime parameter.
While we may eventually want to look into allowing multiple clients to
share a TargetIsa, it isn't worth the complexity for FaerieBackend
right now.
* Don't try to protect faerie from multiple declarations.
Let faerie decide for itself whether it wants to consider two
declarations to be compatible.
* Use debug_assert_eq rather than debug_assert with ==.
* Fix FaerieRelocSink's reloc_external to handle data object names.
* Relax the asserts in get_function_definition and get_data_definition.
These functions don't require definable symbols, but they do require
that definable symbols be defined. This is needed for the simplejit
backend.
* Add a function to the faerie backend to retrieve the artifact name.
* Sync up with cretonne changes.
This makes it a little more consistent; now, "cretonne" is never capitalized
in identifier, path, or URL contexts. It is capitalized in natural
language contexts when referring to the project.
This allows us to run the tests via a library call rather than just
as a command execution. And, it's a step toward a broader goal, which
is to keep the code in the top-level src directory minimal, with
important functionality exposed as crates.
Refactor the filetests harness so that it can be run as part of
`cargo test`. And begin reorganizing the test harness code in preparation
for moving it out of the src directory.
- Test subcommand files are now named `test_*.rs`.
- cton-util subcommand files now just export their `run` and nothing else.
- src/filetest/mod.rs now also just exports `run` and nothing else.
- Tests are now run in release mode (with debug assertions enabled).