1 //===-- AArch66.h ---------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "ABIAArch64.h" 10 #ifdef LLDB_ENABLE_ALL 11 #include "ABIMacOSX_arm64.h" 12 #endif // LLDB_ENABLE_ALL 13 #include "ABISysV_arm64.h" 14 #include "Utility/ARM64_DWARF_Registers.h" 15 #include "lldb/Core/PluginManager.h" 16 17 LLDB_PLUGIN_DEFINE(ABIAArch64) 18 19 void ABIAArch64::Initialize() { 20 ABISysV_arm64::Initialize(); 21 #ifdef LLDB_ENABLE_ALL 22 ABIMacOSX_arm64::Initialize(); 23 #endif // LLDB_ENABLE_ALL 24 } 25 26 void ABIAArch64::Terminate() { 27 ABISysV_arm64::Terminate(); 28 #ifdef LLDB_ENABLE_ALL 29 ABIMacOSX_arm64::Terminate(); 30 #endif // LLDB_ENABLE_ALL 31 } 32 33 std::pair<uint32_t, uint32_t> 34 ABIAArch64::GetEHAndDWARFNums(llvm::StringRef name) { 35 if (name == "pc") 36 return {LLDB_INVALID_REGNUM, arm64_dwarf::pc}; 37 if (name == "cpsr") 38 return {LLDB_INVALID_REGNUM, arm64_dwarf::cpsr}; 39 return MCBasedABI::GetEHAndDWARFNums(name); 40 } 41 42 std::string ABIAArch64::GetMCName(std::string reg) { 43 MapRegisterName(reg, "v", "q"); 44 MapRegisterName(reg, "x29", "fp"); 45 MapRegisterName(reg, "x30", "lr"); 46 return reg; 47 } 48 uint32_t ABIAArch64::GetGenericNum(llvm::StringRef name) { 49 return llvm::StringSwitch<uint32_t>(name) 50 .Case("pc", LLDB_REGNUM_GENERIC_PC) 51 .Case("lr", LLDB_REGNUM_GENERIC_RA) 52 .Case("sp", LLDB_REGNUM_GENERIC_SP) 53 .Case("fp", LLDB_REGNUM_GENERIC_FP) 54 .Case("cpsr", LLDB_REGNUM_GENERIC_FLAGS) 55 .Case("x0", LLDB_REGNUM_GENERIC_ARG1) 56 .Case("x1", LLDB_REGNUM_GENERIC_ARG2) 57 .Case("x2", LLDB_REGNUM_GENERIC_ARG3) 58 .Case("x3", LLDB_REGNUM_GENERIC_ARG4) 59 .Case("x4", LLDB_REGNUM_GENERIC_ARG5) 60 .Case("x5", LLDB_REGNUM_GENERIC_ARG6) 61 .Case("x6", LLDB_REGNUM_GENERIC_ARG7) 62 .Case("x7", LLDB_REGNUM_GENERIC_ARG8) 63 .Default(LLDB_INVALID_REGNUM); 64 } 65