I think this is ok also. On Sun, Feb 18, 2024, 10:20 PM Chris Johns <chr...@rtems.org> wrote:
> Looks good. Thanks > > Chris > > On 19/2/2024 3:16 pm, Kinsey Moore wrote: > > This adds a pthread that runs the test as well to increase test > > coverage. The original test would have passed if all threads returned > > the address of the Init task's errno since no additional threads or > > tasks were checked. > > --- > > testsuites/libtests/dl11/dl-load.c | 72 +++++++++++++++++++++++------- > > testsuites/libtests/dl11/init.c | 2 + > > 2 files changed, 59 insertions(+), 15 deletions(-) > > > > diff --git a/testsuites/libtests/dl11/dl-load.c > b/testsuites/libtests/dl11/dl-load.c > > index 70d7bf1c65..b09128acdf 100644 > > --- a/testsuites/libtests/dl11/dl-load.c > > +++ b/testsuites/libtests/dl11/dl-load.c > > @@ -27,6 +27,8 @@ > > > > #include <errno.h> > > #include <stdio.h> > > +#include "tmacros.h" > > +#include <pthread.h> > > > > #include <dlfcn.h> > > > > @@ -79,13 +81,60 @@ typedef int* (*ptr_call_t)(void); > > void* get_errno_ptr(void); > > int get_errno(void); > > > > -int dl_load_test(void) > > +int_call_t int_call; > > +ptr_call_t ptr_call; > > +static int perform_test(void) > > { > > - void* handle; > > - int_call_t int_call; > > - ptr_call_t ptr_call; > > int int_call_ret; > > int* ptr_call_ret; > > + ptr_call_ret = ptr_call (); > > + if (ptr_call_ret != get_errno_ptr()) > > + { > > + printf("dlsym ptr_call failed: ret value bad\n"); > > + return 1; > > + } > > + > > + errno = 12345; > > + int_call_ret = int_call (); > > + if (int_call_ret != get_errno()) > > + { > > + printf("dlsym int_call failed: ret value bad\n"); > > + return 1; > > + } > > + errno = 0; > > + > > + return 0; > > +} > > + > > +static void *secondary_thread(void *arg) > > +{ > > + printf("Running test on secondary thread\n"); > > + if (perform_test()) { > > + printf("Test failed on secondary task\n"); > > + return (void *) 1; > > + } > > + > > + return NULL; > > +} > > + > > +static void start_secondary(void) > > +{ > > + /* Run the test on a secondary thread */ > > + pthread_t threadId; > > + int status; > > + void *ret; > > + status = pthread_create( &threadId, NULL, secondary_thread, NULL ); > > + rtems_test_assert( !status ); > > + > > + /* Wait on thread to exit */ > > + status = pthread_join(threadId, &ret); > > + rtems_test_assert( !status ); > > + rtems_test_assert( ret == NULL ); > > +} > > + > > +int dl_load_test(void) > > +{ > > + void* handle; > > int unresolved; > > char* message = "loaded"; > > > > @@ -125,20 +174,13 @@ int dl_load_test(void) > > return 1; > > } > > > > - ptr_call_ret = ptr_call (); > > - if (ptr_call_ret != get_errno_ptr()) > > - { > > - printf("dlsym ptr_call failed: ret value bad\n"); > > + /* Run the test on the init thread */ > > + printf("Running test on init task\n"); > > + if (perform_test()) { > > return 1; > > } > > > > - errno = 12345; > > - int_call_ret = int_call (); > > - if (int_call_ret != get_errno()) > > - { > > - printf("dlsym int_call failed: ret value bad\n"); > > - return 1; > > - } > > + start_secondary(); > > > > if (dlclose (handle) < 0) > > { > > diff --git a/testsuites/libtests/dl11/init.c > b/testsuites/libtests/dl11/init.c > > index 91f529b055..0ff4557421 100644 > > --- a/testsuites/libtests/dl11/init.c > > +++ b/testsuites/libtests/dl11/init.c > > @@ -86,6 +86,8 @@ static void Init(rtems_task_argument arg) > > > > #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 4 > > > > +#define CONFIGURE_MAXIMUM_POSIX_THREADS 1 > > + > > #define CONFIGURE_MAXIMUM_TASKS 1 > > > > #define CONFIGURE_MAXIMUM_SEMAPHORES 1 > _______________________________________________ > 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