The registered signal handler can return two states:

1.ContinueType:Search
 Continue searching for the next registered signal handler.

2.ContinueType::Execution
Continue to execute the instruction that caused the exception.

If the exception is not handled on the handler chain (all return 
ContinueType:Search), the default handler will inject panic, and we can catch 
unwind.

config.xml:

`<HeapMaxSize>0x80000</HeapMaxSize>`

sample code:
```
use std::alloc;
use std::backtrace::{self, PrintFormat};
use std::panic;
use std::vec::Vec;
use sgx_signal::ContinueType;
use sgx_signal::exception;
use sgx_types::sgx_exception_info_t;

#[no_mangle]
pub extern "C" fn ecall_entry() {
    let _ = backtrace::enable_backtrace("enclave.signal.so", PrintFormat::Full);
    let handler = {
        move |_info: &mut sgx_exception_info_t| {
            ContinueType::Search
        }
    };
    
    alloc::set_alloc_error_hook(|layout| {
        println!("memory allocation of {} bytes failed", layout.size());
        unsafe { std::intrinsics::abort() };
    });

    let _h = exception::register_exception(true, handler);
    
    panic::catch_unwind(|| {
        test_alloc_memory()
    }).ok();

    let mut success =  vec![0_u8; 0x20000];
    success[0] = 1;
}

#[no_mangle]
#[inline(never)]
fn test_alloc_memory() {
    let _failed = vec![0_u8; 0x100000];
}
```

@reuvenpo hope it can help you.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/apache/incubator-teaclave-sgx-sdk/issues/254#issuecomment-652804768

Reply via email to