X-Git-Url: https://git.saurik.com/apple/dyld.git/blobdiff_plain/dd1e3476105179eb3efd5ebd2af97f6de91170b3..16b475fcb248267b8b51f759bc62a49ec2afa88d:/testing/test-cases/lazy-symbol-missing.dtest/runner.cpp diff --git a/testing/test-cases/lazy-symbol-missing.dtest/runner.cpp b/testing/test-cases/lazy-symbol-missing.dtest/runner.cpp new file mode 100644 index 0000000..aadd53f --- /dev/null +++ b/testing/test-cases/lazy-symbol-missing.dtest/runner.cpp @@ -0,0 +1,55 @@ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if __arm64e__ + // arm64e uses chained binds which does not support lazy binding + #define SUPPORTS_LAZY_BINDING 0 +#else + #define SUPPORTS_LAZY_BINDING 1 +#endif + +#include "test_support.h" + +int main(int argc, const char* argv[], const char* envp[], const char* apple[]) { +#if SUPPORTS_LAZY_BINDING + _process process; + process.set_executable_path(RUN_DIR "/lazy-symbol-missing-called.exe"); + const char* env[] = { "TEST_OUTPUT=None", NULL}; + process.set_env(env); + process.set_exit_handler(^(pid_t pid) { + LOG("Child exited pid=%d", pid); + + struct proc_exitreasoninfo info; + bzero(&info, sizeof(info)); + uint8_t packReasonData[OS_REASON_BUFFER_MAX_SIZE]; + bzero(packReasonData, OS_REASON_BUFFER_MAX_SIZE); + info.eri_reason_buf_size = OS_REASON_BUFFER_MAX_SIZE; + info.eri_kcd_buf = (user_addr_t)packReasonData; + LOG("info=%p", &info); + int procResult = proc_pidinfo(pid, PROC_PIDEXITREASONINFO, 1, &info, PROC_PIDEXITREASONINFO_SIZE); + if ( procResult != sizeof(struct proc_exitreasoninfo) ) { + FAIL("bad return size from proc_pidinfo(), %d expected %lu", procResult, PROC_PIDEXITREASONINFO_SIZE); + } + if ( info.eri_namespace != OS_REASON_DYLD ) { + FAIL("eri_namespace (%d) != OS_REASON_DYLD", info.eri_namespace); + } + PASS("Success"); + }); + (void)process.launch(); +#endif + PASS("Success"); +} +