]>
git.saurik.com Git - apple/dyld.git/blob - testing/test-cases/_dyld_is_memory_immutable.dtest/main.c
2 // BUILD: $CC foo.c -dynamiclib -install_name $RUN_DIR/libfoo.dylib -o $BUILD_DIR/libfoo.dylib
3 // BUILD: $CC bar.c -dynamiclib -install_name $RUN_DIR/libbar.dylib -o $BUILD_DIR/libbar.dylib
4 // BUILD: $CC main.c -DRUN_DIR="$RUN_DIR" $BUILD_DIR/libfoo.dylib -o $BUILD_DIR/dyld_immutable_test.exe
6 // RUN: ./dyld_immutable_test.exe
11 #include <mach-o/dyld.h>
12 #include <mach-o/dyld_priv.h>
14 typedef const char* (*BarProc
)(void);
16 extern uint32_t _cpu_capabilities
;
17 extern const char* foo();
19 const char* myStr
= "myStr";
26 printf("[BEGIN] _dyld_is_memory_immutable\n");
28 if ( !_dyld_is_memory_immutable(myStr
, 6) ) {
29 printf("[FAIL] _dyld_is_memory_immutable() returned false for string in main executable\n");
33 if ( _dyld_is_memory_immutable(strdup("hello"), 6) ) {
34 printf("[FAIL] _dyld_is_memory_immutable() returned true for result from strdup()\n");
38 if ( _dyld_is_memory_immutable(&myInt
, 4) ) {
39 printf("[FAIL] _dyld_is_memory_immutable() returned true for global variabe in main executable\n");
43 if ( !_dyld_is_memory_immutable(foo(), 4) ) {
44 printf("[FAIL] _dyld_is_memory_immutable() returned false for string in statically linked dylib\n");
48 if ( !_dyld_is_memory_immutable(&strcpy
, 4) ) {
49 printf("[FAIL] _dyld_is_memory_immutable() returned false for function in dyld shared cache\n");
53 if ( _dyld_is_memory_immutable(&_cpu_capabilities
, 4) ) {
54 printf("[FAIL] _dyld_is_memory_immutable() returned true for global variable in shared cache\n");
58 void* handle
= dlopen(RUN_DIR
"/libbar.dylib", RTLD_FIRST
);
59 if ( handle
== NULL
) {
60 printf("[FAIL] dlopen(libbar.dylib) failed");
64 BarProc proc
= dlsym(handle
, "bar");
66 printf("[FAIL] dlsym(bar) failed\n");
69 const char* barStr
= (*proc
)();
70 if ( _dyld_is_memory_immutable(barStr
, 4) ) {
71 printf("[FAIL] _dyld_is_memory_immutable() returned true for string in unloadable dylib\n");
76 printf("[PASS] _dyld_is_memory_immutable\n");