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

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

Issue 1058523002: Add ConstThreadState to mach_extensions.h and use it everywhere (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: clang-unformat Created 5 years, 8 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
« 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 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 //! request message is not complex (it does not carry the \a thread or \a 269 //! request message is not complex (it does not carry the \a thread or \a
270 //! task port rights) and thus there is nothing to destroy. 270 //! task port rights) and thus there is nothing to destroy.
271 //! 271 //!
272 //! \param[in] trailer The trailer received with the request message. 272 //! \param[in] trailer The trailer received with the request message.
273 virtual kern_return_t CatchExceptionRaiseState( 273 virtual kern_return_t CatchExceptionRaiseState(
274 exception_handler_t exception_port, 274 exception_handler_t exception_port,
275 exception_type_t exception, 275 exception_type_t exception,
276 const typename Traits::ExceptionCode* code, 276 const typename Traits::ExceptionCode* code,
277 mach_msg_type_number_t code_count, 277 mach_msg_type_number_t code_count,
278 thread_state_flavor_t* flavor, 278 thread_state_flavor_t* flavor,
279 const natural_t* old_state, 279 ConstThreadState old_state,
280 mach_msg_type_number_t old_state_count, 280 mach_msg_type_number_t old_state_count,
281 thread_state_t new_state, 281 thread_state_t new_state,
282 mach_msg_type_number_t* new_state_count, 282 mach_msg_type_number_t* new_state_count,
283 const mach_msg_trailer_t* trailer) = 0; 283 const mach_msg_trailer_t* trailer) = 0;
284 284
285 //! \brief Handles exceptions raised by `exception_raise_state_identity()` 285 //! \brief Handles exceptions raised by `exception_raise_state_identity()`
286 //! or `mach_exception_raise_state_identity()`. 286 //! or `mach_exception_raise_state_identity()`.
287 //! 287 //!
288 //! This behaves equivalently to a `catch_exception_raise_state_identity()` 288 //! This behaves equivalently to a `catch_exception_raise_state_identity()`
289 //! function used with `exc_server()`, or a 289 //! function used with `exc_server()`, or a
290 //! `catch_mach_exception_raise_state_identity()` function used with 290 //! `catch_mach_exception_raise_state_identity()` function used with
291 //! `mach_exc_server()`. 291 //! `mach_exc_server()`.
292 //! 292 //!
293 //! \param[in] trailer The trailer received with the request message. 293 //! \param[in] trailer The trailer received with the request message.
294 //! \param[out] destroy_request `true` if the request message is to be 294 //! \param[out] destroy_request `true` if the request message is to be
295 //! destroyed even when this method returns success. See 295 //! destroyed even when this method returns success. See
296 //! MachMessageServer::Interface. 296 //! MachMessageServer::Interface.
297 virtual kern_return_t CatchExceptionRaiseStateIdentity( 297 virtual kern_return_t CatchExceptionRaiseStateIdentity(
298 exception_handler_t exception_port, 298 exception_handler_t exception_port,
299 thread_t thread, 299 thread_t thread,
300 task_t task, 300 task_t task,
301 exception_type_t exception, 301 exception_type_t exception,
302 const typename Traits::ExceptionCode* code, 302 const typename Traits::ExceptionCode* code,
303 mach_msg_type_number_t code_count, 303 mach_msg_type_number_t code_count,
304 thread_state_flavor_t* flavor, 304 thread_state_flavor_t* flavor,
305 const natural_t* old_state, 305 ConstThreadState old_state,
306 mach_msg_type_number_t old_state_count, 306 mach_msg_type_number_t old_state_count,
307 thread_state_t new_state, 307 thread_state_t new_state,
308 mach_msg_type_number_t* new_state_count, 308 mach_msg_type_number_t* new_state_count,
309 const mach_msg_trailer_t* trailer, 309 const mach_msg_trailer_t* trailer,
310 bool* destroy_request) = 0; 310 bool* destroy_request) = 0;
311 311
312 protected: 312 protected:
313 ~Interface() {} 313 ~Interface() {}
314 }; 314 };
315 315
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 //! be ORed in to this parameter. 516 //! be ORed in to this parameter.
517 virtual kern_return_t CatchException( 517 virtual kern_return_t CatchException(
518 exception_behavior_t behavior, 518 exception_behavior_t behavior,
519 exception_handler_t exception_port, 519 exception_handler_t exception_port,
520 thread_t thread, 520 thread_t thread,
521 task_t task, 521 task_t task,
522 exception_type_t exception, 522 exception_type_t exception,
523 const typename Traits::ExceptionCode* code, 523 const typename Traits::ExceptionCode* code,
524 mach_msg_type_number_t code_count, 524 mach_msg_type_number_t code_count,
525 thread_state_flavor_t* flavor, 525 thread_state_flavor_t* flavor,
526 const natural_t* old_state, 526 ConstThreadState old_state,
527 mach_msg_type_number_t old_state_count, 527 mach_msg_type_number_t old_state_count,
528 thread_state_t new_state, 528 thread_state_t new_state,
529 mach_msg_type_number_t* new_state_count, 529 mach_msg_type_number_t* new_state_count,
530 const mach_msg_trailer_t* trailer, 530 const mach_msg_trailer_t* trailer,
531 bool* destroy_complex_request) = 0; 531 bool* destroy_complex_request) = 0;
532 532
533 protected: 533 protected:
534 ~Interface() {} 534 ~Interface() {}
535 }; 535 };
536 536
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 trailer, 570 trailer,
571 destroy_request); 571 destroy_request);
572 } 572 }
573 573
574 kern_return_t CatchExceptionRaiseState( 574 kern_return_t CatchExceptionRaiseState(
575 exception_handler_t exception_port, 575 exception_handler_t exception_port,
576 exception_type_t exception, 576 exception_type_t exception,
577 const typename Traits::ExceptionCode* code, 577 const typename Traits::ExceptionCode* code,
578 mach_msg_type_number_t code_count, 578 mach_msg_type_number_t code_count,
579 thread_state_flavor_t* flavor, 579 thread_state_flavor_t* flavor,
580 const natural_t* old_state, 580 ConstThreadState old_state,
581 mach_msg_type_number_t old_state_count, 581 mach_msg_type_number_t old_state_count,
582 thread_state_t new_state, 582 thread_state_t new_state,
583 mach_msg_type_number_t* new_state_count, 583 mach_msg_type_number_t* new_state_count,
584 const mach_msg_trailer_t* trailer) override { 584 const mach_msg_trailer_t* trailer) override {
585 bool destroy_complex_request = false; 585 bool destroy_complex_request = false;
586 return interface_->CatchException( 586 return interface_->CatchException(
587 Traits::kExceptionBehavior | EXCEPTION_STATE, 587 Traits::kExceptionBehavior | EXCEPTION_STATE,
588 exception_port, 588 exception_port,
589 THREAD_NULL, 589 THREAD_NULL,
590 TASK_NULL, 590 TASK_NULL,
(...skipping 10 matching lines...) Expand all
601 } 601 }
602 602
603 kern_return_t CatchExceptionRaiseStateIdentity( 603 kern_return_t CatchExceptionRaiseStateIdentity(
604 exception_handler_t exception_port, 604 exception_handler_t exception_port,
605 thread_t thread, 605 thread_t thread,
606 task_t task, 606 task_t task,
607 exception_type_t exception, 607 exception_type_t exception,
608 const typename Traits::ExceptionCode* code, 608 const typename Traits::ExceptionCode* code,
609 mach_msg_type_number_t code_count, 609 mach_msg_type_number_t code_count,
610 thread_state_flavor_t* flavor, 610 thread_state_flavor_t* flavor,
611 const natural_t* old_state, 611 ConstThreadState old_state,
612 mach_msg_type_number_t old_state_count, 612 mach_msg_type_number_t old_state_count,
613 thread_state_t new_state, 613 thread_state_t new_state,
614 mach_msg_type_number_t* new_state_count, 614 mach_msg_type_number_t* new_state_count,
615 const mach_msg_trailer_t* trailer, 615 const mach_msg_trailer_t* trailer,
616 bool* destroy_request) override { 616 bool* destroy_request) override {
617 return interface_->CatchException( 617 return interface_->CatchException(
618 Traits::kExceptionBehavior | EXCEPTION_STATE_IDENTITY, 618 Traits::kExceptionBehavior | EXCEPTION_STATE_IDENTITY,
619 exception_port, 619 exception_port,
620 thread, 620 thread,
621 task, 621 task,
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 662
663 // SimplifiedExcServer<ExcTraits>::Interface: 663 // SimplifiedExcServer<ExcTraits>::Interface:
664 kern_return_t CatchException(exception_behavior_t behavior, 664 kern_return_t CatchException(exception_behavior_t behavior,
665 exception_handler_t exception_port, 665 exception_handler_t exception_port,
666 thread_t thread, 666 thread_t thread,
667 task_t task, 667 task_t task,
668 exception_type_t exception, 668 exception_type_t exception,
669 const exception_data_type_t* code, 669 const exception_data_type_t* code,
670 mach_msg_type_number_t code_count, 670 mach_msg_type_number_t code_count,
671 thread_state_flavor_t* flavor, 671 thread_state_flavor_t* flavor,
672 const natural_t* old_state, 672 ConstThreadState old_state,
673 mach_msg_type_number_t old_state_count, 673 mach_msg_type_number_t old_state_count,
674 thread_state_t new_state, 674 thread_state_t new_state,
675 mach_msg_type_number_t* new_state_count, 675 mach_msg_type_number_t* new_state_count,
676 const mach_msg_trailer_t* trailer, 676 const mach_msg_trailer_t* trailer,
677 bool* destroy_complex_request) { 677 bool* destroy_complex_request) {
678 std::vector<mach_exception_data_type_t> mach_codes; 678 std::vector<mach_exception_data_type_t> mach_codes;
679 mach_codes.reserve(code_count); 679 mach_codes.reserve(code_count);
680 for (size_t index = 0; index < code_count; ++index) { 680 for (size_t index = 0; index < code_count; ++index) {
681 mach_codes.push_back(code[index]); 681 mach_codes.push_back(code[index]);
682 } 682 }
(...skipping 16 matching lines...) Expand all
699 699
700 // SimplifiedExcServer<MachExcTraits>::Interface: 700 // SimplifiedExcServer<MachExcTraits>::Interface:
701 kern_return_t CatchException(exception_behavior_t behavior, 701 kern_return_t CatchException(exception_behavior_t behavior,
702 exception_handler_t exception_port, 702 exception_handler_t exception_port,
703 thread_t thread, 703 thread_t thread,
704 task_t task, 704 task_t task,
705 exception_type_t exception, 705 exception_type_t exception,
706 const mach_exception_data_type_t* code, 706 const mach_exception_data_type_t* code,
707 mach_msg_type_number_t code_count, 707 mach_msg_type_number_t code_count,
708 thread_state_flavor_t* flavor, 708 thread_state_flavor_t* flavor,
709 const natural_t* old_state, 709 ConstThreadState old_state,
710 mach_msg_type_number_t old_state_count, 710 mach_msg_type_number_t old_state_count,
711 thread_state_t new_state, 711 thread_state_t new_state,
712 mach_msg_type_number_t* new_state_count, 712 mach_msg_type_number_t* new_state_count,
713 const mach_msg_trailer_t* trailer, 713 const mach_msg_trailer_t* trailer,
714 bool* destroy_complex_request) { 714 bool* destroy_complex_request) {
715 return interface_->CatchMachException(behavior, 715 return interface_->CatchMachException(behavior,
716 exception_port, 716 exception_port,
717 thread, 717 thread,
718 task, 718 task,
719 exception, 719 exception,
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 kern_return_t ExcServerSuccessfulReturnValue(exception_behavior_t behavior, 797 kern_return_t ExcServerSuccessfulReturnValue(exception_behavior_t behavior,
798 bool set_thread_state) { 798 bool set_thread_state) {
799 if (!set_thread_state && ExceptionBehaviorHasState(behavior)) { 799 if (!set_thread_state && ExceptionBehaviorHasState(behavior)) {
800 return MACH_RCV_PORT_DIED; 800 return MACH_RCV_PORT_DIED;
801 } 801 }
802 802
803 return KERN_SUCCESS; 803 return KERN_SUCCESS;
804 } 804 }
805 805
806 void ExcServerCopyState(exception_behavior_t behavior, 806 void ExcServerCopyState(exception_behavior_t behavior,
807 const natural_t* old_state, 807 ConstThreadState old_state,
808 mach_msg_type_number_t old_state_count, 808 mach_msg_type_number_t old_state_count,
809 thread_state_t new_state, 809 thread_state_t new_state,
810 mach_msg_type_number_t* new_state_count) { 810 mach_msg_type_number_t* new_state_count) {
811 if (ExceptionBehaviorHasState(behavior)) { 811 if (ExceptionBehaviorHasState(behavior)) {
812 *new_state_count = std::min(old_state_count, *new_state_count); 812 *new_state_count = std::min(old_state_count, *new_state_count);
813 memcpy(new_state, old_state, *new_state_count * sizeof(old_state[0])); 813 memcpy(new_state, old_state, *new_state_count * sizeof(old_state[0]));
814 } 814 }
815 } 815 }
816 816
817 } // namespace crashpad 817 } // 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