aboutsummaryrefslogtreecommitdiff
path: root/nptl
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-12-28 09:27:26 +0000
committerUlrich Drepper <drepper@redhat.com>2002-12-28 09:27:26 +0000
commit131fd126cddad8379741597892cdfcd5cab3a49f (patch)
treeae4e3dc6182f230ae952cd95fecb2ee20948387b /nptl
parentca78735936e87a2b72c553636e815bd555c4ef7e (diff)
downloadglibc-131fd126cddad8379741597892cdfcd5cab3a49f.tar
glibc-131fd126cddad8379741597892cdfcd5cab3a49f.tar.gz
glibc-131fd126cddad8379741597892cdfcd5cab3a49f.tar.bz2
glibc-131fd126cddad8379741597892cdfcd5cab3a49f.zip
Update.
2002-12-28 Ulrich Drepper <drepper@redhat.com> * descr.h (struct pthread): Move header.data.list to the back of the struct. * sysdeps/i386/tls.h (tcbhead_t): Move list to the back of the struct. (MULTIPLE_THREADS_OFFSET): Adjust offset. (SYSINFO_OFFSEET): Likewise. 2002-12-27 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h (USE_DL_SYSINFO): Define. (DL_SYSINFO_DEFAULT): Cast to uintptr_t to avoid warnings. * sysdeps/unix/sysv/linux/i386/dl-sysdep.h (NEED_DL_SYSINFO, DL_SYSINFO_DEFAULT, DL_SYSINFO_IMPLEMENTATION): Define. (USE_DL_SYSINFO): Undef. 2002-12-22 Jakub Jelinek <jakub@redhat.com> * Makefile (tests-reverse): Use $(objpfx)../libc.so instead of $(common-objpfx)libc.so. * tst-cancel4.c (tf_write, tf_writev): Increase buf sizes so that it is bigger than pipe buffer size even on arches with bigger page size. (tf_usleep): Cast usleep argument to useconds_t to avoid warnings.
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog26
-rw-r--r--nptl/Makefile4
-rw-r--r--nptl/descr.h2
-rw-r--r--nptl/sysdeps/i386/tls.h6
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h26
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h5
-rw-r--r--nptl/tst-cancel4.c6
7 files changed, 64 insertions, 11 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index fdfcf7c580..e9beee6d68 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,29 @@
+2002-12-28 Ulrich Drepper <drepper@redhat.com>
+
+ * descr.h (struct pthread): Move header.data.list to the back of the
+ struct.
+ * sysdeps/i386/tls.h (tcbhead_t): Move list to the back of the struct.
+ (MULTIPLE_THREADS_OFFSET): Adjust offset.
+ (SYSINFO_OFFSEET): Likewise.
+
+2002-12-27 Jakub Jelinek <jakub@redhat.com>
+
+ * sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h (USE_DL_SYSINFO):
+ Define.
+ (DL_SYSINFO_DEFAULT): Cast to uintptr_t to avoid warnings.
+ * sysdeps/unix/sysv/linux/i386/dl-sysdep.h (NEED_DL_SYSINFO,
+ DL_SYSINFO_DEFAULT, DL_SYSINFO_IMPLEMENTATION): Define.
+ (USE_DL_SYSINFO): Undef.
+
+2002-12-22 Jakub Jelinek <jakub@redhat.com>
+
+ * Makefile (tests-reverse): Use $(objpfx)../libc.so instead of
+ $(common-objpfx)libc.so.
+ * tst-cancel4.c (tf_write, tf_writev): Increase buf sizes so that
+ it is bigger than pipe buffer size even on arches with bigger
+ page size.
+ (tf_usleep): Cast usleep argument to useconds_t to avoid warnings.
+
2002-12-25 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S: Implement
diff --git a/nptl/Makefile b/nptl/Makefile
index 33b5e9adea..198f2b3a1f 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -217,8 +217,10 @@ $(addprefix $(objpfx), \
$(tests) $(test-srcs))): $(objpfx)libpthread.so \
$(objpfx)libpthread_nonshared.a
$(objpfx)tst-unload: $(common-objpfx)dlfcn/libdl.so
+# $(objpfx)../libc.so is used instead of $(common-objpfx)libc.so,
+# since otherwise libpthread.so comes before libc.so when linking.
$(addprefix $(objpfx), $(tests-reverse)): \
- $(common-objpfx)libc.so $(objpfx)libpthread.so \
+ $(objpfx)../libc.so $(objpfx)libpthread.so \
$(objpfx)libpthread_nonshared.a
$(addprefix $(objpfx),$(tests-static)): $(objpfx)libpthread.a
else
diff --git a/nptl/descr.h b/nptl/descr.h
index 734d339813..883078be69 100644
--- a/nptl/descr.h
+++ b/nptl/descr.h
@@ -66,11 +66,11 @@ struct pthread
the address of this thread descriptor. */
union dtv *dtvp;
struct pthread *self; /* Pointer to this structure */
- list_t list;
int multiple_threads;
#ifdef NEED_DL_SYSINFO
uintptr_t sysinfo;
#endif
+ list_t list;
} data;
void *__padding[16];
} header;
diff --git a/nptl/sysdeps/i386/tls.h b/nptl/sysdeps/i386/tls.h
index 984094c00e..4f8ddb2d28 100644
--- a/nptl/sysdeps/i386/tls.h
+++ b/nptl/sysdeps/i386/tls.h
@@ -42,9 +42,9 @@ typedef struct
thread descriptor used by libpthread. */
dtv_t *dtv;
void *self; /* Pointer to the thread descriptor. */
- list_t list;
int multiple_threads;
uintptr_t sysinfo;
+ list_t list;
} tcbhead_t;
#endif
@@ -62,11 +62,11 @@ typedef struct
#define STACK_ALIGN 16
/* Offset of the MULTIPLE_THREADS element in tcbhead_t. */
-#define MULTIPLE_THREADS_OFFSET 20
+#define MULTIPLE_THREADS_OFFSET 12
#ifdef NEED_DL_SYSINFO
/* Offset of the SYSINFO element in tcbhead_t. */
-# define SYSINFO_OFFSET 24
+# define SYSINFO_OFFSET 16
#endif
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h b/nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h
index 0eb5f32ac3..5e59962a48 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h
+++ b/nptl/sysdeps/unix/sysv/linux/i386/dl-sysdep.h
@@ -1,4 +1,4 @@
-/* System-specific settings for dynamic linker code. Generic version.
+/* System-specific settings for dynamic linker code. IA-32 version.
Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -42,4 +42,28 @@
#define RTLD_CORRECT_DYNAMIC_WEAK 1
+
+/* Traditionally system calls have been made using int $0x80. A
+ second method was introduced which, if possible, will use the
+ sysenter/syscall instructions. To signal the presence and where to
+ find the code the kernel passes an AT_SYSINFO value in the
+ auxiliary vector to the application.
+ sysenter/syscall is not useful on i386 through i586, but the dynamic
+ linker and dl code in libc.a has to be able to load i686 compiled
+ libraries. */
+#define NEED_DL_SYSINFO 1
+#undef USE_DL_SYSINFO
+
+#if defined NEED_DL_SYSINFO && !defined __ASSEMBLER__
+extern void _dl_sysinfo_int80 (void) attribute_hidden;
+# define DL_SYSINFO_DEFAULT (uintptr_t) _dl_sysinfo_int80
+# define DL_SYSINFO_IMPLEMENTATION \
+ asm (".type _dl_sysinfo_int80,@function\n\t" \
+ ".hidden _dl_sysinfo_int80\n" \
+ "_dl_sysinfo_int80:\n\t" \
+ "int $0x80;\n\t" \
+ "ret;\n\t" \
+ ".size _dl_sysinfo_int80,.-_dl_sysinfo_int80");
+#endif
+
#endif /* dl-sysdep.h */
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h b/nptl/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h
index f0d4ac7a88..d7328fe219 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h
@@ -1,4 +1,4 @@
-/* System-specific settings for dynamic linker code. Generic version.
+/* System-specific settings for dynamic linker code. IA-32 version.
Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -49,10 +49,11 @@
find the code the kernel passes an AT_SYSINFO value in the
auxiliary vector to the application. */
#define NEED_DL_SYSINFO 1
+#define USE_DL_SYSINFO 1
#if defined NEED_DL_SYSINFO && !defined __ASSEMBLER__
extern void _dl_sysinfo_int80 (void) attribute_hidden;
-# define DL_SYSINFO_DEFAULT _dl_sysinfo_int80
+# define DL_SYSINFO_DEFAULT (uintptr_t) _dl_sysinfo_int80
# define DL_SYSINFO_IMPLEMENTATION \
asm (".type _dl_sysinfo_int80,@function\n\t" \
".hidden _dl_sysinfo_int80\n" \
diff --git a/nptl/tst-cancel4.c b/nptl/tst-cancel4.c
index 371f2f7f26..7ab7bd60da 100644
--- a/nptl/tst-cancel4.c
+++ b/nptl/tst-cancel4.c
@@ -113,7 +113,7 @@ tf_write (void *arg)
exit (1);
}
- char buf[10000];
+ char buf[100000];
memset (buf, '\0', sizeof (buf));
ssize_t s = write (fds[1], buf, sizeof (buf));
@@ -133,7 +133,7 @@ tf_writev (void *arg)
exit (1);
}
- char buf[10000];
+ char buf[100000];
memset (buf, '\0', sizeof (buf));
struct iovec iov[1] = { [0] = { .iov_base = buf, .iov_len = sizeof (buf) } };
ssize_t s = writev (fds[1], iov, 1);
@@ -172,7 +172,7 @@ tf_usleep (void *arg)
exit (1);
}
- usleep (ULONG_MAX);
+ usleep ((useconds_t) ULONG_MAX);
printf ("%s: usleep returns\n", __FUNCTION__);