diff options
-rw-r--r-- | nptl/ChangeLog | 3 | ||||
-rw-r--r-- | nptl/Makefile | 3 | ||||
-rw-r--r-- | nptl/tst-dlsym1.c | 66 |
3 files changed, 72 insertions, 0 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index b18f483726..b89ca6d2c0 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,5 +1,8 @@ 2003-02-26 Ulrich Drepper <drepper@redhat.com> + * Makefile (tests): Add tst-dlsym1. + * tst-dlsym1.c: New file. + * init.c (__pthread_initialize_minimal_internal): Set GL(dl_error_catch_tsd) to __libc_dl_error_tsd. * Versions (libc:GLIBC_PRIVATE): Export __libc_dl_error_tsd. diff --git a/nptl/Makefile b/nptl/Makefile index 644967b99c..446103a6cc 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -155,6 +155,7 @@ tests = tst-attr1 tst-attr2 \ tst-stdio1 tst-stdio2 \ tst-stack1 \ tst-unload \ + tst-dlsym1 \ tst-sysconf \ tst-locale1 tst-locale2 \ tst-umask1 \ @@ -258,6 +259,8 @@ LDFLAGS-tst-tls3 = -rdynamic $(objpfx)tst-tls3.out: $(objpfx)tst-tls3mod.so $(objpfx)tst-tls3mod.so: $(shared-thread-library) +$(objpfx)tst-dlsym1: $(libdl) $(shared-thread-library) + extra-B-pthread.so = -B$(common-objpfx)nptl/ $(objpfx)libpthread.so: $(objpfx)crti.o $(objpfx)libpthread.so: +preinit += $(objpfx)crti.o diff --git a/nptl/tst-dlsym1.c b/nptl/tst-dlsym1.c new file mode 100644 index 0000000000..3744570c7f --- /dev/null +++ b/nptl/tst-dlsym1.c @@ -0,0 +1,66 @@ +/* Test case by Hui Huang <hui.huang@sun.com>. */ +#include <dlfcn.h> +#include <pthread.h> +#include <stdio.h> +#include <stdlib.h> + + +static void * +start_routine (void *args) +{ + int i; + void **addrs = (void **) args; + for (i = 0; i < 10000; ++i) + addrs[i % 1024] = dlsym (NULL, "does_not_exist"); + + return addrs; +} + + +static int +do_test (void) +{ + pthread_t tid1, tid2, tid3; + + void *addrs1[1024]; + void *addrs2[1024]; + void *addrs3[1024]; + + if (pthread_create (&tid1, NULL, start_routine, addrs1) != 0) + { + puts ("1st create failed"); + exit (1); + } + if (pthread_create (&tid2, NULL, start_routine, addrs2) != 0) + { + puts ("2nd create failed"); + exit (1); + } + if (pthread_create (&tid3, NULL, start_routine, addrs3) != 0) + { + puts ("3rd create failed"); + exit (1); + } + + if (pthread_join (tid1, NULL) != 0) + { + puts ("1st join failed"); + exit (1); + } + if (pthread_join (tid2, NULL) != 0) + { + puts ("2nd join failed"); + exit (1); + } + if (pthread_join (tid3, NULL) != 0) + { + puts ("2rd join failed"); + exit (1); + } + + return 0; +} + + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |