]> git.saurik.com Git - apple/dyld.git/blob - testing/test-cases/_dyld_images_for_addresses.dtest/main.c
c44d1f29771506f8629a5efe8b5a6454cbc3fbfc
[apple/dyld.git] / testing / test-cases / _dyld_images_for_addresses.dtest / main.c
1
2 // BUILD: $CC foo.c -dynamiclib -install_name $RUN_DIR/libfoo.dylib -o $BUILD_DIR/libfoo.dylib
3 // BUILD: $CC main.c $BUILD_DIR/libfoo.dylib -o $BUILD_DIR/dyld_images_for_addresses.exe
4
5 // RUN: ./dyld_images_for_addresses.exe
6
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <uuid/uuid.h>
11 #include <mach-o/dyld_priv.h>
12
13 extern void* __dso_handle;
14
15 extern int foo1();
16 extern int foo2();
17 extern int foo3();
18
19
20 int myfunc()
21 {
22 return 3;
23 }
24
25 int myfunc2()
26 {
27 return 3;
28 }
29
30 static int mystaticfoo()
31 {
32 return 3;
33 }
34
35 int mydata = 5;
36 int myarray[10];
37
38
39 int main()
40 {
41 printf("[BEGIN] _dyld_images_for_addresses\n");
42 int mylocal;
43
44 const void* addresses[12];
45 addresses[0] = &myfunc;
46 addresses[1] = &myfunc2;
47 addresses[2] = &mystaticfoo;
48 addresses[3] = &__dso_handle;
49 addresses[4] = &mydata;
50 addresses[5] = &myarray;
51 addresses[6] = &mylocal; // not owned by dyld, so coresponding dyld_image_uuid_offset should be all zeros
52 addresses[7] = &foo1;
53 addresses[8] = &foo2;
54 addresses[9] = &foo3;
55 addresses[10] = &fopen;
56 addresses[11] = &fclose;
57
58 struct dyld_image_uuid_offset infos[12];
59 _dyld_images_for_addresses(12, addresses, infos);
60
61 for (int i=0; i < 12; ++i) {
62 uuid_string_t str;
63 uuid_unparse_upper(infos[i].uuid, str);
64 printf("0x%09llX 0x%08llX %s\n", (long long)infos[i].image, infos[i].offsetInImage, str);
65 }
66
67 if ( infos[0].image != infos[1].image )
68 printf("[FAIL] _dyld_images_for_addresses 0 vs 1\n");
69 else if ( infos[0].image != infos[2].image )
70 printf("[FAIL] _dyld_images_for_addresses 0 vs 2\n");
71 else if ( infos[0].image != infos[3].image )
72 printf("[FAIL] _dyld_images_for_addresses 0 vs 3\n");
73 else if ( infos[0].image != infos[4].image )
74 printf("[FAIL] _dyld_images_for_addresses 0 vs 4\n");
75 else if ( infos[0].image != infos[5].image )
76 printf("[FAIL] _dyld_images_for_addresses 0 vs 5\n");
77 else if ( infos[6].image != NULL )
78 printf("[FAIL] _dyld_images_for_addresses 6 vs null \n");
79 else if ( infos[7].image != infos[8].image )
80 printf("[FAIL] _dyld_images_for_addresses 7 vs 8\n");
81 else if ( infos[7].image != infos[9].image )
82 printf("[FAIL] _dyld_images_for_addresses 7 vs 9\n");
83 else if ( infos[0].image == infos[7].image )
84 printf("[FAIL] _dyld_images_for_addresses 0 vs 7\n");
85 else if ( infos[10].image != infos[11].image )
86 printf("[FAIL] _dyld_images_for_addresses 10 vs 11\n");
87 else if ( uuid_compare(infos[0].uuid, infos[1].uuid) != 0 )
88 printf("[FAIL] _dyld_images_for_addresses uuid 0 vs 1\n");
89 else if ( uuid_compare(infos[0].uuid, infos[2].uuid) != 0 )
90 printf("[FAIL] _dyld_images_for_addresses uuid 0 vs 2\n");
91 else if ( uuid_compare(infos[0].uuid, infos[3].uuid) != 0 )
92 printf("[FAIL] _dyld_images_for_addresses uuid 0 vs 3\n");
93 else if ( uuid_compare(infos[0].uuid, infos[4].uuid) != 0 )
94 printf("[FAIL] _dyld_images_for_addresses uuid 0 vs 4\n");
95 else if ( uuid_compare(infos[0].uuid, infos[5].uuid) != 0 )
96 printf("[FAIL] _dyld_images_for_addresses uuid 0 vs 5\n");
97 else if ( uuid_is_null(infos[6].uuid) == 0 )
98 printf("[FAIL] _dyld_images_for_addresses uuid 6 vs null\n");
99 else if ( uuid_compare(infos[7].uuid, infos[8].uuid) != 0 )
100 printf("[FAIL] _dyld_images_for_addresses uuid 7 vs 8\n");
101 else if ( uuid_compare(infos[7].uuid, infos[9].uuid) != 0 )
102 printf("[FAIL] _dyld_images_for_addresses uuid 7 vs 9\n");
103 else if ( uuid_compare(infos[0].uuid, infos[7].uuid) == 0 )
104 printf("[FAIL] _dyld_images_for_addresses uuid 0 vs 7\n");
105 else if ( uuid_compare(infos[10].uuid, infos[11].uuid) != 0 )
106 printf("[FAIL] _dyld_images_for_addresses uuid 10 vs 11\n");
107 else
108 printf("[PASS] _dyld_images_for_addresses\n");
109 return 0;
110 }
111