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 |