diff options
Diffstat (limited to 'testsuites/libtests/dl02/dl-o1.c')
-rw-r--r-- | testsuites/libtests/dl02/dl-o1.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/testsuites/libtests/dl02/dl-o1.c b/testsuites/libtests/dl02/dl-o1.c new file mode 100644 index 0000000000..ff5a853c33 --- /dev/null +++ b/testsuites/libtests/dl02/dl-o1.c @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014 Chris Johns <chrisj@rtems.org>. All rights reserved. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#include <stdio.h> +#include <stdlib.h> + +#include <dlfcn.h> + +#include "dl-o2.h" + +typedef int (*func1_t)(int argc, const char* argv[]); + +static void* find_sym(const char* name) +{ + void* sym = dlsym(RTLD_DEFAULT, name); + if (sym == NULL) + printf("dlsym failed: not found: %s\n", name); + return sym; +} + +static int dl_o1_callback(const char* message, int count) +{ + printf("dl_o1_callback: %s\n", message); + return count + 1; +} + +/* + * Yes a decl in the source. This is a modules main and I could not find which + * header main is defined in. + */ +int rtems_main (int argc, const char* argv[]); + +int rtems_main (int argc, const char* argv[]) +{ + func1_t f1; + int arg; + int ret; + + printf("Loaded module: argc:%d [%s]\n", argc, __FILE__); + for (arg = 0; arg < argc; ++arg) + printf(" %d: %s\n", arg, argv[arg]); + + f1 = find_sym ("dl_o2_func1"); + if (f1 == NULL) + return 0; + + if (f1 (argc, argv) != argc) + { + printf("rtems_main: dl_o2_func1 returned bad value\n"); + return 0; + } + + if (dl_o2_func2 (7.1, 33.0) != (7.1 * 33.0)) + { + printf("rtems_main: dl_o2_func1 returned bad value\n"); + return 0; + } + + ret = dl_o2_func3 (dl_o1_callback, 1); + printf ("rtems_main: callback count: %d\n", ret); + + return argc; +} |