diff --git a/Cargo.toml b/Cargo.toml index fb6b88f..9ff2d1b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "haybale" -version = "0.6.1" +version = "0.7.0-pre" authors = ["Craig Disselkoen "] edition = "2018" description = "Symbolic execution of LLVM IR, written in Rust" diff --git a/README.md b/README.md index ff937a4..2cbe50a 100644 --- a/README.md +++ b/README.md @@ -39,11 +39,11 @@ to the LLVM version you want: ```toml [dependencies] -haybale = { version = "0.6.1", features = ["llvm-10"] } +haybale = { version = "0.6.2", features = ["llvm-11"] } ``` -As of 0.6.1, the supported LLVM versions are `llvm-9` and `llvm-10`. -(The Git version you're looking at also supports `llvm-11`.) +Currently, the supported LLVM versions are `llvm-9`, `llvm-10`, and +`llvm-11`. `haybale` depends (indirectly) on the LLVM and Boolector libraries, which must both be available on your system. @@ -270,13 +270,13 @@ or of course you can generate local documentation with `cargo doc --open`. ## Compatibility -Currently, the official crates.io releases of `haybale` (`0.6.x` series) -depend on Boolector 3.2.1 and either LLVM 9 or 10, depending on whether you -select the `llvm-9` or `llvm-10` feature. -As of this writing, choosing `llvm-9` vs `llvm-10` has essentially no effect +Currently, the official crates.io releases of `haybale` (`0.6.2` and later) +depend on Boolector 3.2.1 and either LLVM 9, 10, or 11, depending on whether you +select the `llvm-9`, `llvm-10`, or `llvm-11` feature. +As of this writing, choosing an LLVM version has essentially no effect on `haybale`'s features or interface; the only difference is the ability to -analyze bitcode generated with LLVM 10. (And the LLVM 10 version can process -`AtomicRMW` instructions; see +analyze bitcode generated with newer LLVMs. (And the LLVM 10 and 11 versions +can process `AtomicRMW` instructions; see [#12](https://github.com/PLSysSec/haybale/issues/12).) LLVM 8 is supported on the `llvm-8` branch of this repo. This version is @@ -295,6 +295,18 @@ solver (via the Rust [`boolector`] crate). ## Changelog +### Version 0.6.2 (Oct 20, 2020) + +- Support for LLVM 11 via the `llvm-11` feature +- [`get_possible_return_values_of_func()`] now handles void functions properly +([#10](https://github.com/PLSysSec/haybale/issues/10)) +- Support LLVM `atomicrmw` instructions (only for LLVM 10+) +([#12](https://github.com/PLSysSec/haybale/issues/12)) +- Support LLVM `freeze` instructions (which only exist in LLVM 10+) +- Built-in support for a few more Rust standard-library functions related to +panic handling +- [`State`] has a new public method [`get_bv_by_irname()`] + ### Version 0.6.1 (Sep 17, 2020) - Both [`State`] and [`Project`] now have a method `size_in_bits()` which @@ -577,47 +589,48 @@ Initial release! [`llvm-sys`]: https://crates.io/crates/llvm-sys [`boolector-sys`]: https://crates.io/crates/boolector-sys/ [KLEE]: https://klee.github.io/ -[`Project`]: https://docs.rs/haybale/0.6.1/haybale/project/struct.Project.html -[`Project` documentation]: https://docs.rs/haybale/0.6.1/haybale/project/struct.Project.html -[`Project::get_func_by_name()`]: https://docs.rs/haybale/0.6.1/haybale/project/struct.Project.html#method.get_func_by_name -[`get_possible_return_values_of_func()`]: https://docs.rs/haybale/0.6.1/haybale/fn.get_possible_return_values_of_func.html -[`find_zero_of_func()`]: https://docs.rs/haybale/0.6.1/haybale/fn.find_zero_of_func.html -[`ExecutionManager`]: https://docs.rs/haybale/0.6.1/haybale/struct.ExecutionManager.html -[`ExecutionManager` documentation]: https://docs.rs/haybale/0.6.1/haybale/struct.ExecutionManager.html -[`symex_function()`]: https://docs.rs/haybale/0.6.1/haybale/fn.symex_function.html -[`Config`]: https://docs.rs/haybale/0.6.1/haybale/config/struct.Config.html +[`Project`]: https://docs.rs/haybale/0.6.2/haybale/project/struct.Project.html +[`Project` documentation]: https://docs.rs/haybale/0.6.2/haybale/project/struct.Project.html +[`Project::get_func_by_name()`]: https://docs.rs/haybale/0.6.2/haybale/project/struct.Project.html#method.get_func_by_name +[`get_possible_return_values_of_func()`]: https://docs.rs/haybale/0.6.2/haybale/fn.get_possible_return_values_of_func.html +[`find_zero_of_func()`]: https://docs.rs/haybale/0.6.2/haybale/fn.find_zero_of_func.html +[`ExecutionManager`]: https://docs.rs/haybale/0.6.2/haybale/struct.ExecutionManager.html +[`ExecutionManager` documentation]: https://docs.rs/haybale/0.6.2/haybale/struct.ExecutionManager.html +[`symex_function()`]: https://docs.rs/haybale/0.6.2/haybale/fn.symex_function.html +[`Config`]: https://docs.rs/haybale/0.6.2/haybale/config/struct.Config.html [`BV`]: https://docs.rs/boolector/0.3.0/boolector/struct.BV.html -[`ReturnValue`]: https://docs.rs/haybale/0.6.1/haybale/enum.ReturnValue.html -[`Error`]: https://docs.rs/haybale/0.6.1/haybale/enum.Error.html -[`State`]: https://docs.rs/haybale/0.6.1/haybale/struct.State.html -[`Location`]: https://docs.rs/haybale/0.6.1/haybale/struct.Location.html -[`Project::get_inner_struct_type_from_named()`]: https://docs.rs/haybale/0.6.1/haybale/struct.Project.html#method.get_inner_struct_type_from_named -[`State::add_mem_watchpoint()`]: https://docs.rs/haybale/0.6.1/haybale/struct.State.html#method.add_mem_watchpoint -[`FunctionHooks::add_cpp_demangled()`]: https://docs.rs/haybale/0.6.1/haybale/function_hooks/struct.FunctionHooks.html#method.add_cpp_demangled -[`FunctionHooks::add_rust_demangled()`]: https://docs.rs/haybale/0.6.1/haybale/function_hooks/struct.FunctionHooks.html#method.add_rust_demangled -[`FunctionHooks::add_inline_asm_hook()`]: https://docs.rs/haybale/0.6.1/haybale/function_hooks/struct.FunctionHooks.html#method.add_inline_asm_hook -[`FunctionHooks::add_default_hook()`]: https://docs.rs/haybale/0.6.1/haybale/function_hooks/struct.FunctionHooks.html#method.add_default_hook -[`function_hooks`]: https://docs.rs/haybale/0.6.1/haybale/function_hooks/index.html -[`generic_stub_hook`]: https://docs.rs/haybale/0.6.1/haybale/function_hooks/fn.generic_stub_hook.html -[`abort_hook`]: https://docs.rs/haybale/0.6.1/haybale/function_hooks/fn.abort_hook.html -[`Config.initial_mem_watchpoints`]: https://docs.rs/haybale/0.6.1/haybale/config/struct.Config.html#structfield.initial_mem_watchpoints -[`Config.demangling`]: https://docs.rs/haybale/0.6.1/haybale/config/struct.Config.html#structfield.demangling -[`Config.print_source_info`]: https://docs.rs/haybale/0.6.1/haybale/config/struct.Config.html#structfield.print_source_info -[`Config.print_module_name`]: https://docs.rs/haybale/0.6.1/haybale/config/struct.Config.html#structfield.print_module_name -[`Config.trust_llvm_assumes`]: https://docs.rs/haybale/0.6.1/haybale/config/struct.Config.html#structfield.trust_llvm_assumes -[`Config.solver_query_timeout`]: https://docs.rs/haybale/0.6.1/haybale/config/struct.Config.html#structfield.solver_query_timeout -[`Config.squash_unsats`]: https://docs.rs/haybale/0.6.1/haybale/config/struct.Config.html#structfield.squash_unsats -[`Config.max_callstack_depth`]: https://docs.rs/haybale/0.6.1/haybale/config/struct.Config.html#structfield.max_callstack_depth -[`Config.max_memcpy_length`]: https://docs.rs/haybale/0.6.1/haybale/config/struct.Config.html#structfield.max_memcpy_length -[`Config.callbacks`]: https://docs.rs/haybale/0.6.1/haybale/config/struct.Config.html#structfield.callbacks -[`Config.null_pointer_checking`]: https://docs.rs/haybale/0.6.1/haybale/config/struct.Config.html#structfield.null_pointer_checking -[`backend::BV`]: https://docs.rs/haybale/0.6.1/haybale/backend/trait.BV.html -[`backend::Memory`]: https://docs.rs/haybale/0.6.1/haybale/backend/trait.Memory.html -[`new_uninitialized()`]: https://docs.rs/haybale/0.6.1/haybale/backend/trait.Memory.html#tymethod.new_uninitialized -[`new_zero_initialized()`]: https://docs.rs/haybale/0.6.1/haybale/backend/trait.Memory.html#tymethod.new_zero_initialized -[`State.full_error_message_with_context()`]: https://docs.rs/haybale/0.6.1/haybale/struct.State.html#method.full_error_message_with_context -[`memcpy_bv`]: https://docs.rs/haybale/0.6.1/haybale/hook_utils/fn.memcpy_bv.html -[`memset_bv`]: https://docs.rs/haybale/0.6.1/haybale/hook_utils/fn.memset_bv.html -[`layout::size_opaque_aware`]: https://docs.rs/haybale/0.6.1/haybale/struct.State.html#method.size_opaque_aware -[`pointer_size_bits()`]: https://docs.rs/haybale/0.6.1/haybale/struct.Project.html#method.pointer_size_bits -[`solver_utils::PossibleSolutions`]: https://docs.rs/haybale/0.6.1/haybale/solver_utils/enum.PossibleSolutions.html +[`ReturnValue`]: https://docs.rs/haybale/0.6.2/haybale/enum.ReturnValue.html +[`Error`]: https://docs.rs/haybale/0.6.2/haybale/enum.Error.html +[`State`]: https://docs.rs/haybale/0.6.2/haybale/struct.State.html +[`Location`]: https://docs.rs/haybale/0.6.2/haybale/struct.Location.html +[`Project::get_inner_struct_type_from_named()`]: https://docs.rs/haybale/0.6.2/haybale/struct.Project.html#method.get_inner_struct_type_from_named +[`State::add_mem_watchpoint()`]: https://docs.rs/haybale/0.6.2/haybale/struct.State.html#method.add_mem_watchpoint +[`FunctionHooks::add_cpp_demangled()`]: https://docs.rs/haybale/0.6.2/haybale/function_hooks/struct.FunctionHooks.html#method.add_cpp_demangled +[`FunctionHooks::add_rust_demangled()`]: https://docs.rs/haybale/0.6.2/haybale/function_hooks/struct.FunctionHooks.html#method.add_rust_demangled +[`FunctionHooks::add_inline_asm_hook()`]: https://docs.rs/haybale/0.6.2/haybale/function_hooks/struct.FunctionHooks.html#method.add_inline_asm_hook +[`FunctionHooks::add_default_hook()`]: https://docs.rs/haybale/0.6.2/haybale/function_hooks/struct.FunctionHooks.html#method.add_default_hook +[`function_hooks`]: https://docs.rs/haybale/0.6.2/haybale/function_hooks/index.html +[`generic_stub_hook`]: https://docs.rs/haybale/0.6.2/haybale/function_hooks/fn.generic_stub_hook.html +[`abort_hook`]: https://docs.rs/haybale/0.6.2/haybale/function_hooks/fn.abort_hook.html +[`Config.initial_mem_watchpoints`]: https://docs.rs/haybale/0.6.2/haybale/config/struct.Config.html#structfield.initial_mem_watchpoints +[`Config.demangling`]: https://docs.rs/haybale/0.6.2/haybale/config/struct.Config.html#structfield.demangling +[`Config.print_source_info`]: https://docs.rs/haybale/0.6.2/haybale/config/struct.Config.html#structfield.print_source_info +[`Config.print_module_name`]: https://docs.rs/haybale/0.6.2/haybale/config/struct.Config.html#structfield.print_module_name +[`Config.trust_llvm_assumes`]: https://docs.rs/haybale/0.6.2/haybale/config/struct.Config.html#structfield.trust_llvm_assumes +[`Config.solver_query_timeout`]: https://docs.rs/haybale/0.6.2/haybale/config/struct.Config.html#structfield.solver_query_timeout +[`Config.squash_unsats`]: https://docs.rs/haybale/0.6.2/haybale/config/struct.Config.html#structfield.squash_unsats +[`Config.max_callstack_depth`]: https://docs.rs/haybale/0.6.2/haybale/config/struct.Config.html#structfield.max_callstack_depth +[`Config.max_memcpy_length`]: https://docs.rs/haybale/0.6.2/haybale/config/struct.Config.html#structfield.max_memcpy_length +[`Config.callbacks`]: https://docs.rs/haybale/0.6.2/haybale/config/struct.Config.html#structfield.callbacks +[`Config.null_pointer_checking`]: https://docs.rs/haybale/0.6.2/haybale/config/struct.Config.html#structfield.null_pointer_checking +[`backend::BV`]: https://docs.rs/haybale/0.6.2/haybale/backend/trait.BV.html +[`backend::Memory`]: https://docs.rs/haybale/0.6.2/haybale/backend/trait.Memory.html +[`new_uninitialized()`]: https://docs.rs/haybale/0.6.2/haybale/backend/trait.Memory.html#tymethod.new_uninitialized +[`new_zero_initialized()`]: https://docs.rs/haybale/0.6.2/haybale/backend/trait.Memory.html#tymethod.new_zero_initialized +[`State.full_error_message_with_context()`]: https://docs.rs/haybale/0.6.2/haybale/struct.State.html#method.full_error_message_with_context +[`memcpy_bv`]: https://docs.rs/haybale/0.6.2/haybale/hook_utils/fn.memcpy_bv.html +[`memset_bv`]: https://docs.rs/haybale/0.6.2/haybale/hook_utils/fn.memset_bv.html +[`layout::size_opaque_aware`]: https://docs.rs/haybale/0.6.2/haybale/struct.State.html#method.size_opaque_aware +[`pointer_size_bits()`]: https://docs.rs/haybale/0.6.2/haybale/struct.Project.html#method.pointer_size_bits +[`solver_utils::PossibleSolutions`]: https://docs.rs/haybale/0.6.2/haybale/solver_utils/enum.PossibleSolutions.html +[`get_bv_by_irname()`]: https://docs.rs/haybale/0.6.2/haybale/struct.State.html#method.get_bv_by_irname diff --git a/src/lib.rs b/src/lib.rs index 59cc651..e8f0f6e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,7 +6,7 @@ // it was especially necessary when the docs.rs docs weren't working for any // llvm-sys consumers; now that we have docs.rs as the official docs, I'm not // sure if this is necessary or helpful anymore -#![doc(html_root_url = "https://docs.rs/haybale/0.6.1")] +#![doc(html_root_url = "https://docs.rs/haybale/0.6.2")] use llvm_ir::Type; use std::collections::HashSet;