xref: /llvm-project/llvm/unittests/DebugInfo/DWARF/DwarfUtils.cpp (revision d768bf994f508d7eaf9541a568be3d71096febf5)
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 Henderson static 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 Liu Triple 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 Liu Triple 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 Henderson bool 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