Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Unified Diff: src/trusted/service_runtime/osx/mach_thread_map.c

Issue 12207165: Mac x86_64: Mach exception support (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/trusted/service_runtime/osx/mach_thread_map.c
===================================================================
--- src/trusted/service_runtime/osx/mach_thread_map.c (revision 0)
+++ src/trusted/service_runtime/osx/mach_thread_map.c (revision 0)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2013 The Native Client Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "native_client/src/trusted/service_runtime/osx/mach_thread_map.h"
+
+#include <pthread.h>
+
+#include "native_client/src/shared/platform/nacl_sync.h"
+#include "native_client/src/shared/platform/nacl_sync_checked.h"
+#include "native_client/src/trusted/service_runtime/arch/sel_ldr_arch.h"
+#include "native_client/src/trusted/service_runtime/nacl_globals.h"
+
+#if NACL_ARCH(NACL_BUILD_ARCH) != NACL_x86 || NACL_BUILD_SUBARCH != 32
+
+static struct NaClMutex mach_threads_mu;
+static mach_port_t mach_threads[NACL_THREAD_MAX];
+
+void NaClInitMachThreadMap(void) {
+ NaClXMutexCtor(&mach_threads_mu);
+}
+
+size_t GetNaClThreadIndexForMachThread(mach_port_t mach_thread) {
+ size_t nacl_thread_index;
+
+ NaClXMutexLock(&mach_threads_mu);
Mark Seaborn 2013/02/14 00:37:54 I'd be inclined not to use a lock for this (as on
Mark Mentovai 2013/02/14 19:35:40 Mark Seaborn wrote:
+ for (nacl_thread_index = 0;
+ nacl_thread_index < NACL_THREAD_MAX;
+ ++nacl_thread_index) {
+ if (mach_threads[nacl_thread_index] == mach_thread) {
+ break;
+ }
+ }
+ NaClXMutexUnlock(&mach_threads_mu);
+
+ return nacl_thread_index == NACL_THREAD_MAX ? 0 : nacl_thread_index;
Mark Seaborn 2013/02/14 00:37:54 Use NACL_TLS_INDEX_INVALID rather than 0
+}
+
+static void SetMachThreadForNaClThreadIndex(mach_port_t mach_thread,
+ size_t nacl_thread_index) {
+ NaClXMutexLock(&mach_threads_mu);
+ mach_threads[nacl_thread_index] = mach_thread;
+ NaClXMutexUnlock(&mach_threads_mu);
+}
+
+void SetCurrentMachThreadForNaClThreadIndex(size_t nacl_thread_index) {
+ mach_port_t mach_thread = pthread_mach_thread_np(pthread_self());
+ CHECK(mach_thread != MACH_PORT_NULL);
+ SetMachThreadForNaClThreadIndex(mach_thread, nacl_thread_index);
+}
+
+void ClearMachThreadForNaClThreadIndex(size_t nacl_thread_index) {
+ SetMachThreadForNaClThreadIndex(MACH_PORT_NULL, nacl_thread_index);
+}
+
+#endif
Property changes on: src/trusted/service_runtime/osx/mach_thread_map.c
___________________________________________________________________
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698