| 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, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 implicit_cast<mach_exception_data_type_t>(0xfedcba9876543210), | 58 implicit_cast<mach_exception_data_type_t>(0xfedcba9876543210), |
| 59 }; | 59 }; |
| 60 | 60 |
| 61 const thread_state_flavor_t kThreadStateFlavor = MACHINE_THREAD_STATE; | 61 const thread_state_flavor_t kThreadStateFlavor = MACHINE_THREAD_STATE; |
| 62 const mach_msg_type_number_t kThreadStateFlavorCount = | 62 const mach_msg_type_number_t kThreadStateFlavorCount = |
| 63 MACHINE_THREAD_STATE_COUNT; | 63 MACHINE_THREAD_STATE_COUNT; |
| 64 | 64 |
| 65 void InitializeMachMsgPortDescriptor(mach_msg_port_descriptor_t* descriptor, | 65 void InitializeMachMsgPortDescriptor(mach_msg_port_descriptor_t* descriptor, |
| 66 mach_port_t port) { | 66 mach_port_t port) { |
| 67 descriptor->name = port; | 67 descriptor->name = port; |
| 68 descriptor->disposition = MACH_MSG_TYPE_MOVE_SEND; | 68 descriptor->disposition = MACH_MSG_TYPE_PORT_SEND; |
| 69 descriptor->type = MACH_MSG_PORT_DESCRIPTOR; | 69 descriptor->type = MACH_MSG_PORT_DESCRIPTOR; |
| 70 } | 70 } |
| 71 | 71 |
| 72 // The definitions of the request and reply structures from mach_exc.h aren’t | 72 // The definitions of the request and reply structures from mach_exc.h aren’t |
| 73 // available here. They need custom initialization code, and the reply | 73 // available here. They need custom initialization code, and the reply |
| 74 // structures need verification code too, so duplicate the expected definitions | 74 // structures need verification code too, so duplicate the expected definitions |
| 75 // of the structures from both exc.h and mach_exc.h here in this file, and | 75 // of the structures from both exc.h and mach_exc.h here in this file, and |
| 76 // provide the initialization and verification code as methods in true | 76 // provide the initialization and verification code as methods in true |
| 77 // object-oriented fashion. | 77 // object-oriented fashion. |
| 78 | 78 |
| 79 struct __attribute__((packed, aligned(4))) ExceptionRaiseRequest { | 79 struct __attribute__((packed, aligned(4))) ExceptionRaiseRequest { |
| 80 mach_msg_header_t Head; | 80 mach_msg_header_t Head; |
| 81 mach_msg_body_t msgh_body; | 81 mach_msg_body_t msgh_body; |
| 82 mach_msg_port_descriptor_t thread; | 82 mach_msg_port_descriptor_t thread; |
| 83 mach_msg_port_descriptor_t task; | 83 mach_msg_port_descriptor_t task; |
| 84 NDR_record_t NDR; | 84 NDR_record_t NDR; |
| 85 exception_type_t exception; | 85 exception_type_t exception; |
| 86 mach_msg_type_number_t codeCnt; | 86 mach_msg_type_number_t codeCnt; |
| 87 integer_t code[2]; | 87 integer_t code[2]; |
| 88 | 88 |
| 89 void InitializeForTesting() { | 89 void InitializeForTesting() { |
| 90 memset(this, 0xa5, sizeof(*this)); | 90 memset(this, 0xa5, sizeof(*this)); |
| 91 Head.msgh_bits = | 91 Head.msgh_bits = |
| 92 MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, MACH_MSG_TYPE_MAKE_SEND_ONCE) | | 92 MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, MACH_MSG_TYPE_PORT_SEND) | |
| 93 MACH_MSGH_BITS_COMPLEX; | 93 MACH_MSGH_BITS_COMPLEX; |
| 94 Head.msgh_size = sizeof(*this); | 94 Head.msgh_size = sizeof(*this); |
| 95 Head.msgh_remote_port = kClientRemotePort; | 95 Head.msgh_remote_port = kClientRemotePort; |
| 96 Head.msgh_local_port = kServerLocalPort; | 96 Head.msgh_local_port = kServerLocalPort; |
| 97 Head.msgh_id = 2401; | 97 Head.msgh_id = 2401; |
| 98 msgh_body.msgh_descriptor_count = 2; | 98 msgh_body.msgh_descriptor_count = 2; |
| 99 InitializeMachMsgPortDescriptor(&thread, kExceptionThreadPort); | 99 InitializeMachMsgPortDescriptor(&thread, kExceptionThreadPort); |
| 100 InitializeMachMsgPortDescriptor(&task, kExceptionTaskPort); | 100 InitializeMachMsgPortDescriptor(&task, kExceptionTaskPort); |
| 101 NDR = NDR_record; | 101 NDR = NDR_record; |
| 102 exception = kExceptionType; | 102 exception = kExceptionType; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 115 memset(this, 0x5a, sizeof(*this)); | 115 memset(this, 0x5a, sizeof(*this)); |
| 116 RetCode = KERN_FAILURE; | 116 RetCode = KERN_FAILURE; |
| 117 } | 117 } |
| 118 | 118 |
| 119 // Verify accepts a |behavior| parameter because the same message format and | 119 // Verify accepts a |behavior| parameter because the same message format and |
| 120 // verification function is used for ExceptionRaiseReply and | 120 // verification function is used for ExceptionRaiseReply and |
| 121 // MachExceptionRaiseReply. Knowing which behavior is expected allows the | 121 // MachExceptionRaiseReply. Knowing which behavior is expected allows the |
| 122 // message ID to be checked. | 122 // message ID to be checked. |
| 123 void Verify(exception_behavior_t behavior) { | 123 void Verify(exception_behavior_t behavior) { |
| 124 EXPECT_EQ(implicit_cast<mach_msg_bits_t>( | 124 EXPECT_EQ(implicit_cast<mach_msg_bits_t>( |
| 125 MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0)), | 125 MACH_MSGH_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE, 0)), |
| 126 Head.msgh_bits); | 126 Head.msgh_bits); |
| 127 EXPECT_EQ(sizeof(*this), Head.msgh_size); | 127 EXPECT_EQ(sizeof(*this), Head.msgh_size); |
| 128 EXPECT_EQ(kClientRemotePort, Head.msgh_remote_port); | 128 EXPECT_EQ(kClientRemotePort, Head.msgh_remote_port); |
| 129 EXPECT_EQ(kMachPortNull, Head.msgh_local_port); | 129 EXPECT_EQ(kMachPortNull, Head.msgh_local_port); |
| 130 switch (behavior) { | 130 switch (behavior) { |
| 131 case EXCEPTION_DEFAULT: | 131 case EXCEPTION_DEFAULT: |
| 132 EXPECT_EQ(2501, Head.msgh_id); | 132 EXPECT_EQ(2501, Head.msgh_id); |
| 133 break; | 133 break; |
| 134 case EXCEPTION_DEFAULT | kMachExceptionCodes: | 134 case EXCEPTION_DEFAULT | kMachExceptionCodes: |
| 135 EXPECT_EQ(2505, Head.msgh_id); | 135 EXPECT_EQ(2505, Head.msgh_id); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 150 exception_type_t exception; | 150 exception_type_t exception; |
| 151 mach_msg_type_number_t codeCnt; | 151 mach_msg_type_number_t codeCnt; |
| 152 integer_t code[2]; | 152 integer_t code[2]; |
| 153 int flavor; | 153 int flavor; |
| 154 mach_msg_type_number_t old_stateCnt; | 154 mach_msg_type_number_t old_stateCnt; |
| 155 natural_t old_state[THREAD_STATE_MAX]; | 155 natural_t old_state[THREAD_STATE_MAX]; |
| 156 | 156 |
| 157 void InitializeForTesting() { | 157 void InitializeForTesting() { |
| 158 memset(this, 0xa5, sizeof(*this)); | 158 memset(this, 0xa5, sizeof(*this)); |
| 159 Head.msgh_bits = | 159 Head.msgh_bits = |
| 160 MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, MACH_MSG_TYPE_MAKE_SEND_ONCE); | 160 MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, MACH_MSG_TYPE_PORT_SEND); |
| 161 Head.msgh_size = sizeof(*this); | 161 Head.msgh_size = sizeof(*this); |
| 162 Head.msgh_remote_port = kClientRemotePort; | 162 Head.msgh_remote_port = kClientRemotePort; |
| 163 Head.msgh_local_port = kServerLocalPort; | 163 Head.msgh_local_port = kServerLocalPort; |
| 164 Head.msgh_id = 2402; | 164 Head.msgh_id = 2402; |
| 165 NDR = NDR_record; | 165 NDR = NDR_record; |
| 166 exception = kExceptionType; | 166 exception = kExceptionType; |
| 167 codeCnt = 2; | 167 codeCnt = 2; |
| 168 code[0] = kTestExceptonCodes[0]; | 168 code[0] = kTestExceptonCodes[0]; |
| 169 code[1] = kTestExceptonCodes[1]; | 169 code[1] = kTestExceptonCodes[1]; |
| 170 flavor = kThreadStateFlavor; | 170 flavor = kThreadStateFlavor; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 189 RetCode = KERN_FAILURE; | 189 RetCode = KERN_FAILURE; |
| 190 } | 190 } |
| 191 | 191 |
| 192 // Verify accepts a |behavior| parameter because the same message format and | 192 // Verify accepts a |behavior| parameter because the same message format and |
| 193 // verification function is used for ExceptionRaiseStateReply, | 193 // verification function is used for ExceptionRaiseStateReply, |
| 194 // ExceptionRaiseStateIdentityReply, MachExceptionRaiseStateReply, and | 194 // ExceptionRaiseStateIdentityReply, MachExceptionRaiseStateReply, and |
| 195 // MachExceptionRaiseStateIdentityReply. Knowing which behavior is expected | 195 // MachExceptionRaiseStateIdentityReply. Knowing which behavior is expected |
| 196 // allows the message ID to be checked. | 196 // allows the message ID to be checked. |
| 197 void Verify(exception_behavior_t behavior) { | 197 void Verify(exception_behavior_t behavior) { |
| 198 EXPECT_EQ(implicit_cast<mach_msg_bits_t>( | 198 EXPECT_EQ(implicit_cast<mach_msg_bits_t>( |
| 199 MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0)), | 199 MACH_MSGH_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE, 0)), |
| 200 Head.msgh_bits); | 200 Head.msgh_bits); |
| 201 EXPECT_EQ(sizeof(*this), Head.msgh_size); | 201 EXPECT_EQ(sizeof(*this), Head.msgh_size); |
| 202 EXPECT_EQ(kClientRemotePort, Head.msgh_remote_port); | 202 EXPECT_EQ(kClientRemotePort, Head.msgh_remote_port); |
| 203 EXPECT_EQ(kMachPortNull, Head.msgh_local_port); | 203 EXPECT_EQ(kMachPortNull, Head.msgh_local_port); |
| 204 switch (behavior) { | 204 switch (behavior) { |
| 205 case EXCEPTION_STATE: | 205 case EXCEPTION_STATE: |
| 206 EXPECT_EQ(2502, Head.msgh_id); | 206 EXPECT_EQ(2502, Head.msgh_id); |
| 207 break; | 207 break; |
| 208 case EXCEPTION_STATE_IDENTITY: | 208 case EXCEPTION_STATE_IDENTITY: |
| 209 EXPECT_EQ(2503, Head.msgh_id); | 209 EXPECT_EQ(2503, Head.msgh_id); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 235 exception_type_t exception; | 235 exception_type_t exception; |
| 236 mach_msg_type_number_t codeCnt; | 236 mach_msg_type_number_t codeCnt; |
| 237 integer_t code[2]; | 237 integer_t code[2]; |
| 238 int flavor; | 238 int flavor; |
| 239 mach_msg_type_number_t old_stateCnt; | 239 mach_msg_type_number_t old_stateCnt; |
| 240 natural_t old_state[THREAD_STATE_MAX]; | 240 natural_t old_state[THREAD_STATE_MAX]; |
| 241 | 241 |
| 242 void InitializeForTesting() { | 242 void InitializeForTesting() { |
| 243 memset(this, 0xa5, sizeof(*this)); | 243 memset(this, 0xa5, sizeof(*this)); |
| 244 Head.msgh_bits = | 244 Head.msgh_bits = |
| 245 MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, MACH_MSG_TYPE_MAKE_SEND_ONCE) | | 245 MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, MACH_MSG_TYPE_PORT_SEND) | |
| 246 MACH_MSGH_BITS_COMPLEX; | 246 MACH_MSGH_BITS_COMPLEX; |
| 247 Head.msgh_size = sizeof(*this); | 247 Head.msgh_size = sizeof(*this); |
| 248 Head.msgh_remote_port = kClientRemotePort; | 248 Head.msgh_remote_port = kClientRemotePort; |
| 249 Head.msgh_local_port = kServerLocalPort; | 249 Head.msgh_local_port = kServerLocalPort; |
| 250 Head.msgh_id = 2403; | 250 Head.msgh_id = 2403; |
| 251 msgh_body.msgh_descriptor_count = 2; | 251 msgh_body.msgh_descriptor_count = 2; |
| 252 InitializeMachMsgPortDescriptor(&thread, kExceptionThreadPort); | 252 InitializeMachMsgPortDescriptor(&thread, kExceptionThreadPort); |
| 253 InitializeMachMsgPortDescriptor(&task, kExceptionTaskPort); | 253 InitializeMachMsgPortDescriptor(&task, kExceptionTaskPort); |
| 254 NDR = NDR_record; | 254 NDR = NDR_record; |
| 255 exception = kExceptionType; | 255 exception = kExceptionType; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 275 mach_msg_port_descriptor_t thread; | 275 mach_msg_port_descriptor_t thread; |
| 276 mach_msg_port_descriptor_t task; | 276 mach_msg_port_descriptor_t task; |
| 277 NDR_record_t NDR; | 277 NDR_record_t NDR; |
| 278 exception_type_t exception; | 278 exception_type_t exception; |
| 279 mach_msg_type_number_t codeCnt; | 279 mach_msg_type_number_t codeCnt; |
| 280 int64_t code[2]; | 280 int64_t code[2]; |
| 281 | 281 |
| 282 void InitializeForTesting() { | 282 void InitializeForTesting() { |
| 283 memset(this, 0xa5, sizeof(*this)); | 283 memset(this, 0xa5, sizeof(*this)); |
| 284 Head.msgh_bits = | 284 Head.msgh_bits = |
| 285 MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, MACH_MSG_TYPE_MAKE_SEND_ONCE) | | 285 MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, MACH_MSG_TYPE_PORT_SEND) | |
| 286 MACH_MSGH_BITS_COMPLEX; | 286 MACH_MSGH_BITS_COMPLEX; |
| 287 Head.msgh_size = sizeof(*this); | 287 Head.msgh_size = sizeof(*this); |
| 288 Head.msgh_remote_port = kClientRemotePort; | 288 Head.msgh_remote_port = kClientRemotePort; |
| 289 Head.msgh_local_port = kServerLocalPort; | 289 Head.msgh_local_port = kServerLocalPort; |
| 290 Head.msgh_id = 2405; | 290 Head.msgh_id = 2405; |
| 291 msgh_body.msgh_descriptor_count = 2; | 291 msgh_body.msgh_descriptor_count = 2; |
| 292 InitializeMachMsgPortDescriptor(&thread, kExceptionThreadPort); | 292 InitializeMachMsgPortDescriptor(&thread, kExceptionThreadPort); |
| 293 InitializeMachMsgPortDescriptor(&task, kExceptionTaskPort); | 293 InitializeMachMsgPortDescriptor(&task, kExceptionTaskPort); |
| 294 NDR = NDR_record; | 294 NDR = NDR_record; |
| 295 exception = kExceptionType; | 295 exception = kExceptionType; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 309 exception_type_t exception; | 309 exception_type_t exception; |
| 310 mach_msg_type_number_t codeCnt; | 310 mach_msg_type_number_t codeCnt; |
| 311 int64_t code[2]; | 311 int64_t code[2]; |
| 312 int flavor; | 312 int flavor; |
| 313 mach_msg_type_number_t old_stateCnt; | 313 mach_msg_type_number_t old_stateCnt; |
| 314 natural_t old_state[THREAD_STATE_MAX]; | 314 natural_t old_state[THREAD_STATE_MAX]; |
| 315 | 315 |
| 316 void InitializeForTesting() { | 316 void InitializeForTesting() { |
| 317 memset(this, 0xa5, sizeof(*this)); | 317 memset(this, 0xa5, sizeof(*this)); |
| 318 Head.msgh_bits = | 318 Head.msgh_bits = |
| 319 MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, MACH_MSG_TYPE_MAKE_SEND_ONCE); | 319 MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, MACH_MSG_TYPE_PORT_SEND); |
| 320 Head.msgh_size = sizeof(*this); | 320 Head.msgh_size = sizeof(*this); |
| 321 Head.msgh_remote_port = kClientRemotePort; | 321 Head.msgh_remote_port = kClientRemotePort; |
| 322 Head.msgh_local_port = kServerLocalPort; | 322 Head.msgh_local_port = kServerLocalPort; |
| 323 Head.msgh_id = 2406; | 323 Head.msgh_id = 2406; |
| 324 NDR = NDR_record; | 324 NDR = NDR_record; |
| 325 exception = kExceptionType; | 325 exception = kExceptionType; |
| 326 codeCnt = 2; | 326 codeCnt = 2; |
| 327 code[0] = kTestMachExceptionCodes[0]; | 327 code[0] = kTestMachExceptionCodes[0]; |
| 328 code[1] = kTestMachExceptionCodes[1]; | 328 code[1] = kTestMachExceptionCodes[1]; |
| 329 flavor = kThreadStateFlavor; | 329 flavor = kThreadStateFlavor; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 349 exception_type_t exception; | 349 exception_type_t exception; |
| 350 mach_msg_type_number_t codeCnt; | 350 mach_msg_type_number_t codeCnt; |
| 351 int64_t code[2]; | 351 int64_t code[2]; |
| 352 int flavor; | 352 int flavor; |
| 353 mach_msg_type_number_t old_stateCnt; | 353 mach_msg_type_number_t old_stateCnt; |
| 354 natural_t old_state[THREAD_STATE_MAX]; | 354 natural_t old_state[THREAD_STATE_MAX]; |
| 355 | 355 |
| 356 void InitializeForTesting() { | 356 void InitializeForTesting() { |
| 357 memset(this, 0xa5, sizeof(*this)); | 357 memset(this, 0xa5, sizeof(*this)); |
| 358 Head.msgh_bits = | 358 Head.msgh_bits = |
| 359 MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, MACH_MSG_TYPE_MAKE_SEND_ONCE) | | 359 MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, MACH_MSG_TYPE_PORT_SEND) | |
| 360 MACH_MSGH_BITS_COMPLEX; | 360 MACH_MSGH_BITS_COMPLEX; |
| 361 Head.msgh_size = sizeof(*this); | 361 Head.msgh_size = sizeof(*this); |
| 362 Head.msgh_remote_port = kClientRemotePort; | 362 Head.msgh_remote_port = kClientRemotePort; |
| 363 Head.msgh_local_port = kServerLocalPort; | 363 Head.msgh_local_port = kServerLocalPort; |
| 364 Head.msgh_id = 2407; | 364 Head.msgh_id = 2407; |
| 365 msgh_body.msgh_descriptor_count = 2; | 365 msgh_body.msgh_descriptor_count = 2; |
| 366 InitializeMachMsgPortDescriptor(&thread, kExceptionThreadPort); | 366 InitializeMachMsgPortDescriptor(&thread, kExceptionThreadPort); |
| 367 InitializeMachMsgPortDescriptor(&task, kExceptionTaskPort); | 367 InitializeMachMsgPortDescriptor(&task, kExceptionTaskPort); |
| 368 NDR = NDR_record; | 368 NDR = NDR_record; |
| 369 exception = kExceptionType; | 369 exception = kExceptionType; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 385 | 385 |
| 386 // InvalidRequest and BadIDErrorReply are used to test that | 386 // InvalidRequest and BadIDErrorReply are used to test that |
| 387 // UniversalMachExcServer deals appropriately with messages that it does not | 387 // UniversalMachExcServer deals appropriately with messages that it does not |
| 388 // understand: messages with an unknown Head.msgh_id. | 388 // understand: messages with an unknown Head.msgh_id. |
| 389 | 389 |
| 390 struct __attribute__((packed, aligned(4))) InvalidRequest | 390 struct __attribute__((packed, aligned(4))) InvalidRequest |
| 391 : public mach_msg_empty_send_t { | 391 : public mach_msg_empty_send_t { |
| 392 void InitializeForTesting(mach_msg_id_t id) { | 392 void InitializeForTesting(mach_msg_id_t id) { |
| 393 memset(this, 0xa5, sizeof(*this)); | 393 memset(this, 0xa5, sizeof(*this)); |
| 394 header.msgh_bits = | 394 header.msgh_bits = |
| 395 MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, MACH_MSG_TYPE_MAKE_SEND_ONCE); | 395 MACH_MSGH_BITS(MACH_MSG_TYPE_PORT_SEND_ONCE, MACH_MSG_TYPE_PORT_SEND); |
| 396 header.msgh_size = sizeof(*this); | 396 header.msgh_size = sizeof(*this); |
| 397 header.msgh_remote_port = kClientRemotePort; | 397 header.msgh_remote_port = kClientRemotePort; |
| 398 header.msgh_local_port = kServerLocalPort; | 398 header.msgh_local_port = kServerLocalPort; |
| 399 header.msgh_id = id; | 399 header.msgh_id = id; |
| 400 } | 400 } |
| 401 }; | 401 }; |
| 402 | 402 |
| 403 struct __attribute__((packed, aligned(4))) BadIDErrorReply | 403 struct __attribute__((packed, aligned(4))) BadIDErrorReply |
| 404 : public mig_reply_error_t { | 404 : public mig_reply_error_t { |
| 405 void InitializeForTesting() { | 405 void InitializeForTesting() { |
| 406 memset(this, 0x5a, sizeof(*this)); | 406 memset(this, 0x5a, sizeof(*this)); |
| 407 RetCode = KERN_FAILURE; | 407 RetCode = KERN_FAILURE; |
| 408 } | 408 } |
| 409 | 409 |
| 410 void Verify(mach_msg_id_t id) { | 410 void Verify(mach_msg_id_t id) { |
| 411 EXPECT_EQ(implicit_cast<mach_msg_bits_t>( | 411 EXPECT_EQ(implicit_cast<mach_msg_bits_t>( |
| 412 MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0)), | 412 MACH_MSGH_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE, 0)), |
| 413 Head.msgh_bits); | 413 Head.msgh_bits); |
| 414 EXPECT_EQ(sizeof(*this), Head.msgh_size); | 414 EXPECT_EQ(sizeof(*this), Head.msgh_size); |
| 415 EXPECT_EQ(kClientRemotePort, Head.msgh_remote_port); | 415 EXPECT_EQ(kClientRemotePort, Head.msgh_remote_port); |
| 416 EXPECT_EQ(kMachPortNull, Head.msgh_local_port); | 416 EXPECT_EQ(kMachPortNull, Head.msgh_local_port); |
| 417 EXPECT_EQ(id + 100, Head.msgh_id); | 417 EXPECT_EQ(id + 100, Head.msgh_id); |
| 418 EXPECT_EQ(0, memcmp(&NDR, &NDR_record, sizeof(NDR))); | 418 EXPECT_EQ(0, memcmp(&NDR, &NDR_record, sizeof(NDR))); |
| 419 EXPECT_EQ(MIG_BAD_ID, RetCode); | 419 EXPECT_EQ(MIG_BAD_ID, RetCode); |
| 420 } | 420 } |
| 421 }; | 421 }; |
| 422 | 422 |
| (...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1166 | 1166 |
| 1167 EXPECT_EQ(test_data.kr, | 1167 EXPECT_EQ(test_data.kr, |
| 1168 ExcServerSuccessfulReturnValue(test_data.behavior, | 1168 ExcServerSuccessfulReturnValue(test_data.behavior, |
| 1169 test_data.set_thread_state)); | 1169 test_data.set_thread_state)); |
| 1170 } | 1170 } |
| 1171 } | 1171 } |
| 1172 | 1172 |
| 1173 } // namespace | 1173 } // namespace |
| 1174 } // namespace test | 1174 } // namespace test |
| 1175 } // namespace crashpad | 1175 } // namespace crashpad |
| OLD | NEW |