diff options
-rw-r--r-- | components/nacl/browser/nacl_process_host.cc | 23 | ||||
-rw-r--r-- | components/nacl/browser/nacl_process_host.h | 5 | ||||
-rw-r--r-- | components/nacl/common/nacl_host_messages.h | 1 | ||||
-rw-r--r-- | components/nacl/common/nacl_messages.h | 1 | ||||
-rw-r--r-- | components/nacl/common/nacl_types.cc | 12 | ||||
-rw-r--r-- | components/nacl/common/nacl_types.h | 14 | ||||
-rw-r--r-- | components/nacl/loader/nacl_listener.cc | 33 | ||||
-rw-r--r-- | components/nacl/loader/nacl_listener.h | 5 | ||||
-rw-r--r-- | components/nacl/renderer/nexe_load_manager.cc | 23 | ||||
-rw-r--r-- | components/nacl/renderer/nexe_load_manager.h | 9 | ||||
-rw-r--r-- | components/nacl/renderer/ppb_nacl_private_impl.cc | 9 | ||||
-rw-r--r-- | ppapi/api/private/ppb_nacl_private.idl | 3 | ||||
-rw-r--r-- | ppapi/c/private/ppb_nacl_private.h | 4 | ||||
-rw-r--r-- | ppapi/native_client/src/trusted/plugin/plugin.cc | 5 | ||||
-rw-r--r-- | ppapi/native_client/src/trusted/plugin/service_runtime.cc | 8 | ||||
-rw-r--r-- | ppapi/native_client/src/trusted/plugin/service_runtime.h | 2 | ||||
-rw-r--r-- | ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c | 6 |
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, + ¶ms.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(), ©_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, |