| 1 | //===-- ABIAArch64Test.cpp ------------------------------------------------===// |
| 2 | |
| 3 | // |
| 4 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| 5 | // See https://llvm.org/LICENSE.txt for license information. |
| 6 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | |
| 10 | #include "Plugins/ABI/AArch64/ABIMacOSX_arm64.h" |
| 11 | #include "Plugins/ABI/AArch64/ABISysV_arm64.h" |
| 12 | #include "Utility/ARM64_DWARF_Registers.h" |
| 13 | #include "Utility/ARM64_ehframe_Registers.h" |
| 14 | #include "lldb/Target/DynamicRegisterInfo.h" |
| 15 | #include "lldb/Utility/ArchSpec.h" |
| 16 | #include "llvm/Support/ManagedStatic.h" |
| 17 | #include "llvm/Support/TargetSelect.h" |
| 18 | #include "gtest/gtest.h" |
| 19 | #include <vector> |
| 20 | |
| 21 | using namespace lldb_private; |
| 22 | using namespace lldb; |
| 23 | |
| 24 | class ABIAArch64TestFixture : public testing::TestWithParam<llvm::StringRef> { |
| 25 | public: |
| 26 | static void SetUpTestCase(); |
| 27 | static void TearDownTestCase(); |
| 28 | |
| 29 | // virtual void SetUp() override { } |
| 30 | // virtual void TearDown() override { } |
| 31 | |
| 32 | protected: |
| 33 | }; |
| 34 | |
| 35 | void ABIAArch64TestFixture::SetUpTestCase() { |
| 36 | LLVMInitializeAArch64TargetInfo(); |
| 37 | LLVMInitializeAArch64TargetMC(); |
| 38 | ABISysV_arm64::Initialize(); |
| 39 | ABIMacOSX_arm64::Initialize(); |
| 40 | } |
| 41 | |
| 42 | void ABIAArch64TestFixture::TearDownTestCase() { |
| 43 | ABISysV_arm64::Terminate(); |
| 44 | ABIMacOSX_arm64::Terminate(); |
| 45 | llvm::llvm_shutdown(); |
| 46 | } |
| 47 | |
| 48 | TEST_P(ABIAArch64TestFixture, AugmentRegisterInfo) { |
| 49 | ABISP abi_sp = ABI::FindPlugin(process_sp: ProcessSP(), arch: ArchSpec(GetParam())); |
| 50 | ASSERT_TRUE(abi_sp); |
| 51 | using Register = DynamicRegisterInfo::Register; |
| 52 | |
| 53 | Register pc; |
| 54 | pc.name = ConstString("pc" ); |
| 55 | pc.alt_name = ConstString(); |
| 56 | pc.set_name = ConstString("GPR" ); |
| 57 | std::vector<Register> regs{pc}; |
| 58 | |
| 59 | abi_sp->AugmentRegisterInfo(regs); |
| 60 | |
| 61 | ASSERT_EQ(regs.size(), 1U); |
| 62 | Register new_pc = regs[0]; |
| 63 | EXPECT_EQ(new_pc.name, pc.name); |
| 64 | EXPECT_EQ(new_pc.set_name, pc.set_name); |
| 65 | EXPECT_EQ(new_pc.regnum_ehframe, arm64_ehframe::pc); |
| 66 | EXPECT_EQ(new_pc.regnum_dwarf, arm64_dwarf::pc); |
| 67 | } |
| 68 | |
| 69 | INSTANTIATE_TEST_SUITE_P(ABIAArch64Tests, ABIAArch64TestFixture, |
| 70 | testing::Values("aarch64-pc-linux" , |
| 71 | "arm64-apple-macosx" )); |
| 72 | |