| OLD | NEW |
| 1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 1 // Copyright 2014 The Crashpad Authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
| 5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
| 6 // | 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // | 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 // See the License for the specific language governing permissions and | 12 // See the License for the specific language governing permissions and |
| 13 // limitations under the License. | 13 // limitations under the License. |
| 14 | 14 |
| 15 #include "util/mach/exc_server_variants.h" | 15 #include "util/mach/exc_server_variants.h" |
| 16 | 16 |
| 17 #include <algorithm> | 17 #include <algorithm> |
| 18 #include <vector> | 18 #include <vector> |
| 19 | 19 |
| 20 #include "base/logging.h" | 20 #include "base/logging.h" |
| 21 #include "util/mach/exc.h" | 21 #include "util/mach/exc.h" |
| 22 #include "util/mach/exception_behaviors.h" | 22 #include "util/mach/exception_behaviors.h" |
| 23 #include "util/mach/excServer.h" | 23 #include "util/mach/excServer.h" |
| 24 #include "util/mach/mach_exc.h" | 24 #include "util/mach/mach_exc.h" |
| 25 #include "util/mach/mach_excServer.h" | 25 #include "util/mach/mach_excServer.h" |
| 26 #include "util/mach/mach_message_util.h" |
| 26 | 27 |
| 27 extern "C" { | 28 extern "C" { |
| 28 | 29 |
| 29 // These six functions are not used, and are in fact obsoleted by the other | 30 // These six functions are not used, and are in fact obsoleted by the other |
| 30 // functionality implemented in this file. The standard MIG-generated exc_server | 31 // functionality implemented in this file. The standard MIG-generated exc_server |
| 31 // (in excServer.c) and mach_exc_server (in mach_excServer.c) server dispatch | 32 // (in excServer.c) and mach_exc_server (in mach_excServer.c) server dispatch |
| 32 // routines usable with the standard mach_msg_server() function call out to | 33 // routines usable with the standard mach_msg_server() function call out to |
| 33 // these functions. exc_server() and mach_exc_server() are unused and are | 34 // these functions. exc_server() and mach_exc_server() are unused and are |
| 34 // replaced by the more flexible ExcServer and MachExcServer, but the linker | 35 // replaced by the more flexible ExcServer and MachExcServer, but the linker |
| 35 // still needs to see these six function definitions. | 36 // still needs to see these six function definitions. |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 thread_state_t new_state, | 112 thread_state_t new_state, |
| 112 mach_msg_type_number_t* new_state_count) { | 113 mach_msg_type_number_t* new_state_count) { |
| 113 NOTREACHED(); | 114 NOTREACHED(); |
| 114 return KERN_FAILURE; | 115 return KERN_FAILURE; |
| 115 } | 116 } |
| 116 | 117 |
| 117 } // extern "C" | 118 } // extern "C" |
| 118 | 119 |
| 119 namespace { | 120 namespace { |
| 120 | 121 |
| 121 void PrepareReplyFromRequest(const mach_msg_header_t* in_header, | |
| 122 mach_msg_header_t* out_header) { | |
| 123 out_header->msgh_bits = | |
| 124 MACH_MSGH_BITS(MACH_MSGH_BITS_REMOTE(in_header->msgh_bits), 0); | |
| 125 out_header->msgh_remote_port = in_header->msgh_remote_port; | |
| 126 out_header->msgh_size = sizeof(mig_reply_error_t); | |
| 127 out_header->msgh_local_port = MACH_PORT_NULL; | |
| 128 out_header->msgh_id = in_header->msgh_id + 100; | |
| 129 reinterpret_cast<mig_reply_error_t*>(out_header)->NDR = NDR_record; | |
| 130 } | |
| 131 | |
| 132 void SetReplyError(mach_msg_header_t* out_header, kern_return_t error) { | |
| 133 reinterpret_cast<mig_reply_error_t*>(out_header)->RetCode = error; | |
| 134 } | |
| 135 | |
| 136 // There are no predefined constants for these. | 122 // There are no predefined constants for these. |
| 137 enum MachMessageID : mach_msg_id_t { | 123 enum MachMessageID : mach_msg_id_t { |
| 138 kMachMessageIDExceptionRaise = 2401, | 124 kMachMessageIDExceptionRaise = 2401, |
| 139 kMachMessageIDExceptionRaiseState = 2402, | 125 kMachMessageIDExceptionRaiseState = 2402, |
| 140 kMachMessageIDExceptionRaiseStateIdentity = 2403, | 126 kMachMessageIDExceptionRaiseStateIdentity = 2403, |
| 141 kMachMessageIDMachExceptionRaise = 2405, | 127 kMachMessageIDMachExceptionRaise = 2405, |
| 142 kMachMessageIDMachExceptionRaiseState = 2406, | 128 kMachMessageIDMachExceptionRaiseState = 2406, |
| 143 kMachMessageIDMachExceptionRaiseStateIdentity = 2407, | 129 kMachMessageIDMachExceptionRaiseStateIdentity = 2407, |
| 144 }; | 130 }; |
| 145 | 131 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 namespace internal { | 187 namespace internal { |
| 202 | 188 |
| 203 ExcServer::ExcServer(ExcServer::Interface* interface) | 189 ExcServer::ExcServer(ExcServer::Interface* interface) |
| 204 : MachMessageServer::Interface(), | 190 : MachMessageServer::Interface(), |
| 205 interface_(interface) { | 191 interface_(interface) { |
| 206 } | 192 } |
| 207 | 193 |
| 208 bool ExcServer::MachMessageServerFunction(const mach_msg_header_t* in_header, | 194 bool ExcServer::MachMessageServerFunction(const mach_msg_header_t* in_header, |
| 209 mach_msg_header_t* out_header, | 195 mach_msg_header_t* out_header, |
| 210 bool* destroy_complex_request) { | 196 bool* destroy_complex_request) { |
| 211 PrepareReplyFromRequest(in_header, out_header); | 197 PrepareMIGReplyFromRequest(in_header, out_header); |
| 212 | 198 |
| 213 switch (in_header->msgh_id) { | 199 switch (in_header->msgh_id) { |
| 214 case kMachMessageIDExceptionRaise: { | 200 case kMachMessageIDExceptionRaise: { |
| 215 // exception_raise(), catch_exception_raise(). | 201 // exception_raise(), catch_exception_raise(). |
| 216 using Request = __Request__exception_raise_t; | 202 using Request = __Request__exception_raise_t; |
| 217 const Request* in_request = reinterpret_cast<const Request*>(in_header); | 203 const Request* in_request = reinterpret_cast<const Request*>(in_header); |
| 218 kern_return_t kr = MIGCheckRequestExceptionRaise(in_request); | 204 kern_return_t kr = MIGCheckRequestExceptionRaise(in_request); |
| 219 if (kr != MACH_MSG_SUCCESS) { | 205 if (kr != MACH_MSG_SUCCESS) { |
| 220 SetReplyError(out_header, kr); | 206 SetMIGReplyError(out_header, kr); |
| 221 return true; | 207 return true; |
| 222 } | 208 } |
| 223 | 209 |
| 224 using Reply = __Reply__exception_raise_t; | 210 using Reply = __Reply__exception_raise_t; |
| 225 Reply* out_reply = reinterpret_cast<Reply*>(out_header); | 211 Reply* out_reply = reinterpret_cast<Reply*>(out_header); |
| 226 out_reply->RetCode = | 212 out_reply->RetCode = |
| 227 interface_->CatchExceptionRaise(in_header->msgh_local_port, | 213 interface_->CatchExceptionRaise(in_header->msgh_local_port, |
| 228 in_request->thread.name, | 214 in_request->thread.name, |
| 229 in_request->task.name, | 215 in_request->task.name, |
| 230 in_request->exception, | 216 in_request->exception, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 243 // exception_raise_state(), catch_exception_raise_state(). | 229 // exception_raise_state(), catch_exception_raise_state(). |
| 244 using Request = __Request__exception_raise_state_t; | 230 using Request = __Request__exception_raise_state_t; |
| 245 const Request* in_request = reinterpret_cast<const Request*>(in_header); | 231 const Request* in_request = reinterpret_cast<const Request*>(in_header); |
| 246 | 232 |
| 247 // in_request_1 is used for the portion of the request after the codes, | 233 // in_request_1 is used for the portion of the request after the codes, |
| 248 // which in theory can be variable-length. The check function will set it. | 234 // which in theory can be variable-length. The check function will set it. |
| 249 const Request* in_request_1; | 235 const Request* in_request_1; |
| 250 kern_return_t kr = | 236 kern_return_t kr = |
| 251 MIGCheckRequestExceptionRaiseState(in_request, &in_request_1); | 237 MIGCheckRequestExceptionRaiseState(in_request, &in_request_1); |
| 252 if (kr != MACH_MSG_SUCCESS) { | 238 if (kr != MACH_MSG_SUCCESS) { |
| 253 SetReplyError(out_header, kr); | 239 SetMIGReplyError(out_header, kr); |
| 254 return true; | 240 return true; |
| 255 } | 241 } |
| 256 | 242 |
| 257 using Reply = __Reply__exception_raise_state_t; | 243 using Reply = __Reply__exception_raise_state_t; |
| 258 Reply* out_reply = reinterpret_cast<Reply*>(out_header); | 244 Reply* out_reply = reinterpret_cast<Reply*>(out_header); |
| 259 out_reply->flavor = in_request_1->flavor; | 245 out_reply->flavor = in_request_1->flavor; |
| 260 out_reply->new_stateCnt = arraysize(out_reply->new_state); | 246 out_reply->new_stateCnt = arraysize(out_reply->new_state); |
| 261 out_reply->RetCode = | 247 out_reply->RetCode = |
| 262 interface_->CatchExceptionRaiseState(in_header->msgh_local_port, | 248 interface_->CatchExceptionRaiseState(in_header->msgh_local_port, |
| 263 in_request->exception, | 249 in_request->exception, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 283 // catch_exception_raise_state_identity(). | 269 // catch_exception_raise_state_identity(). |
| 284 using Request = __Request__exception_raise_state_identity_t; | 270 using Request = __Request__exception_raise_state_identity_t; |
| 285 const Request* in_request = reinterpret_cast<const Request*>(in_header); | 271 const Request* in_request = reinterpret_cast<const Request*>(in_header); |
| 286 | 272 |
| 287 // in_request_1 is used for the portion of the request after the codes, | 273 // in_request_1 is used for the portion of the request after the codes, |
| 288 // which in theory can be variable-length. The check function will set it. | 274 // which in theory can be variable-length. The check function will set it. |
| 289 const Request* in_request_1; | 275 const Request* in_request_1; |
| 290 kern_return_t kr = | 276 kern_return_t kr = |
| 291 MIGCheckRequestExceptionRaiseStateIdentity(in_request, &in_request_1); | 277 MIGCheckRequestExceptionRaiseStateIdentity(in_request, &in_request_1); |
| 292 if (kr != MACH_MSG_SUCCESS) { | 278 if (kr != MACH_MSG_SUCCESS) { |
| 293 SetReplyError(out_header, kr); | 279 SetMIGReplyError(out_header, kr); |
| 294 return true; | 280 return true; |
| 295 } | 281 } |
| 296 | 282 |
| 297 using Reply = __Reply__exception_raise_state_identity_t; | 283 using Reply = __Reply__exception_raise_state_identity_t; |
| 298 Reply* out_reply = reinterpret_cast<Reply*>(out_header); | 284 Reply* out_reply = reinterpret_cast<Reply*>(out_header); |
| 299 out_reply->flavor = in_request_1->flavor; | 285 out_reply->flavor = in_request_1->flavor; |
| 300 out_reply->new_stateCnt = arraysize(out_reply->new_state); | 286 out_reply->new_stateCnt = arraysize(out_reply->new_state); |
| 301 out_reply->RetCode = interface_->CatchExceptionRaiseStateIdentity( | 287 out_reply->RetCode = interface_->CatchExceptionRaiseStateIdentity( |
| 302 in_header->msgh_local_port, | 288 in_header->msgh_local_port, |
| 303 in_request->thread.name, | 289 in_request->thread.name, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 315 return true; | 301 return true; |
| 316 } | 302 } |
| 317 | 303 |
| 318 out_header->msgh_size = | 304 out_header->msgh_size = |
| 319 sizeof(*out_reply) - sizeof(out_reply->new_state) + | 305 sizeof(*out_reply) - sizeof(out_reply->new_state) + |
| 320 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt; | 306 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt; |
| 321 return true; | 307 return true; |
| 322 } | 308 } |
| 323 } | 309 } |
| 324 | 310 |
| 325 SetReplyError(out_header, MIG_BAD_ID); | 311 SetMIGReplyError(out_header, MIG_BAD_ID); |
| 326 return false; | 312 return false; |
| 327 } | 313 } |
| 328 | 314 |
| 329 mach_msg_size_t ExcServer::MachMessageServerRequestSize() { | 315 mach_msg_size_t ExcServer::MachMessageServerRequestSize() { |
| 330 return sizeof(__RequestUnion__exc_subsystem); | 316 return sizeof(__RequestUnion__exc_subsystem); |
| 331 } | 317 } |
| 332 | 318 |
| 333 mach_msg_size_t ExcServer::MachMessageServerReplySize() { | 319 mach_msg_size_t ExcServer::MachMessageServerReplySize() { |
| 334 return sizeof(__ReplyUnion__exc_subsystem); | 320 return sizeof(__ReplyUnion__exc_subsystem); |
| 335 } | 321 } |
| 336 | 322 |
| 337 MachExcServer::MachExcServer(MachExcServer::Interface* interface) | 323 MachExcServer::MachExcServer(MachExcServer::Interface* interface) |
| 338 : MachMessageServer::Interface(), | 324 : MachMessageServer::Interface(), |
| 339 interface_(interface) { | 325 interface_(interface) { |
| 340 } | 326 } |
| 341 | 327 |
| 342 bool MachExcServer::MachMessageServerFunction( | 328 bool MachExcServer::MachMessageServerFunction( |
| 343 const mach_msg_header_t* in_header, | 329 const mach_msg_header_t* in_header, |
| 344 mach_msg_header_t* out_header, | 330 mach_msg_header_t* out_header, |
| 345 bool* destroy_complex_request) { | 331 bool* destroy_complex_request) { |
| 346 PrepareReplyFromRequest(in_header, out_header); | 332 PrepareMIGReplyFromRequest(in_header, out_header); |
| 347 | 333 |
| 348 switch (in_header->msgh_id) { | 334 switch (in_header->msgh_id) { |
| 349 case kMachMessageIDMachExceptionRaise: { | 335 case kMachMessageIDMachExceptionRaise: { |
| 350 // mach_exception_raise(), catch_mach_exception_raise(). | 336 // mach_exception_raise(), catch_mach_exception_raise(). |
| 351 using Request = __Request__mach_exception_raise_t; | 337 using Request = __Request__mach_exception_raise_t; |
| 352 const Request* in_request = reinterpret_cast<const Request*>(in_header); | 338 const Request* in_request = reinterpret_cast<const Request*>(in_header); |
| 353 kern_return_t kr = MIGCheckRequestMachExceptionRaise(in_request); | 339 kern_return_t kr = MIGCheckRequestMachExceptionRaise(in_request); |
| 354 if (kr != MACH_MSG_SUCCESS) { | 340 if (kr != MACH_MSG_SUCCESS) { |
| 355 SetReplyError(out_header, kr); | 341 SetMIGReplyError(out_header, kr); |
| 356 return true; | 342 return true; |
| 357 } | 343 } |
| 358 | 344 |
| 359 using Reply = __Reply__mach_exception_raise_t; | 345 using Reply = __Reply__mach_exception_raise_t; |
| 360 Reply* out_reply = reinterpret_cast<Reply*>(out_header); | 346 Reply* out_reply = reinterpret_cast<Reply*>(out_header); |
| 361 out_reply->RetCode = | 347 out_reply->RetCode = |
| 362 interface_->CatchMachExceptionRaise(in_header->msgh_local_port, | 348 interface_->CatchMachExceptionRaise(in_header->msgh_local_port, |
| 363 in_request->thread.name, | 349 in_request->thread.name, |
| 364 in_request->task.name, | 350 in_request->task.name, |
| 365 in_request->exception, | 351 in_request->exception, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 378 // mach_exception_raise_state(), catch_mach_exception_raise_state(). | 364 // mach_exception_raise_state(), catch_mach_exception_raise_state(). |
| 379 using Request = __Request__mach_exception_raise_state_t; | 365 using Request = __Request__mach_exception_raise_state_t; |
| 380 const Request* in_request = reinterpret_cast<const Request*>(in_header); | 366 const Request* in_request = reinterpret_cast<const Request*>(in_header); |
| 381 | 367 |
| 382 // in_request_1 is used for the portion of the request after the codes, | 368 // in_request_1 is used for the portion of the request after the codes, |
| 383 // which in theory can be variable-length. The check function will set it. | 369 // which in theory can be variable-length. The check function will set it. |
| 384 const Request* in_request_1; | 370 const Request* in_request_1; |
| 385 kern_return_t kr = | 371 kern_return_t kr = |
| 386 MIGCheckRequestMachExceptionRaiseState(in_request, &in_request_1); | 372 MIGCheckRequestMachExceptionRaiseState(in_request, &in_request_1); |
| 387 if (kr != MACH_MSG_SUCCESS) { | 373 if (kr != MACH_MSG_SUCCESS) { |
| 388 SetReplyError(out_header, kr); | 374 SetMIGReplyError(out_header, kr); |
| 389 return true; | 375 return true; |
| 390 } | 376 } |
| 391 | 377 |
| 392 using Reply = __Reply__mach_exception_raise_state_t; | 378 using Reply = __Reply__mach_exception_raise_state_t; |
| 393 Reply* out_reply = reinterpret_cast<Reply*>(out_header); | 379 Reply* out_reply = reinterpret_cast<Reply*>(out_header); |
| 394 out_reply->flavor = in_request_1->flavor; | 380 out_reply->flavor = in_request_1->flavor; |
| 395 out_reply->new_stateCnt = arraysize(out_reply->new_state); | 381 out_reply->new_stateCnt = arraysize(out_reply->new_state); |
| 396 out_reply->RetCode = | 382 out_reply->RetCode = |
| 397 interface_->CatchMachExceptionRaiseState(in_header->msgh_local_port, | 383 interface_->CatchMachExceptionRaiseState(in_header->msgh_local_port, |
| 398 in_request->exception, | 384 in_request->exception, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 418 // catch_mach_exception_raise_state_identity(). | 404 // catch_mach_exception_raise_state_identity(). |
| 419 using Request = __Request__mach_exception_raise_state_identity_t; | 405 using Request = __Request__mach_exception_raise_state_identity_t; |
| 420 const Request* in_request = reinterpret_cast<const Request*>(in_header); | 406 const Request* in_request = reinterpret_cast<const Request*>(in_header); |
| 421 | 407 |
| 422 // in_request_1 is used for the portion of the request after the codes, | 408 // in_request_1 is used for the portion of the request after the codes, |
| 423 // which in theory can be variable-length. The check function will set it. | 409 // which in theory can be variable-length. The check function will set it. |
| 424 const Request* in_request_1; | 410 const Request* in_request_1; |
| 425 kern_return_t kr = MIGCheckRequestMachExceptionRaiseStateIdentity( | 411 kern_return_t kr = MIGCheckRequestMachExceptionRaiseStateIdentity( |
| 426 in_request, &in_request_1); | 412 in_request, &in_request_1); |
| 427 if (kr != MACH_MSG_SUCCESS) { | 413 if (kr != MACH_MSG_SUCCESS) { |
| 428 SetReplyError(out_header, kr); | 414 SetMIGReplyError(out_header, kr); |
| 429 return true; | 415 return true; |
| 430 } | 416 } |
| 431 | 417 |
| 432 using Reply = __Reply__mach_exception_raise_state_identity_t; | 418 using Reply = __Reply__mach_exception_raise_state_identity_t; |
| 433 Reply* out_reply = reinterpret_cast<Reply*>(out_header); | 419 Reply* out_reply = reinterpret_cast<Reply*>(out_header); |
| 434 out_reply->flavor = in_request_1->flavor; | 420 out_reply->flavor = in_request_1->flavor; |
| 435 out_reply->new_stateCnt = arraysize(out_reply->new_state); | 421 out_reply->new_stateCnt = arraysize(out_reply->new_state); |
| 436 out_reply->RetCode = interface_->CatchMachExceptionRaiseStateIdentity( | 422 out_reply->RetCode = interface_->CatchMachExceptionRaiseStateIdentity( |
| 437 in_header->msgh_local_port, | 423 in_header->msgh_local_port, |
| 438 in_request->thread.name, | 424 in_request->thread.name, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 450 return true; | 436 return true; |
| 451 } | 437 } |
| 452 | 438 |
| 453 out_header->msgh_size = | 439 out_header->msgh_size = |
| 454 sizeof(*out_reply) - sizeof(out_reply->new_state) + | 440 sizeof(*out_reply) - sizeof(out_reply->new_state) + |
| 455 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt; | 441 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt; |
| 456 return true; | 442 return true; |
| 457 } | 443 } |
| 458 } | 444 } |
| 459 | 445 |
| 460 SetReplyError(out_header, MIG_BAD_ID); | 446 SetMIGReplyError(out_header, MIG_BAD_ID); |
| 461 return false; | 447 return false; |
| 462 } | 448 } |
| 463 | 449 |
| 464 mach_msg_size_t MachExcServer::MachMessageServerRequestSize() { | 450 mach_msg_size_t MachExcServer::MachMessageServerRequestSize() { |
| 465 return sizeof(__RequestUnion__mach_exc_subsystem); | 451 return sizeof(__RequestUnion__mach_exc_subsystem); |
| 466 } | 452 } |
| 467 | 453 |
| 468 mach_msg_size_t MachExcServer::MachMessageServerReplySize() { | 454 mach_msg_size_t MachExcServer::MachMessageServerReplySize() { |
| 469 return sizeof(__ReplyUnion__mach_exc_subsystem); | 455 return sizeof(__ReplyUnion__mach_exc_subsystem); |
| 470 } | 456 } |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 in_header, out_header, destroy_complex_request); | 651 in_header, out_header, destroy_complex_request); |
| 666 case kMachMessageIDExceptionRaise: | 652 case kMachMessageIDExceptionRaise: |
| 667 case kMachMessageIDExceptionRaiseState: | 653 case kMachMessageIDExceptionRaiseState: |
| 668 case kMachMessageIDExceptionRaiseStateIdentity: | 654 case kMachMessageIDExceptionRaiseStateIdentity: |
| 669 return exc_server_.MachMessageServerFunction( | 655 return exc_server_.MachMessageServerFunction( |
| 670 in_header, out_header, destroy_complex_request); | 656 in_header, out_header, destroy_complex_request); |
| 671 } | 657 } |
| 672 | 658 |
| 673 // Do what the MIG-generated server routines do when they can’t dispatch a | 659 // Do what the MIG-generated server routines do when they can’t dispatch a |
| 674 // message. | 660 // message. |
| 675 PrepareReplyFromRequest(in_header, out_header); | 661 PrepareMIGReplyFromRequest(in_header, out_header); |
| 676 SetReplyError(out_header, MIG_BAD_ID); | 662 SetMIGReplyError(out_header, MIG_BAD_ID); |
| 677 return false; | 663 return false; |
| 678 } | 664 } |
| 679 | 665 |
| 680 mach_msg_size_t UniversalMachExcServer::MachMessageServerRequestSize() { | 666 mach_msg_size_t UniversalMachExcServer::MachMessageServerRequestSize() { |
| 681 return std::max(mach_exc_server_.MachMessageServerRequestSize(), | 667 return std::max(mach_exc_server_.MachMessageServerRequestSize(), |
| 682 exc_server_.MachMessageServerRequestSize()); | 668 exc_server_.MachMessageServerRequestSize()); |
| 683 } | 669 } |
| 684 | 670 |
| 685 mach_msg_size_t UniversalMachExcServer::MachMessageServerReplySize() { | 671 mach_msg_size_t UniversalMachExcServer::MachMessageServerReplySize() { |
| 686 return std::max(mach_exc_server_.MachMessageServerReplySize(), | 672 return std::max(mach_exc_server_.MachMessageServerReplySize(), |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 752 kern_return_t ExcServerSuccessfulReturnValue(exception_behavior_t behavior, | 738 kern_return_t ExcServerSuccessfulReturnValue(exception_behavior_t behavior, |
| 753 bool set_thread_state) { | 739 bool set_thread_state) { |
| 754 if (!set_thread_state && ExceptionBehaviorHasState(behavior)) { | 740 if (!set_thread_state && ExceptionBehaviorHasState(behavior)) { |
| 755 return MACH_RCV_PORT_DIED; | 741 return MACH_RCV_PORT_DIED; |
| 756 } | 742 } |
| 757 | 743 |
| 758 return KERN_SUCCESS; | 744 return KERN_SUCCESS; |
| 759 } | 745 } |
| 760 | 746 |
| 761 } // namespace crashpad | 747 } // namespace crashpad |
| OLD | NEW |