Will this need to be added as an expected fail on other architectures? Just wondering how many bsp test configuration files need touching
On Thu, Jan 12, 2023, 4:55 PM Kinsey Moore <kinsey.mo...@oarcorp.com> wrote: > This adds a test verifying basic TLS functionality in loadable modules > now that at least one architecture supports it. > --- > spec/build/testsuites/libtests/dl11.yml | 38 +++++++ > spec/build/testsuites/libtests/grp.yml | 2 + > testsuites/libtests/dl11/dl-load.c | 142 ++++++++++++++++++++++++ > testsuites/libtests/dl11/dl-load.h | 33 ++++++ > testsuites/libtests/dl11/dl11-o1.c | 43 +++++++ > testsuites/libtests/dl11/dl11.doc | 44 ++++++++ > testsuites/libtests/dl11/dl11.scn | 6 + > testsuites/libtests/dl11/init.c | 103 +++++++++++++++++ > 8 files changed, 411 insertions(+) > create mode 100644 spec/build/testsuites/libtests/dl11.yml > create mode 100644 testsuites/libtests/dl11/dl-load.c > create mode 100644 testsuites/libtests/dl11/dl-load.h > create mode 100644 testsuites/libtests/dl11/dl11-o1.c > create mode 100644 testsuites/libtests/dl11/dl11.doc > create mode 100644 testsuites/libtests/dl11/dl11.scn > create mode 100644 testsuites/libtests/dl11/init.c > > diff --git a/spec/build/testsuites/libtests/dl11.yml > b/spec/build/testsuites/libtests/dl11.yml > new file mode 100644 > index 0000000000..6eaaeaeecc > --- /dev/null > +++ b/spec/build/testsuites/libtests/dl11.yml > @@ -0,0 +1,38 @@ > +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause > +build-type: script > +cflags: [] > +copyrights: > +- Copyright (C) 2023 On-Line Applications Research (OAR) > +cppflags: [] > +do-build: | > + path = "testsuites/libtests/dl11/" > + objs = [] > + objs.append(self.cc(bld, bic, path + "dl11-o1.c")) > + tar = path + "dl11.tar" > + self.tar(bld, objs, [path], tar) > + tar_c, tar_h = self.bin2c(bld, tar) > + objs = [] > + objs.append(self.cc(bld, bic, tar_c)) > + objs.append(self.cc(bld, bic, path + "init.c", deps=[tar_h], > cppflags=bld.env.TEST_DL11_CPPFLAGS)) > + objs.append(self.cc(bld, bic, path + "dl-load.c")) > + dl11_pre = path + "dl11.pre" > + self.link_cc(bld, bic, objs, dl11_pre) > + dl11_sym_o = path + "dl11-sym.o" > + objs.append(dl11_sym_o) > + self.rtems_syms(bld, dl11_pre, dl11_sym_o) > + self.link_cc(bld, bic, objs, "testsuites/libtests/dl11.exe") > +do-configure: null > +enabled-by: > +- and: > + - not: TEST_DL11_EXCLUDE > + - BUILD_LIBDL > +includes: > +- testsuites/libtests/dl11 > +ldflags: [] > +links: [] > +prepare-build: null > +prepare-configure: null > +stlib: [] > +type: build > +use-after: [] > +use-before: [] > diff --git a/spec/build/testsuites/libtests/grp.yml > b/spec/build/testsuites/libtests/grp.yml > index 9d91df75a0..8f2cadb890 100644 > --- a/spec/build/testsuites/libtests/grp.yml > +++ b/spec/build/testsuites/libtests/grp.yml > @@ -110,6 +110,8 @@ links: > uid: dl09 > - role: build-dependency > uid: dl10 > +- role: build-dependency > + uid: dl11 > - role: build-dependency > uid: dumpbuf01 > - role: build-dependency > diff --git a/testsuites/libtests/dl11/dl-load.c > b/testsuites/libtests/dl11/dl-load.c > new file mode 100644 > index 0000000000..aee1517269 > --- /dev/null > +++ b/testsuites/libtests/dl11/dl-load.c > @@ -0,0 +1,142 @@ > +/* SPDX-License-Identifier: BSD-2-Clause */ > + > +/* > + * Copyright (C) 2023 On-Line Applications Research Corporation (OAR). > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > "AS IS" > + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS > BE > + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF > + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR > BUSINESS > + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN > + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF > THE > + * POSSIBILITY OF SUCH DAMAGE. > + */ > + > +#include <errno.h> > +#include <stdio.h> > + > +#include <dlfcn.h> > + > +#include "dl-load.h" > + > +#include <rtems/rtl/rtl-shell.h> > +#include <rtems/rtl/rtl-trace.h> > + > +#define TEST_TRACE 0 > +#if TEST_TRACE > + #define DEBUG_TRACE (RTEMS_RTL_TRACE_DETAIL | \ > + RTEMS_RTL_TRACE_WARNING | \ > + RTEMS_RTL_TRACE_LOAD | \ > + RTEMS_RTL_TRACE_UNLOAD | \ > + RTEMS_RTL_TRACE_SYMBOL | \ > + RTEMS_RTL_TRACE_RELOC | \ > + RTEMS_RTL_TRACE_ALLOCATOR | \ > + RTEMS_RTL_TRACE_UNRESOLVED | \ > + RTEMS_RTL_TRACE_ARCHIVES | \ > + RTEMS_RTL_TRACE_DEPENDENCY) > + #define DL_DEBUG_TRACE DEBUG_TRACE /* RTEMS_RTL_TRACE_ALL */ > + #define DL_RTL_CMDS 1 > +#else > + #define DL_DEBUG_TRACE 0 > + #define DL_RTL_CMDS 0 > +#endif > + > +static void dl_load_dump (void) > +{ > +#if DL_RTL_CMDS > + char* list[] = { "rtl", "list", NULL }; > + char* sym[] = { "rtl", "sym", NULL }; > + printf ("RTL List:\n"); > + rtems_rtl_shell_command (2, list); > + printf ("RTL Sym:\n"); > + rtems_rtl_shell_command (2, sym); > +#endif > +} > + > +typedef int (*int_call_t)(void); > +typedef int* (*ptr_call_t)(void); > + > +int dl_load_test(void) > +{ > + void* handle; > + int_call_t int_call; > + ptr_call_t ptr_call; > + int int_call_ret; > + int* ptr_call_ret; > + int unresolved; > + char* message = "loaded"; > + > +#if DL_DEBUG_TRACE > + rtems_rtl_trace_set_mask (DL_DEBUG_TRACE); > +#endif > + > + printf("load: /dl11-o1.o\n"); > + > + handle = dlopen ("/dl11-o1.o", RTLD_NOW | RTLD_GLOBAL); > + if (!handle) > + { > + printf("dlopen failed: %s\n", dlerror()); > + return 1; > + } > + > + if (dlinfo (handle, RTLD_DI_UNRESOLVED, &unresolved) < 0) > + message = "dlinfo error checking unresolved status"; > + else if (unresolved) > + message = "has unresolved externals"; > + > + printf ("handle: %p %s\n", handle, message); > + > + dl_load_dump (); > + > + ptr_call = dlsym (handle, "get_errno_ptr"); > + if (ptr_call == NULL) > + { > + printf("dlsym failed: symbol get_errno_ptr not found\n"); > + return 1; > + } > + > + int_call = dlsym (handle, "get_errno_val"); > + if (int_call == NULL) > + { > + printf("dlsym failed: symbol get_errno_val not found\n"); > + return 1; > + } > + > + ptr_call_ret = ptr_call (); > + if (ptr_call_ret != &errno) > + { > + printf("dlsym ptr_call failed: ret value bad\n"); > + return 1; > + } > + > + errno = 12345; > + int_call_ret = int_call (); > + if (int_call_ret != 12345) > + { > + printf("dlsym int_call failed: ret value bad\n"); > + return 1; > + } > + > + if (dlclose (handle) < 0) > + { > + printf("dlclose failed: %s\n", dlerror()); > + return 1; > + } > + > + printf ("handle: %p closed\n", handle); > + > + return 0; > +} > diff --git a/testsuites/libtests/dl11/dl-load.h > b/testsuites/libtests/dl11/dl-load.h > new file mode 100644 > index 0000000000..142b195626 > --- /dev/null > +++ b/testsuites/libtests/dl11/dl-load.h > @@ -0,0 +1,33 @@ > +/* SPDX-License-Identifier: BSD-2-Clause */ > + > +/* > + * Copyright (c) 2014 Chris Johns <chr...@rtems.org>. All rights > reserved. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > "AS IS" > + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS > BE > + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF > + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR > BUSINESS > + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN > + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF > THE > + * POSSIBILITY OF SUCH DAMAGE. > + */ > + > +#if !defined(_DL_LOAD_H_) > +#define _DL_LOAD_H_ > + > +int dl_load_test(void); > + > +#endif > diff --git a/testsuites/libtests/dl11/dl11-o1.c > b/testsuites/libtests/dl11/dl11-o1.c > new file mode 100644 > index 0000000000..e8fe0cf180 > --- /dev/null > +++ b/testsuites/libtests/dl11/dl11-o1.c > @@ -0,0 +1,43 @@ > +/* SPDX-License-Identifier: BSD-2-Clause */ > + > +/* > + * Copyright (C) 2023 On-Line Applications Research Corporation (OAR). > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > "AS IS" > + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS > BE > + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF > + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR > BUSINESS > + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN > + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF > THE > + * POSSIBILITY OF SUCH DAMAGE. > + */ > + > +#include <rtems/test-info.h> > +#include <errno.h> > + > +int get_errno_val (void); > +int *get_errno_ptr (void); > + > +int get_errno_val (void) > +{ > + return errno; > +} > + > +int *get_errno_ptr (void) > +{ > + return &errno; > +} > + > diff --git a/testsuites/libtests/dl11/dl11.doc > b/testsuites/libtests/dl11/dl11.doc > new file mode 100644 > index 0000000000..0fffe1cfd3 > --- /dev/null > +++ b/testsuites/libtests/dl11/dl11.doc > @@ -0,0 +1,44 @@ > +# SPDX-License-Identifier: BSD-2-Clause > + > +# Copyright (C) 2023 On-Line Applications Research Corporation (OAR). > +# > +# Redistribution and use in source and binary forms, with or without > +# modification, are permitted provided that the following conditions > +# are met: > +# 1. Redistributions of source code must retain the above copyright > +# notice, this list of conditions and the following disclaimer. > +# 2. Redistributions in binary form must reproduce the above copyright > +# notice, this list of conditions and the following disclaimer in the > +# documentation and/or other materials provided with the distribution. > +# > +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS > IS" > +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > THE > +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE > +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE > +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF > +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS > +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN > +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF > THE > +# POSSIBILITY OF SUCH DAMAGE. > +# > + > +This file describes the directives and concepts tested by this test set. > + > +test set name: dl11 > + > +directives: > + > + dlopen > + dlinfo > + dlsym > + dlclose > + > +concepts: > + > ++ Load a single ELF object file. > ++ Check there are no unreolved externals. > ++ Locate the get_errno_val and get_errno_ptr symbols. > ++ Call the functions that use TLS variables and verify relocated symbols. > ++ Unload the ELF file. > diff --git a/testsuites/libtests/dl11/dl11.scn > b/testsuites/libtests/dl11/dl11.scn > new file mode 100644 > index 0000000000..43048c91d2 > --- /dev/null > +++ b/testsuites/libtests/dl11/dl11.scn > @@ -0,0 +1,6 @@ > +*** BEGIN OF TEST libdl (RTL) 11 *** > +load: /dl11-o1.o > +handle: 0x40118e60 loaded > +handle: 0x40118e60 closed > + > +*** END OF TEST libdl (RTL) 11 *** > diff --git a/testsuites/libtests/dl11/init.c > b/testsuites/libtests/dl11/init.c > new file mode 100644 > index 0000000000..91f529b055 > --- /dev/null > +++ b/testsuites/libtests/dl11/init.c > @@ -0,0 +1,103 @@ > +/* SPDX-License-Identifier: BSD-2-Clause */ > + > +/* > + * Copyright (c) 2014 Chris Johns <chr...@rtems.org>. All rights > reserved. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > "AS IS" > + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS > BE > + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF > + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR > BUSINESS > + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN > + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF > THE > + * POSSIBILITY OF SUCH DAMAGE. > + */ > + > +#ifdef HAVE_CONFIG_H > +#include "config.h" > +#endif > + > +#include "tmacros.h" > + > +#include <errno.h> > +#include <string.h> > +#include <stdint.h> > +#include <unistd.h> > + > +#include <rtems/rtl/rtl.h> > +#include <rtems/imfs.h> > + > +#include "dl-load.h" > + > +const char rtems_test_name[] = "libdl (RTL) 11"; > + > +/* forward declarations to avoid warnings */ > +static rtems_task Init(rtems_task_argument argument); > + > +#include "dl11-tar.h" > + > +#define TARFILE_START dl11_tar > +#define TARFILE_SIZE dl11_tar_size > + > +static int test(void) > +{ > + int ret; > + ret = dl_load_test(); > + if (ret) > + rtems_test_exit(ret); > + return 0; > +} > + > +static void Init(rtems_task_argument arg) > +{ > + int te; > + > + TEST_BEGIN(); > + > + te = rtems_tarfs_load("/", (void *)TARFILE_START, (size_t)TARFILE_SIZE); > + if (te != 0) > + { > + printf("untar failed: %d\n", te); > + rtems_test_exit(1); > + exit (1); > + } > + > + test(); > + > + TEST_END(); > + > + rtems_test_exit(0); > +} > + > +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER > +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER > + > +#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 4 > + > +#define CONFIGURE_MAXIMUM_TASKS 1 > + > +#define CONFIGURE_MAXIMUM_SEMAPHORES 1 > + > +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION > + > +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE > + > +#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE > + (4U * 1024U)) > + > +#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT > + > +#define CONFIGURE_INIT > + > +#include <rtems/confdefs.h> > -- > 2.30.2 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel >
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel