mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
68dc9febcb
Summary: When building with a Default Target set we can experience issues in the DWARF DebugInfo unit tests because: They assume we can generate object files for the host platform. Some tests assume the endianess of the target we are generating DWARF for and the host match. This patch correct these issues by ensuring the tests which generate objects in memory are run with respect to LVM_DEFAULT_TARGET_TRIPLE and it's endianess. We also make sure we don't use the hosts address size for line test and split the triple util function in DwarfUtils into a version that takes an address size and one that doesn't. See also for discussion: http://lists.llvm.org/pipermail/llvm-dev/2019-March/131212.html Patch by: daltenty Differential Revision: https://reviews.llvm.org/D62084 llvm-svn: 362454
55 lines
1.6 KiB
C++
55 lines
1.6 KiB
C++
//===--- unittests/DebugInfo/DWARF/DwarfUtils.cpp ---------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "DwarfUtils.h"
|
|
#include "llvm/ADT/Triple.h"
|
|
#include "llvm/Config/llvm-config.h"
|
|
#include "llvm/Support/Host.h"
|
|
#include "llvm/Support/TargetRegistry.h"
|
|
#include "llvm/Support/TargetSelect.h"
|
|
|
|
using namespace llvm;
|
|
|
|
static void initLLVMIfNeeded() {
|
|
static bool gInitialized = false;
|
|
if (!gInitialized) {
|
|
gInitialized = true;
|
|
InitializeAllTargets();
|
|
InitializeAllTargetMCs();
|
|
InitializeAllAsmPrinters();
|
|
InitializeAllAsmParsers();
|
|
}
|
|
}
|
|
|
|
Triple llvm::dwarf::utils::getNormalizedDefaultTargetTriple() {
|
|
Triple T(Triple::normalize(sys::getDefaultTargetTriple()));
|
|
|
|
return T;
|
|
}
|
|
|
|
Triple llvm::dwarf::utils::getDefaultTargetTripleForAddrSize(uint8_t AddrSize) {
|
|
Triple T = getNormalizedDefaultTargetTriple();
|
|
|
|
assert((AddrSize == 4 || AddrSize == 8) &&
|
|
"Only 32-bit/64-bit address size variants are supported");
|
|
|
|
// If a 32-bit/64-bit address size was specified, try to convert the triple
|
|
// if it is for the wrong variant.
|
|
if (AddrSize == 8 && T.isArch32Bit())
|
|
return T.get64BitArchVariant();
|
|
if (AddrSize == 4 && T.isArch64Bit())
|
|
return T.get32BitArchVariant();
|
|
return T;
|
|
}
|
|
|
|
bool llvm::dwarf::utils::isConfigurationSupported(Triple &T) {
|
|
initLLVMIfNeeded();
|
|
std::string Err;
|
|
return TargetRegistry::lookupTarget(T.getTriple(), Err);
|
|
}
|