{
void *tcb; /* Points to this structure. */
dtv_t *dtv; /* Vector of pointers to TLS data. */
- thread_t self; /* This thread's control port. */
+ thread_t self_do_not_use; /* This thread's control port. */
int multiple_threads;
uintptr_t sysinfo;
uintptr_t stack_guard;
HURD_TLS_DESC_DECL (desc, tcb);
tcb->tcb = tcb;
- tcb->self = child;
if (HURD_SEL_LDT (sel))
err = __i386_set_ldt (child, sel, &desc, 1);
#include <stdint.h>
#include <assert.h>
#include <mach.h>
+#include <hurd.h>
#include <pt-internal.h>
void *), void *(*start_routine) (void *),
void *arg)
{
- tcbhead_t *tcb;
error_t err;
- mach_port_t ktid;
- thread->mcontext.pc = entry_point;
- thread->mcontext.sp = stack_setup (thread, start_routine, arg);
-
- ktid = __mach_thread_self ();
- if (thread->kernel_thread == ktid)
+ if (thread->kernel_thread == hurd_thread_self ())
/* Fix up the TCB for the main thread. The C library has already
installed a TCB, which we want to keep using. This TCB must not
be freed so don't register it in the thread structure. On the
other hand, it's not yet possible to reliably release a TCB.
- Leave the unused one registered so that it doesn't leak. The
- only thing left to do is to correctly set the `self' member in
- the already existing TCB. */
- tcb = THREAD_SELF;
- else
- {
- err = __thread_set_pcsptp (thread->kernel_thread,
- 1, thread->mcontext.pc,
- 1, thread->mcontext.sp,
- 1, thread->tcb);
- assert_perror (err);
- tcb = thread->tcb;
- }
- __mach_port_deallocate (__mach_task_self (), ktid);
+ Leave the unused one registered so that it doesn't leak. */
+ return 0;
+
+ thread->mcontext.pc = entry_point;
+ thread->mcontext.sp = stack_setup (thread, start_routine, arg);
- tcb->self = thread->kernel_thread;
+ err = __thread_set_pcsptp (thread->kernel_thread,
+ 1, thread->mcontext.pc,
+ 1, thread->mcontext.sp,
+ 1, thread->tcb);
+ assert_perror (err);
return 0;
}
{
void *tcb; /* Points to this structure. */
dtv_t *dtv; /* Vector of pointers to TLS data. */
- thread_t self; /* This thread's control port. */
+ thread_t self_do_no_use; /* This thread's control port. */
int __glibc_padding1;
int multiple_threads;
int gscope_flag;
struct i386_fsgs_base_state state;
tcb->tcb = tcb;
- tcb->self = child;
/* Install the TCB address into FS base. */
state.fs_base = (uintptr_t) tcb;