--- /dev/null
+// __tls_get_new did not allocate new dtv for threads properly
+#include <pthread.h>
+#include <dlfcn.h>
+#include "test.h"
+
+#define N 10
+
+#define T(c) ((c) || (t_error(#c " failed\n"),0))
+
+static pthread_barrier_t b;
+static void *mod;
+
+static void *start(void *a)
+{
+ void *(*f)(void);
+
+ pthread_barrier_wait(&b);
+ T(f = dlsym(mod, "f"));
+ f();
+ return 0;
+}
+
+int main()
+{
+ pthread_t td[N];
+ int i;
+
+ pthread_barrier_init(&b, 0, N+1);
+ for (i=0; i<N; i++)
+ T(!pthread_create(td+i, 0, start, 0));
+
+ T(mod = dlopen("tls_get_new-dtv_dso.so", RTLD_NOW));
+ pthread_barrier_wait(&b);
+
+ for (i=0; i<N; i++)
+ T(!pthread_join(td[i], 0));
+ return t_status;
+}