Skip to content
Snippets Groups Projects
Select Git revision
  • ee3bf5f260801a93468b54c87d8085096c90cce9
  • master default protected
2 results

main.rs

Blame
  • register.rs 1.92 KiB
    //! showcase volatile register
    //!
    //! $ cargo klee --bin register -r -g
    //! ...
    //! Reading symbols from register.replay...done.
    //!
    //! (gdb) set env KTEST_FILE=klee-last/test000001.ktest
    //! (gdb) run
    //! Starting program: /home/pln/rust/cargo-klee/klee-examples/target/release/deps/main2.replay
    //! [Inferior 1 (process 25074) exited with code 01]
    //!
    //! (gdb) set env KTEST_FILE=klee-last/test000003.ktest
    //! (gdb) run
    //! Starting program: /home/pln/rust/cargo-klee/klee-examples/target/release/deps/main2.replay
    //! rust_begin_unwind (_info=0x7fffffffd678)
    //!    at /home/pln/.cargo/git/checkouts/cargo-klee-8f30fda3bd23bb30/68dc73d/src/lang_items.rs:66
    //!            unsafe { intrinsics::abort() }
    //! (gdb) backtrace
    //! #0  rust_begin_unwind (_info=0x7fffffffd678)
    //!    at /home/pln/.cargo/git/checkouts/cargo-klee-8f30fda3bd23bb30/68dc73d/src/lang_items.rs:6
    //! #1  0x000055555555531c in core::panicking::panic_fmt () at src/libcore/panicking.rs:95
    //! #2  0x000055555555539b in core::panicking::panic () at src/libcore/panicking.rs:59
    //! #3  0x00005555555552a6 in main () at src/main2.rs:54
    //! (gdb) q
    //! A debugging session is active.
    //!
    //!        Inferior 1 [process 25893] will be killed.
    //! $ ktest-tool --write-int target/debug/deps/klee-last/test000003.ktest
    //! ktest file : 'target/debug/deps/klee-last/test000003.ktest'
    //! args       : ['/home/pln/rust/cargo-klee/klee-examples/target/debug/deps/main2-2a0fc03ce12ab528.ll']
    //! num objects: 2
    //! object    0: name: b'register'
    //! object    0: size: 4
    //! object    0: data: 0
    //! object    1: name: b'register'
    //! object    1: size: 4
    //! object    1: data: 0
    
    #![no_std]
    #![no_main]
    
    extern crate klee;
    extern crate panic_abort;
    
    extern crate volatile_register;
    use volatile_register::RO;
    
    #[no_mangle]
    fn main() {
        let rw: RO<u32> = unsafe { core::mem::uninitialized() };
    
        if rw.read() == 0 {
            if rw.read() == 0 {
                klee::abort();
            }
        }
    }