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

Side by Side Diff: components/nacl/loader/nacl_listener.cc

Issue 198083006: Update the task manager with the debug stub port chosen by nacl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/nacl/loader/nacl_listener.h" 5 #include "components/nacl/loader/nacl_listener.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <stdlib.h> 8 #include <stdlib.h>
9 9
10 #if defined(OS_POSIX) 10 #if defined(OS_POSIX)
(...skipping 29 matching lines...) Expand all
40 #endif 40 #endif
41 41
42 #if defined(OS_WIN) 42 #if defined(OS_WIN)
43 #include <fcntl.h> 43 #include <fcntl.h>
44 #include <io.h> 44 #include <io.h>
45 45
46 #include "content/public/common/sandbox_init.h" 46 #include "content/public/common/sandbox_init.h"
47 #endif 47 #endif
48 48
49 namespace { 49 namespace {
50
51 NaClListener* g_listener;
52
50 #if defined(OS_MACOSX) 53 #if defined(OS_MACOSX)
51 54
52 // On Mac OS X, shm_open() works in the sandbox but does not give us 55 // On Mac OS X, shm_open() works in the sandbox but does not give us
53 // an FD that we can map as PROT_EXEC. Rather than doing an IPC to 56 // an FD that we can map as PROT_EXEC. Rather than doing an IPC to
54 // get an executable SHM region when CreateMemoryObject() is called, 57 // get an executable SHM region when CreateMemoryObject() is called,
55 // we preallocate one on startup, since NaCl's sel_ldr only needs one 58 // we preallocate one on startup, since NaCl's sel_ldr only needs one
56 // of them. This saves a round trip. 59 // of them. This saves a round trip.
57 60
58 base::subtle::Atomic32 g_shm_fd = -1; 61 base::subtle::Atomic32 g_shm_fd = -1;
59 62
(...skipping 20 matching lines...) Expand all
80 } 83 }
81 84
82 #elif defined(OS_LINUX) 85 #elif defined(OS_LINUX)
83 86
84 int CreateMemoryObject(size_t size, int executable) { 87 int CreateMemoryObject(size_t size, int executable) {
85 return content::MakeSharedMemorySegmentViaIPC(size, executable); 88 return content::MakeSharedMemorySegmentViaIPC(size, executable);
86 } 89 }
87 90
88 #elif defined(OS_WIN) 91 #elif defined(OS_WIN)
89 92
90 NaClListener* g_listener;
Mark Seaborn 2014/05/08 15:52:23 This should stay conditional on OS_WIN.
bradn 2014/05/08 17:00:24 Er, ok, back again...
91
92 // We wrap the function to convert the bool return value to an int. 93 // We wrap the function to convert the bool return value to an int.
93 int BrokerDuplicateHandle(NaClHandle source_handle, 94 int BrokerDuplicateHandle(NaClHandle source_handle,
94 uint32_t process_id, 95 uint32_t process_id,
95 NaClHandle* target_handle, 96 NaClHandle* target_handle,
96 uint32_t desired_access, 97 uint32_t desired_access,
97 uint32_t options) { 98 uint32_t options) {
98 return content::BrokerDuplicateHandle(source_handle, process_id, 99 return content::BrokerDuplicateHandle(source_handle, process_id,
99 target_handle, desired_access, 100 target_handle, desired_access,
100 options); 101 options);
101 } 102 }
102 103
103 int AttachDebugExceptionHandler(const void* info, size_t info_size) { 104 int AttachDebugExceptionHandler(const void* info, size_t info_size) {
104 std::string info_string(reinterpret_cast<const char*>(info), info_size); 105 std::string info_string(reinterpret_cast<const char*>(info), info_size);
105 bool result = false; 106 bool result = false;
106 if (!g_listener->Send(new NaClProcessMsg_AttachDebugExceptionHandler( 107 if (!g_listener->Send(new NaClProcessMsg_AttachDebugExceptionHandler(
107 info_string, &result))) 108 info_string, &result)))
108 return false; 109 return false;
109 return result; 110 return result;
110 } 111 }
111 112
112 #endif 113 #endif
113 114
115 void DebugStubPortSelectedHandler(uint16_t port) {
Mark Seaborn 2014/05/08 15:52:23 Also only needed on OS_WIN. Currently you have we
bradn 2014/05/08 17:00:24 You've flip flopped here, in the previous version
Mark Seaborn 2014/05/08 18:04:44 To be fair, you sent me a change that didn't compi
116 g_listener->Send(new NaClProcessHostMsg_DebugStubPortSelected(port));
117 }
118
114 // Creates the PPAPI IPC channel between the NaCl IRT and the host 119 // Creates the PPAPI IPC channel between the NaCl IRT and the host
115 // (browser/renderer) process, and starts to listen it on the thread where 120 // (browser/renderer) process, and starts to listen it on the thread where
116 // the given message_loop_proxy runs. 121 // the given message_loop_proxy runs.
117 // Also, creates and sets the corresponding NaClDesc to the given nap with 122 // Also, creates and sets the corresponding NaClDesc to the given nap with
118 // the FD #. 123 // the FD #.
119 void SetUpIPCAdapter(IPC::ChannelHandle* handle, 124 void SetUpIPCAdapter(IPC::ChannelHandle* handle,
120 scoped_refptr<base::MessageLoopProxy> message_loop_proxy, 125 scoped_refptr<base::MessageLoopProxy> message_loop_proxy,
121 struct NaClApp* nap, 126 struct NaClApp* nap,
122 int nacl_fd) { 127 int nacl_fd) {
123 scoped_refptr<NaClIPCAdapter> ipc_adapter( 128 scoped_refptr<NaClIPCAdapter> ipc_adapter(
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 uses_nonsfi_mode_(false), 209 uses_nonsfi_mode_(false),
205 #if defined(OS_LINUX) 210 #if defined(OS_LINUX)
206 prereserved_sandbox_size_(0), 211 prereserved_sandbox_size_(0),
207 #endif 212 #endif
208 #if defined(OS_POSIX) 213 #if defined(OS_POSIX)
209 number_of_cores_(-1), // unknown/error 214 number_of_cores_(-1), // unknown/error
210 #endif 215 #endif
211 main_loop_(NULL) { 216 main_loop_(NULL) {
212 io_thread_.StartWithOptions( 217 io_thread_.StartWithOptions(
213 base::Thread::Options(base::MessageLoop::TYPE_IO, 0)); 218 base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
214 #if defined(OS_WIN)
Mark Seaborn 2014/05/08 15:52:23 These conditionals can stay.
bradn 2014/05/08 17:00:24 Done.
215 DCHECK(g_listener == NULL); 219 DCHECK(g_listener == NULL);
216 g_listener = this; 220 g_listener = this;
217 #endif
218 } 221 }
219 222
220 NaClListener::~NaClListener() { 223 NaClListener::~NaClListener() {
221 NOTREACHED(); 224 NOTREACHED();
222 shutdown_event_.Signal(); 225 shutdown_event_.Signal();
223 #if defined(OS_WIN)
224 g_listener = NULL; 226 g_listener = NULL;
225 #endif
226 } 227 }
227 228
228 bool NaClListener::Send(IPC::Message* msg) { 229 bool NaClListener::Send(IPC::Message* msg) {
229 DCHECK(main_loop_ != NULL); 230 DCHECK(main_loop_ != NULL);
230 if (base::MessageLoop::current() == main_loop_) { 231 if (base::MessageLoop::current() == main_loop_) {
231 // This thread owns the channel. 232 // This thread owns the channel.
232 return channel_->Send(msg); 233 return channel_->Send(msg);
233 } else { 234 } else {
234 // This thread does not own the channel. 235 // This thread does not own the channel.
235 return filter_->Send(msg); 236 return filter_->Send(msg);
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 // Indicate that this is a PNaCl module. 450 // Indicate that this is a PNaCl module.
450 // TODO(jvoung): Plumb through something indicating that this is PNaCl 451 // TODO(jvoung): Plumb through something indicating that this is PNaCl
451 // instead of relying on enable_dyncode_syscalls. 452 // instead of relying on enable_dyncode_syscalls.
452 args->pnacl_mode = 1; 453 args->pnacl_mode = 1;
453 } 454 }
454 #if defined(OS_LINUX) || defined(OS_MACOSX) 455 #if defined(OS_LINUX) || defined(OS_MACOSX)
455 args->debug_stub_server_bound_socket_fd = nacl::ToNativeHandle( 456 args->debug_stub_server_bound_socket_fd = nacl::ToNativeHandle(
456 params.debug_stub_server_bound_socket); 457 params.debug_stub_server_bound_socket);
457 #endif 458 #endif
458 #if defined(OS_WIN) 459 #if defined(OS_WIN)
460 args->debug_stub_server_port_selected_handler_func =
Mark Seaborn 2014/05/08 15:52:23 Nit: maybe put this after "args->attach_debug_exce
bradn 2014/05/08 17:00:24 Done.
461 DebugStubPortSelectedHandler;
459 args->broker_duplicate_handle_func = BrokerDuplicateHandle; 462 args->broker_duplicate_handle_func = BrokerDuplicateHandle;
460 args->attach_debug_exception_handler_func = AttachDebugExceptionHandler; 463 args->attach_debug_exception_handler_func = AttachDebugExceptionHandler;
461 #endif 464 #endif
462 #if defined(OS_LINUX) 465 #if defined(OS_LINUX)
463 args->prereserved_sandbox_size = prereserved_sandbox_size_; 466 args->prereserved_sandbox_size = prereserved_sandbox_size_;
464 #endif 467 #endif
465 468
466 NaClChromeMainStartApp(nap, args); 469 NaClChromeMainStartApp(nap, args);
467 NOTREACHED(); 470 NOTREACHED();
468 } 471 }
OLDNEW
« components/nacl/common/nacl_messages.h ('K') | « components/nacl/common/nacl_messages.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698