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

Unified Diff: chrome/test/data/nacl/nonsfi/libc_free.c

Issue 230413002: NonSFI NaCl: Plumb Exception IRT enough for breakpad. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add comment 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: chrome/test/data/nacl/nonsfi/libc_free.c
diff --git a/chrome/test/data/nacl/nonsfi/libc_free.c b/chrome/test/data/nacl/nonsfi/libc_free.c
index ff3aef032a3e10a55bccddc65b00d5bee4b359af..5acf918dd3aea8383e4d99ad8de91d2d1874b06d 100644
--- a/chrome/test/data/nacl/nonsfi/libc_free.c
+++ b/chrome/test/data/nacl/nonsfi/libc_free.c
@@ -20,6 +20,7 @@
#include "ppapi/nacl_irt/public/irt_ppapi.h"
static struct nacl_irt_basic __libnacl_irt_basic;
+static struct nacl_irt_exception_handling __libnacl_irt_exception_handling;
static struct nacl_irt_random __libnacl_irt_random;
static TYPE_nacl_irt_query __nacl_irt_query;
static struct PPP_Instance_1_0 ppp_instance;
@@ -188,6 +189,36 @@ static void TestRandom(PP_Instance instance) {
PostStringMessage(instance, "randomsuccess");
}
+static PP_Instance g_instance_for_exception_handler = -1;
+static void MyNaClExceptionHandler(struct NaClExceptionContext *context) {
+ // TODO verify that I have a stack that is set by altstack.
+
+ PostStringMessage(g_instance_for_exception_handler, "exceptionsuccess");
+
+ // Wait until I get killed by testing infrastructure to give chance
+ // to PostMessage to finish asynchronously notifying javascript
+ // instead of crashing immediately. Doing ppb_console.Log() seems
+ // to also do the job, take your pick.
+ while(1) {
+ __libnacl_irt_basic.sched_yield();
+ }
+}
+
+static void TestException(PP_Instance instance) {
+ // Exception Handling.
+ g_instance_for_exception_handler = instance;
+ if (__libnacl_irt_exception_handling.exception_handler(
+ MyNaClExceptionHandler, NULL)) {
+ PostStringMessage(instance, "Error on registering exception");
+ return;
+ }
+
+ // Crash myself here to invoke the crash handler.
+ *(char*)0 = 0;
+
+ PostStringMessage(instance, "I think I should have crashed already.");
+}
+
// Handle message from javascript, javascript side will tell me what
// kind of test it wants, and I will respond accordingly.
static void HandleMessage(PP_Instance instance, struct PP_Var message) {
@@ -204,6 +235,8 @@ static void HandleMessage(PP_Instance instance, struct PP_Var message) {
ppb_messaging->PostMessage(instance, message);
} else if (!my_strncmp("random", message_string, message_len)) {
TestRandom(instance);
+ } else if (!my_strncmp("exception", message_string, message_len)) {
+ TestException(instance);
} else {
// Unknown message came.
PostStringMessage(instance, "Unknown message type");
@@ -215,6 +248,7 @@ void _start(uintptr_t info[]) {
grok_auxv(auxv);
DO_QUERY(NACL_IRT_BASIC_v0_1, __libnacl_irt_basic);
DO_QUERY(NACL_IRT_RANDOM_v0_1, __libnacl_irt_random);
+ DO_QUERY(NACL_IRT_EXCEPTION_HANDLING_v0_1, __libnacl_irt_exception_handling);
struct nacl_irt_ppapihook ppapihook;
DO_QUERY(NACL_IRT_PPAPIHOOK_v0_1, ppapihook);

Powered by Google App Engine
This is Rietveld 408576698