From abfc89bb9b7027828d65dbbd0b1aaa66278bcfed Mon Sep 17 00:00:00 2001 From: Mark Mentovai Date: Tue, 1 Sep 2020 01:16:21 -0400 Subject: [PATCH] mac-arm64: Set expectations for tests that crash via __builtin_trap __builtin_trap uses ud2 on x86_64, producing a SIGILL. On arm64, it uses brk #1, producing a SIGTRAP. Test expectations must be adjusted accordingly. Bug: crashpad:345 Test: crashpad_snapshot_test MachOImageAnnotationsReader.CrashModuleInitialization, crashpad_util_test ExcServerVariants.*,ExceptionPorts.* Change-Id: I22e75b7b48b8887031b1d95f1cea8a09733daf49 Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/2386464 Commit-Queue: Mark Mentovai Reviewed-by: Robert Sesek --- .../mac/mach_o_image_annotations_reader_test.cc | 4 +--- util/mach/exc_server_variants_test.cc | 3 +-- util/mach/exception_ports_test.cc | 14 ++++++++++---- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/snapshot/mac/mach_o_image_annotations_reader_test.cc b/snapshot/mac/mach_o_image_annotations_reader_test.cc index 2617ae24..aea885a9 100644 --- a/snapshot/mac/mach_o_image_annotations_reader_test.cc +++ b/snapshot/mac/mach_o_image_annotations_reader_test.cc @@ -112,9 +112,7 @@ class TestMachOImageAnnotationsReader final break; case kCrashModuleInitialization: - // This crash is triggered by __builtin_trap(), which shows up as - // SIGILL. - SetExpectedChildTermination(kTerminationSignal, SIGILL); + SetExpectedChildTerminationBuiltinTrap(); break; case kCrashDyld: diff --git a/util/mach/exc_server_variants_test.cc b/util/mach/exc_server_variants_test.cc index 764a0a91..38d977f5 100644 --- a/util/mach/exc_server_variants_test.cc +++ b/util/mach/exc_server_variants_test.cc @@ -975,8 +975,7 @@ class TestExcServerVariants : public MachMultiprocess, flavor_(flavor), state_count_(state_count), handled_(false) { - // This is how the __builtin_trap() in MachMultiprocessChild() appears. - SetExpectedChildTermination(kTerminationSignal, SIGILL); + SetExpectedChildTerminationBuiltinTrap(); } // UniversalMachExcServer::Interface: diff --git a/util/mach/exception_ports_test.cc b/util/mach/exception_ports_test.cc index 6dbc04ed..ef798086 100644 --- a/util/mach/exception_ports_test.cc +++ b/util/mach/exception_ports_test.cc @@ -25,6 +25,7 @@ #include "base/macros.h" #include "base/notreached.h" #include "base/strings/stringprintf.h" +#include "build/build_config.h" #include "gtest/gtest.h" #include "test/mac/mach_errors.h" #include "test/mac/mach_multiprocess.h" @@ -145,8 +146,7 @@ class TestExceptionPorts : public MachMultiprocess, who_crashes_(who_crashes), handled_(false) { if (who_crashes_ != kNobodyCrashes) { - // This is how the __builtin_trap() in Child::Crash() appears. - SetExpectedChildTermination(kTerminationSignal, SIGILL); + SetExpectedChildTerminationBuiltinTrap(); } } @@ -205,8 +205,14 @@ class TestExceptionPorts : public MachMultiprocess, int signal; ExcCrashRecoverOriginalException(code[0], nullptr, &signal); - // The child crashed with __builtin_trap(), which shows up as SIGILL. - EXPECT_EQ(signal, SIGILL); +#if defined(ARCH_CPU_X86_FAMILY) + constexpr int kBuiltinTrapSignal = SIGILL; +#elif defined(ARCH_CPU_ARM64) + constexpr int kBuiltinTrapSignal = SIGTRAP; +#else +#error Port +#endif + EXPECT_EQ(signal, kBuiltinTrapSignal); } EXPECT_EQ(AuditPIDFromMachMessageTrailer(trailer), 0);