diff options
| author | Samuel Thibault <sthibault@debian.org> | 2007-07-21 00:11:57 +0000 |
|---|---|---|
| committer | Samuel Thibault <sthibault@debian.org> | 2007-07-21 00:11:57 +0000 |
| commit | 7faeed4661f96b91b9fa72aace9eedb47354b440 (patch) | |
| tree | 4ba1feab6fcc3049ce065583bcc0ddf709a73449 /debian | |
| parent | 4186eb92c819626a5ab86e599623969c13e938c2 (diff) | |
update patch to latest version
Diffstat (limited to 'debian')
| -rw-r--r-- | debian/patches/libpthread_tls_transitional.patch | 135 |
1 files changed, 64 insertions, 71 deletions
diff --git a/debian/patches/libpthread_tls_transitional.patch b/debian/patches/libpthread_tls_transitional.patch index a9198647..03d0881b 100644 --- a/debian/patches/libpthread_tls_transitional.patch +++ b/debian/patches/libpthread_tls_transitional.patch @@ -4,8 +4,8 @@ RCS file: /cvsroot/hurd/hurd/libpthread/pthread/pt-create.c,v retrieving revision 1.4 diff -u -p -r1.4 pt-create.c --- libpthread/pthread/pt-create.c 4 May 2005 16:04:06 -0000 1.4 -+++ libpthread/pthread/pt-create.c 8 Jul 2007 22:50:59 -0000 -@@ -127,6 +127,15 @@ __pthread_create_internal (struct __pthr ++++ libpthread/pthread/pt-create.c 13 Jul 2007 01:43:42 -0000 +@@ -127,6 +127,15 @@ if (err) goto failed_thread_alloc; @@ -21,7 +21,7 @@ diff -u -p -r1.4 pt-create.c /* And initialize the rest of the machine context. This may include additional machine- and system-specific initializations that prove convenient. */ -@@ -192,6 +201,9 @@ __pthread_create_internal (struct __pthr +@@ -192,6 +201,9 @@ failed_sigstate: __pthread_sigstate_destroy (pthread); failed_setup: @@ -35,10 +35,9 @@ Index: libpthread/pthread/pt-exit.c =================================================================== RCS file: /cvsroot/hurd/hurd/libpthread/pthread/pt-exit.c,v retrieving revision 1.2 -diff -u -p -r1.2 pt-exit.c --- libpthread/pthread/pt-exit.c 4 May 2005 16:04:06 -0000 1.2 -+++ libpthread/pthread/pt-exit.c 8 Jul 2007 22:50:59 -0000 -@@ -70,6 +70,8 @@ pthread_exit (void *status) ++++ libpthread/pthread/pt-exit.c 13 Jul 2007 01:43:42 -0000 +@@ -70,6 +70,8 @@ if (self->cancel_state == PTHREAD_CANCEL_ENABLE && self->cancel_pending) status = PTHREAD_CANCELED; @@ -51,28 +50,31 @@ Index: libpthread/pthread/pt-initialize.c =================================================================== RCS file: /cvsroot/hurd/hurd/libpthread/pthread/pt-initialize.c,v retrieving revision 1.1 -diff -u -p -r1.1 pt-initialize.c --- libpthread/pthread/pt-initialize.c 10 Oct 2002 23:05:06 -0000 1.1 -+++ libpthread/pthread/pt-initialize.c 8 Jul 2007 22:50:59 -0000 -@@ -30,4 +30,10 @@ void - __pthread_initialize (void) ++++ libpthread/pthread/pt-initialize.c 13 Jul 2007 01:43:42 -0000 +@@ -31,3 +31,15 @@ { RUN_HOOK (__pthread_init, ()); + } + ++void ++__pthread_initialize_minimal (void) ++{ ++#ifndef PIC + if (__libc_setup_tls) { + __libc_setup_tls (sizeof(tcbhead_t), __alignof__(tcbhead_t)); + + asm volatile (""); + } - } ++#endif ++} Index: libpthread/pthread/pt-internal.h =================================================================== RCS file: /cvsroot/hurd/hurd/libpthread/pthread/pt-internal.h,v retrieving revision 1.4 -diff -u -p -r1.4 pt-internal.h --- libpthread/pthread/pt-internal.h 4 Mar 2007 00:05:21 -0000 1.4 -+++ libpthread/pthread/pt-internal.h 8 Jul 2007 22:50:59 -0000 -@@ -50,6 +50,14 @@ enum pthread_state ++++ libpthread/pthread/pt-internal.h 13 Jul 2007 01:43:42 -0000 +@@ -50,6 +50,14 @@ # define PTHREAD_SYSDEP_MEMBERS #endif @@ -87,7 +89,7 @@ diff -u -p -r1.4 pt-internal.h /* This structure describes a POSIX thread. */ struct __pthread { -@@ -85,6 +93,8 @@ struct __pthread +@@ -85,6 +93,8 @@ PTHREAD_SYSDEP_MEMBERS @@ -96,7 +98,7 @@ diff -u -p -r1.4 pt-internal.h struct __pthread *next, **prevp; }; -@@ -272,4 +282,21 @@ const struct __pthread_rwlockattr __pthr +@@ -272,4 +282,21 @@ /* Default condition attributes. */ const struct __pthread_condattr __pthread_default_condattr; @@ -122,10 +124,9 @@ Index: libpthread/sysdeps/mach/hurd/pt-docancel.c =================================================================== RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/mach/hurd/pt-docancel.c,v retrieving revision 1.2 -diff -u -p -r1.2 pt-docancel.c --- libpthread/sysdeps/mach/hurd/pt-docancel.c 18 Nov 2002 22:20:58 -0000 1.2 -+++ libpthread/sysdeps/mach/hurd/pt-docancel.c 8 Jul 2007 22:50:59 -0000 -@@ -52,8 +52,8 @@ __pthread_do_cancel (struct __pthread *p ++++ libpthread/sysdeps/mach/hurd/pt-docancel.c 13 Jul 2007 01:43:43 -0000 +@@ -52,8 +52,8 @@ err = __thread_abort (p->kernel_thread); assert_perror (err); @@ -140,10 +141,9 @@ Index: libpthread/sysdeps/mach/hurd/pt-sysdep.h =================================================================== RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/mach/hurd/pt-sysdep.h,v retrieving revision 1.3 -diff -u -p -r1.3 pt-sysdep.h --- libpthread/sysdeps/mach/hurd/pt-sysdep.h 18 Jan 2005 10:08:52 -0000 1.3 -+++ libpthread/sysdeps/mach/hurd/pt-sysdep.h 8 Jul 2007 22:50:59 -0000 -@@ -59,11 +59,13 @@ __pthread_stack_dealloc (void *stackaddr ++++ libpthread/sysdeps/mach/hurd/pt-sysdep.h 13 Jul 2007 01:43:43 -0000 +@@ -59,11 +59,13 @@ __vm_deallocate (__mach_task_self (), (vm_offset_t) stackaddr, stacksize); } @@ -165,9 +165,8 @@ Index: libpthread/sysdeps/mach/hurd/i386/pt-machdep.c =================================================================== RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/mach/hurd/i386/pt-machdep.c,v retrieving revision 1.1 -diff -u -p -r1.1 pt-machdep.c --- libpthread/sysdeps/mach/hurd/i386/pt-machdep.c 10 Oct 2002 23:05:05 -0000 1.1 -+++ libpthread/sysdeps/mach/hurd/i386/pt-machdep.c 8 Jul 2007 22:50:59 -0000 ++++ libpthread/sysdeps/mach/hurd/i386/pt-machdep.c 13 Jul 2007 01:43:43 -0000 @@ -21,12 +21,28 @@ #include <mach.h> @@ -199,7 +198,7 @@ diff -u -p -r1.1 pt-machdep.c { error_t err; struct i386_thread_state state; -@@ -34,7 +50,7 @@ __thread_set_pcsp (thread_t thread, +@@ -34,7 +50,7 @@ state_count = i386_THREAD_STATE_COUNT; @@ -208,27 +207,22 @@ diff -u -p -r1.1 pt-machdep.c (thread_state_t) &state, &state_count); if (err) return err; -@@ -43,8 +59,26 @@ __thread_set_pcsp (thread_t thread, +@@ -43,8 +59,21 @@ state.uesp = (unsigned int) sp; if (set_ip) state.eip = (unsigned int) ip; + if (set_tp) { + HURD_TLS_DESC_DECL(desc, tp); ++ int sel; + -+ /* Get the first available selector. */ -+ int sel = -1; -+ err = __i386_set_gdt (thread, &sel, desc); -+ if (err == MIG_BAD_ID) -+ { -+ /* Old kernel, use a per-thread LDT. */ -+ sel = 0x27; -+ err = __i386_set_ldt (thread, sel, &desc, 1); -+ if (err) -+ return err; -+ } -+ else if (err) ++ 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 = (unsigned int) sel; ++ state.gs = sel; + } - err = __thread_set_state (thread, i386_THREAD_STATE, @@ -240,10 +234,15 @@ Index: libpthread/sysdeps/mach/hurd/i386/pt-setup.c =================================================================== RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/mach/hurd/i386/pt-setup.c,v retrieving revision 1.4 -diff -u -p -r1.4 pt-setup.c --- libpthread/sysdeps/mach/hurd/i386/pt-setup.c 12 May 2005 20:55:37 -0000 1.4 -+++ libpthread/sysdeps/mach/hurd/i386/pt-setup.c 8 Jul 2007 22:50:59 -0000 -@@ -92,9 +92,10 @@ __pthread_setup (struct __pthread *threa ++++ libpthread/sysdeps/mach/hurd/i386/pt-setup.c 13 Jul 2007 01:43:43 -0000 +@@ -89,12 +89,16 @@ + thread->mcontext.pc = entry_point; + thread->mcontext.sp = stack_setup (thread, start_routine, arg); + ++ if (thread->tcb) ++ thread->tcb->self = thread->kernel_thread; ++ ktid = __mach_thread_self (); if (thread->kernel_thread != ktid) { @@ -260,22 +259,19 @@ Index: libthreads/cprocs.c =================================================================== RCS file: /cvsroot/hurd/hurd/libthreads/cprocs.c,v retrieving revision 1.17 -diff -u -p -r1.17 cprocs.c --- libthreads/cprocs.c 29 May 2002 00:01:24 -0000 1.17 -+++ libthreads/cprocs.c 8 Jul 2007 22:51:00 -0000 -@@ -725,15 +725,22 @@ cproc_create(void) ++++ libthreads/cprocs.c 13 Jul 2007 01:43:43 -0000 +@@ -725,15 +725,20 @@ extern void cproc_prepare(); extern void cthread_body(); thread_t n; + tcbhead_t *tcb; alloc_stack(child); -+ if (_dl_allocate_tls) { ++ if (_dl_allocate_tls) + tcb = _dl_allocate_tls(NULL); -+ tcb->tcb = tcb; -+ } else { ++ else + tcb = NULL; -+ } spin_lock(&n_kern_lock); if (cthread_max_kernel_threads == 0 || cthread_kernel_threads < cthread_max_kernel_threads) { @@ -291,9 +287,8 @@ Index: libthreads/cthread_internals.h =================================================================== RCS file: /cvsroot/hurd/hurd/libthreads/cthread_internals.h,v retrieving revision 1.7 -diff -u -p -r1.7 cthread_internals.h --- libthreads/cthread_internals.h 14 Jun 2007 17:24:13 -0000 1.7 -+++ libthreads/cthread_internals.h 8 Jul 2007 22:51:00 -0000 ++++ libthreads/cthread_internals.h 13 Jul 2007 01:43:43 -0000 @@ -166,6 +166,14 @@ # endif #endif @@ -309,7 +304,7 @@ diff -u -p -r1.7 cthread_internals.h /* * Low-level thread implementation. * This structure must agree with struct ur_cthread in cthreads.h -@@ -312,4 +320,21 @@ extern void cproc_prepare(cproc_t _chil +@@ -312,4 +320,18 @@ void (*cthread_body_pc)()); extern void cproc_setup(cproc_t _child, thread_t _mach_thread, @@ -329,17 +324,14 @@ diff -u -p -r1.7 cthread_internals.h + +/* Dynamic linker TLS deallocation. */ +extern void _dl_deallocate_tls(void *, int) libc_internal_function __attribute__((weak)); -+ -+/* Static TLS setup. */ -+extern void __libc_setup_tls(size_t, size_t) __attribute__((weak)); Index: libthreads/alpha/thread.c =================================================================== RCS file: /cvsroot/hurd/hurd/libthreads/alpha/thread.c,v retrieving revision 1.2 diff -u -p -r1.2 thread.c --- libthreads/alpha/thread.c 27 May 2002 02:50:13 -0000 1.2 -+++ libthreads/alpha/thread.c 8 Jul 2007 22:51:00 -0000 -@@ -74,6 +74,7 @@ void ++++ libthreads/alpha/thread.c 13 Jul 2007 01:43:43 -0000 +@@ -74,6 +74,7 @@ cproc_setup( register cproc_t child, thread_t thread, @@ -351,10 +343,9 @@ Index: libthreads/i386/thread.c =================================================================== RCS file: /cvsroot/hurd/hurd/libthreads/i386/thread.c,v retrieving revision 1.7 -diff -u -p -r1.7 thread.c --- libthreads/i386/thread.c 27 May 2002 02:50:10 -0000 1.7 -+++ libthreads/i386/thread.c 8 Jul 2007 22:51:00 -0000 -@@ -75,6 +75,21 @@ char rcs_id[] = "$Header: /cvsroot/hurd/ ++++ libthreads/i386/thread.c 13 Jul 2007 01:43:43 -0000 +@@ -75,6 +75,21 @@ #include <cthreads.h> #include "cthread_internals.h" #include <mach.h> @@ -376,7 +367,7 @@ diff -u -p -r1.7 thread.c /* * Set up the initial state of a MACH thread -@@ -82,7 +97,7 @@ char rcs_id[] = "$Header: /cvsroot/hurd/ +@@ -82,7 +97,7 @@ * when it is resumed. */ void @@ -385,7 +376,7 @@ diff -u -p -r1.7 thread.c { extern unsigned int __hurd_threadvar_max; /* GNU */ register int *top = (int *) -@@ -101,7 +116,7 @@ cproc_setup(register cproc_t child, thre +@@ -101,7 +116,7 @@ * Read registers first to get correct segment values. */ count = i386_THREAD_STATE_COUNT; @@ -394,21 +385,23 @@ diff -u -p -r1.7 thread.c ts->eip = (int) routine; *--top = (int) child; /* argument to function */ -@@ -109,7 +124,19 @@ cproc_setup(register cproc_t child, thre +@@ -109,7 +124,21 @@ 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); + if (tcb) { + HURD_TLS_DESC_DECL(desc, tcb); -+ /* Get the first available selector. */ -+ int sel = -1; -+ if (__i386_set_gdt (thread, &sel, desc) == MIG_BAD_ID) { -+ /* Old kernel, use a per-thread LDT. */ -+ sel = 0x27; -+ __i386_set_ldt (thread, sel, &desc, 1); -+ } -+ ts->gs = (unsigned int)sel; ++ int sel; ++ ++ 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); |
