1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00
llvm-mirror/tools/dsymutil/LinkUtils.h
Jonas Devlieghere 8dc3169d33 [dsymutil] Add support for generating DWARF5 accelerator tables.
This patch add support for emitting DWARF5 accelerator tables
(.debug_names) from dsymutil. Just as with the Apple style accelerator
tables, it's possible to update existing dSYMs. This patch includes a
test that show how you can convert back and forth between the two types.

If no kind of table is specified, dsymutil will default to generating
Apple-style accelerator tables whenever it finds those in its input. The
same is true when there are no accelerator tables at all. Finally, in
the remaining case, where there's at least one DWARF v5 table and no
Apple ones, the output will contains a DWARF accelerator tables
(.debug_names).

Differential revision: https://reviews.llvm.org/D49137

llvm-svn: 337980
2018-07-25 23:01:38 +00:00

83 lines
1.9 KiB
C++

//===- tools/dsymutil/LinkUtils.h - Dwarf linker utilities ------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_TOOLS_DSYMUTIL_LINKOPTIONS_H
#define LLVM_TOOLS_DSYMUTIL_LINKOPTIONS_H
#include "llvm/ADT/Twine.h"
#include "llvm/Support/WithColor.h"
#include <string>
namespace llvm {
namespace dsymutil {
enum class OutputFileType {
Object,
Assembly,
};
/// The kind of accelerator tables we should emit.
enum class AccelTableKind {
Apple, ///< .apple_names, .apple_namespaces, .apple_types, .apple_objc.
Dwarf, ///< DWARF v5 .debug_names.
Default, ///< Dwarf for DWARF5 or later, Apple otherwise.
};
struct LinkOptions {
/// Verbosity
bool Verbose = false;
/// Skip emitting output
bool NoOutput = false;
/// Do not unique types according to ODR
bool NoODR = false;
/// Update
bool Update = false;
/// Minimize
bool Minimize = false;
/// Do not check swiftmodule timestamp
bool NoTimestamp = false;
/// Number of threads.
unsigned Threads = 1;
// Output file type.
OutputFileType FileType = OutputFileType::Object;
/// The accelerator table kind
AccelTableKind TheAccelTableKind;
/// -oso-prepend-path
std::string PrependPath;
LinkOptions() = default;
};
inline void warn(Twine Warning, Twine Context = {}) {
WithColor::warning() << Warning + "\n";
if (!Context.isTriviallyEmpty())
WithColor::note() << Twine("while processing ") + Context + "\n";
}
inline bool error(Twine Error, Twine Context = {}) {
WithColor::error() << Error + "\n";
if (!Context.isTriviallyEmpty())
WithColor::note() << Twine("while processing ") + Context + "\n";
return false;
}
} // end namespace dsymutil
} // end namespace llvm
#endif // LLVM_TOOLS_DSYMUTIL_LINKOPTIONS_H