166702629SJames Henderson //===--- unittests/DebugInfo/DWARF/DwarfUtils.cpp ---------------*- C++ -*-===// 266702629SJames Henderson // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 666702629SJames Henderson // 766702629SJames Henderson //===----------------------------------------------------------------------===// 866702629SJames Henderson 966702629SJames Henderson #include "DwarfUtils.h" 10432a3883SNico Weber #include "llvm/Config/llvm-config.h" 1189b57061SReid Kleckner #include "llvm/MC/TargetRegistry.h" 1266702629SJames Henderson #include "llvm/Support/TargetSelect.h" 13*d768bf99SArchibald Elliott #include "llvm/TargetParser/Host.h" 1462c7f035SArchibald Elliott #include "llvm/TargetParser/Triple.h" 1566702629SJames Henderson 1666702629SJames Henderson using namespace llvm; 1766702629SJames Henderson initLLVMIfNeeded()1866702629SJames Hendersonstatic void initLLVMIfNeeded() { 1966702629SJames Henderson static bool gInitialized = false; 2066702629SJames Henderson if (!gInitialized) { 2166702629SJames Henderson gInitialized = true; 2266702629SJames Henderson InitializeAllTargets(); 2366702629SJames Henderson InitializeAllTargetMCs(); 2466702629SJames Henderson InitializeAllAsmPrinters(); 2566702629SJames Henderson InitializeAllAsmParsers(); 2666702629SJames Henderson } 2766702629SJames Henderson } 2866702629SJames Henderson getNormalizedDefaultTargetTriple()29552fda83SJason LiuTriple llvm::dwarf::utils::getNormalizedDefaultTargetTriple() { 30552fda83SJason Liu Triple T(Triple::normalize(sys::getDefaultTargetTriple())); 3166702629SJames Henderson 32552fda83SJason Liu return T; 33552fda83SJason Liu } 34552fda83SJason Liu getDefaultTargetTripleForAddrSize(uint8_t AddrSize)35552fda83SJason LiuTriple llvm::dwarf::utils::getDefaultTargetTripleForAddrSize(uint8_t AddrSize) { 36552fda83SJason Liu Triple T = getNormalizedDefaultTargetTriple(); 37552fda83SJason Liu 38552fda83SJason Liu assert((AddrSize == 4 || AddrSize == 8) && 39552fda83SJason Liu "Only 32-bit/64-bit address size variants are supported"); 40552fda83SJason Liu 41552fda83SJason Liu // If a 32-bit/64-bit address size was specified, try to convert the triple 42552fda83SJason Liu // if it is for the wrong variant. 4366702629SJames Henderson if (AddrSize == 8 && T.isArch32Bit()) 4466702629SJames Henderson return T.get64BitArchVariant(); 4566702629SJames Henderson if (AddrSize == 4 && T.isArch64Bit()) 4666702629SJames Henderson return T.get32BitArchVariant(); 4766702629SJames Henderson return T; 4866702629SJames Henderson } 4966702629SJames Henderson isConfigurationSupported(Triple & T)5066702629SJames Hendersonbool llvm::dwarf::utils::isConfigurationSupported(Triple &T) { 5166702629SJames Henderson initLLVMIfNeeded(); 5266702629SJames Henderson std::string Err; 53251fe986SNigel Perks const Target *TheTarget = TargetRegistry::lookupTarget(T.getTriple(), Err); 54251fe986SNigel Perks return TheTarget && TheTarget->hasMCAsmBackend(); 55251fe986SNigel Perks } 56