diff options
author | Chris Johns <chrisj@rtems.org> | 2014-11-04 16:31:50 +1100 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2014-11-04 16:31:50 +1100 |
commit | 540b7b417867f7b26320539a1ef17d12760f4efc (patch) | |
tree | 1c93c3d4bce409b4f697743acefd24c40ccaf531 /testsuites/libtests/dl02/dl-o1.c | |
parent | libtests: Update dl01 documentation. (diff) | |
download | rtems-540b7b417867f7b26320539a1ef17d12760f4efc.tar.bz2 |
libtests: Add libdl test dl02.
Loads 2 interdependent ELF object files.
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; +} |