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 <mark@chromium.org>
Reviewed-by: Robert Sesek <rsesek@chromium.org>
This commit is contained in:
Mark Mentovai 2020-09-01 01:16:21 -04:00 committed by Commit Bot
parent e0d8a0aa01
commit abfc89bb9b
3 changed files with 12 additions and 9 deletions

View File

@ -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:

View File

@ -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:

View File

@ -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);