summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/nacl/browser/nacl_process_host.cc23
-rw-r--r--components/nacl/browser/nacl_process_host.h5
-rw-r--r--components/nacl/common/nacl_host_messages.h1
-rw-r--r--components/nacl/common/nacl_messages.h1
-rw-r--r--components/nacl/common/nacl_types.cc12
-rw-r--r--components/nacl/common/nacl_types.h14
-rw-r--r--components/nacl/loader/nacl_listener.cc33
-rw-r--r--components/nacl/loader/nacl_listener.h5
-rw-r--r--components/nacl/renderer/nexe_load_manager.cc23
-rw-r--r--components/nacl/renderer/nexe_load_manager.h9
-rw-r--r--components/nacl/renderer/ppb_nacl_private_impl.cc9
-rw-r--r--ppapi/api/private/ppb_nacl_private.idl3
-rw-r--r--ppapi/c/private/ppb_nacl_private.h4
-rw-r--r--ppapi/native_client/src/trusted/plugin/plugin.cc5
-rw-r--r--ppapi/native_client/src/trusted/plugin/service_runtime.cc8
-rw-r--r--ppapi/native_client/src/trusted/plugin/service_runtime.h2
-rw-r--r--ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c6
17 files changed, 123 insertions, 40 deletions
diff --git a/components/nacl/browser/nacl_process_host.cc b/components/nacl/browser/nacl_process_host.cc
index 7005a66..56934bf 100644
--- a/components/nacl/browser/nacl_process_host.cc
+++ b/components/nacl/browser/nacl_process_host.cc
@@ -474,6 +474,10 @@ void NaClProcessHost::Launch(
SetCloseOnExec(pair[1]);
}
+ // Create a shared memory region that the renderer and plugin share for
+ // reporting crash information.
+ crash_info_shmem_.CreateAnonymous(kNaClCrashInfoShmemSize);
+
// Launch the process
if (!LaunchSelLdr()) {
delete this;
@@ -736,15 +740,27 @@ bool NaClProcessHost::ReplyToRenderer(
#endif
const ChildProcessData& data = process_->GetData();
+ base::SharedMemoryHandle crash_info_shmem_renderer_handle;
+ if (!crash_info_shmem_.ShareToProcess(nacl_host_message_filter_->PeerHandle(),
+ &crash_info_shmem_renderer_handle)) {
+ SendErrorToRenderer("ShareToProcess() failed");
+ return false;
+ }
+
SendMessageToRenderer(
NaClLaunchResult(imc_handle_for_renderer,
ppapi_channel_handle,
trusted_channel_handle,
manifest_service_channel_handle,
base::GetProcId(data.handle),
- data.id),
+ data.id,
+ crash_info_shmem_renderer_handle),
std::string() /* error_message */);
internal_->socket_for_renderer = NACL_INVALID_HANDLE;
+
+ // Now that the crash information shmem handles have been shared with the
+ // plugin and the renderer, the browser can close its handle.
+ crash_info_shmem_.Close();
return true;
}
@@ -899,6 +915,11 @@ bool NaClProcessHost::StartNaClExecution() {
params.nexe_file = IPC::TakeFileHandleForProcess(nexe_file_.Pass(),
process_->GetData().handle);
+ if (!crash_info_shmem_.ShareToProcess(process_->GetData().handle,
+ &params.crash_info_shmem_handle)) {
+ DLOG(ERROR) << "Failed to ShareToProcess() a shared memory buffer";
+ return false;
+ }
process_->Send(new NaClProcessMsg_Start(params));
return true;
diff --git a/components/nacl/browser/nacl_process_host.h b/components/nacl/browser/nacl_process_host.h
index 2f6af97..31e0d60 100644
--- a/components/nacl/browser/nacl_process_host.h
+++ b/components/nacl/browser/nacl_process_host.h
@@ -11,6 +11,7 @@
#include "base/files/file_path.h"
#include "base/files/file_util_proxy.h"
#include "base/memory/ref_counted.h"
+#include "base/memory/shared_memory.h"
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/process/process.h"
@@ -248,6 +249,10 @@ class NaClProcessHost : public content::BrowserChildProcessHostDelegate {
// Throttling time in milliseconds for PpapiHostMsg_Keepalive IPCs.
static unsigned keepalive_throttle_interval_milliseconds_;
+ // Shared memory provided to the plugin and renderer for
+ // reporting crash information.
+ base::SharedMemory crash_info_shmem_;
+
DISALLOW_COPY_AND_ASSIGN(NaClProcessHost);
};
diff --git a/components/nacl/common/nacl_host_messages.h b/components/nacl/common/nacl_host_messages.h
index 0722d9d..f60f4c7 100644
--- a/components/nacl/common/nacl_host_messages.h
+++ b/components/nacl/common/nacl_host_messages.h
@@ -40,6 +40,7 @@ IPC_STRUCT_TRAITS_BEGIN(nacl::NaClLaunchResult)
IPC_STRUCT_TRAITS_MEMBER(manifest_service_ipc_channel_handle)
IPC_STRUCT_TRAITS_MEMBER(plugin_pid)
IPC_STRUCT_TRAITS_MEMBER(plugin_child_id)
+ IPC_STRUCT_TRAITS_MEMBER(crash_info_shmem_handle)
IPC_STRUCT_TRAITS_END()
IPC_STRUCT_TRAITS_BEGIN(nacl::PnaclCacheInfo)
diff --git a/components/nacl/common/nacl_messages.h b/components/nacl/common/nacl_messages.h
index 6d613b0..eeaedf9 100644
--- a/components/nacl/common/nacl_messages.h
+++ b/components/nacl/common/nacl_messages.h
@@ -27,6 +27,7 @@ IPC_STRUCT_TRAITS_BEGIN(nacl::NaClStartParams)
IPC_STRUCT_TRAITS_MEMBER(enable_ipc_proxy)
IPC_STRUCT_TRAITS_MEMBER(uses_irt)
IPC_STRUCT_TRAITS_MEMBER(enable_dyncode_syscalls)
+ IPC_STRUCT_TRAITS_MEMBER(crash_info_shmem_handle)
IPC_STRUCT_TRAITS_END()
//-----------------------------------------------------------------------------
diff --git a/components/nacl/common/nacl_types.cc b/components/nacl/common/nacl_types.cc
index f2c5951..cd115cb 100644
--- a/components/nacl/common/nacl_types.cc
+++ b/components/nacl/common/nacl_types.cc
@@ -16,7 +16,8 @@ NaClStartParams::NaClStartParams()
enable_debug_stub(false),
enable_ipc_proxy(false),
uses_irt(false),
- enable_dyncode_syscalls(false) {
+ enable_dyncode_syscalls(false),
+ crash_info_shmem_handle(base::SharedMemory::NULLHandle()) {
}
NaClStartParams::~NaClStartParams() {
@@ -67,7 +68,8 @@ NaClLaunchResult::NaClLaunchResult()
ppapi_ipc_channel_handle(),
trusted_ipc_channel_handle(),
plugin_pid(base::kNullProcessId),
- plugin_child_id(0) {
+ plugin_child_id(0),
+ crash_info_shmem_handle(base::SharedMemory::NULLHandle()) {
}
NaClLaunchResult::NaClLaunchResult(
@@ -76,13 +78,15 @@ NaClLaunchResult::NaClLaunchResult(
const IPC::ChannelHandle& trusted_ipc_channel_handle,
const IPC::ChannelHandle& manifest_service_ipc_channel_handle,
base::ProcessId plugin_pid,
- int plugin_child_id)
+ int plugin_child_id,
+ base::SharedMemoryHandle crash_info_shmem_handle)
: imc_channel_handle(imc_channel_handle),
ppapi_ipc_channel_handle(ppapi_ipc_channel_handle),
trusted_ipc_channel_handle(trusted_ipc_channel_handle),
manifest_service_ipc_channel_handle(manifest_service_ipc_channel_handle),
plugin_pid(plugin_pid),
- plugin_child_id(plugin_child_id) {
+ plugin_child_id(plugin_child_id),
+ crash_info_shmem_handle(crash_info_shmem_handle) {
}
NaClLaunchResult::~NaClLaunchResult() {
diff --git a/components/nacl/common/nacl_types.h b/components/nacl/common/nacl_types.h
index 6aea090..7ce6b3f 100644
--- a/components/nacl/common/nacl_types.h
+++ b/components/nacl/common/nacl_types.h
@@ -9,6 +9,7 @@
#include <vector>
#include "base/basictypes.h"
+#include "base/memory/shared_memory.h"
#include "base/process/process_handle.h"
#include "build/build_config.h"
#include "ipc/ipc_channel.h"
@@ -37,6 +38,10 @@ inline int ToNativeHandle(const FileDescriptor& desc) {
}
#endif
+// We allocate a page of shared memory for sharing crash information from
+// trusted code in the NaCl process to the renderer.
+static const int kNaClCrashInfoShmemSize = 4096;
+static const int kNaClCrashInfoMaxLogSize = 1024;
// Parameters sent to the NaCl process when we start it.
struct NaClStartParams {
@@ -63,6 +68,9 @@ struct NaClStartParams {
bool uses_irt;
bool enable_dyncode_syscalls;
+ // For NaCl <-> renderer crash information reporting.
+ base::SharedMemoryHandle crash_info_shmem_handle;
+
// NOTE: Any new fields added here must also be added to the IPC
// serialization in nacl_messages.h and (for POD fields) the constructor
// in nacl_types.cc.
@@ -112,7 +120,8 @@ struct NaClLaunchResult {
const IPC::ChannelHandle& trusted_ipc_channel_handle,
const IPC::ChannelHandle& manifest_service_ipc_channel_handle,
base::ProcessId plugin_pid,
- int plugin_child_id);
+ int plugin_child_id,
+ base::SharedMemoryHandle crash_info_shmem_handle);
~NaClLaunchResult();
// For plugin loader <-> renderer IMC communication.
@@ -130,6 +139,9 @@ struct NaClLaunchResult {
base::ProcessId plugin_pid;
int plugin_child_id;
+
+ // For NaCl <-> renderer crash information reporting.
+ base::SharedMemoryHandle crash_info_shmem_handle;
};
} // namespace nacl
diff --git a/components/nacl/loader/nacl_listener.cc b/components/nacl/loader/nacl_listener.cc
index d7c97ad..377b19c 100644
--- a/components/nacl/loader/nacl_listener.cc
+++ b/components/nacl/loader/nacl_listener.cc
@@ -7,6 +7,7 @@
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
+#include <string.h>
#if defined(OS_POSIX)
#include <unistd.h>
@@ -46,6 +47,24 @@
#endif
namespace {
+
+NaClListener* g_listener;
+
+void FatalLogHandler(const char* data, size_t bytes) {
+ // We use uint32_t rather than size_t for the case when the browser and NaCl
+ // processes are a mix of 32-bit and 64-bit processes.
+ uint32_t copy_bytes = std::min<uint32_t>(static_cast<uint32_t>(bytes),
+ nacl::kNaClCrashInfoMaxLogSize);
+
+ // We copy the length of the crash data to the start of the shared memory
+ // segment so we know how much to copy.
+ memcpy(g_listener->crash_info_shmem_memory(), &copy_bytes, sizeof(uint32_t));
+
+ memcpy((char*)g_listener->crash_info_shmem_memory() + sizeof(uint32_t),
+ data,
+ copy_bytes);
+}
+
#if defined(OS_MACOSX)
// On Mac OS X, shm_open() works in the sandbox but does not give us
@@ -85,9 +104,6 @@ int CreateMemoryObject(size_t size, int executable) {
}
#elif defined(OS_WIN)
-
-NaClListener* g_listener;
-
// We wrap the function to convert the bool return value to an int.
int BrokerDuplicateHandle(NaClHandle source_handle,
uint32_t process_id,
@@ -213,18 +229,14 @@ NaClListener::NaClListener() : shutdown_event_(true, false),
main_loop_(NULL) {
io_thread_.StartWithOptions(
base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
-#if defined(OS_WIN)
DCHECK(g_listener == NULL);
g_listener = this;
-#endif
}
NaClListener::~NaClListener() {
NOTREACHED();
shutdown_event_.Signal();
-#if defined(OS_WIN)
g_listener = NULL;
-#endif
}
bool NaClListener::Send(IPC::Message* msg) {
@@ -269,9 +281,14 @@ void NaClListener::OnStart(const nacl::NaClStartParams& params) {
}
NaClChromeMainSetUrandomFd(urandom_fd);
#endif
-
struct NaClApp* nap = NULL;
NaClChromeMainInit();
+
+ crash_info_shmem_.reset(new base::SharedMemory(params.crash_info_shmem_handle,
+ false));
+ CHECK(crash_info_shmem_->Map(nacl::kNaClCrashInfoShmemSize));
+ NaClSetFatalErrorCallback(&FatalLogHandler);
+
nap = NaClAppCreate();
if (nap == NULL) {
LOG(ERROR) << "NaClAppCreate() failed";
diff --git a/components/nacl/loader/nacl_listener.h b/components/nacl/loader/nacl_listener.h
index 31a0048..0e335a4 100644
--- a/components/nacl/loader/nacl_listener.h
+++ b/components/nacl/loader/nacl_listener.h
@@ -8,6 +8,7 @@
#include <vector>
#include "base/memory/scoped_ptr.h"
+#include "base/memory/shared_memory.h"
#include "base/synchronization/waitable_event.h"
#include "base/threading/thread.h"
#include "components/nacl/common/nacl_types.h"
@@ -45,6 +46,8 @@ class NaClListener : public IPC::Listener {
}
#endif
+ void* crash_info_shmem_memory() const { return crash_info_shmem_->memory(); }
+
private:
virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
@@ -71,6 +74,8 @@ class NaClListener : public IPC::Listener {
int number_of_cores_;
#endif
+ scoped_ptr<base::SharedMemory> crash_info_shmem_;
+
scoped_refptr<NaClTrustedListener> trusted_listener_;
// Used to identify what thread we're on.
diff --git a/components/nacl/renderer/nexe_load_manager.cc b/components/nacl/renderer/nexe_load_manager.cc
index df70a06..c4d6119 100644
--- a/components/nacl/renderer/nexe_load_manager.cc
+++ b/components/nacl/renderer/nexe_load_manager.cc
@@ -89,6 +89,7 @@ NexeLoadManager::NexeLoadManager(
exit_status_(-1),
nexe_size_(0),
plugin_instance_(content::PepperPluginInstance::Get(pp_instance)),
+ crash_info_shmem_handle_(base::SharedMemory::NULLHandle()),
weak_factory_(this) {
SetLastError("");
HistogramEnumerateOsArch(GetSandboxArch());
@@ -103,6 +104,8 @@ NexeLoadManager::~NexeLoadManager() {
base::TimeDelta uptime = base::Time::Now() - ready_time_;
HistogramTimeLarge("NaCl.ModuleUptime.Normal", uptime.InMilliseconds());
}
+ if (base::SharedMemory::IsHandleValid(crash_info_shmem_handle_))
+ base::SharedMemory::CloseHandle(crash_info_shmem_handle_);
}
void NexeLoadManager::NexeFileDidOpen(int32_t pp_error,
@@ -231,7 +234,7 @@ void NexeLoadManager::ReportLoadAbort() {
LogToConsole(error_string);
}
-void NexeLoadManager::NexeDidCrash(const char* crash_log) {
+void NexeLoadManager::NexeDidCrash() {
VLOG(1) << "Plugin::NexeDidCrash: crash event!";
// The NaCl module voluntarily exited. However, this is still a
// crash from the point of view of Pepper, since PPAPI plugins are
@@ -259,7 +262,23 @@ void NexeLoadManager::NexeDidCrash(const char* crash_log) {
// crash log. In the event that this is called twice, the second
// invocation will just be a no-op, since the entire crash log will
// have been received and we'll just get an EOF indication.
- CopyCrashLogToJsConsole(crash_log);
+
+ base::SharedMemory shmem(crash_info_shmem_handle_, true);
+ if (shmem.Map(kNaClCrashInfoShmemSize)) {
+ uint32_t crash_log_length;
+ // We cast the length value to volatile here to prevent the compiler from
+ // reordering instructions in a way that could introduce a TOCTTOU race.
+ crash_log_length = *(static_cast<volatile uint32_t*>(shmem.memory()));
+ crash_log_length = std::min<uint32_t>(crash_log_length,
+ kNaClCrashInfoMaxLogSize);
+
+ scoped_ptr<char[]> crash_log_data(new char[kNaClCrashInfoShmemSize]);
+ memcpy(crash_log_data.get(),
+ static_cast<char*>(shmem.memory()) + sizeof(uint32_t),
+ crash_log_length);
+ std::string crash_log(crash_log_data.get(), crash_log_length);
+ CopyCrashLogToJsConsole(crash_log);
+ }
}
void NexeLoadManager::set_trusted_plugin_channel(
diff --git a/components/nacl/renderer/nexe_load_manager.h b/components/nacl/renderer/nexe_load_manager.h
index 9ecbe67..2c3b4a9 100644
--- a/components/nacl/renderer/nexe_load_manager.h
+++ b/components/nacl/renderer/nexe_load_manager.h
@@ -11,6 +11,7 @@
#include "base/files/file.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
+#include "base/memory/shared_memory.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
#include "ppapi/c/private/ppb_nacl_private.h"
@@ -53,7 +54,7 @@ class NexeLoadManager {
const std::string& error_message,
const std::string& console_message);
void ReportLoadAbort();
- void NexeDidCrash(const char* crash_log);
+ void NexeDidCrash();
// TODO(dmichael): Everything below this comment should eventually be made
// private, when ppb_nacl_private_impl.cc is no longer using them directly.
@@ -112,6 +113,10 @@ class NexeLoadManager {
const std::string& program_url() const { return program_url_; }
+ void set_crash_info_shmem_handle(base::SharedMemoryHandle h) {
+ crash_info_shmem_handle_ = h;
+ }
+
private:
DISALLOW_COPY_AND_ASSIGN(NexeLoadManager);
@@ -171,6 +176,8 @@ class NexeLoadManager {
base::Time pnacl_start_time_;
+ base::SharedMemoryHandle crash_info_shmem_handle_;
+
scoped_ptr<TrustedPluginChannel> trusted_plugin_channel_;
scoped_ptr<ManifestServiceChannel> manifest_service_channel_;
base::WeakPtrFactory<NexeLoadManager> weak_factory_;
diff --git a/components/nacl/renderer/ppb_nacl_private_impl.cc b/components/nacl/renderer/ppb_nacl_private_impl.cc
index 5090ad1ac..bab0ae5 100644
--- a/components/nacl/renderer/ppb_nacl_private_impl.cc
+++ b/components/nacl/renderer/ppb_nacl_private_impl.cc
@@ -411,9 +411,14 @@ void LaunchSelLdr(PP_Instance instance,
DCHECK(load_manager);
if (!load_manager) {
PostPPCompletionCallback(callback, PP_ERROR_FAILED);
+ base::SharedMemory::CloseHandle(launch_result.crash_info_shmem_handle);
return;
}
+ // Store the crash information shared memory handle.
+ load_manager->set_crash_info_shmem_handle(
+ launch_result.crash_info_shmem_handle);
+
// Create the trusted plugin channel.
if (IsValidChannelHandle(launch_result.trusted_ipc_channel_handle)) {
scoped_ptr<TrustedPluginChannel> trusted_plugin_channel(
@@ -755,10 +760,10 @@ void ReportLoadAbort(PP_Instance instance) {
load_manager->ReportLoadAbort();
}
-void NexeDidCrash(PP_Instance instance, const char* crash_log) {
+void NexeDidCrash(PP_Instance instance) {
NexeLoadManager* load_manager = GetNexeLoadManager(instance);
if (load_manager)
- load_manager->NexeDidCrash(crash_log);
+ load_manager->NexeDidCrash();
}
void InstanceCreated(PP_Instance instance) {
diff --git a/ppapi/api/private/ppb_nacl_private.idl b/ppapi/api/private/ppb_nacl_private.idl
index d847cc7..8d9038c 100644
--- a/ppapi/api/private/ppb_nacl_private.idl
+++ b/ppapi/api/private/ppb_nacl_private.idl
@@ -276,8 +276,7 @@ interface PPB_NaCl_Private {
void ReportLoadAbort([in] PP_Instance instance);
/* Reports that the nexe has crashed. */
- void NexeDidCrash([in] PP_Instance instance,
- [in] str_t crash_log);
+ void NexeDidCrash([in] PP_Instance instance);
/* Performs internal setup when an instance is created. */
void InstanceCreated([in] PP_Instance instance);
diff --git a/ppapi/c/private/ppb_nacl_private.h b/ppapi/c/private/ppb_nacl_private.h
index 940979f..67d2939 100644
--- a/ppapi/c/private/ppb_nacl_private.h
+++ b/ppapi/c/private/ppb_nacl_private.h
@@ -3,7 +3,7 @@
* found in the LICENSE file.
*/
-/* From private/ppb_nacl_private.idl modified Thu Jul 10 10:34:30 2014. */
+/* From private/ppb_nacl_private.idl modified Thu Aug 14 11:48:23 2014. */
#ifndef PPAPI_C_PRIVATE_PPB_NACL_PRIVATE_H_
#define PPAPI_C_PRIVATE_PPB_NACL_PRIVATE_H_
@@ -305,7 +305,7 @@ struct PPB_NaCl_Private_1_0 {
/* Reports that loading a nexe was aborted. */
void (*ReportLoadAbort)(PP_Instance instance);
/* Reports that the nexe has crashed. */
- void (*NexeDidCrash)(PP_Instance instance, const char* crash_log);
+ void (*NexeDidCrash)(PP_Instance instance);
/* Performs internal setup when an instance is created. */
void (*InstanceCreated)(PP_Instance instance);
/* Performs internal cleanup when an instance is destroyed. */
diff --git a/ppapi/native_client/src/trusted/plugin/plugin.cc b/ppapi/native_client/src/trusted/plugin/plugin.cc
index da58f43..6104b90 100644
--- a/ppapi/native_client/src/trusted/plugin/plugin.cc
+++ b/ppapi/native_client/src/trusted/plugin/plugin.cc
@@ -361,10 +361,7 @@ void Plugin::NexeFileDidOpenContinuation(int32_t pp_error) {
void Plugin::NexeDidCrash(int32_t pp_error) {
PLUGIN_PRINTF(("Plugin::NexeDidCrash (pp_error=%" NACL_PRId32 ")\n",
pp_error));
-
- std::string crash_log =
- main_subprocess_.service_runtime()->GetCrashLogOutput();
- nacl_interface_->NexeDidCrash(pp_instance(), crash_log.c_str());
+ nacl_interface_->NexeDidCrash(pp_instance());
}
void Plugin::BitcodeDidTranslate(int32_t pp_error) {
diff --git a/ppapi/native_client/src/trusted/plugin/service_runtime.cc b/ppapi/native_client/src/trusted/plugin/service_runtime.cc
index 7802af30..d570f4c 100644
--- a/ppapi/native_client/src/trusted/plugin/service_runtime.cc
+++ b/ppapi/native_client/src/trusted/plugin/service_runtime.cc
@@ -588,12 +588,4 @@ void ServiceRuntime::set_exit_status(int exit_status) {
plugin_->set_exit_status(exit_status & 0xff);
}
-nacl::string ServiceRuntime::GetCrashLogOutput() {
- if (NULL != subprocess_.get()) {
- return subprocess_->GetCrashLogOutput();
- } else {
- return std::string();
- }
-}
-
} // namespace plugin
diff --git a/ppapi/native_client/src/trusted/plugin/service_runtime.h b/ppapi/native_client/src/trusted/plugin/service_runtime.h
index 1b24ff5..dc70330 100644
--- a/ppapi/native_client/src/trusted/plugin/service_runtime.h
+++ b/ppapi/native_client/src/trusted/plugin/service_runtime.h
@@ -197,8 +197,6 @@ class ServiceRuntime {
int exit_status(); // const, but grabs mutex etc.
void set_exit_status(int exit_status);
- nacl::string GetCrashLogOutput();
-
bool main_service_runtime() const { return main_service_runtime_; }
private:
diff --git a/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c b/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c
index 35c8bc3..65c5a70 100644
--- a/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c
+++ b/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c
@@ -3447,9 +3447,9 @@ static void Pnacl_M25_PPB_NaCl_Private_ReportLoadAbort(PP_Instance instance) {
iface->ReportLoadAbort(instance);
}
-static void Pnacl_M25_PPB_NaCl_Private_NexeDidCrash(PP_Instance instance, const char* crash_log) {
+static void Pnacl_M25_PPB_NaCl_Private_NexeDidCrash(PP_Instance instance) {
const struct PPB_NaCl_Private_1_0 *iface = Pnacl_WrapperInfo_PPB_NaCl_Private_1_0.real_iface;
- iface->NexeDidCrash(instance, crash_log);
+ iface->NexeDidCrash(instance);
}
static void Pnacl_M25_PPB_NaCl_Private_InstanceCreated(PP_Instance instance) {
@@ -5367,7 +5367,7 @@ static const struct PPB_NaCl_Private_1_0 Pnacl_Wrappers_PPB_NaCl_Private_1_0 = {
.ReportLoadSuccess = (void (*)(PP_Instance instance, uint64_t loaded_bytes, uint64_t total_bytes))&Pnacl_M25_PPB_NaCl_Private_ReportLoadSuccess,
.ReportLoadError = (void (*)(PP_Instance instance, PP_NaClError error, const char* error_message))&Pnacl_M25_PPB_NaCl_Private_ReportLoadError,
.ReportLoadAbort = (void (*)(PP_Instance instance))&Pnacl_M25_PPB_NaCl_Private_ReportLoadAbort,
- .NexeDidCrash = (void (*)(PP_Instance instance, const char* crash_log))&Pnacl_M25_PPB_NaCl_Private_NexeDidCrash,
+ .NexeDidCrash = (void (*)(PP_Instance instance))&Pnacl_M25_PPB_NaCl_Private_NexeDidCrash,
.InstanceCreated = (void (*)(PP_Instance instance))&Pnacl_M25_PPB_NaCl_Private_InstanceCreated,
.InstanceDestroyed = (void (*)(PP_Instance instance))&Pnacl_M25_PPB_NaCl_Private_InstanceDestroyed,
.NaClDebugEnabledForURL = (PP_Bool (*)(const char* alleged_nmf_url))&Pnacl_M25_PPB_NaCl_Private_NaClDebugEnabledForURL,