ChuanDou2021 opened a new issue, #401:
URL: https://github.com/apache/incubator-teaclave-sgx-sdk/issues/401

   I built a demo to calc Sha256,but got `Illegal instruction (core dumped)`. 
   The Sha256 comes from crate [sha2](https://crates.io/crates/sha2).
   
   ```sh
   cd samplecode/helloworld
   BUILD_STD=cargo make
   cd bin
   ./app
   
   [+] Init Enclave Successful 2!
   This is a normal world string passed into Enclave!
   target_env = not sgx
   Illegal instruction (core dumped)
   ```
   
   After some research,I found crate `cpufeatures` which `sha2`'s dependent 
library failed detect 'target_env = "sgx"',
   `cpufeatures` uses `cpuid` to check cpu features, then crash.
   
   And I found the file 
[x86_64-unknown-linux-sgx.json](https://github.com/apache/incubator-teaclave-sgx-sdk/blob/v2.0.0-preview/rustlib/x86_64-unknown-linux-sgx.json),
 assign `env` the value `gnu` , than's the problem, if I change `env` value 
from `gnu` to `sgx`, it's ok.
   
   ```sh
   [+] Init Enclave Successful 2!
   This is a normal world string passed into Enclave!
   target_env = sgx
   This is a in-Enclave Rust string!
   [+] ECall Success...
   ```
   
   This is my demo codes:
   
   ```sh
   diff --git a/samplecode/helloworld/enclave/Cargo.toml 
b/samplecode/helloworld/enclave/Cargo.toml
   index 40d61163..81b6301a 100644
   --- a/samplecode/helloworld/enclave/Cargo.toml
   +++ b/samplecode/helloworld/enclave/Cargo.toml
   @@ -31,3 +31,7 @@ default = []
    [target.'cfg(not(target_vendor = "teaclave"))'.dependencies]
    sgx_types = { path = "../../../sgx_types" }
    sgx_tstd = { path = "../../../sgx_tstd" }
   +
   +[dependencies]
   +sha2 = "0.10.2"
   +hex-literal = "0.3.4"
   diff --git a/samplecode/helloworld/enclave/src/lib.rs 
b/samplecode/helloworld/enclave/src/lib.rs
   index 5fd6daf4..66984701 100644
   --- a/samplecode/helloworld/enclave/src/lib.rs
   +++ b/samplecode/helloworld/enclave/src/lib.rs
   @@ -29,6 +29,9 @@ use std::slice;
    use std::string::String;
    use std::vec::Vec;
    
   +use hex_literal::hex;
   +use sha2::{Digest, Sha256, Sha512};
   +
    /// # Safety
    #[no_mangle]
    pub unsafe extern "C" fn say_something(some_string: *const u8, some_len: 
usize) -> SgxStatus {
   @@ -53,6 +56,28 @@ pub unsafe extern "C" fn say_something(some_string: 
*const u8, some_len: usize)
        // Rust style convertion
        hello_string += String::from_utf8(word_vec).expect("Invalid 
UTF-8").as_str();
    
   +    let target_env = {
   +        let mut s = String::new();
   +
   +        #[cfg(not(target_env = "sgx"))]
   +        s.push_str("not sgx");
   +
   +        #[cfg(target_env = "sgx")]
   +        s.push_str("sgx");
   +
   +        s
   +    };
   +    println!("target_env = {}", target_env);
   +
   +    let mut hasher = Sha256::new();
   +    // write input message
   +    hasher.update(b"hello world");
   +    let result = hasher.finalize();
   +    assert_eq!(
   +        result[..],
   +        
hex!("b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9")[..]
   +    );
   +
        // Ocall to normal world for output
        println!("{}", &hello_string);
    
   ```
   
   Thanks.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@teaclave.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@teaclave.apache.org
For additional commands, e-mail: notifications-h...@teaclave.apache.org

Reply via email to