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

Unified Diff: trunk/src/components/nacl/loader/nonsfi/irt_exception_handling.cc

Issue 265433002: Revert 266968 "NonSFI NaCl: Plumb Exception IRT enough for break..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 8 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: trunk/src/components/nacl/loader/nonsfi/irt_exception_handling.cc
===================================================================
--- trunk/src/components/nacl/loader/nonsfi/irt_exception_handling.cc (revision 266986)
+++ trunk/src/components/nacl/loader/nonsfi/irt_exception_handling.cc (working copy)
@@ -1,106 +0,0 @@
-// Copyright 2014 The Chromium 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 <errno.h>
-#include <pthread.h>
-#include <signal.h>
-
-#include "components/nacl/loader/nonsfi/irt_interfaces.h"
-#include "native_client/src/include/nacl_macros.h"
-#include "native_client/src/trusted/service_runtime/nacl_exception.h"
-#include "native_client/src/trusted/service_runtime/nacl_signal.h"
-
-namespace nacl {
-namespace nonsfi {
-namespace {
-
-// This is NonSFI version of exception handling codebase, NaCl side of
-// things resides in:
-// native_client/src/trusted/service_runtime/linux/nacl_signal.c
-// native_client/src/trusted/service_runtime/sys_exception.c
-
-// Crash signals to handle. The differences from SFI NaCl are that
-// NonSFI NaCl does not use NACL_THREAD_SUSPEND_SIGNAL (==SIGUSR1),
-// and SIGSYS is reserved for seccomp-bpf.
-const int kSignals[] = {
- SIGSTKFLT,
- SIGINT, SIGQUIT, SIGILL, SIGTRAP, SIGBUS, SIGFPE, SIGSEGV,
- // Handle SIGABRT in case someone sends it asynchronously using kill().
- SIGABRT
-};
-
-pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-NaClExceptionHandler signal_handler_function_pointer = NULL;
-
-// Signal handler, responsible for calling the registered handler.
-void SignalCatch(int sig, siginfo_t* info, void* uc) {
- if (signal_handler_function_pointer) {
- NaClSignalContext signal_context;
- NaClSignalContextFromHandler(&signal_context, uc);
- NaClExceptionFrame exception_frame;
- NaClSignalSetUpExceptionFrame(&exception_frame,
- &signal_context,
- 0 /* context_user_addr,
- not useful for NonSFI NaCl. */);
- signal_handler_function_pointer(&exception_frame.context);
- }
- _exit(-1);
-}
-
-int IrtExceptionHandler(NaClExceptionHandler handler,
- NaClExceptionHandler* old_handler) {
- pthread_mutex_lock(&mutex);
- if (old_handler)
- *old_handler = signal_handler_function_pointer;
- signal_handler_function_pointer = handler;
- pthread_mutex_unlock(&mutex);
- return 0;
-}
-
-int IrtExceptionStack(void* stack, size_t size) {
- // TODO(uekawa): Implement this function so that the exception stack
- // actually gets used for running an exception handler. Currently
- // we don't switch stack, which means we can't handle stack overflow
- // exceptions.
- return 0;
-}
-
-int IrtExceptionClearFlag(void) {
- // TODO(uekawa): Implement clear_flag() to behave like SFI NaCl's
- // implementation, so that a thread can handle a second exception
- // after handling a first exception
- return ENOSYS;
-}
-
-} // namespace
-
-const struct nacl_irt_exception_handling kIrtExceptionHandling = {
- IrtExceptionHandler,
- IrtExceptionStack,
- IrtExceptionClearFlag,
-};
-
-void InitializeSignalHandler() {
- struct sigaction sa;
- unsigned int a;
-
- memset(&sa, 0, sizeof(sa));
- sigemptyset(&sa.sa_mask);
- sa.sa_sigaction = SignalCatch;
- sa.sa_flags = SA_ONSTACK | SA_SIGINFO;
-
- // Mask all signals we catch to prevent re-entry.
- for (a = 0; a < NACL_ARRAY_SIZE(kSignals); a++) {
- sigaddset(&sa.sa_mask, kSignals[a]);
- }
-
- // Install all handlers.
- for (a = 0; a < NACL_ARRAY_SIZE(kSignals); a++) {
- if (sigaction(kSignals[a], &sa, NULL) != 0)
- NaClLog(LOG_FATAL, "sigaction to register signals failed.\n");
- }
-}
-
-} // namespace nonsfi
-} // namespace nacl

Powered by Google App Engine
This is Rietveld 408576698