X-Git-Url: https://git.saurik.com/apple/dyld.git/blobdiff_plain/d113e8b5ffc80ec29316b2eb968dfaa7502c1da8..10b92d3b56e938a5c1f5e708ddd1c5d0c2c807d1:/testing/test-cases/NSCreateObjectFileImageFromFile-basic.dtest/main.c?ds=sidebyside diff --git a/testing/test-cases/NSCreateObjectFileImageFromFile-basic.dtest/main.c b/testing/test-cases/NSCreateObjectFileImageFromFile-basic.dtest/main.c new file mode 100644 index 0000000..49341b3 --- /dev/null +++ b/testing/test-cases/NSCreateObjectFileImageFromFile-basic.dtest/main.c @@ -0,0 +1,70 @@ +// BUILD_ONLY: MacOSX + +// BUILD: $CC main.c -o $BUILD_DIR/NSCreateObjectFileImageFromFile-basic.exe -Wno-deprecated-declarations +// BUILD: $CC foo.c -o $BUILD_DIR/foo.bundle -bundle + +// RUN: ./NSCreateObjectFileImageFromFile-basic.exe $RUN_DIR/foo.bundle + + +#include +#include +#include +#include + + +int main(int argc, const char* argv[]) +{ + printf("[BEGIN] NSCreateObjectFileImageFromFile-basic\n"); + + const char* path = argv[1]; + + NSObjectFileImage ofi; + if ( NSCreateObjectFileImageFromFile(path, &ofi) != NSObjectFileImageSuccess ) { + printf("[FAIL] NSCreateObjectFileImageFromFile failed\n"); + return 0; + } + + NSModule mod = NSLinkModule(ofi, path, NSLINKMODULE_OPTION_NONE); + if ( mod == NULL ) { + printf("[FAIL] NSLinkModule failed\n"); + return 0; + } + + NSSymbol sym = NSLookupSymbolInModule(mod, "_fooInBundle"); + if ( sym == NULL ) { + printf("[FAIL] NSLookupSymbolInModule failed\n"); + return 0; + } + + void* func = NSAddressOfSymbol(sym); + if ( func == NULL ) { + printf("[FAIL] NSAddressOfSymbol failed\n"); + return 0; + } + + Dl_info info; + if ( dladdr(func, &info) == 0 ) { + printf("[FAIL] dladdr(&p, xx) failed"); + return 0; + } + //printf("_fooInBundle found in %s\n", info.dli_fname); + + if ( !NSUnLinkModule(mod, NSUNLINKMODULE_OPTION_NONE) ) { + printf("[FAIL] NSUnLinkModule failed\n"); + return 0; + } + + if ( dladdr(func, &info) != 0 ) { + printf("[FAIL] dladdr(&p, xx) found but should not have\n"); + return 0; + } + + if ( !NSDestroyObjectFileImage(ofi) ) { + printf("[FAIL] NSDestroyObjectFileImage failed\n"); + return 0; + } + + printf("[PASS] NSCreateObjectFileImageFromFile-basic\n"); + return 0; +} +