diff options
Diffstat (limited to 'llvm/lib')
5 files changed, 20 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp index a81d56e9618..b5370e53f29 100644 --- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp @@ -611,6 +611,8 @@ static CPUType mapArchToCVCPUType(Triple::ArchType Type) { return CPUType::X64; case Triple::ArchType::thumb: return CPUType::Thumb; + case Triple::ArchType::aarch64: + return CPUType::ARM64; default: report_fatal_error("target architecture doesn't map to a CodeView " "CPUType"); diff --git a/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp b/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp index 9f7dcb3fe1c..91b1481f5ef 100644 --- a/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp @@ -35,7 +35,9 @@ using namespace llvm; #include "AArch64GenRegisterInfo.inc" AArch64RegisterInfo::AArch64RegisterInfo(const Triple &TT) - : AArch64GenRegisterInfo(AArch64::LR), TT(TT) {} + : AArch64GenRegisterInfo(AArch64::LR), TT(TT) { + AArch64_MC::initLLVMToCVRegMapping(this); +} const MCPhysReg * AArch64RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const { diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp index 1ab8f836b58..2613d242a3b 100644 --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp @@ -106,4 +106,6 @@ AArch64MCAsmInfoCOFF::AArch64MCAsmInfoCOFF() { PrivateGlobalPrefix = ".L"; PrivateLabelPrefix = ".L"; AlignmentIsInBytes = false; + SupportsDebugInformation = true; + ExceptionsType = ExceptionHandling::WinEH; } diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp index a2555496cdb..d3c7dc60c4d 100644 --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp @@ -49,9 +49,18 @@ createAArch64MCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS) { return createAArch64MCSubtargetInfoImpl(TT, CPU, FS); } +void AArch64_MC::initLLVMToCVRegMapping(MCRegisterInfo *MRI) { + for (unsigned Reg = AArch64::NoRegister + 1; + Reg < AArch64::NUM_TARGET_REGS; ++Reg) { + unsigned CV = MRI->getEncodingValue(Reg); + MRI->mapLLVMRegToCVReg(Reg, CV); + } +} + static MCRegisterInfo *createAArch64MCRegisterInfo(const Triple &Triple) { MCRegisterInfo *X = new MCRegisterInfo(); InitAArch64MCRegisterInfo(X, AArch64::LR); + AArch64_MC::initLLVMToCVRegMapping(X); return X; } diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.h b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.h index 1404926b812..f7248faa5d0 100644 --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.h +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.h @@ -70,6 +70,10 @@ MCTargetStreamer *createAArch64AsmTargetStreamer(MCStreamer &S, MCTargetStreamer *createAArch64ObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI); +namespace AArch64_MC { +void initLLVMToCVRegMapping(MCRegisterInfo *MRI); +} + } // End llvm namespace // Defines symbolic names for AArch64 registers. This defines a mapping from |

