// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2020 Huawei Technologies Co., Ltd */ extern "C" { #include #include #include #include #include "cxx_tests.h" #include "os_test.h" }; class CtorTest { public: CtorTest() : val(1) {} int val; }; static CtorTest ctor_test; TEE_Result ta_entry_cxx_ctor_main(void) { if (ctor_test.val != 1) return TEE_ERROR_GENERIC; return TEE_SUCCESS; } TEE_Result ta_entry_cxx_ctor_shlib(void) { return os_test_shlib_cxx_ctor(); } TEE_Result ta_entry_cxx_ctor_shlib_dl(void) { TEE_Result res = TEE_ERROR_GENERIC; TEE_Result (*ctor_test_fn)(void); void *handle = NULL; handle = dlopen("b3091a65-9751-4784-abf7-0298a7cc35ba", RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE); if (!handle) return TEE_ERROR_GENERIC; ctor_test_fn = (TEE_Result (*)(void))dlsym(handle, "os_test_shlib_dl_cxx_ctor"); if (ctor_test_fn) res = ctor_test_fn(); dlclose(handle); return res; } class MyException { }; TEE_Result ta_entry_cxx_exc_main(void) { try { throw MyException(); } catch (MyException &e) { return TEE_SUCCESS; } return TEE_ERROR_GENERIC; } class MixedFrameException { }; void throw_mfe(void) { throw MixedFrameException(); } class MixedFrameExceptionTest { public: MixedFrameExceptionTest() {} bool test(); }; bool MixedFrameExceptionTest::test() { try { throwing_c_func(); } catch (MixedFrameException e) { return true; } return false; } TEE_Result ta_entry_cxx_exc_mixed(void) { MixedFrameExceptionTest test; if (test.test()) return TEE_SUCCESS; return TEE_ERROR_GENERIC; }