summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools')
-rw-r--r--llvm/tools/llvm-c-test/echo.cpp27
-rw-r--r--llvm/tools/llvm-c-test/llvm-c-test.h9
-rw-r--r--llvm/tools/llvm-readobj/COFFDumper.cpp138
-rw-r--r--llvm/tools/sancov/sancov.cc91
-rw-r--r--llvm/tools/sanstats/sanstats.cpp20
5 files changed, 180 insertions, 105 deletions
diff --git a/llvm/tools/llvm-c-test/echo.cpp b/llvm/tools/llvm-c-test/echo.cpp
index 1922b429eb2..b0e47d8f544 100644
--- a/llvm/tools/llvm-c-test/echo.cpp
+++ b/llvm/tools/llvm-c-test/echo.cpp
@@ -16,12 +16,18 @@
//===----------------------------------------------------------------------===//
#include "llvm-c-test.h"
+#include "llvm-c/Core.h"
+#include "llvm-c/ErrorHandling.h"
#include "llvm-c/Target.h"
+#include "llvm-c/Types.h"
#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/Hashing.h"
+#include "llvm/ADT/SmallVector.h"
#include "llvm/Support/ErrorHandling.h"
-#include <stdio.h>
-#include <stdlib.h>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
using namespace llvm;
@@ -39,13 +45,16 @@ struct CAPIDenseMap<T*> {
uintptr_t Val = static_cast<uintptr_t>(-1);
return reinterpret_cast<T*>(Val);
}
+
static inline T* getTombstoneKey() {
uintptr_t Val = static_cast<uintptr_t>(-2);
return reinterpret_cast<T*>(Val);
}
+
static unsigned getHashValue(const T *PtrVal) {
return hash_value(PtrVal);
}
+
static bool isEqual(const T *LHS, const T *RHS) { return LHS == RHS; }
};
@@ -154,7 +163,9 @@ struct TypeCloner {
}
};
-static ValueMap clone_params(LLVMValueRef Src, LLVMValueRef Dst) {
+namespace {
+
+ValueMap clone_params(LLVMValueRef Src, LLVMValueRef Dst) {
unsigned Count = LLVMCountParams(Src);
if (Count != LLVMCountParams(Dst))
report_fatal_error("Parameter count mismatch");
@@ -212,6 +223,8 @@ static ValueMap clone_params(LLVMValueRef Src, LLVMValueRef Dst) {
return VMap;
}
+} // end anonymous namespace
+
LLVMValueRef clone_constant(LLVMValueRef Cst, LLVMModuleRef M) {
if (!LLVMIsAConstant(Cst))
report_fatal_error("Expected a constant");
@@ -710,7 +723,9 @@ struct FunCloner {
}
};
-static void declare_symbols(LLVMModuleRef Src, LLVMModuleRef M) {
+namespace {
+
+void declare_symbols(LLVMModuleRef Src, LLVMModuleRef M) {
LLVMValueRef Begin = LLVMGetFirstGlobal(Src);
LLVMValueRef End = LLVMGetLastGlobal(Src);
@@ -774,7 +789,7 @@ FunDecl:
}
}
-static void clone_symbols(LLVMModuleRef Src, LLVMModuleRef M) {
+void clone_symbols(LLVMModuleRef Src, LLVMModuleRef M) {
LLVMValueRef Begin = LLVMGetFirstGlobal(Src);
LLVMValueRef End = LLVMGetLastGlobal(Src);
@@ -861,6 +876,8 @@ FunClone:
}
}
+} // end anonymous namespace
+
int llvm_echo(void) {
LLVMEnablePrettyStackTrace();
diff --git a/llvm/tools/llvm-c-test/llvm-c-test.h b/llvm/tools/llvm-c-test/llvm-c-test.h
index 60edc0df4d1..fa5a9d04cca 100644
--- a/llvm/tools/llvm-c-test/llvm-c-test.h
+++ b/llvm/tools/llvm-c-test/llvm-c-test.h
@@ -10,10 +10,15 @@
|* Header file for llvm-c-test *|
|* *|
\*===----------------------------------------------------------------------===*/
+
#ifndef LLVM_C_TEST_H
#define LLVM_C_TEST_H
+#ifdef __cplusplus
+#include <cstdbool>
+#else
#include <stdbool.h>
+#endif
#include "llvm-c/Core.h"
#ifdef __cplusplus
@@ -51,6 +56,6 @@ int llvm_echo(void);
#ifdef __cplusplus
}
-#endif /* !defined(__cplusplus) */
-
#endif
+
+#endif // LLVM_C_TEST_H
diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp
index 781185af849..9f398d2d04c 100644
--- a/llvm/tools/llvm-readobj/COFFDumper.cpp
+++ b/llvm/tools/llvm-readobj/COFFDumper.cpp
@@ -40,9 +40,14 @@
#include "llvm/Support/Win64EH.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
-#include <cstring>
+#include <cassert>
+#include <cstdint>
+#include <ctime>
+#include <memory>
+#include <string>
+#include <tuple>
#include <system_error>
-#include <time.h>
+#include <vector>
using namespace llvm;
using namespace llvm::object;
@@ -71,6 +76,7 @@ public:
void printCOFFBaseReloc() override;
void printCodeViewDebugInfo() override;
void printStackMap() const override;
+
private:
void printSymbol(const SymbolRef &Sym);
void printRelocation(const SectionRef &Section, const RelocationRef &Reloc,
@@ -144,8 +150,7 @@ private:
StringSet<> TypeNames;
};
-} // namespace
-
+} // end anonymous namespace
namespace llvm {
@@ -160,7 +165,7 @@ std::error_code createCOFFDumper(const object::ObjectFile *Obj,
return readobj_error::success;
}
-} // namespace llvm
+} // end namespace llvm
// Given a a section and an offset into this section the function returns the
// symbol used for the relocation at the offset.
@@ -243,7 +248,9 @@ void COFFDumper::printBinaryBlockWithRelocs(StringRef Label,
}
}
-static const EnumEntry<COFF::MachineTypes> ImageFileMachineType[] = {
+namespace {
+
+const EnumEntry<COFF::MachineTypes> ImageFileMachineType[] = {
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_FILE_MACHINE_UNKNOWN ),
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_FILE_MACHINE_AM33 ),
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_FILE_MACHINE_AMD64 ),
@@ -267,7 +274,7 @@ static const EnumEntry<COFF::MachineTypes> ImageFileMachineType[] = {
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_FILE_MACHINE_WCEMIPSV2)
};
-static const EnumEntry<COFF::Characteristics> ImageFileCharacteristics[] = {
+const EnumEntry<COFF::Characteristics> ImageFileCharacteristics[] = {
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_FILE_RELOCS_STRIPPED ),
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_FILE_EXECUTABLE_IMAGE ),
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_FILE_LINE_NUMS_STRIPPED ),
@@ -285,7 +292,7 @@ static const EnumEntry<COFF::Characteristics> ImageFileCharacteristics[] = {
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_FILE_BYTES_REVERSED_HI )
};
-static const EnumEntry<COFF::WindowsSubsystem> PEWindowsSubsystem[] = {
+const EnumEntry<COFF::WindowsSubsystem> PEWindowsSubsystem[] = {
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_SUBSYSTEM_UNKNOWN ),
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_SUBSYSTEM_NATIVE ),
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_SUBSYSTEM_WINDOWS_GUI ),
@@ -299,7 +306,7 @@ static const EnumEntry<COFF::WindowsSubsystem> PEWindowsSubsystem[] = {
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_SUBSYSTEM_XBOX ),
};
-static const EnumEntry<COFF::DLLCharacteristics> PEDLLCharacteristics[] = {
+const EnumEntry<COFF::DLLCharacteristics> PEDLLCharacteristics[] = {
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA ),
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE ),
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY ),
@@ -313,7 +320,7 @@ static const EnumEntry<COFF::DLLCharacteristics> PEDLLCharacteristics[] = {
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE),
};
-static const EnumEntry<COFF::SectionCharacteristics>
+const EnumEntry<COFF::SectionCharacteristics>
ImageSectionCharacteristics[] = {
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_SCN_TYPE_NOLOAD ),
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_SCN_TYPE_NO_PAD ),
@@ -353,7 +360,7 @@ ImageSectionCharacteristics[] = {
LLVM_READOBJ_ENUM_ENT(COFF, IMAGE_SCN_MEM_WRITE )
};
-static const EnumEntry<COFF::SymbolBaseType> ImageSymType[] = {
+const EnumEntry<COFF::SymbolBaseType> ImageSymType[] = {
{ "Null" , COFF::IMAGE_SYM_TYPE_NULL },
{ "Void" , COFF::IMAGE_SYM_TYPE_VOID },
{ "Char" , COFF::IMAGE_SYM_TYPE_CHAR },
@@ -372,14 +379,14 @@ static const EnumEntry<COFF::SymbolBaseType> ImageSymType[] = {
{ "DWord" , COFF::IMAGE_SYM_TYPE_DWORD }
};
-static const EnumEntry<COFF::SymbolComplexType> ImageSymDType[] = {
+const EnumEntry<COFF::SymbolComplexType> ImageSymDType[] = {
{ "Null" , COFF::IMAGE_SYM_DTYPE_NULL },
{ "Pointer" , COFF::IMAGE_SYM_DTYPE_POINTER },
{ "Function", COFF::IMAGE_SYM_DTYPE_FUNCTION },
{ "Array" , COFF::IMAGE_SYM_DTYPE_ARRAY }
};
-static const EnumEntry<COFF::SymbolStorageClass> ImageSymClass[] = {
+const EnumEntry<COFF::SymbolStorageClass> ImageSymClass[] = {
{ "EndOfFunction" , COFF::IMAGE_SYM_CLASS_END_OF_FUNCTION },
{ "Null" , COFF::IMAGE_SYM_CLASS_NULL },
{ "Automatic" , COFF::IMAGE_SYM_CLASS_AUTOMATIC },
@@ -409,7 +416,7 @@ static const EnumEntry<COFF::SymbolStorageClass> ImageSymClass[] = {
{ "CLRToken" , COFF::IMAGE_SYM_CLASS_CLR_TOKEN }
};
-static const EnumEntry<COFF::COMDATType> ImageCOMDATSelect[] = {
+const EnumEntry<COFF::COMDATType> ImageCOMDATSelect[] = {
{ "NoDuplicates", COFF::IMAGE_COMDAT_SELECT_NODUPLICATES },
{ "Any" , COFF::IMAGE_COMDAT_SELECT_ANY },
{ "SameSize" , COFF::IMAGE_COMDAT_SELECT_SAME_SIZE },
@@ -419,14 +426,14 @@ static const EnumEntry<COFF::COMDATType> ImageCOMDATSelect[] = {
{ "Newest" , COFF::IMAGE_COMDAT_SELECT_NEWEST }
};
-static const EnumEntry<COFF::WeakExternalCharacteristics>
+const EnumEntry<COFF::WeakExternalCharacteristics>
WeakExternalCharacteristics[] = {
{ "NoLibrary", COFF::IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY },
{ "Library" , COFF::IMAGE_WEAK_EXTERN_SEARCH_LIBRARY },
{ "Alias" , COFF::IMAGE_WEAK_EXTERN_SEARCH_ALIAS }
};
-static const EnumEntry<CompileSym3::Flags> CompileSym3Flags[] = {
+const EnumEntry<CompileSym3::Flags> CompileSym3Flags[] = {
LLVM_READOBJ_ENUM_ENT(CompileSym3, EC),
LLVM_READOBJ_ENUM_ENT(CompileSym3, NoDbgInfo),
LLVM_READOBJ_ENUM_ENT(CompileSym3, LTCG),
@@ -441,7 +448,7 @@ static const EnumEntry<CompileSym3::Flags> CompileSym3Flags[] = {
LLVM_READOBJ_ENUM_ENT(CompileSym3, Exp),
};
-static const EnumEntry<codeview::SourceLanguage> SourceLanguages[] = {
+const EnumEntry<codeview::SourceLanguage> SourceLanguages[] = {
LLVM_READOBJ_ENUM_ENT(SourceLanguage, C),
LLVM_READOBJ_ENUM_ENT(SourceLanguage, Cpp),
LLVM_READOBJ_ENUM_ENT(SourceLanguage, Fortran),
@@ -461,7 +468,7 @@ static const EnumEntry<codeview::SourceLanguage> SourceLanguages[] = {
LLVM_READOBJ_ENUM_ENT(SourceLanguage, HLSL),
};
-static const EnumEntry<uint32_t> SubSectionTypes[] = {
+const EnumEntry<uint32_t> SubSectionTypes[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(ModuleSubstreamKind, Symbols),
LLVM_READOBJ_ENUM_CLASS_ENT(ModuleSubstreamKind, Lines),
LLVM_READOBJ_ENUM_CLASS_ENT(ModuleSubstreamKind, StringTable),
@@ -477,7 +484,7 @@ static const EnumEntry<uint32_t> SubSectionTypes[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(ModuleSubstreamKind, CoffSymbolRVA),
};
-static const EnumEntry<unsigned> CPUTypeNames[] = {
+const EnumEntry<unsigned> CPUTypeNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(CPUType, Intel8080),
LLVM_READOBJ_ENUM_CLASS_ENT(CPUType, Intel8086),
LLVM_READOBJ_ENUM_CLASS_ENT(CPUType, Intel80286),
@@ -539,7 +546,7 @@ static const EnumEntry<unsigned> CPUTypeNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(CPUType, D3D11_Shader),
};
-static const EnumEntry<uint8_t> ProcSymFlags[] = {
+const EnumEntry<uint8_t> ProcSymFlags[] = {
LLVM_READOBJ_ENUM_ENT(ProcFlags, HasFP),
LLVM_READOBJ_ENUM_ENT(ProcFlags, HasIRET),
LLVM_READOBJ_ENUM_ENT(ProcFlags, HasFRET),
@@ -550,7 +557,7 @@ static const EnumEntry<uint8_t> ProcSymFlags[] = {
LLVM_READOBJ_ENUM_ENT(ProcFlags, HasOptimizedDebugInfo),
};
-static const EnumEntry<uint32_t> FrameProcSymFlags[] = {
+const EnumEntry<uint32_t> FrameProcSymFlags[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(FrameProcedureOptions, HasAlloca),
LLVM_READOBJ_ENUM_CLASS_ENT(FrameProcedureOptions, HasSetJmp),
LLVM_READOBJ_ENUM_CLASS_ENT(FrameProcedureOptions, HasLongJmp),
@@ -576,13 +583,13 @@ static const EnumEntry<uint32_t> FrameProcSymFlags[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(FrameProcedureOptions, GuardCfw),
};
-static const EnumEntry<uint32_t> FrameDataFlags[] = {
+const EnumEntry<uint32_t> FrameDataFlags[] = {
LLVM_READOBJ_ENUM_ENT(FrameData, HasSEH),
LLVM_READOBJ_ENUM_ENT(FrameData, HasEH),
LLVM_READOBJ_ENUM_ENT(FrameData, IsFunctionStart),
};
-static const EnumEntry<uint16_t> LocalFlags[] = {
+const EnumEntry<uint16_t> LocalFlags[] = {
LLVM_READOBJ_ENUM_ENT(LocalSym, IsParameter),
LLVM_READOBJ_ENUM_ENT(LocalSym, IsAddressTaken),
LLVM_READOBJ_ENUM_ENT(LocalSym, IsCompilerGenerated),
@@ -596,14 +603,14 @@ static const EnumEntry<uint16_t> LocalFlags[] = {
LLVM_READOBJ_ENUM_ENT(LocalSym, IsEnregisteredStatic),
};
-static const EnumEntry<uint16_t> FrameCookieKinds[] = {
+const EnumEntry<uint16_t> FrameCookieKinds[] = {
LLVM_READOBJ_ENUM_ENT(FrameCookieSym, Copy),
LLVM_READOBJ_ENUM_ENT(FrameCookieSym, XorStackPointer),
LLVM_READOBJ_ENUM_ENT(FrameCookieSym, XorFramePointer),
LLVM_READOBJ_ENUM_ENT(FrameCookieSym, XorR13),
};
-static const EnumEntry<uint16_t> ClassOptionNames[] = {
+const EnumEntry<uint16_t> ClassOptionNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(ClassOptions, Packed),
LLVM_READOBJ_ENUM_CLASS_ENT(ClassOptions, HasConstructorOrDestructor),
LLVM_READOBJ_ENUM_CLASS_ENT(ClassOptions, HasOverloadedOperator),
@@ -618,14 +625,14 @@ static const EnumEntry<uint16_t> ClassOptionNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(ClassOptions, Intrinsic),
};
-static const EnumEntry<uint8_t> MemberAccessNames[] = {
+const EnumEntry<uint8_t> MemberAccessNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(MemberAccess, None),
LLVM_READOBJ_ENUM_CLASS_ENT(MemberAccess, Private),
LLVM_READOBJ_ENUM_CLASS_ENT(MemberAccess, Protected),
LLVM_READOBJ_ENUM_CLASS_ENT(MemberAccess, Public),
};
-static const EnumEntry<uint16_t> MethodOptionNames[] = {
+const EnumEntry<uint16_t> MethodOptionNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(MethodOptions, Pseudo),
LLVM_READOBJ_ENUM_CLASS_ENT(MethodOptions, NoInherit),
LLVM_READOBJ_ENUM_CLASS_ENT(MethodOptions, NoConstruct),
@@ -633,7 +640,7 @@ static const EnumEntry<uint16_t> MethodOptionNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(MethodOptions, Sealed),
};
-static const EnumEntry<uint16_t> MemberKindNames[] = {
+const EnumEntry<uint16_t> MemberKindNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(MethodKind, Vanilla),
LLVM_READOBJ_ENUM_CLASS_ENT(MethodKind, Virtual),
LLVM_READOBJ_ENUM_CLASS_ENT(MethodKind, Static),
@@ -646,7 +653,7 @@ static const EnumEntry<uint16_t> MemberKindNames[] = {
/// The names here all end in "*". If the simple type is a pointer type, we
/// return the whole name. Otherwise we lop off the last character in our
/// StringRef.
-static const EnumEntry<SimpleTypeKind> SimpleTypeNames[] = {
+const EnumEntry<SimpleTypeKind> SimpleTypeNames[] = {
{"void*", SimpleTypeKind::Void},
{"<not translated>*", SimpleTypeKind::NotTranslated},
{"HRESULT*", SimpleTypeKind::HResult},
@@ -687,12 +694,12 @@ static const EnumEntry<SimpleTypeKind> SimpleTypeNames[] = {
{"__bool64*", SimpleTypeKind::Boolean64},
};
-static const EnumEntry<TypeLeafKind> LeafTypeNames[] = {
+const EnumEntry<TypeLeafKind> LeafTypeNames[] = {
#define LEAF_TYPE(name, val) LLVM_READOBJ_ENUM_ENT(TypeLeafKind, name),
#include "llvm/DebugInfo/CodeView/CVLeafTypes.def"
};
-static const EnumEntry<uint8_t> PtrKindNames[] = {
+const EnumEntry<uint8_t> PtrKindNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(PointerKind, Near16),
LLVM_READOBJ_ENUM_CLASS_ENT(PointerKind, Far16),
LLVM_READOBJ_ENUM_CLASS_ENT(PointerKind, Huge16),
@@ -708,7 +715,7 @@ static const EnumEntry<uint8_t> PtrKindNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(PointerKind, Near64),
};
-static const EnumEntry<uint8_t> PtrModeNames[] = {
+const EnumEntry<uint8_t> PtrModeNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(PointerMode, Pointer),
LLVM_READOBJ_ENUM_CLASS_ENT(PointerMode, LValueReference),
LLVM_READOBJ_ENUM_CLASS_ENT(PointerMode, PointerToDataMember),
@@ -716,7 +723,7 @@ static const EnumEntry<uint8_t> PtrModeNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(PointerMode, RValueReference),
};
-static const EnumEntry<uint16_t> PtrMemberRepNames[] = {
+const EnumEntry<uint16_t> PtrMemberRepNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(PointerToMemberRepresentation, Unknown),
LLVM_READOBJ_ENUM_CLASS_ENT(PointerToMemberRepresentation,
SingleInheritanceData),
@@ -734,13 +741,13 @@ static const EnumEntry<uint16_t> PtrMemberRepNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(PointerToMemberRepresentation, GeneralFunction),
};
-static const EnumEntry<uint16_t> TypeModifierNames[] = {
+const EnumEntry<uint16_t> TypeModifierNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(ModifierOptions, Const),
LLVM_READOBJ_ENUM_CLASS_ENT(ModifierOptions, Volatile),
LLVM_READOBJ_ENUM_CLASS_ENT(ModifierOptions, Unaligned),
};
-static const EnumEntry<uint8_t> CallingConventions[] = {
+const EnumEntry<uint8_t> CallingConventions[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(CallingConvention, NearC),
LLVM_READOBJ_ENUM_CLASS_ENT(CallingConvention, FarC),
LLVM_READOBJ_ENUM_CLASS_ENT(CallingConvention, NearPascal),
@@ -767,13 +774,13 @@ static const EnumEntry<uint8_t> CallingConventions[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(CallingConvention, NearVector),
};
-static const EnumEntry<uint8_t> FunctionOptionEnum[] = {
+const EnumEntry<uint8_t> FunctionOptionEnum[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(FunctionOptions, CxxReturnUdt),
LLVM_READOBJ_ENUM_CLASS_ENT(FunctionOptions, Constructor),
LLVM_READOBJ_ENUM_CLASS_ENT(FunctionOptions, ConstructorWithVirtualBases),
};
-static const EnumEntry<uint8_t> FileChecksumKindNames[] = {
+const EnumEntry<uint8_t> FileChecksumKindNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(FileChecksumKind, None),
LLVM_READOBJ_ENUM_CLASS_ENT(FileChecksumKind, MD5),
LLVM_READOBJ_ENUM_CLASS_ENT(FileChecksumKind, SHA1),
@@ -781,7 +788,7 @@ static const EnumEntry<uint8_t> FileChecksumKindNames[] = {
};
template <typename T>
-static std::error_code getSymbolAuxData(const COFFObjectFile *Obj,
+std::error_code getSymbolAuxData(const COFFObjectFile *Obj,
COFFSymbolRef Symbol,
uint8_t AuxSymbolIdx, const T *&Aux) {
ArrayRef<uint8_t> AuxData = Obj->getSymbolAuxData(Symbol);
@@ -790,6 +797,8 @@ static std::error_code getSymbolAuxData(const COFFObjectFile *Obj,
return readobj_error::success;
}
+} // end anonymous namespace
+
void COFFDumper::cacheRelocations() {
if (RelocCached)
return;
@@ -940,11 +949,13 @@ void COFFDumper::printCodeViewDebugInfo() {
}
}
+namespace {
+
/// Consumes sizeof(T) bytes from the given byte sequence. Returns an error if
/// there are not enough bytes remaining. Reinterprets the consumed bytes as a
/// T object and points 'Res' at them.
template <typename T>
-static std::error_code consumeObject(StringRef &Data, const T *&Res) {
+std::error_code consumeObject(StringRef &Data, const T *&Res) {
if (Data.size() < sizeof(*Res))
return object_error::parse_failed;
Res = reinterpret_cast<const T *>(Data.data());
@@ -952,7 +963,7 @@ static std::error_code consumeObject(StringRef &Data, const T *&Res) {
return std::error_code();
}
-static std::error_code consumeUInt32(StringRef &Data, uint32_t &Res) {
+std::error_code consumeUInt32(StringRef &Data, uint32_t &Res) {
const ulittle32_t *IntPtr;
if (auto EC = consumeObject(Data, IntPtr))
return EC;
@@ -960,6 +971,8 @@ static std::error_code consumeUInt32(StringRef &Data, uint32_t &Res) {
return std::error_code();
}
+} // end anonymous namespace
+
void COFFDumper::initializeFileAndStringTables(StringRef Data) {
while (!Data.empty() && (CVFileChecksumTable.data() == nullptr ||
CVStringTable.data() == nullptr)) {
@@ -1182,7 +1195,9 @@ void COFFDumper::printCodeViewSymbolSection(StringRef SectionName,
}
}
-static std::error_code decodeNumerictLeaf(StringRef &Data, APSInt &Num) {
+namespace {
+
+std::error_code decodeNumerictLeaf(StringRef &Data, APSInt &Num) {
// Used to avoid overload ambiguity on APInt construtor.
bool FalseVal = false;
if (Data.size() < 2)
@@ -1248,6 +1263,8 @@ static std::error_code decodeNumerictLeaf(StringRef &Data, APSInt &Num) {
return object_error::parse_failed;
}
+} // end anonymous namespace
+
/// Decode an unsigned integer numeric leaf value.
std::error_code decodeUIntLeaf(StringRef &Data, uint64_t &Num) {
APSInt N;
@@ -1313,11 +1330,10 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection,
break;
}
- case S_PROC_ID_END: {
+ case S_PROC_ID_END:
W.startLine() << "ProcEnd\n";
InFunctionScope = false;
break;
- }
case S_BLOCK32: {
DictScope S(W, "BlockStart");
@@ -1337,11 +1353,10 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection,
break;
}
- case S_END: {
+ case S_END:
W.startLine() << "BlockEnd\n";
InFunctionScope = false;
break;
- }
case S_LABEL32: {
DictScope S(W, "Label");
@@ -1515,6 +1530,7 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection,
printLocalVariableAddrGap(SymData);
break;
}
+
case S_DEFRANGE_SUBFIELD: {
DictScope S(W, "DefRangeSubfield");
const DefRangeSubfieldSym *DefRangeSubfield;
@@ -1529,6 +1545,7 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection,
printLocalVariableAddrGap(SymData);
break;
}
+
case S_DEFRANGE_REGISTER: {
DictScope S(W, "DefRangeRegister");
const DefRangeRegisterSym *DefRangeRegister;
@@ -1540,6 +1557,7 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection,
printLocalVariableAddrGap(SymData);
break;
}
+
case S_DEFRANGE_SUBFIELD_REGISTER: {
DictScope S(W, "DefRangeSubfieldRegister");
const DefRangeSubfieldRegisterSym *DefRangeSubfieldRegisterSym;
@@ -1554,6 +1572,7 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection,
printLocalVariableAddrGap(SymData);
break;
}
+
case S_DEFRANGE_FRAMEPOINTER_REL: {
DictScope S(W, "DefRangeFramePointerRel");
const DefRangeFramePointerRelSym *DefRangeFramePointerRel;
@@ -1564,6 +1583,7 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection,
printLocalVariableAddrGap(SymData);
break;
}
+
case S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE: {
DictScope S(W, "DefRangeFramePointerRelFullScope");
const DefRangeFramePointerRelFullScopeSym
@@ -1572,6 +1592,7 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection,
W.printNumber("Offset", DefRangeFramePointerRelFullScope->Offset);
break;
}
+
case S_DEFRANGE_REGISTER_REL: {
DictScope S(W, "DefRangeRegisterRel");
const DefRangeRegisterRelSym *DefRangeRegisterRel;
@@ -1945,7 +1966,9 @@ void COFFDumper::printFileNameForOffset(StringRef Label, uint32_t FileOffset) {
W.printHex(Label, getFileNameForFileOffset(FileOffset), FileOffset);
}
-static StringRef getLeafTypeName(TypeLeafKind LT) {
+namespace {
+
+StringRef getLeafTypeName(TypeLeafKind LT) {
switch (LT) {
case LF_STRING_ID: return "StringId";
case LF_FIELDLIST: return "FieldList";
@@ -1974,6 +1997,8 @@ static StringRef getLeafTypeName(TypeLeafKind LT) {
return "UnknownLeaf";
}
+} // end anonymous namespace
+
void COFFDumper::printCodeViewTypeSection(StringRef SectionName,
const SectionRef &Section) {
ListScope D(W, "CodeViewTypes");
@@ -2200,7 +2225,7 @@ void COFFDumper::printCodeViewTypeSection(StringRef SectionName,
break;
}
- case LF_METHODLIST: {
+ case LF_METHODLIST:
while (!LeafData.empty()) {
const MethodListEntry *Method;
error(consumeObject(LeafData, Method));
@@ -2214,7 +2239,6 @@ void COFFDumper::printCodeViewTypeSection(StringRef SectionName,
}
}
break;
- }
case LF_FUNC_ID: {
const FuncId *Func;
@@ -2356,7 +2380,9 @@ void COFFDumper::printCodeViewTypeSection(StringRef SectionName,
}
}
-static StringRef skipPadding(StringRef Data) {
+namespace {
+
+StringRef skipPadding(StringRef Data) {
if (Data.empty())
return Data;
uint8_t Leaf = Data.front();
@@ -2367,6 +2393,8 @@ static StringRef skipPadding(StringRef Data) {
return Data.drop_front(Leaf & 0x0F);
}
+} // end anonymous namespace
+
void COFFDumper::printMemberAttributes(MemberAttributes Attrs) {
W.printEnum("AccessSpecifier", uint8_t(Attrs.getAccess()),
makeArrayRef(MemberAccessNames));
@@ -2631,7 +2659,9 @@ void COFFDumper::printSymbols() {
void COFFDumper::printDynamicSymbols() { ListScope Group(W, "DynamicSymbols"); }
-static ErrorOr<StringRef>
+namespace {
+
+ErrorOr<StringRef>
getSectionName(const llvm::object::COFFObjectFile *Obj, int32_t SectionNumber,
const coff_section *Section) {
if (Section) {
@@ -2649,6 +2679,8 @@ getSectionName(const llvm::object::COFFObjectFile *Obj, int32_t SectionNumber,
return StringRef("");
}
+} // end anonymous namespace
+
void COFFDumper::printSymbol(const SymbolRef &Sym) {
DictScope D(W, "Symbol");
@@ -2893,7 +2925,9 @@ void COFFDumper::printCOFFDirectives() {
}
}
-static StringRef getBaseRelocTypeName(uint8_t Type) {
+namespace {
+
+StringRef getBaseRelocTypeName(uint8_t Type) {
switch (Type) {
case COFF::IMAGE_REL_BASED_ABSOLUTE: return "ABSOLUTE";
case COFF::IMAGE_REL_BASED_HIGH: return "HIGH";
@@ -2906,6 +2940,8 @@ static StringRef getBaseRelocTypeName(uint8_t Type) {
}
}
+} // end anonymous namespace
+
void COFFDumper::printCOFFBaseReloc() {
ListScope D(W, "BaseReloc");
for (const BaseRelocRef &I : Obj->base_relocs()) {
diff --git a/llvm/tools/sancov/sancov.cc b/llvm/tools/sancov/sancov.cc
index 0baaae16cfe..0d2b48ca868 100644
--- a/llvm/tools/sancov/sancov.cc
+++ b/llvm/tools/sancov/sancov.cc
@@ -1,4 +1,4 @@
-//===-- sancov.cc --------------------------------------------===//
+//===-- sancov.cc ---------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
@@ -10,7 +10,13 @@
// This file is a command-line tool for reading and analyzing sanitizer
// coverage.
//===----------------------------------------------------------------------===//
+
+#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/Triple.h"
#include "llvm/ADT/Twine.h"
#include "llvm/DebugInfo/Symbolize/Symbolize.h"
#include "llvm/MC/MCAsmInfo.h"
@@ -47,9 +53,13 @@
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
+#include <cstdint>
+#include <cstdlib>
+#include <map>
+#include <memory>
#include <set>
-#include <stdio.h>
#include <string>
+#include <tuple>
#include <utility>
#include <vector>
@@ -83,28 +93,28 @@ cl::opt<ActionType> Action(
"Print coverage statistics."),
clEnumValEnd));
-static cl::list<std::string>
+cl::list<std::string>
ClInputFiles(cl::Positional, cl::OneOrMore,
cl::desc("(<binary file>|<.sancov file>)..."));
-static cl::opt<bool> ClDemangle("demangle", cl::init(true),
- cl::desc("Print demangled function name."));
+cl::opt<bool> ClDemangle("demangle", cl::init(true),
+ cl::desc("Print demangled function name."));
-static cl::opt<std::string> ClStripPathPrefix(
+cl::opt<std::string> ClStripPathPrefix(
"strip_path_prefix", cl::init(""),
cl::desc("Strip this prefix from file paths in reports."));
-static cl::opt<std::string>
+cl::opt<std::string>
ClBlacklist("blacklist", cl::init(""),
cl::desc("Blacklist file (sanitizer blacklist format)."));
-static cl::opt<bool> ClUseDefaultBlacklist(
+cl::opt<bool> ClUseDefaultBlacklist(
"use_default_blacklist", cl::init(true), cl::Hidden,
cl::desc("Controls if default blacklist should be used."));
-static const char *const DefaultBlacklistStr = "fun:__sanitizer_.*\n"
- "src:/usr/include/.*\n"
- "src:.*/libc\\+\\+/.*\n";
+const char *const DefaultBlacklistStr = "fun:__sanitizer_.*\n"
+ "src:/usr/include/.*\n"
+ "src:.*/libc\\+\\+/.*\n";
// --------- FORMAT SPECIFICATION ---------
@@ -113,37 +123,37 @@ struct FileHeader {
uint32_t Magic;
};
-static const uint32_t BinCoverageMagic = 0xC0BFFFFF;
-static const uint32_t Bitness32 = 0xFFFFFF32;
-static const uint32_t Bitness64 = 0xFFFFFF64;
+const uint32_t BinCoverageMagic = 0xC0BFFFFF;
+const uint32_t Bitness32 = 0xFFFFFF32;
+const uint32_t Bitness64 = 0xFFFFFF64;
// --------- ERROR HANDLING ---------
-static void Fail(const llvm::Twine &E) {
+void Fail(const llvm::Twine &E) {
errs() << "Error: " << E << "\n";
exit(1);
}
-static void FailIfError(std::error_code Error) {
+void FailIfError(std::error_code Error) {
if (!Error)
return;
errs() << "Error: " << Error.message() << "(" << Error.value() << ")\n";
exit(1);
}
-template <typename T> static void FailIfError(const ErrorOr<T> &E) {
+template <typename T>
+void FailIfError(const ErrorOr<T> &E) {
FailIfError(E.getError());
}
-static void FailIfNotEmpty(const llvm::Twine &E) {
+void FailIfNotEmpty(const llvm::Twine &E) {
if (E.str().empty())
return;
Fail(E);
}
template <typename T>
-static void FailIfEmpty(const std::unique_ptr<T> &Ptr,
- const std::string &Message) {
+void FailIfEmpty(const std::unique_ptr<T> &Ptr, const std::string &Message) {
if (Ptr.get())
return;
Fail(Message);
@@ -154,7 +164,7 @@ static void FailIfEmpty(const std::unique_ptr<T> &Ptr,
// Produces std::map<K, std::vector<E>> grouping input
// elements by FuncTy result.
template <class RangeTy, class FuncTy>
-static inline auto group_by(const RangeTy &R, FuncTy F)
+inline auto group_by(const RangeTy &R, FuncTy F)
-> std::map<typename std::decay<decltype(F(*R.begin()))>::type,
std::vector<typename std::decay<decltype(*R.begin())>::type>> {
std::map<typename std::decay<decltype(F(*R.begin()))>::type,
@@ -167,8 +177,7 @@ static inline auto group_by(const RangeTy &R, FuncTy F)
}
template <typename T>
-static void readInts(const char *Start, const char *End,
- std::set<uint64_t> *Ints) {
+void readInts(const char *Start, const char *End, std::set<uint64_t> *Ints) {
const T *S = reinterpret_cast<const T *>(Start);
const T *E = reinterpret_cast<const T *>(End);
std::copy(S, E, std::inserter(*Ints, Ints->end()));
@@ -211,7 +220,7 @@ std::string stripPathPrefix(std::string Path) {
return Path.substr(Pos + ClStripPathPrefix.size());
}
-static std::unique_ptr<symbolize::LLVMSymbolizer> createSymbolizer() {
+std::unique_ptr<symbolize::LLVMSymbolizer> createSymbolizer() {
symbolize::LLVMSymbolizer::Options SymbolizerOptions;
SymbolizerOptions.Demangle = ClDemangle;
SymbolizerOptions.UseSymbolTable = true;
@@ -276,9 +285,9 @@ private:
};
// Collect all debug info for given addresses.
-static std::vector<AddrInfo> getAddrInfo(std::string ObjectFile,
- const std::set<uint64_t> &Addrs,
- bool InlinedCode) {
+std::vector<AddrInfo> getAddrInfo(std::string ObjectFile,
+ const std::set<uint64_t> &Addrs,
+ bool InlinedCode) {
std::vector<AddrInfo> Result;
auto Symbolizer(createSymbolizer());
Blacklists B;
@@ -306,7 +315,7 @@ static std::vector<AddrInfo> getAddrInfo(std::string ObjectFile,
// Locate __sanitizer_cov* function addresses that are used for coverage
// reporting.
-static std::set<uint64_t>
+std::set<uint64_t>
findSanitizerCovFunctions(const object::ObjectFile &O) {
std::set<uint64_t> Result;
@@ -331,8 +340,8 @@ findSanitizerCovFunctions(const object::ObjectFile &O) {
// Locate addresses of all coverage points in a file. Coverage point
// is defined as the 'address of instruction following __sanitizer_cov
// call - 1'.
-static void getObjectCoveragePoints(const object::ObjectFile &O,
- std::set<uint64_t> *Addrs) {
+void getObjectCoveragePoints(const object::ObjectFile &O,
+ std::set<uint64_t> *Addrs) {
Triple TheTriple("unknown-unknown-unknown");
TheTriple.setArch(Triple::ArchType(O.getArch()));
auto TripleName = TheTriple.getTriple();
@@ -404,7 +413,7 @@ static void getObjectCoveragePoints(const object::ObjectFile &O,
}
}
-static void
+void
visitObjectFiles(const object::Archive &A,
std::function<void(const object::ObjectFile &)> Fn) {
for (auto &ErrorOrChild : A.children()) {
@@ -419,7 +428,7 @@ visitObjectFiles(const object::Archive &A,
}
}
-static void
+void
visitObjectFiles(std::string FileName,
std::function<void(const object::ObjectFile &)> Fn) {
ErrorOr<object::OwningBinary<object::Binary>> BinaryOrErr =
@@ -455,7 +464,7 @@ std::set<uint64_t> getCoveragePoints(std::string FileName) {
return Result;
}
-static void printCovPoints(std::string ObjFile, raw_ostream &OS) {
+void printCovPoints(std::string ObjFile, raw_ostream &OS) {
for (uint64_t Addr : getCoveragePoints(ObjFile)) {
OS << "0x";
OS.write_hex(Addr);
@@ -463,7 +472,7 @@ static void printCovPoints(std::string ObjFile, raw_ostream &OS) {
}
}
-static std::string escapeHtml(const std::string &S) {
+std::string escapeHtml(const std::string &S) {
std::string Result;
Result.reserve(S.size());
for (char Ch : S) {
@@ -493,7 +502,7 @@ static std::string escapeHtml(const std::string &S) {
// Adds leading zeroes wrapped in 'lz' style.
// Leading zeroes help locate 000% coverage.
-static std::string formatHtmlPct(size_t Pct) {
+std::string formatHtmlPct(size_t Pct) {
Pct = std::max(std::size_t{0}, std::min(std::size_t{100}, Pct));
std::string Num = std::to_string(Pct);
@@ -504,7 +513,7 @@ static std::string formatHtmlPct(size_t Pct) {
return Zeroes + Num;
}
-static std::string anchorName(std::string Anchor) {
+std::string anchorName(std::string Anchor) {
llvm::MD5 Hasher;
llvm::MD5::MD5Result Hash;
Hasher.update(Anchor);
@@ -515,7 +524,7 @@ static std::string anchorName(std::string Anchor) {
return HexString.str().str();
}
-static ErrorOr<bool> isCoverageFile(std::string FileName) {
+ErrorOr<bool> isCoverageFile(std::string FileName) {
ErrorOr<std::unique_ptr<MemoryBuffer>> BufOrErr =
MemoryBuffer::getFile(FileName);
if (!BufOrErr) {
@@ -542,7 +551,7 @@ struct CoverageStats {
size_t CovFns;
};
-static raw_ostream &operator<<(raw_ostream &OS, const CoverageStats &Stats) {
+raw_ostream &operator<<(raw_ostream &OS, const CoverageStats &Stats) {
OS << "all-edges: " << Stats.AllPoints << "\n";
OS << "cov-edges: " << Stats.CovPoints << "\n";
OS << "all-functions: " << Stats.AllFns << "\n";
@@ -822,8 +831,8 @@ private:
std::vector<AddrInfo> CovAddrInfo;
};
-static void printFunctionLocs(const SourceCoverageData::FunctionLocs &FnLocs,
- raw_ostream &OS) {
+void printFunctionLocs(const SourceCoverageData::FunctionLocs &FnLocs,
+ raw_ostream &OS) {
for (const auto &Fns : FnLocs) {
for (const auto &Fn : Fns.second) {
OS << stripPathPrefix(Fns.first.FileName) << ":" << Fns.first.Line << " "
@@ -1182,7 +1191,7 @@ private:
const std::set<std::string> CoverageFiles;
};
-} // namespace
+} // end anonymous namespace
int main(int argc, char **argv) {
// Print stack trace if we signal out.
diff --git a/llvm/tools/sanstats/sanstats.cpp b/llvm/tools/sanstats/sanstats.cpp
index 3a8cc9aea8c..95f5424ba66 100644
--- a/llvm/tools/sanstats/sanstats.cpp
+++ b/llvm/tools/sanstats/sanstats.cpp
@@ -12,20 +12,26 @@
//
//===----------------------------------------------------------------------===//
+#include "llvm/ADT/StringRef.h"
#include "llvm/DebugInfo/Symbolize/Symbolize.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorOr.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Transforms/Utils/SanitizerStats.h"
-#include <stdint.h>
+#include <cassert>
+#include <cstdint>
+#include <memory>
+#include <string>
using namespace llvm;
-static cl::opt<std::string> ClInputFile(cl::Positional, cl::Required,
- cl::desc("<filename>"));
+namespace {
-static cl::opt<bool> ClDemangle("demangle", cl::init(false),
- cl::desc("Print demangled function name."));
+cl::opt<std::string> ClInputFile(cl::Positional, cl::Required,
+ cl::desc("<filename>"));
+
+cl::opt<bool> ClDemangle("demangle", cl::init(false),
+ cl::desc("Print demangled function name."));
inline uint64_t KindFromData(uint64_t Data, char SizeofPtr) {
return Data >> (SizeofPtr * 8 - kSanitizerStatKindBits);
@@ -63,7 +69,7 @@ const char *ReadModule(char SizeofPtr, const char *Begin, const char *End) {
SymbolizerOptions.UseSymbolTable = true;
symbolize::LLVMSymbolizer Symbolizer(SymbolizerOptions);
- while (1) {
+ while (true) {
uint64_t Addr = ReadLE(SizeofPtr, Begin, End);
Begin += SizeofPtr;
uint64_t Data = ReadLE(SizeofPtr, Begin, End);
@@ -109,6 +115,8 @@ const char *ReadModule(char SizeofPtr, const char *Begin, const char *End) {
}
}
+} // end anonymous namespace
+
int main(int argc, char **argv) {
cl::ParseCommandLineOptions(argc, argv,
"Sanitizer Statistics Processing Tool");
OpenPOWER on IntegriCloud