blob: 1761843698c5bc44d1f52bba3ced00a7ddec5555 [file] [log] [blame]
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2020 Huawei Technologies Co., Ltd
*/
extern "C" {
#include <dlfcn.h>
#include <os_test_lib.h>
#include <stdint.h>
#include <tee_ta_api.h>
#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;
}