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 | */ |