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

Unified Diff: src/nonsfi/irt/irt_interfaces.c

Issue 1212613002: Non-SFI mode: Add Linux asynchronous signal support (Closed) Base URL: https://chromium.googlesource.com/native_client/src/native_client.git@master
Patch Set: Created 5 years, 6 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/nonsfi/irt/irt_interfaces.c
diff --git a/src/nonsfi/irt/irt_interfaces.c b/src/nonsfi/irt/irt_interfaces.c
index 220d5b8747abe5ac3fc4a66f97ff479e7b0eb3f6..7788cd3fe58e1cf9cb2f7f63275e1fb6c3450558 100644
--- a/src/nonsfi/irt/irt_interfaces.c
+++ b/src/nonsfi/irt/irt_interfaces.c
@@ -26,9 +26,10 @@
#include "native_client/src/include/elf32.h"
#include "native_client/src/include/elf_auxv.h"
#include "native_client/src/include/nacl/nacl_exception.h"
+#include "native_client/src/include/nacl/nacl_signal.h"
#include "native_client/src/include/nacl_macros.h"
#include "native_client/src/public/irt_core.h"
-#include "native_client/src/public/nonsfi/irt_exception_handling.h"
+#include "native_client/src/public/nonsfi/irt_signal_handling.h"
#include "native_client/src/trusted/service_runtime/include/machine/_types.h"
#include "native_client/src/trusted/service_runtime/include/sys/mman.h"
#include "native_client/src/trusted/service_runtime/include/sys/stat.h"
@@ -38,6 +39,7 @@
#include "native_client/src/untrusted/irt/irt_dev.h"
#include "native_client/src/untrusted/irt/irt_interfaces.h"
#include "native_client/src/untrusted/nacl/nacl_random.h"
+#include "native_client/src/untrusted/pthread/pthread_types.h"
Mark Seaborn 2015/06/26 18:31:59 Not used? irt_interfaces.c shouldn't depend on sr
Luis Héctor Chávez 2015/07/06 23:44:59 Removed.
#if defined(__native_client__) && defined(__arm__)
#include "native_client/src/nonsfi/irt/irt_icache.h"
@@ -353,7 +355,7 @@ static void *start_thread(void *arg) {
}
static int thread_create(void (*start_func)(void), void *stack,
- void *thread_ptr) {
+ void *thread_ptr, nacl_irt_tid_t *child_tid) {
/*
* For now, we ignore the stack that user code provides and just use
* the stack that the host libpthread allocates.
@@ -374,13 +376,21 @@ static int thread_create(void (*start_func)(void), void *stack,
args->thread_ptr = thread_ptr;
pthread_t tid;
error = pthread_create(&tid, &attr, start_thread, args);
- if (error != 0)
+ if (error != 0) {
free(args);
+ } else if (child_tid != NULL) {
+ *child_tid = tid->native_tid;
Mark Seaborn 2015/06/26 18:31:59 This creates an unfortunate dependency on libpthre
Luis Héctor Chávez 2015/07/06 23:44:59 Split that off into https://codereview.chromium.or
+ }
cleanup:
pthread_attr_destroy(&attr);
return error;
}
+static int thread_create_v0_1(void (*start_func)(void), void *stack,
+ void *thread_ptr) {
+ return thread_create(start_func, stack, thread_ptr, NULL);
+}
+
static void thread_exit(int32_t *stack_flag) {
*stack_flag = 0; /* Indicate that the user code's stack can be freed. */
pthread_exit(NULL);
@@ -585,6 +595,12 @@ const struct nacl_irt_tls nacl_irt_tls = {
};
const struct nacl_irt_thread nacl_irt_thread = {
+ thread_create_v0_1,
+ thread_exit,
+ thread_nice,
+};
+
+const struct nacl_irt_thread_v0_2 nacl_irt_thread_v0_2 = {
thread_create,
thread_exit,
thread_nice,
@@ -650,6 +666,11 @@ const struct nacl_irt_exception_handling nacl_irt_exception_handling = {
nacl_exception_set_stack,
nacl_exception_clear_flag,
};
+
+const struct nacl_irt_signal_handling nacl_irt_signal_handling = {
+ nacl_signal_set_handler,
+ nacl_signal_send_async_signal,
+};
#endif
#if defined(__native_client__) && defined(__arm__)
@@ -674,6 +695,8 @@ static const struct nacl_irt_interface irt_interfaces[] = {
{ NACL_IRT_MEMORY_v0_3, &nacl_irt_memory, sizeof(nacl_irt_memory), NULL },
{ NACL_IRT_TLS_v0_1, &nacl_irt_tls, sizeof(nacl_irt_tls), NULL },
{ NACL_IRT_THREAD_v0_1, &nacl_irt_thread, sizeof(nacl_irt_thread), NULL },
+ { NACL_IRT_THREAD_v0_2, &nacl_irt_thread_v0_2,
+ sizeof(nacl_irt_thread_v0_2), NULL },
{ NACL_IRT_FUTEX_v0_1, &nacl_irt_futex, sizeof(nacl_irt_futex), NULL },
{ NACL_IRT_RANDOM_v0_1, &nacl_irt_random, sizeof(nacl_irt_random), NULL },
#if defined(__linux__) || defined(__native_client__)
@@ -686,6 +709,8 @@ static const struct nacl_irt_interface irt_interfaces[] = {
#if defined(__native_client__)
{ NACL_IRT_EXCEPTION_HANDLING_v0_1, &nacl_irt_exception_handling,
sizeof(nacl_irt_exception_handling), NULL },
+ { NACL_IRT_SIGNAL_HANDLING_v0_1, &nacl_irt_signal_handling,
+ sizeof(nacl_irt_signal_handling), NULL },
#endif
#if defined(__native_client__) && defined(__arm__)
{ NACL_IRT_ICACHE_v0_1, &nacl_irt_icache, sizeof(nacl_irt_icache), NULL },

Powered by Google App Engine
This is Rietveld 408576698