summaryrefslogtreecommitdiff
path: root/sysdeps/l4/pt-start.c
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@gnu.org>2007-11-20 17:39:57 +0000
committerThomas Schwinge <tschwinge@gnu.org>2009-04-07 23:09:57 +0200
commit6bba5c5394e7bb7b11e3d28a456b38ae77021d52 (patch)
tree77a1fe6bd352d9f3d43d4f086c9aa0c660090b5e /sysdeps/l4/pt-start.c
parente16179334211cd7e2877197140b06b83e2f03733 (diff)
2007-11-20 Neal H. Walfield <neal@gnu.org>
* Makefile.am (libpthread_a_SOURCES): Remove pt-create-np.c. * sysdeps/l4/pt-create-np.c: Remove file. * sysdeps/l4/pt-pool-np.c (pthread_pool_add_np): Change tid from an _L4_thread_id_t to an l4_thread_id_t. (pthread_pool_get_np): Return an l4_thread_id_t, not a _L4_thread_id_t. * sysdeps/l4/bits/pthread-np.h (pthread_create_from_l4_tid_np): Remove declaration. (pthread_pool_add_np): Change tid from an _L4_thread_id_t to an l4_thread_id_t. (pthread_pool_get_np): Return an l4_thread_id_t, not a _L4_thread_id_t. * sysdeps/l4/pt-docancel.c (__pthread_do_cancel): Implement for the case that the target thread is not the executing thread. * sysdeps/l4/pt-thread-alloc.c (__pthread_thread_alloc): Return EAGAIN if pthread_pool_get_np does not return a thread. Update comments. * sysdeps/l4/pt-thread-start.c (__pthread_thread_start): Don't set the thread's pager. Assert that if this is the first thread, then THREAD->THREADID is designates the running thread. * sysdeps/l4/pt-timedblock.c (__pthread_timedblock): Add warning about incomplete implementation. * Makefile.am (libpthread_a_SOURCES): Remove pt-thread-init.c. * sysdeps/l4/pt-thread-init.c: Remove dead file. * sysdeps/l4/pt-start.c: Remove dead file.
Diffstat (limited to 'sysdeps/l4/pt-start.c')
-rw-r--r--sysdeps/l4/pt-start.c103
1 files changed, 0 insertions, 103 deletions
diff --git a/sysdeps/l4/pt-start.c b/sysdeps/l4/pt-start.c
deleted file mode 100644
index fb4e27b..0000000
--- a/sysdeps/l4/pt-start.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Start thread. L4 Hurd version.
- Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <assert.h>
-#include <errno.h>
-#include <string.h>
-
-#include <pt-internal.h>
-
-#include "task_client.h"
-
-extern L4_ThreadId_t __system_pager;
-extern L4_ThreadId_t __task_server;
-
-#ifndef WORKING_EXREGS
-static void
-send_startup_ipc (L4_ThreadId_t id, L4_Word_t ip, L4_Word_t sp)
-{
- L4_Msg_t msg;
-
- printf ("%s: Sending startup message to %x, "
- "(ip=%x, sp=%x)\n",
- __FUNCTION__, * (L4_Word_t *) &id, ip, sp);
-
- L4_Clear (&msg);
-#ifdef HAVE_PROPAGATION
- L4_Set_VirtualSender (pager_tid);
- L4_Set_Propagation (&msg.tag);
-#endif
- L4_Append_Word (&msg, ip);
- L4_Append_Word (&msg, sp);
-#ifndef HAVE_PROPAGATION
- L4_Append_Word (&msg, *(L4_Word_t *) &id);
- id = __system_pager;
-#if 0
- DODEBUG (2, printf ("%s: Redirecting start request to pager (%x).\n",
- __FUNCTION__, * (L4_Word_t *) &id));
-#endif
-#endif
- L4_LoadMsg (&msg);
- L4_Send (id);
-}
-#endif
-
-/* Start THREAD. We allocate all system-specific resources, including
- a kernel thread, set it up, and get it running. */
-int
-__pthread_start (struct __pthread *thread)
-{
- error_t err;
-
- if (__pthread_num_threads == 1)
- /* The main thread is already running: do nothing. */
- {
- assert (__pthread_total == 1);
- thread->threadid = L4_Myself ();
- }
- else
- {
- CORBA_Environment env;
-
- env = idl4_default_environment;
- err = thread_create (__task_server,
- L4_Version (L4_Myself ()),
- * (L4_Word_t *) &__system_pager,
- (L4_Word_t *) &thread->threadid, &env);
- if (err)
- return EAGAIN;
-
- env = idl4_default_environment;
- err = thread_resume (__task_server,
- * (L4_Word_t *) &thread->threadid,
- &env);
- assert (! err);
-
-#ifndef WORKING_EXREGS
- L4_AbortIpc_and_stop (thread->threadid);
- L4_Start_SpIp (thread->threadid, (L4_Word_t) thread->mcontext.sp,
- (L4_Word_t) thread->mcontext.pc);
-#endif
- send_startup_ipc (thread->threadid, (L4_Word_t) thread->mcontext.pc,
- (L4_Word_t) thread->mcontext.sp);
-
- }
-
- return 0;
-}