| Index: util/mach/exc_server_variants_test.cc
|
| diff --git a/util/mach/exc_server_variants_test.cc b/util/mach/exc_server_variants_test.cc
|
| index bdb7e47ab587382fce49d2724cb2818074ce5aaf..c5450f09e12580e6a421ee797a4f5633c77f8ac0 100644
|
| --- a/util/mach/exc_server_variants_test.cc
|
| +++ b/util/mach/exc_server_variants_test.cc
|
| @@ -506,13 +506,14 @@ MATCHER_P2(AreExceptionCodes, code_0, code_1, "") {
|
|
|
| // Matcher for ThreadState and ConstThreadState, testing that *state_count is
|
| // present and matches the specified value. If 0 is specified for the count,
|
| -// state must be NULL (not present), otherwise state must be non-NULL (present).
|
| +// |state| must be nullptr (not present), otherwise |state| must not be nullptr
|
| +// (present).
|
| MATCHER_P(IsThreadStateCount, state_count, "") {
|
| if (!arg) {
|
| return false;
|
| }
|
| if (!arg->state_count) {
|
| - *result_listener << "state_count NULL";
|
| + *result_listener << "state_count nullptr";
|
| return false;
|
| }
|
| if (*(arg->state_count) != state_count) {
|
| @@ -521,12 +522,12 @@ MATCHER_P(IsThreadStateCount, state_count, "") {
|
| }
|
| if (state_count) {
|
| if (!arg->state) {
|
| - *result_listener << "*state_count " << state_count << ", state NULL";
|
| + *result_listener << "*state_count " << state_count << ", state nullptr";
|
| return false;
|
| }
|
| } else {
|
| if (arg->state) {
|
| - *result_listener << "*state_count 0, state non-NULL (" << arg->state
|
| + *result_listener << "*state_count 0, state non-nullptr (" << arg->state
|
| << ")";
|
| return false;
|
| }
|
| @@ -913,7 +914,7 @@ class TestExcServerVariants : public UniversalMachExcServer,
|
| // function returning type void, and the interface dictates otherwise here.
|
| if (exception == EXC_CRASH && code_count >= 1) {
|
| int signal;
|
| - ExcCrashRecoverOriginalException(code[0], NULL, &signal);
|
| + ExcCrashRecoverOriginalException(code[0], nullptr, &signal);
|
| SetExpectedChildTermination(kTerminationSignal, signal);
|
| }
|
|
|
| @@ -921,16 +922,16 @@ class TestExcServerVariants : public UniversalMachExcServer,
|
| if (has_state) {
|
| EXPECT_EQ(flavor_, *flavor);
|
| EXPECT_EQ(state_count_, old_state_count);
|
| - EXPECT_NE(static_cast<const natural_t*>(NULL), old_state);
|
| + EXPECT_NE(nullptr, old_state);
|
| EXPECT_EQ(static_cast<mach_msg_type_number_t>(THREAD_STATE_MAX),
|
| *new_state_count);
|
| - EXPECT_NE(static_cast<natural_t*>(NULL), new_state);
|
| + EXPECT_NE(nullptr, new_state);
|
| } else {
|
| EXPECT_EQ(THREAD_STATE_NONE, *flavor);
|
| EXPECT_EQ(0u, old_state_count);
|
| - EXPECT_EQ(NULL, old_state);
|
| + EXPECT_EQ(nullptr, old_state);
|
| EXPECT_EQ(0u, *new_state_count);
|
| - EXPECT_EQ(NULL, new_state);
|
| + EXPECT_EQ(nullptr, new_state);
|
| }
|
|
|
| return ExcServerSuccessfulReturnValue(behavior, false);
|
| @@ -1022,43 +1023,43 @@ TEST(ExcServerVariants, ThreadStates) {
|
| };
|
| const TestData test_data[] = {
|
| #if defined(ARCH_CPU_X86_FAMILY)
|
| - // For the x86 family, exception handlers can only properly receive the
|
| - // thread, float, and exception state flavors. There’s a bug in the kernel
|
| - // that causes it to call thread_getstatus() (a wrapper for the more
|
| - // familiar thread_get_state()) with an incorrect state buffer size
|
| - // parameter when delivering an exception. 10.9.4
|
| - // xnu-2422.110.17/osfmk/kern/exception.c exception_deliver() uses the
|
| - // _MachineStateCount[] array indexed by the flavor number to obtain the
|
| - // buffer size. 10.9.4 xnu-2422.110.17/osfmk/i386/pcb.c contains the
|
| - // definition of this array for the x86 family. The slots corresponding to
|
| - // thread, float, and exception state flavors in both native-width (32- and
|
| - // 64-bit) and universal are correct, but the remaining elements in the
|
| - // array are not. This includes elements that would correspond to debug and
|
| - // AVX state flavors, so these cannot be tested here.
|
| - //
|
| - // When machine_thread_get_state() (the machine-specific implementation of
|
| - // thread_get_state()) encounters an undersized buffer as reported by the
|
| - // buffer size parameter, it returns KERN_INVALID_ARGUMENT, which causes
|
| - // exception_deliver() to not actually deliver the exception and instead
|
| - // return that error code to exception_triage() as well.
|
| - //
|
| - // This bug is filed as radar 18312067.
|
| - //
|
| - // Additionaly, the AVX state flavors are also not tested because they’re
|
| - // not available on all CPUs and OS versions.
|
| + // For the x86 family, exception handlers can only properly receive the
|
| + // thread, float, and exception state flavors. There’s a bug in the kernel
|
| + // that causes it to call thread_getstatus() (a wrapper for the more
|
| + // familiar thread_get_state()) with an incorrect state buffer size
|
| + // parameter when delivering an exception. 10.9.4
|
| + // xnu-2422.110.17/osfmk/kern/exception.c exception_deliver() uses the
|
| + // _MachineStateCount[] array indexed by the flavor number to obtain the
|
| + // buffer size. 10.9.4 xnu-2422.110.17/osfmk/i386/pcb.c contains the
|
| + // definition of this array for the x86 family. The slots corresponding to
|
| + // thread, float, and exception state flavors in both native-width (32-
|
| + // and 64-bit) and universal are correct, but the remaining elements in
|
| + // the array are not. This includes elements that would correspond to
|
| + // debug and AVX state flavors, so these cannot be tested here.
|
| + //
|
| + // When machine_thread_get_state() (the machine-specific implementation of
|
| + // thread_get_state()) encounters an undersized buffer as reported by the
|
| + // buffer size parameter, it returns KERN_INVALID_ARGUMENT, which causes
|
| + // exception_deliver() to not actually deliver the exception and instead
|
| + // return that error code to exception_triage() as well.
|
| + //
|
| + // This bug is filed as radar 18312067.
|
| + //
|
| + // Additionaly, the AVX state flavors are also not tested because they’re
|
| + // not available on all CPUs and OS versions.
|
| #if defined(ARCH_CPU_X86)
|
| - {x86_THREAD_STATE32, x86_THREAD_STATE32_COUNT},
|
| - {x86_FLOAT_STATE32, x86_FLOAT_STATE32_COUNT},
|
| - {x86_EXCEPTION_STATE32, x86_EXCEPTION_STATE32_COUNT},
|
| + {x86_THREAD_STATE32, x86_THREAD_STATE32_COUNT},
|
| + {x86_FLOAT_STATE32, x86_FLOAT_STATE32_COUNT},
|
| + {x86_EXCEPTION_STATE32, x86_EXCEPTION_STATE32_COUNT},
|
| #endif
|
| #if defined(ARCH_CPU_X86_64)
|
| - {x86_THREAD_STATE64, x86_THREAD_STATE64_COUNT},
|
| - {x86_FLOAT_STATE64, x86_FLOAT_STATE64_COUNT},
|
| - {x86_EXCEPTION_STATE64, x86_EXCEPTION_STATE64_COUNT},
|
| + {x86_THREAD_STATE64, x86_THREAD_STATE64_COUNT},
|
| + {x86_FLOAT_STATE64, x86_FLOAT_STATE64_COUNT},
|
| + {x86_EXCEPTION_STATE64, x86_EXCEPTION_STATE64_COUNT},
|
| #endif
|
| - {x86_THREAD_STATE, x86_THREAD_STATE_COUNT},
|
| - {x86_FLOAT_STATE, x86_FLOAT_STATE_COUNT},
|
| - {x86_EXCEPTION_STATE, x86_EXCEPTION_STATE_COUNT},
|
| + {x86_THREAD_STATE, x86_THREAD_STATE_COUNT},
|
| + {x86_FLOAT_STATE, x86_FLOAT_STATE_COUNT},
|
| + {x86_EXCEPTION_STATE, x86_EXCEPTION_STATE_COUNT},
|
| #else
|
| #error Port this test to your CPU architecture.
|
| #endif
|
| @@ -1085,30 +1086,27 @@ TEST(ExcServerVariants, ExcCrashRecoverOriginalException) {
|
| int signal;
|
| };
|
| const TestData kTestData[] = {
|
| - {0xb100001, EXC_BAD_ACCESS, KERN_INVALID_ADDRESS, SIGSEGV},
|
| - {0xb100002, EXC_BAD_ACCESS, KERN_PROTECTION_FAILURE, SIGSEGV},
|
| - {0xa100002, EXC_BAD_ACCESS, KERN_PROTECTION_FAILURE, SIGBUS},
|
| - {0x4200001, EXC_BAD_INSTRUCTION, 1, SIGILL},
|
| - {0x8300001, EXC_ARITHMETIC, 1, SIGFPE},
|
| - {0x5600002, EXC_BREAKPOINT, 2, SIGTRAP},
|
| - {0x3000000, 0, 0, SIGQUIT},
|
| - {0x6000000, 0, 0, SIGABRT},
|
| - {0xc000000, 0, 0, SIGSYS},
|
| - {0, 0, 0, 0},
|
| + {0xb100001, EXC_BAD_ACCESS, KERN_INVALID_ADDRESS, SIGSEGV},
|
| + {0xb100002, EXC_BAD_ACCESS, KERN_PROTECTION_FAILURE, SIGSEGV},
|
| + {0xa100002, EXC_BAD_ACCESS, KERN_PROTECTION_FAILURE, SIGBUS},
|
| + {0x4200001, EXC_BAD_INSTRUCTION, 1, SIGILL},
|
| + {0x8300001, EXC_ARITHMETIC, 1, SIGFPE},
|
| + {0x5600002, EXC_BREAKPOINT, 2, SIGTRAP},
|
| + {0x3000000, 0, 0, SIGQUIT},
|
| + {0x6000000, 0, 0, SIGABRT},
|
| + {0xc000000, 0, 0, SIGSYS},
|
| + {0, 0, 0, 0},
|
| };
|
|
|
| for (size_t index = 0; index < arraysize(kTestData); ++index) {
|
| const TestData& test_data = kTestData[index];
|
| - SCOPED_TRACE(base::StringPrintf("index %zu, code_0 0x%llx",
|
| - index,
|
| - test_data.code_0));
|
| + SCOPED_TRACE(base::StringPrintf(
|
| + "index %zu, code_0 0x%llx", index, test_data.code_0));
|
|
|
| mach_exception_code_t original_code_0;
|
| int signal;
|
| - exception_type_t exception =
|
| - ExcCrashRecoverOriginalException(test_data.code_0,
|
| - &original_code_0,
|
| - &signal);
|
| + exception_type_t exception = ExcCrashRecoverOriginalException(
|
| + test_data.code_0, &original_code_0, &signal);
|
|
|
| EXPECT_EQ(test_data.exception, exception);
|
| EXPECT_EQ(test_data.original_code_0, original_code_0);
|
| @@ -1119,18 +1117,20 @@ TEST(ExcServerVariants, ExcCrashRecoverOriginalException) {
|
| // optional arguments.
|
| static_assert(arraysize(kTestData) >= 1, "must have something to test");
|
| const TestData& test_data = kTestData[0];
|
| - EXPECT_EQ(test_data.exception,
|
| - ExcCrashRecoverOriginalException(test_data.code_0, NULL, NULL));
|
| + EXPECT_EQ(
|
| + test_data.exception,
|
| + ExcCrashRecoverOriginalException(test_data.code_0, nullptr, nullptr));
|
|
|
| mach_exception_code_t original_code_0;
|
| EXPECT_EQ(test_data.exception,
|
| ExcCrashRecoverOriginalException(
|
| - test_data.code_0, &original_code_0, NULL));
|
| + test_data.code_0, &original_code_0, nullptr));
|
| EXPECT_EQ(test_data.original_code_0, original_code_0);
|
|
|
| int signal;
|
| - EXPECT_EQ(test_data.exception,
|
| - ExcCrashRecoverOriginalException(test_data.code_0, NULL, &signal));
|
| + EXPECT_EQ(
|
| + test_data.exception,
|
| + ExcCrashRecoverOriginalException(test_data.code_0, nullptr, &signal));
|
| EXPECT_EQ(test_data.signal, signal);
|
| }
|
|
|
|
|