| Index: client/capture_context_mac_test.cc
|
| diff --git a/client/capture_context_mac_test.cc b/client/capture_context_mac_test.cc
|
| index 5b0b643e3ef69b0a80b53d1a9832f091bd95dd0f..436ac5ada9103df948b60acd231ab9d27ebb6d9e 100644
|
| --- a/client/capture_context_mac_test.cc
|
| +++ b/client/capture_context_mac_test.cc
|
| @@ -32,13 +32,13 @@ namespace {
|
| // fatal gtest assertions. For other fields, where it’s possible to reason about
|
| // their validity based solely on their contents, sanity-checks via nonfatal
|
| // gtest assertions.
|
| -void SanityCheckContext(NativeCPUContext* context) {
|
| +void SanityCheckContext(const NativeCPUContext& context) {
|
| #if defined(ARCH_CPU_X86)
|
| - ASSERT_EQ(x86_THREAD_STATE32, context->tsh.flavor);
|
| - ASSERT_EQ(implicit_cast<int>(x86_THREAD_STATE32_COUNT), context->tsh.count);
|
| + ASSERT_EQ(x86_THREAD_STATE32, context.tsh.flavor);
|
| + ASSERT_EQ(implicit_cast<int>(x86_THREAD_STATE32_COUNT), context.tsh.count);
|
| #elif defined(ARCH_CPU_X86_64)
|
| - ASSERT_EQ(x86_THREAD_STATE64, context->tsh.flavor);
|
| - ASSERT_EQ(implicit_cast<int>(x86_THREAD_STATE64_COUNT), context->tsh.count);
|
| + ASSERT_EQ(x86_THREAD_STATE64, context.tsh.flavor);
|
| + ASSERT_EQ(implicit_cast<int>(x86_THREAD_STATE64_COUNT), context.tsh.count);
|
| #endif
|
|
|
| #if defined(ARCH_CPU_X86_FAMILY)
|
| @@ -47,46 +47,46 @@ void SanityCheckContext(NativeCPUContext* context) {
|
| // that the high bits are all clear.
|
| //
|
| // Many bit positions in the flags register are reserved and will always read
|
| - // a known value. Most reservd bits are always 0, but bit 1 is always 1. Check
|
| - // that the reserved bits are all set to their expected values. Note that the
|
| - // set of reserved bits may be relaxed over time with newer CPUs, and that
|
| - // this test may need to be changed to reflect these developments. The current
|
| - // set of reserved bits are 1, 3, 5, 15, and 22 and higher. See Intel Software
|
| - // Developer’s Manual, Volume 1: Basic Architecture (253665-051), 3.4.3
|
| - // “EFLAGS Register”, and AMD Architecture Programmer’s Manual, Volume 2:
|
| - // System Programming (24593-3.24), 3.1.6 “RFLAGS Register”.
|
| + // a known value. Most reserved bits are always 0, but bit 1 is always 1.
|
| + // Check that the reserved bits are all set to their expected values. Note
|
| + // that the set of reserved bits may be relaxed over time with newer CPUs, and
|
| + // that this test may need to be changed to reflect these developments. The
|
| + // current set of reserved bits are 1, 3, 5, 15, and 22 and higher. See Intel
|
| + // Software Developer’s Manual, Volume 1: Basic Architecture (253665-051),
|
| + // 3.4.3 “EFLAGS Register”, and AMD Architecture Programmer’s Manual, Volume
|
| + // 2: System Programming (24593-3.24), 3.1.6 “RFLAGS Register”.
|
| #if defined(ARCH_CPU_X86)
|
| - EXPECT_EQ(0u, context->uts.ts32.__cs & ~0xffff);
|
| - EXPECT_EQ(0u, context->uts.ts32.__ds & ~0xffff);
|
| - EXPECT_EQ(0u, context->uts.ts32.__es & ~0xffff);
|
| - EXPECT_EQ(0u, context->uts.ts32.__fs & ~0xffff);
|
| - EXPECT_EQ(0u, context->uts.ts32.__gs & ~0xffff);
|
| - EXPECT_EQ(0u, context->uts.ts32.__ss & ~0xffff);
|
| - EXPECT_EQ(2u, context->uts.ts32.__eflags & 0xffc0802a);
|
| + EXPECT_EQ(0u, context.uts.ts32.__cs & ~0xffff);
|
| + EXPECT_EQ(0u, context.uts.ts32.__ds & ~0xffff);
|
| + EXPECT_EQ(0u, context.uts.ts32.__es & ~0xffff);
|
| + EXPECT_EQ(0u, context.uts.ts32.__fs & ~0xffff);
|
| + EXPECT_EQ(0u, context.uts.ts32.__gs & ~0xffff);
|
| + EXPECT_EQ(0u, context.uts.ts32.__ss & ~0xffff);
|
| + EXPECT_EQ(2u, context.uts.ts32.__eflags & 0xffc0802a);
|
| #elif defined(ARCH_CPU_X86_64)
|
| - EXPECT_EQ(0u, context->uts.ts64.__cs & ~UINT64_C(0xffff));
|
| - EXPECT_EQ(0u, context->uts.ts64.__fs & ~UINT64_C(0xffff));
|
| - EXPECT_EQ(0u, context->uts.ts64.__gs & ~UINT64_C(0xffff));
|
| - EXPECT_EQ(2u, context->uts.ts64.__rflags & UINT64_C(0xffffffffffc0802a));
|
| + EXPECT_EQ(0u, context.uts.ts64.__cs & ~UINT64_C(0xffff));
|
| + EXPECT_EQ(0u, context.uts.ts64.__fs & ~UINT64_C(0xffff));
|
| + EXPECT_EQ(0u, context.uts.ts64.__gs & ~UINT64_C(0xffff));
|
| + EXPECT_EQ(2u, context.uts.ts64.__rflags & UINT64_C(0xffffffffffc0802a));
|
| #endif
|
| #endif
|
| }
|
|
|
| // A CPU-independent function to return the program counter.
|
| -uintptr_t ProgramCounterFromContext(NativeCPUContext* context) {
|
| +uintptr_t ProgramCounterFromContext(const NativeCPUContext& context) {
|
| #if defined(ARCH_CPU_X86)
|
| - return context->uts.ts32.__eip;
|
| + return context.uts.ts32.__eip;
|
| #elif defined(ARCH_CPU_X86_64)
|
| - return context->uts.ts64.__rip;
|
| + return context.uts.ts64.__rip;
|
| #endif
|
| }
|
|
|
| // A CPU-independent function to return the stack pointer.
|
| -uintptr_t StackPointerFromContext(NativeCPUContext* context) {
|
| +uintptr_t StackPointerFromContext(const NativeCPUContext& context) {
|
| #if defined(ARCH_CPU_X86)
|
| - return context->uts.ts32.__esp;
|
| + return context.uts.ts32.__esp;
|
| #elif defined(ARCH_CPU_X86_64)
|
| - return context->uts.ts64.__rsp;
|
| + return context.uts.ts64.__rsp;
|
| #endif
|
| }
|
|
|
| @@ -96,13 +96,13 @@ void TestCaptureContext() {
|
|
|
| {
|
| SCOPED_TRACE("context_1");
|
| - ASSERT_NO_FATAL_FAILURE(SanityCheckContext(&context_1));
|
| + ASSERT_NO_FATAL_FAILURE(SanityCheckContext(context_1));
|
| }
|
|
|
| // The program counter reference value is this function’s address. The
|
| // captured program counter should be slightly greater than or equal to the
|
| // reference program counter.
|
| - uintptr_t pc = ProgramCounterFromContext(&context_1);
|
| + uintptr_t pc = ProgramCounterFromContext(context_1);
|
| #if !__has_feature(address_sanitizer)
|
| // AddressSanitizer can cause enough code bloat that the “nearby” check would
|
| // likely fail.
|
| @@ -125,7 +125,7 @@ void TestCaptureContext() {
|
| reinterpret_cast<uintptr_t>(&context_2)),
|
| std::min(reinterpret_cast<uintptr_t>(&pc),
|
| reinterpret_cast<uintptr_t>(&sp)));
|
| - sp = StackPointerFromContext(&context_1);
|
| + sp = StackPointerFromContext(context_1);
|
| EXPECT_LT(kReferenceSP - sp, 512u);
|
|
|
| // Capture the context again, expecting that the stack pointer stays the same
|
| @@ -136,11 +136,11 @@ void TestCaptureContext() {
|
|
|
| {
|
| SCOPED_TRACE("context_2");
|
| - ASSERT_NO_FATAL_FAILURE(SanityCheckContext(&context_2));
|
| + ASSERT_NO_FATAL_FAILURE(SanityCheckContext(context_2));
|
| }
|
|
|
| - EXPECT_EQ(sp, StackPointerFromContext(&context_2));
|
| - EXPECT_GT(ProgramCounterFromContext(&context_2), pc);
|
| + EXPECT_EQ(sp, StackPointerFromContext(context_2));
|
| + EXPECT_GT(ProgramCounterFromContext(context_2), pc);
|
| }
|
|
|
| TEST(CaptureContextMac, CaptureContext) {
|
|
|