]> git.saurik.com Git - apple/dyld.git/blobdiff - testing/test-cases/NSCreateObjectFileImageFromFile-basic.dtest/main.c
dyld-519.2.1.tar.gz
[apple/dyld.git] / testing / test-cases / NSCreateObjectFileImageFromFile-basic.dtest / main.c
diff --git a/testing/test-cases/NSCreateObjectFileImageFromFile-basic.dtest/main.c b/testing/test-cases/NSCreateObjectFileImageFromFile-basic.dtest/main.c
new file mode 100644 (file)
index 0000000..49341b3
--- /dev/null
@@ -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 <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <mach-o/dyld.h>
+
+
+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;
+}
+