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

Side by Side Diff: util/mach/exc_server_variants.cc

Issue 755313004: Pass Mach message trailers to server handler functions (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Address review feedback Created 6 years 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
« no previous file with comments | « util/mach/exc_server_variants.h ('k') | util/mach/exc_server_variants_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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,
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 ExcServer::ExcServer(ExcServer::Interface* interface) 189 ExcServer::ExcServer(ExcServer::Interface* interface)
190 : MachMessageServer::Interface(), 190 : MachMessageServer::Interface(),
191 interface_(interface) { 191 interface_(interface) {
192 } 192 }
193 193
194 bool ExcServer::MachMessageServerFunction(const mach_msg_header_t* in_header, 194 bool ExcServer::MachMessageServerFunction(const mach_msg_header_t* in_header,
195 mach_msg_header_t* out_header, 195 mach_msg_header_t* out_header,
196 bool* destroy_complex_request) { 196 bool* destroy_complex_request) {
197 PrepareMIGReplyFromRequest(in_header, out_header); 197 PrepareMIGReplyFromRequest(in_header, out_header);
198 198
199 const mach_msg_trailer_t* in_trailer =
200 MachMessageTrailerFromHeader(in_header);
201
199 switch (in_header->msgh_id) { 202 switch (in_header->msgh_id) {
200 case kMachMessageIDExceptionRaise: { 203 case kMachMessageIDExceptionRaise: {
201 // exception_raise(), catch_exception_raise(). 204 // exception_raise(), catch_exception_raise().
202 using Request = __Request__exception_raise_t; 205 using Request = __Request__exception_raise_t;
203 const Request* in_request = reinterpret_cast<const Request*>(in_header); 206 const Request* in_request = reinterpret_cast<const Request*>(in_header);
204 kern_return_t kr = MIGCheckRequestExceptionRaise(in_request); 207 kern_return_t kr = MIGCheckRequestExceptionRaise(in_request);
205 if (kr != MACH_MSG_SUCCESS) { 208 if (kr != MACH_MSG_SUCCESS) {
206 SetMIGReplyError(out_header, kr); 209 SetMIGReplyError(out_header, kr);
207 return true; 210 return true;
208 } 211 }
209 212
210 using Reply = __Reply__exception_raise_t; 213 using Reply = __Reply__exception_raise_t;
211 Reply* out_reply = reinterpret_cast<Reply*>(out_header); 214 Reply* out_reply = reinterpret_cast<Reply*>(out_header);
212 out_reply->RetCode = 215 out_reply->RetCode =
213 interface_->CatchExceptionRaise(in_header->msgh_local_port, 216 interface_->CatchExceptionRaise(in_header->msgh_local_port,
214 in_request->thread.name, 217 in_request->thread.name,
215 in_request->task.name, 218 in_request->task.name,
216 in_request->exception, 219 in_request->exception,
217 in_request->code, 220 in_request->code,
218 in_request->codeCnt, 221 in_request->codeCnt,
222 in_trailer,
219 destroy_complex_request); 223 destroy_complex_request);
220 if (out_reply->RetCode != KERN_SUCCESS) { 224 if (out_reply->RetCode != KERN_SUCCESS) {
221 return true; 225 return true;
222 } 226 }
223 227
224 out_header->msgh_size = sizeof(*out_reply); 228 out_header->msgh_size = sizeof(*out_reply);
225 return true; 229 return true;
226 } 230 }
227 231
228 case kMachMessageIDExceptionRaiseState: { 232 case kMachMessageIDExceptionRaiseState: {
(...skipping 17 matching lines...) Expand all
246 out_reply->new_stateCnt = arraysize(out_reply->new_state); 250 out_reply->new_stateCnt = arraysize(out_reply->new_state);
247 out_reply->RetCode = 251 out_reply->RetCode =
248 interface_->CatchExceptionRaiseState(in_header->msgh_local_port, 252 interface_->CatchExceptionRaiseState(in_header->msgh_local_port,
249 in_request->exception, 253 in_request->exception,
250 in_request->code, 254 in_request->code,
251 in_request->codeCnt, 255 in_request->codeCnt,
252 &out_reply->flavor, 256 &out_reply->flavor,
253 in_request_1->old_state, 257 in_request_1->old_state,
254 in_request_1->old_stateCnt, 258 in_request_1->old_stateCnt,
255 out_reply->new_state, 259 out_reply->new_state,
256 &out_reply->new_stateCnt); 260 &out_reply->new_stateCnt,
261 in_trailer);
257 if (out_reply->RetCode != KERN_SUCCESS) { 262 if (out_reply->RetCode != KERN_SUCCESS) {
258 return true; 263 return true;
259 } 264 }
260 265
261 out_header->msgh_size = 266 out_header->msgh_size =
262 sizeof(*out_reply) - sizeof(out_reply->new_state) + 267 sizeof(*out_reply) - sizeof(out_reply->new_state) +
263 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt; 268 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt;
264 return true; 269 return true;
265 } 270 }
266 271
(...skipping 22 matching lines...) Expand all
289 in_request->thread.name, 294 in_request->thread.name,
290 in_request->task.name, 295 in_request->task.name,
291 in_request->exception, 296 in_request->exception,
292 in_request->code, 297 in_request->code,
293 in_request->codeCnt, 298 in_request->codeCnt,
294 &out_reply->flavor, 299 &out_reply->flavor,
295 in_request_1->old_state, 300 in_request_1->old_state,
296 in_request_1->old_stateCnt, 301 in_request_1->old_stateCnt,
297 out_reply->new_state, 302 out_reply->new_state,
298 &out_reply->new_stateCnt, 303 &out_reply->new_stateCnt,
304 in_trailer,
299 destroy_complex_request); 305 destroy_complex_request);
300 if (out_reply->RetCode != KERN_SUCCESS) { 306 if (out_reply->RetCode != KERN_SUCCESS) {
301 return true; 307 return true;
302 } 308 }
303 309
304 out_header->msgh_size = 310 out_header->msgh_size =
305 sizeof(*out_reply) - sizeof(out_reply->new_state) + 311 sizeof(*out_reply) - sizeof(out_reply->new_state) +
306 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt; 312 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt;
307 return true; 313 return true;
308 } 314 }
(...skipping 15 matching lines...) Expand all
324 : MachMessageServer::Interface(), 330 : MachMessageServer::Interface(),
325 interface_(interface) { 331 interface_(interface) {
326 } 332 }
327 333
328 bool MachExcServer::MachMessageServerFunction( 334 bool MachExcServer::MachMessageServerFunction(
329 const mach_msg_header_t* in_header, 335 const mach_msg_header_t* in_header,
330 mach_msg_header_t* out_header, 336 mach_msg_header_t* out_header,
331 bool* destroy_complex_request) { 337 bool* destroy_complex_request) {
332 PrepareMIGReplyFromRequest(in_header, out_header); 338 PrepareMIGReplyFromRequest(in_header, out_header);
333 339
340 const mach_msg_trailer_t* in_trailer =
341 MachMessageTrailerFromHeader(in_header);
342
334 switch (in_header->msgh_id) { 343 switch (in_header->msgh_id) {
335 case kMachMessageIDMachExceptionRaise: { 344 case kMachMessageIDMachExceptionRaise: {
336 // mach_exception_raise(), catch_mach_exception_raise(). 345 // mach_exception_raise(), catch_mach_exception_raise().
337 using Request = __Request__mach_exception_raise_t; 346 using Request = __Request__mach_exception_raise_t;
338 const Request* in_request = reinterpret_cast<const Request*>(in_header); 347 const Request* in_request = reinterpret_cast<const Request*>(in_header);
339 kern_return_t kr = MIGCheckRequestMachExceptionRaise(in_request); 348 kern_return_t kr = MIGCheckRequestMachExceptionRaise(in_request);
340 if (kr != MACH_MSG_SUCCESS) { 349 if (kr != MACH_MSG_SUCCESS) {
341 SetMIGReplyError(out_header, kr); 350 SetMIGReplyError(out_header, kr);
342 return true; 351 return true;
343 } 352 }
344 353
345 using Reply = __Reply__mach_exception_raise_t; 354 using Reply = __Reply__mach_exception_raise_t;
346 Reply* out_reply = reinterpret_cast<Reply*>(out_header); 355 Reply* out_reply = reinterpret_cast<Reply*>(out_header);
347 out_reply->RetCode = 356 out_reply->RetCode =
348 interface_->CatchMachExceptionRaise(in_header->msgh_local_port, 357 interface_->CatchMachExceptionRaise(in_header->msgh_local_port,
349 in_request->thread.name, 358 in_request->thread.name,
350 in_request->task.name, 359 in_request->task.name,
351 in_request->exception, 360 in_request->exception,
352 in_request->code, 361 in_request->code,
353 in_request->codeCnt, 362 in_request->codeCnt,
363 in_trailer,
354 destroy_complex_request); 364 destroy_complex_request);
355 if (out_reply->RetCode != KERN_SUCCESS) { 365 if (out_reply->RetCode != KERN_SUCCESS) {
356 return true; 366 return true;
357 } 367 }
358 368
359 out_header->msgh_size = sizeof(*out_reply); 369 out_header->msgh_size = sizeof(*out_reply);
360 return true; 370 return true;
361 } 371 }
362 372
363 case kMachMessageIDMachExceptionRaiseState: { 373 case kMachMessageIDMachExceptionRaiseState: {
(...skipping 17 matching lines...) Expand all
381 out_reply->new_stateCnt = arraysize(out_reply->new_state); 391 out_reply->new_stateCnt = arraysize(out_reply->new_state);
382 out_reply->RetCode = 392 out_reply->RetCode =
383 interface_->CatchMachExceptionRaiseState(in_header->msgh_local_port, 393 interface_->CatchMachExceptionRaiseState(in_header->msgh_local_port,
384 in_request->exception, 394 in_request->exception,
385 in_request->code, 395 in_request->code,
386 in_request->codeCnt, 396 in_request->codeCnt,
387 &out_reply->flavor, 397 &out_reply->flavor,
388 in_request_1->old_state, 398 in_request_1->old_state,
389 in_request_1->old_stateCnt, 399 in_request_1->old_stateCnt,
390 out_reply->new_state, 400 out_reply->new_state,
391 &out_reply->new_stateCnt); 401 &out_reply->new_stateCnt,
402 in_trailer);
392 if (out_reply->RetCode != KERN_SUCCESS) { 403 if (out_reply->RetCode != KERN_SUCCESS) {
393 return true; 404 return true;
394 } 405 }
395 406
396 out_header->msgh_size = 407 out_header->msgh_size =
397 sizeof(*out_reply) - sizeof(out_reply->new_state) + 408 sizeof(*out_reply) - sizeof(out_reply->new_state) +
398 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt; 409 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt;
399 return true; 410 return true;
400 } 411 }
401 412
(...skipping 22 matching lines...) Expand all
424 in_request->thread.name, 435 in_request->thread.name,
425 in_request->task.name, 436 in_request->task.name,
426 in_request->exception, 437 in_request->exception,
427 in_request->code, 438 in_request->code,
428 in_request->codeCnt, 439 in_request->codeCnt,
429 &out_reply->flavor, 440 &out_reply->flavor,
430 in_request_1->old_state, 441 in_request_1->old_state,
431 in_request_1->old_stateCnt, 442 in_request_1->old_stateCnt,
432 out_reply->new_state, 443 out_reply->new_state,
433 &out_reply->new_stateCnt, 444 &out_reply->new_stateCnt,
445 in_trailer,
434 destroy_complex_request); 446 destroy_complex_request);
435 if (out_reply->RetCode != KERN_SUCCESS) { 447 if (out_reply->RetCode != KERN_SUCCESS) {
436 return true; 448 return true;
437 } 449 }
438 450
439 out_header->msgh_size = 451 out_header->msgh_size =
440 sizeof(*out_reply) - sizeof(out_reply->new_state) + 452 sizeof(*out_reply) - sizeof(out_reply->new_state) +
441 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt; 453 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt;
442 return true; 454 return true;
443 } 455 }
(...skipping 18 matching lines...) Expand all
462 interface_(interface) { 474 interface_(interface) {
463 } 475 }
464 476
465 kern_return_t SimplifiedExcServer::CatchExceptionRaise( 477 kern_return_t SimplifiedExcServer::CatchExceptionRaise(
466 exception_handler_t exception_port, 478 exception_handler_t exception_port,
467 thread_t thread, 479 thread_t thread,
468 task_t task, 480 task_t task,
469 exception_type_t exception, 481 exception_type_t exception,
470 const exception_data_type_t* code, 482 const exception_data_type_t* code,
471 mach_msg_type_number_t code_count, 483 mach_msg_type_number_t code_count,
484 const mach_msg_trailer_t* trailer,
472 bool* destroy_request) { 485 bool* destroy_request) {
473 thread_state_flavor_t flavor = THREAD_STATE_NONE; 486 thread_state_flavor_t flavor = THREAD_STATE_NONE;
474 mach_msg_type_number_t new_state_count = 0; 487 mach_msg_type_number_t new_state_count = 0;
475 return interface_->CatchException(EXCEPTION_DEFAULT, 488 return interface_->CatchException(EXCEPTION_DEFAULT,
476 exception_port, 489 exception_port,
477 thread, 490 thread,
478 task, 491 task,
479 exception, 492 exception,
480 code, 493 code,
481 code_count, 494 code_count,
482 &flavor, 495 &flavor,
483 nullptr, 496 nullptr,
484 0, 497 0,
485 nullptr, 498 nullptr,
486 &new_state_count, 499 &new_state_count,
500 trailer,
487 destroy_request); 501 destroy_request);
488 } 502 }
489 503
490 kern_return_t SimplifiedExcServer::CatchExceptionRaiseState( 504 kern_return_t SimplifiedExcServer::CatchExceptionRaiseState(
491 exception_handler_t exception_port, 505 exception_handler_t exception_port,
492 exception_type_t exception, 506 exception_type_t exception,
493 const exception_data_type_t* code, 507 const exception_data_type_t* code,
494 mach_msg_type_number_t code_count, 508 mach_msg_type_number_t code_count,
495 thread_state_flavor_t* flavor, 509 thread_state_flavor_t* flavor,
496 const natural_t* old_state, 510 const natural_t* old_state,
497 mach_msg_type_number_t old_state_count, 511 mach_msg_type_number_t old_state_count,
498 thread_state_t new_state, 512 thread_state_t new_state,
499 mach_msg_type_number_t* new_state_count) { 513 mach_msg_type_number_t* new_state_count,
514 const mach_msg_trailer_t* trailer) {
500 bool destroy_complex_request = false; 515 bool destroy_complex_request = false;
501 return interface_->CatchException(EXCEPTION_STATE, 516 return interface_->CatchException(EXCEPTION_STATE,
502 exception_port, 517 exception_port,
503 THREAD_NULL, 518 THREAD_NULL,
504 TASK_NULL, 519 TASK_NULL,
505 exception, 520 exception,
506 code, 521 code,
507 code_count, 522 code_count,
508 flavor, 523 flavor,
509 old_state, 524 old_state,
510 old_state_count, 525 old_state_count,
511 new_state, 526 new_state,
512 new_state_count, 527 new_state_count,
528 trailer,
513 &destroy_complex_request); 529 &destroy_complex_request);
514 } 530 }
515 531
516 kern_return_t SimplifiedExcServer::CatchExceptionRaiseStateIdentity( 532 kern_return_t SimplifiedExcServer::CatchExceptionRaiseStateIdentity(
517 exception_handler_t exception_port, 533 exception_handler_t exception_port,
518 thread_t thread, 534 thread_t thread,
519 task_t task, 535 task_t task,
520 exception_type_t exception, 536 exception_type_t exception,
521 const exception_data_type_t* code, 537 const exception_data_type_t* code,
522 mach_msg_type_number_t code_count, 538 mach_msg_type_number_t code_count,
523 thread_state_flavor_t* flavor, 539 thread_state_flavor_t* flavor,
524 const natural_t* old_state, 540 const natural_t* old_state,
525 mach_msg_type_number_t old_state_count, 541 mach_msg_type_number_t old_state_count,
526 thread_state_t new_state, 542 thread_state_t new_state,
527 mach_msg_type_number_t* new_state_count, 543 mach_msg_type_number_t* new_state_count,
544 const mach_msg_trailer_t* trailer,
528 bool* destroy_request) { 545 bool* destroy_request) {
529 return interface_->CatchException(EXCEPTION_STATE_IDENTITY, 546 return interface_->CatchException(EXCEPTION_STATE_IDENTITY,
530 exception_port, 547 exception_port,
531 thread, 548 thread,
532 task, 549 task,
533 exception, 550 exception,
534 code, 551 code,
535 code_count, 552 code_count,
536 flavor, 553 flavor,
537 old_state, 554 old_state,
538 old_state_count, 555 old_state_count,
539 new_state, 556 new_state,
540 new_state_count, 557 new_state_count,
558 trailer,
541 destroy_request); 559 destroy_request);
542 } 560 }
543 561
544 SimplifiedMachExcServer::SimplifiedMachExcServer( 562 SimplifiedMachExcServer::SimplifiedMachExcServer(
545 SimplifiedMachExcServer::Interface* interface) 563 SimplifiedMachExcServer::Interface* interface)
546 : MachExcServer(this), 564 : MachExcServer(this),
547 MachExcServer::Interface(), 565 MachExcServer::Interface(),
548 interface_(interface) { 566 interface_(interface) {
549 } 567 }
550 568
551 kern_return_t SimplifiedMachExcServer::CatchMachExceptionRaise( 569 kern_return_t SimplifiedMachExcServer::CatchMachExceptionRaise(
552 exception_handler_t exception_port, 570 exception_handler_t exception_port,
553 thread_t thread, 571 thread_t thread,
554 task_t task, 572 task_t task,
555 exception_type_t exception, 573 exception_type_t exception,
556 const mach_exception_data_type_t* code, 574 const mach_exception_data_type_t* code,
557 mach_msg_type_number_t code_count, 575 mach_msg_type_number_t code_count,
576 const mach_msg_trailer_t* trailer,
558 bool* destroy_request) { 577 bool* destroy_request) {
559 thread_state_flavor_t flavor = THREAD_STATE_NONE; 578 thread_state_flavor_t flavor = THREAD_STATE_NONE;
560 mach_msg_type_number_t new_state_count = 0; 579 mach_msg_type_number_t new_state_count = 0;
561 return interface_->CatchMachException( 580 return interface_->CatchMachException(
562 EXCEPTION_DEFAULT | MACH_EXCEPTION_CODES, 581 EXCEPTION_DEFAULT | MACH_EXCEPTION_CODES,
563 exception_port, 582 exception_port,
564 thread, 583 thread,
565 task, 584 task,
566 exception, 585 exception,
567 code, 586 code,
568 code_count, 587 code_count,
569 &flavor, 588 &flavor,
570 nullptr, 589 nullptr,
571 0, 590 0,
572 nullptr, 591 nullptr,
573 &new_state_count, 592 &new_state_count,
593 trailer,
574 destroy_request); 594 destroy_request);
575 } 595 }
576 596
577 kern_return_t SimplifiedMachExcServer::CatchMachExceptionRaiseState( 597 kern_return_t SimplifiedMachExcServer::CatchMachExceptionRaiseState(
578 exception_handler_t exception_port, 598 exception_handler_t exception_port,
579 exception_type_t exception, 599 exception_type_t exception,
580 const mach_exception_data_type_t* code, 600 const mach_exception_data_type_t* code,
581 mach_msg_type_number_t code_count, 601 mach_msg_type_number_t code_count,
582 thread_state_flavor_t* flavor, 602 thread_state_flavor_t* flavor,
583 const natural_t* old_state, 603 const natural_t* old_state,
584 mach_msg_type_number_t old_state_count, 604 mach_msg_type_number_t old_state_count,
585 thread_state_t new_state, 605 thread_state_t new_state,
586 mach_msg_type_number_t* new_state_count) { 606 mach_msg_type_number_t* new_state_count,
607 const mach_msg_trailer_t* trailer) {
587 bool destroy_complex_request = false; 608 bool destroy_complex_request = false;
588 return interface_->CatchMachException(EXCEPTION_STATE | MACH_EXCEPTION_CODES, 609 return interface_->CatchMachException(EXCEPTION_STATE | MACH_EXCEPTION_CODES,
589 exception_port, 610 exception_port,
590 THREAD_NULL, 611 THREAD_NULL,
591 TASK_NULL, 612 TASK_NULL,
592 exception, 613 exception,
593 code, 614 code,
594 code_count, 615 code_count,
595 flavor, 616 flavor,
596 old_state, 617 old_state,
597 old_state_count, 618 old_state_count,
598 new_state, 619 new_state,
599 new_state_count, 620 new_state_count,
621 trailer,
600 &destroy_complex_request); 622 &destroy_complex_request);
601 } 623 }
602 624
603 kern_return_t SimplifiedMachExcServer::CatchMachExceptionRaiseStateIdentity( 625 kern_return_t SimplifiedMachExcServer::CatchMachExceptionRaiseStateIdentity(
604 exception_handler_t exception_port, 626 exception_handler_t exception_port,
605 thread_t thread, 627 thread_t thread,
606 task_t task, 628 task_t task,
607 exception_type_t exception, 629 exception_type_t exception,
608 const mach_exception_data_type_t* code, 630 const mach_exception_data_type_t* code,
609 mach_msg_type_number_t code_count, 631 mach_msg_type_number_t code_count,
610 thread_state_flavor_t* flavor, 632 thread_state_flavor_t* flavor,
611 const natural_t* old_state, 633 const natural_t* old_state,
612 mach_msg_type_number_t old_state_count, 634 mach_msg_type_number_t old_state_count,
613 thread_state_t new_state, 635 thread_state_t new_state,
614 mach_msg_type_number_t* new_state_count, 636 mach_msg_type_number_t* new_state_count,
637 const mach_msg_trailer_t* trailer,
615 bool* destroy_request) { 638 bool* destroy_request) {
616 return interface_->CatchMachException( 639 return interface_->CatchMachException(
617 EXCEPTION_STATE_IDENTITY | MACH_EXCEPTION_CODES, 640 EXCEPTION_STATE_IDENTITY | MACH_EXCEPTION_CODES,
618 exception_port, 641 exception_port,
619 thread, 642 thread,
620 task, 643 task,
621 exception, 644 exception,
622 code, 645 code,
623 code_count, 646 code_count,
624 flavor, 647 flavor,
625 old_state, 648 old_state,
626 old_state_count, 649 old_state_count,
627 new_state, 650 new_state,
628 new_state_count, 651 new_state_count,
652 trailer,
629 destroy_request); 653 destroy_request);
630 } 654 }
631 655
632 } // namespace internal 656 } // namespace internal
633 657
634 UniversalMachExcServer::UniversalMachExcServer() 658 UniversalMachExcServer::UniversalMachExcServer()
635 : MachMessageServer::Interface(), 659 : MachMessageServer::Interface(),
636 internal::SimplifiedExcServer::Interface(), 660 internal::SimplifiedExcServer::Interface(),
637 internal::SimplifiedMachExcServer::Interface(), 661 internal::SimplifiedMachExcServer::Interface(),
638 exc_server_(this), 662 exc_server_(this),
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 thread_t thread, 703 thread_t thread,
680 task_t task, 704 task_t task,
681 exception_type_t exception, 705 exception_type_t exception,
682 const exception_data_type_t* code, 706 const exception_data_type_t* code,
683 mach_msg_type_number_t code_count, 707 mach_msg_type_number_t code_count,
684 thread_state_flavor_t* flavor, 708 thread_state_flavor_t* flavor,
685 const natural_t* old_state, 709 const natural_t* old_state,
686 mach_msg_type_number_t old_state_count, 710 mach_msg_type_number_t old_state_count,
687 thread_state_t new_state, 711 thread_state_t new_state,
688 mach_msg_type_number_t* new_state_count, 712 mach_msg_type_number_t* new_state_count,
713 const mach_msg_trailer_t* trailer,
689 bool* destroy_complex_request) { 714 bool* destroy_complex_request) {
690 std::vector<mach_exception_data_type_t> mach_codes; 715 std::vector<mach_exception_data_type_t> mach_codes;
691 mach_codes.reserve(code_count); 716 mach_codes.reserve(code_count);
692 for (size_t index = 0; index < code_count; ++index) { 717 for (size_t index = 0; index < code_count; ++index) {
693 mach_codes.push_back(code[index]); 718 mach_codes.push_back(code[index]);
694 } 719 }
695 720
696 return CatchMachException(behavior, 721 return CatchMachException(behavior,
697 exception_port, 722 exception_port,
698 thread, 723 thread,
699 task, 724 task,
700 exception, 725 exception,
701 code_count ? &mach_codes[0] : nullptr, 726 code_count ? &mach_codes[0] : nullptr,
702 code_count, 727 code_count,
703 flavor, 728 flavor,
704 old_state, 729 old_state,
705 old_state_count, 730 old_state_count,
706 new_state, 731 new_state,
707 new_state_count, 732 new_state_count,
733 trailer,
708 destroy_complex_request); 734 destroy_complex_request);
709 } 735 }
710 736
711 exception_type_t ExcCrashRecoverOriginalException( 737 exception_type_t ExcCrashRecoverOriginalException(
712 mach_exception_code_t code_0, 738 mach_exception_code_t code_0,
713 mach_exception_code_t* original_code_0, 739 mach_exception_code_t* original_code_0,
714 int* signal) { 740 int* signal) {
715 // 10.9.4 xnu-2422.110.17/bsd/kern/kern_exit.c proc_prepareexit() sets code[0] 741 // 10.9.4 xnu-2422.110.17/bsd/kern/kern_exit.c proc_prepareexit() sets code[0]
716 // based on the signal value, original exception type, and low 20 bits of the 742 // based on the signal value, original exception type, and low 20 bits of the
717 // original code[0] before calling xnu-2422.110.17/osfmk/kern/exception.c 743 // original code[0] before calling xnu-2422.110.17/osfmk/kern/exception.c
(...skipping 20 matching lines...) Expand all
738 kern_return_t ExcServerSuccessfulReturnValue(exception_behavior_t behavior, 764 kern_return_t ExcServerSuccessfulReturnValue(exception_behavior_t behavior,
739 bool set_thread_state) { 765 bool set_thread_state) {
740 if (!set_thread_state && ExceptionBehaviorHasState(behavior)) { 766 if (!set_thread_state && ExceptionBehaviorHasState(behavior)) {
741 return MACH_RCV_PORT_DIED; 767 return MACH_RCV_PORT_DIED;
742 } 768 }
743 769
744 return KERN_SUCCESS; 770 return KERN_SUCCESS;
745 } 771 }
746 772
747 } // namespace crashpad 773 } // namespace crashpad
OLDNEW
« no previous file with comments | « util/mach/exc_server_variants.h ('k') | util/mach/exc_server_variants_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698