mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-24 03:07:16 +00:00
49 lines
1.3 KiB
C
49 lines
1.3 KiB
C
#include <dlfcn.h>
|
|
#include <stdio.h>
|
|
|
|
typedef unsigned long long u64;
|
|
typedef u64 (*dl_math2_fn)(u64, u64);
|
|
typedef u64 (*dl_void_fn)(void);
|
|
|
|
int cleonos_app_main(int argc, char **argv, char **envp) {
|
|
const char *lib_path = "/shell/libdemo.elf";
|
|
void *handle;
|
|
dl_math2_fn add_fn;
|
|
dl_math2_fn mul_fn;
|
|
dl_void_fn hello_fn;
|
|
|
|
(void)envp;
|
|
|
|
if (argc > 1 && argv != (char **)0 && argv[1] != (char *)0 && argv[1][0] != '\0') {
|
|
lib_path = argv[1];
|
|
}
|
|
|
|
handle = dlopen(lib_path, 0);
|
|
if (handle == (void *)0) {
|
|
(void)printf("[dltest] dlopen failed: %s\n", lib_path);
|
|
return 1;
|
|
}
|
|
|
|
add_fn = (dl_math2_fn)dlsym(handle, "cleonos_libdemo_add");
|
|
mul_fn = (dl_math2_fn)dlsym(handle, "cleonos_libdemo_mul");
|
|
hello_fn = (dl_void_fn)dlsym(handle, "cleonos_libdemo_hello");
|
|
|
|
if (add_fn == (dl_math2_fn)0 || mul_fn == (dl_math2_fn)0 || hello_fn == (dl_void_fn)0) {
|
|
(void)puts("[dltest] dlsym failed");
|
|
(void)dlclose(handle);
|
|
return 2;
|
|
}
|
|
|
|
(void)hello_fn();
|
|
(void)printf("[dltest] add(7, 35) = %llu\n", add_fn(7ULL, 35ULL));
|
|
(void)printf("[dltest] mul(6, 9) = %llu\n", mul_fn(6ULL, 9ULL));
|
|
|
|
if (dlclose(handle) != 0) {
|
|
(void)puts("[dltest] dlclose failed");
|
|
return 3;
|
|
}
|
|
|
|
(void)puts("[dltest] PASS");
|
|
return 0;
|
|
}
|