[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[SCM] Debian GNU Hurd packaging branch, master, updated. debian/20110519
From: |
Samuel Thibault |
Subject: |
[SCM] Debian GNU Hurd packaging branch, master, updated. debian/20110519-3-62-g23f021d |
Date: |
Sun, 30 Oct 2011 19:17:45 +0000 |
The following commit has been merged in the master branch:
commit 23f021d348aec16052ae99d541e36090a105d0bd
Author: Samuel Thibault <address@hidden>
Date: Sun Oct 30 20:17:18 2011 +0100
New upstream snapshot.
* Drop debian/libpthread_tls.patch, applied upstream.
diff --git a/debian/changelog b/debian/changelog
index 8b177dd..8c7dfd9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,9 @@
-hurd (20110821-1) UNRELEASED; urgency=low
+hurd (20111030-1) UNRELEASED; urgency=low
* New upstream snapshot.
- Drop debian/patches/ttys.patch.patch, applied upstream.
- Drop debian/patches/auth-intr-cure.patch, applied upstream.
+ - Drop debian/libpthread_tls.patch, applied upstream.
* local/setup-translators:
- Restore /dev/shm creation.
- create /run/shm and /run/lock, to fix locking until we properly start
diff --git a/debian/patches/libpthread_tls.patch
b/debian/patches/libpthread_tls.patch
deleted file mode 100644
index 245ef08..0000000
--- a/debian/patches/libpthread_tls.patch
+++ /dev/null
@@ -1,331 +0,0 @@
-Add TLS support
-TODO: drop threadvar support
----
- libpthread/pthread/pt-create.c | 7 ++++
- libpthread/pthread/pt-exit.c | 3 ++
- libpthread/pthread/pt-internal.h | 19 ++++++++++++
- libpthread/sysdeps/mach/hurd/ia32/pt-machdep.c | 37
++++++++++++++++++++++---
- libpthread/sysdeps/mach/hurd/ia32/pt-setup.c | 7 +++-
- libpthread/sysdeps/mach/hurd/pt-docancel.c | 4 +-
- libpthread/sysdeps/mach/hurd/pt-sysdep.h | 10 ++++--
- libthreads/alpha/thread.c | 1
- libthreads/cprocs.c | 3 +-
- libthreads/cthread_internals.h | 16 ++++++++++
- libthreads/i386/thread.c | 32 +++++++++++++++++++--
- 11 files changed, 122 insertions(+), 17 deletions(-)
-
---- a/libpthread/pthread/pt-create.c
-+++ b/libpthread/pthread/pt-create.c
-@@ -129,6 +129,11 @@ __pthread_create_internal (struct __pthr
- if (err)
- goto failed_thread_alloc;
-
-+ pthread->tcb = _dl_allocate_tls (NULL);
-+ if (!pthread->tcb)
-+ goto failed_thread_tls_alloc;
-+ pthread->tcb->tcb = pthread->tcb;
-+
- /* And initialize the rest of the machine context. This may include
- additional machine- and system-specific initializations that
- prove convenient. */
-@@ -194,6 +199,8 @@ __pthread_create_internal (struct __pthr
- failed_sigstate:
- __pthread_sigstate_destroy (pthread);
- failed_setup:
-+ _dl_deallocate_tls (pthread->tcb, 1);
-+ failed_thread_tls_alloc:
- __pthread_thread_dealloc (pthread);
- __pthread_thread_halt (pthread);
- failed_thread_alloc:
---- a/libpthread/pthread/pt-exit.c
-+++ b/libpthread/pthread/pt-exit.c
-@@ -70,6 +70,9 @@ pthread_exit (void *status)
- if (self->cancel_state == PTHREAD_CANCEL_ENABLE && self->cancel_pending)
- status = PTHREAD_CANCELED;
-
-+ if (self->tcb)
-+ _dl_deallocate_tls (self->tcb, 1);
-+
- switch (self->state)
- {
- default:
---- a/libpthread/pthread/pt-internal.h
-+++ b/libpthread/pthread/pt-internal.h
-@@ -54,6 +54,14 @@ enum pthread_state
- # define PTHREAD_SYSDEP_MEMBERS
- #endif
-
-+/* Type of the TCB. */
-+typedef struct
-+{
-+ void *tcb; /* Points to this structure. */
-+ void *dtv; /* Vector of pointers to TLS data. */
-+ thread_t self; /* This thread's control port. */
-+} tcbhead_t;
-+
- /* This structure describes a POSIX thread. */
- struct __pthread
- {
-@@ -89,6 +97,8 @@ struct __pthread
-
- PTHREAD_SYSDEP_MEMBERS
-
-+ tcbhead_t *tcb;
-+
- struct __pthread *next, **prevp;
- };
-
-@@ -287,4 +297,13 @@ const struct __pthread_rwlockattr __pthr
- /* Default condition attributes. */
- const struct __pthread_condattr __pthread_default_condattr;
-
-+
-+/* From glibc. */
-+
-+/* Dynamic linker TLS allocation. */
-+extern void *_dl_allocate_tls(void *);
-+
-+/* Dynamic linker TLS deallocation. */
-+extern void _dl_deallocate_tls(void *, int);
-+
- #endif /* pt-internal.h */
---- a/libpthread/sysdeps/mach/hurd/pt-docancel.c
-+++ b/libpthread/sysdeps/mach/hurd/pt-docancel.c
-@@ -52,8 +52,8 @@ __pthread_do_cancel (struct __pthread *p
- err = __thread_abort (p->kernel_thread);
- assert_perror (err);
-
-- err = __thread_set_pcsp (p->kernel_thread,
-- 1, (void *) call_exit, 0, 0);
-+ err = __thread_set_pcsptp (p->kernel_thread,
-+ 1, (void *) call_exit, 0, 0, 0, 0);
- assert_perror (err);
-
- err = __thread_resume (p->kernel_thread);
---- a/libpthread/sysdeps/mach/hurd/pt-sysdep.h
-+++ b/libpthread/sysdeps/mach/hurd/pt-sysdep.h
-@@ -60,11 +60,13 @@ __pthread_stack_dealloc (void *stackaddr
- __vm_deallocate (__mach_task_self (), (vm_offset_t) stackaddr, stacksize);
- }
-
--/* Change thread THREAD's program counter to PC if SET_PC is true and
-- its stack pointer to SP if SET_IP is true. */
--extern int __thread_set_pcsp (thread_t thread,
-+/* Change thread THREAD's program counter to PC if SET_PC is true,
-+ its stack pointer to SP if SET_IP is true, and its thread pointer
-+ to TP if SET_TP is true. */
-+extern int __thread_set_pcsptp (thread_t thread,
- int set_pc, void *pc,
-- int set_sp, void *sp);
-+ int set_sp, void *sp,
-+ int set_tp, void *tp);
-
-
- #endif /* pt-sysdep.h */
---- a/libpthread/sysdeps/mach/hurd/ia32/pt-machdep.c
-+++ b/libpthread/sysdeps/mach/hurd/ia32/pt-machdep.c
-@@ -21,12 +21,28 @@
-
- #include <mach.h>
- #include <mach/i386/thread_status.h>
-+#include <mach/i386/mach_i386.h>
-+#include <mach/mig_errors.h>
- #include <mach/thread_status.h>
-
-+#define HURD_TLS_DESC_DECL(desc, tcb) \
-+ struct descriptor desc = \
-+ { /* low word: */ \
-+ 0xffff /* limit 0..15 */ \
-+ | (((unsigned int) (tcb)) << 16) /* base 0..15 */
\
-+ , /* high word: */
\
-+ ((((unsigned int) (tcb)) >> 16) & 0xff) /* base 16..23 */
\
-+ | ((0x12 | 0x60 | 0x80) << 8) /* access = ACC_DATA_W|ACC_PL_U|ACC_P */
\
-+ | (0xf << 16) /* limit 16..19 */ \
-+ | ((4 | 8) << 20) /* granularity = SZ_32|SZ_G */
\
-+ | (((unsigned int) (tcb)) & 0xff000000) /* base 24..31 */
\
-+ }
-+
- int
--__thread_set_pcsp (thread_t thread,
-+__thread_set_pcsptp (thread_t thread,
- int set_ip, void *ip,
-- int set_sp, void *sp)
-+ int set_sp, void *sp,
-+ int set_tp, void *tp)
- {
- error_t err;
- struct i386_thread_state state;
-@@ -34,7 +50,7 @@ __thread_set_pcsp (thread_t thread,
-
- state_count = i386_THREAD_STATE_COUNT;
-
-- err = __thread_get_state (thread, i386_THREAD_STATE,
-+ err = __thread_get_state (thread, i386_REGS_SEGS_STATE,
- (thread_state_t) &state, &state_count);
- if (err)
- return err;
-@@ -43,8 +59,21 @@ __thread_set_pcsp (thread_t thread,
- state.uesp = (unsigned int) sp;
- if (set_ip)
- state.eip = (unsigned int) ip;
-+ if (set_tp) {
-+ HURD_TLS_DESC_DECL(desc, tp);
-+ int sel;
-+
-+ asm ("mov %%gs, %w0" : "=q" (sel) : "0" (0));
-+ if (__builtin_expect (sel, 0x48) & 4) /* LDT selector */
-+ err = __i386_set_ldt (thread, sel, &desc, 1);
-+ else
-+ err = __i386_set_gdt (thread, &sel, desc);
-+ if (err)
-+ return err;
-+ state.gs = sel;
-+ }
-
-- err = __thread_set_state (thread, i386_THREAD_STATE,
-+ err = __thread_set_state (thread, i386_REGS_SEGS_STATE,
- (thread_state_t) &state,
- i386_THREAD_STATE_COUNT);
- if (err)
---- a/libpthread/sysdeps/mach/hurd/ia32/pt-setup.c
-+++ b/libpthread/sysdeps/mach/hurd/ia32/pt-setup.c
-@@ -91,12 +91,15 @@ __pthread_setup (struct __pthread *threa
- thread->mcontext.pc = entry_point;
- thread->mcontext.sp = stack_setup (thread, start_routine, arg);
-
-+ thread->tcb->self = thread->kernel_thread;
-+
- ktid = __mach_thread_self ();
- if (thread->kernel_thread != ktid)
- {
-- err = __thread_set_pcsp (thread->kernel_thread,
-+ err = __thread_set_pcsptp (thread->kernel_thread,
- 1, thread->mcontext.pc,
-- 1, thread->mcontext.sp);
-+ 1, thread->mcontext.sp,
-+ 1, thread->tcb);
- assert_perror (err);
- }
- __mach_port_deallocate (__mach_task_self (), ktid);
---- a/libthreads/cprocs.c
-+++ b/libthreads/cprocs.c
-@@ -730,10 +730,11 @@ cproc_create(void)
- spin_lock(&n_kern_lock);
- if (cthread_max_kernel_threads == 0 ||
- cthread_kernel_threads < cthread_max_kernel_threads) {
-+ tcbhead_t *tcb = _dl_allocate_tls(NULL);
- cthread_kernel_threads++;
- spin_unlock(&n_kern_lock);
- MACH_CALL(thread_create(mach_task_self(), &n), r);
-- cproc_setup(child, n, cthread_body); /* machine dependent */
-+ cproc_setup(child, n, tcb, cthread_body); /* machine
dependent */
- MACH_CALL(thread_resume(n), r);
- #ifdef STATISTICS
- spin_lock(&ready_lock);
---- a/libthreads/cthread_internals.h
-+++ b/libthreads/cthread_internals.h
-@@ -166,6 +166,14 @@
- # endif
- #endif
-
-+/* Type of the TCB. */
-+typedef struct
-+{
-+ void *tcb; /* Points to this structure. */
-+ void *dtv; /* Vector of pointers to TLS data. */
-+ thread_t self; /* This thread's control port. */
-+} tcbhead_t;
-+
- /*
- * Low-level thread implementation.
- * This structure must agree with struct ur_cthread in cthreads.h
-@@ -312,4 +320,10 @@ extern void cproc_prepare(cproc_t _chil
- void (*cthread_body_pc)());
-
- extern void cproc_setup(cproc_t _child, thread_t _mach_thread,
-- void (*_routine)(cproc_t));
-+ tcbhead_t *tcb, void (*_routine)(cproc_t));
-+
-+
-+/* From glibc. */
-+
-+/* Dynamic linker TLS allocation. */
-+extern void *_dl_allocate_tls(void *);
---- a/libthreads/alpha/thread.c
-+++ b/libthreads/alpha/thread.c
-@@ -74,6 +74,7 @@ void
- cproc_setup(
- register cproc_t child,
- thread_t thread,
-+ tcbhead_t *tcb, /* TODO */
- void (*routine)(cproc_t))
- {
- register integer_t *top;
---- a/libthreads/i386/thread.c
-+++ b/libthreads/i386/thread.c
-@@ -75,6 +75,21 @@ char rcs_id[] = "$Header: /cvsroot/hurd/
- #include <cthreads.h>
- #include "cthread_internals.h"
- #include <mach.h>
-+#include <mach/i386/mach_i386.h>
-+#include <mach/mig_errors.h>
-+
-+#define HURD_TLS_DESC_DECL(desc, tcb) \
-+ struct descriptor desc = \
-+ { /* low word: */ \
-+ 0xffff /* limit 0..15 */ \
-+ | (((unsigned int) (tcb)) << 16) /* base 0..15 */
\
-+ , /* high word: */
\
-+ ((((unsigned int) (tcb)) >> 16) & 0xff) /* base 16..23 */
\
-+ | ((0x12 | 0x60 | 0x80) << 8) /* access = ACC_DATA_W|ACC_PL_U|ACC_P */
\
-+ | (0xf << 16) /* limit 16..19 */ \
-+ | ((4 | 8) << 20) /* granularity = SZ_32|SZ_G */
\
-+ | (((unsigned int) (tcb)) & 0xff000000) /* base 24..31 */
\
-+ }
-
- /*
- * Set up the initial state of a MACH thread
-@@ -82,7 +97,7 @@ char rcs_id[] = "$Header: /cvsroot/hurd/
- * when it is resumed.
- */
- void
--cproc_setup(register cproc_t child, thread_t thread, void (*routine)(cproc_t))
-+cproc_setup(register cproc_t child, thread_t thread, tcbhead_t *tcb, void
(*routine)(cproc_t))
- {
- extern unsigned int __hurd_threadvar_max; /* GNU */
- register int *top = (int *)
-@@ -95,13 +110,15 @@ cproc_setup(register cproc_t child, thre
- register struct i386_thread_state *ts = &state;
- kern_return_t r;
- unsigned int count;
-+ HURD_TLS_DESC_DECL(desc, tcb);
-+ int sel;
-
- /*
- * Set up i386 call frame and registers.
- * Read registers first to get correct segment values.
- */
- count = i386_THREAD_STATE_COUNT;
-- MACH_CALL(thread_get_state(thread,i386_THREAD_STATE,(thread_state_t)
&state,&count),r);
-+ MACH_CALL(thread_get_state(thread,i386_REGS_SEGS_STATE,(thread_state_t)
&state,&count),r);
-
- ts->eip = (int) routine;
- *--top = (int) child; /* argument to function */
-@@ -109,7 +126,16 @@ cproc_setup(register cproc_t child, thre
- ts->uesp = (int) top; /* set stack pointer */
- ts->ebp = 0; /* clear frame pointer */
-
-- MACH_CALL(thread_set_state(thread,i386_THREAD_STATE,(thread_state_t)
&state,i386_THREAD_STATE_COUNT),r);
-+ asm ("mov %%gs, %w0" : "=q" (sel) : "0" (0));
-+ tcb->tcb = tcb;
-+ tcb->self = thread;
-+ if (__builtin_expect (sel, 0x48) & 4) /* LDT selector */
-+ __i386_set_ldt (thread, sel, &desc, 1);
-+ else
-+ __i386_set_gdt (thread, &sel, desc);
-+ ts->gs = sel;
-+
-+ MACH_CALL(thread_set_state(thread,i386_REGS_SEGS_STATE,(thread_state_t)
&state,i386_THREAD_STATE_COUNT),r);
- }
-
- #if defined(cthread_sp)
diff --git a/debian/patches/series b/debian/patches/series
index cbb8a6b..b0778a4 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -6,7 +6,6 @@ init_try_runsystem.gnu.patch
install-msgids.diff
libpager_update_seqno.patch
libpthread_stubs.patch
-libpthread_tls.patch
makedev.diff
pfinet_dhcp.patch
pflocal.patch
--
Debian GNU Hurd packaging