Rev 3686 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3686 | Rev 3689 | ||
|---|---|---|---|
| Line 58... | Line 58... | ||
| 58 | : "%r3","%r9" |
58 | : "%r3","%r9" |
| 59 | ); |
59 | ); |
| 60 | */ |
60 | */ |
| 61 | } |
61 | } |
| 62 | 62 | ||
| - | 63 | typedef void (*fptr_t)(void); |
|
| - | 64 | ||
| 63 | int main(int argc, char *argv[]) |
65 | int main(int argc, char *argv[]) |
| 64 | { |
66 | { |
| 65 | void *a; |
67 | void *a; |
| 66 | void *s; |
68 | void *s; |
| - | 69 | fptr_t fun; |
|
| 67 | 70 | ||
| 68 | char *lib_name; |
71 | char *lib_name; |
| 69 | char *sym_name; |
72 | char *sym_name; |
| 70 | 73 | ||
| 71 | // kputint(-1); |
74 | // kputint(-1); |
| 72 | printf("Hello from dltest!\n"); |
75 | printf("Hello from dltest!\n"); |
| 73 | 76 | ||
| 74 | lib_name = "libc.so.0"; |
77 | lib_name = "libtest.so.0"; |
| 75 | sym_name = "printf"; |
78 | sym_name = "test_func"; |
| 76 | 79 | ||
| 77 | a = dlopen(lib_name, 0); |
80 | a = dlopen(lib_name, 0); |
| 78 | if (a != NULL) { |
81 | if (a != NULL) { |
| 79 | s = dlsym(a, sym_name); |
82 | s = dlsym(a, sym_name); |
| 80 | printf("symbol '%s' = 0x%lx\n", sym_name, (long) s); |
83 | printf("symbol '%s' = 0x%lx\n", sym_name, (long) s); |
| 81 | } else { |
84 | } else { |
| 82 | printf("failed to dlopen() library '%s'\n"); |
85 | printf("failed to dlopen() library '%s'\n", lib_name); |
| 83 | } |
86 | } |
| - | 87 | ||
| - | 88 | printf("Run dynamically-resolved function '%s'...\n", sym_name); |
|
| - | 89 | fun = (fptr_t) s; |
|
| - | 90 | (*fun)(); |
|
| - | 91 | printf("OK\n"); |
|
| - | 92 | ||
| 84 | return 0; |
93 | return 0; |
| 85 | } |
94 | } |
| 86 | 95 | ||
| 87 | /** @} |
96 | /** @} |
| 88 | */ |
97 | */ |