Index: util/mach/exc_server_variants.cc |
diff --git a/util/mach/exc_server_variants.cc b/util/mach/exc_server_variants.cc |
index 8dccddeef249a1a2b9bb525abb6f688cabacfb60..0376e600a905b1677d71773e142369b716ef6618 100644 |
--- a/util/mach/exc_server_variants.cc |
+++ b/util/mach/exc_server_variants.cc |
@@ -490,7 +490,7 @@ kern_return_t SimplifiedExcServer::CatchExceptionRaise( |
thread, |
task, |
exception, |
- code, |
+ code_count ? code : nullptr, |
code_count, |
&flavor, |
nullptr, |
@@ -518,12 +518,12 @@ kern_return_t SimplifiedExcServer::CatchExceptionRaiseState( |
THREAD_NULL, |
TASK_NULL, |
exception, |
- code, |
+ code_count ? code : nullptr, |
code_count, |
flavor, |
- old_state, |
+ old_state_count ? old_state : nullptr, |
old_state_count, |
- new_state, |
+ new_state_count ? new_state : nullptr, |
new_state_count, |
trailer, |
&destroy_complex_request); |
@@ -548,12 +548,12 @@ kern_return_t SimplifiedExcServer::CatchExceptionRaiseStateIdentity( |
thread, |
task, |
exception, |
- code, |
+ code_count ? code : nullptr, |
code_count, |
flavor, |
- old_state, |
+ old_state_count ? old_state : nullptr, |
old_state_count, |
- new_state, |
+ new_state_count ? new_state : nullptr, |
new_state_count, |
trailer, |
destroy_request); |
@@ -583,7 +583,7 @@ kern_return_t SimplifiedMachExcServer::CatchMachExceptionRaise( |
thread, |
task, |
exception, |
- code, |
+ code_count ? code : nullptr, |
code_count, |
&flavor, |
nullptr, |
@@ -611,12 +611,12 @@ kern_return_t SimplifiedMachExcServer::CatchMachExceptionRaiseState( |
THREAD_NULL, |
TASK_NULL, |
exception, |
- code, |
+ code_count ? code : nullptr, |
code_count, |
flavor, |
- old_state, |
+ old_state_count ? old_state : nullptr, |
old_state_count, |
- new_state, |
+ new_state_count ? new_state : nullptr, |
new_state_count, |
trailer, |
&destroy_complex_request); |
@@ -642,12 +642,12 @@ kern_return_t SimplifiedMachExcServer::CatchMachExceptionRaiseStateIdentity( |
thread, |
task, |
exception, |
- code, |
+ code_count ? code : nullptr, |
code_count, |
flavor, |
- old_state, |
+ old_state_count ? old_state : nullptr, |
old_state_count, |
- new_state, |
+ new_state_count ? new_state : nullptr, |
new_state_count, |
trailer, |
destroy_request); |
@@ -655,12 +655,14 @@ kern_return_t SimplifiedMachExcServer::CatchMachExceptionRaiseStateIdentity( |
} // namespace internal |
-UniversalMachExcServer::UniversalMachExcServer() |
+UniversalMachExcServer::UniversalMachExcServer( |
+ UniversalMachExcServer::Interface* interface) |
: MachMessageServer::Interface(), |
internal::SimplifiedExcServer::Interface(), |
internal::SimplifiedMachExcServer::Interface(), |
exc_server_(this), |
- mach_exc_server_(this) { |
+ mach_exc_server_(this), |
+ interface_(interface) { |
} |
bool UniversalMachExcServer::MachMessageServerFunction( |
@@ -718,20 +720,51 @@ kern_return_t UniversalMachExcServer::CatchException( |
mach_codes.push_back(code[index]); |
} |
- return CatchMachException(behavior, |
- exception_port, |
- thread, |
- task, |
- exception, |
- code_count ? &mach_codes[0] : nullptr, |
- code_count, |
- flavor, |
- old_state, |
- old_state_count, |
- new_state, |
- new_state_count, |
- trailer, |
- destroy_complex_request); |
+ return interface_->CatchMachException(behavior, |
+ exception_port, |
+ thread, |
+ task, |
+ exception, |
+ code_count ? &mach_codes[0] : nullptr, |
+ code_count, |
+ flavor, |
+ old_state_count ? old_state : nullptr, |
+ old_state_count, |
+ new_state_count ? new_state : nullptr, |
+ new_state_count, |
+ trailer, |
+ destroy_complex_request); |
+} |
+ |
+kern_return_t UniversalMachExcServer::CatchMachException( |
+ exception_behavior_t behavior, |
+ exception_handler_t exception_port, |
+ thread_t thread, |
+ task_t task, |
+ exception_type_t exception, |
+ const mach_exception_data_type_t* code, |
+ mach_msg_type_number_t code_count, |
+ thread_state_flavor_t* flavor, |
+ const natural_t* old_state, |
+ mach_msg_type_number_t old_state_count, |
+ thread_state_t new_state, |
+ mach_msg_type_number_t* new_state_count, |
+ const mach_msg_trailer_t* trailer, |
+ bool* destroy_complex_request) { |
+ return interface_->CatchMachException(behavior, |
+ exception_port, |
+ thread, |
+ task, |
+ exception, |
+ code_count ? code : nullptr, |
+ code_count, |
+ flavor, |
+ old_state_count ? old_state : nullptr, |
+ old_state_count, |
+ new_state_count ? new_state : nullptr, |
+ new_state_count, |
+ trailer, |
+ destroy_complex_request); |
} |
exception_type_t ExcCrashRecoverOriginalException( |