mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-21 03:53:04 +02:00
47d3d1e5ef
Today, we always take into account the possibility that object files produced by MC may be consumed by an incremental linker. This results in us initialing fields which vary with time (TimeDateStamp) which harms hermetic builds (e.g. verifying a self-host went well) and produces sub-optimal code because we cannot assume anything about the relative position of functions within a section (call sites can get redirected through incremental linker thunks). Let's provide an MCTargetOption which controls this behavior so that we can disable this functionality if we know a-priori that the build will not rely on /incremental. llvm-svn: 256203
73 lines
2.0 KiB
C++
73 lines
2.0 KiB
C++
//===- MCTargetOptions.h - MC Target Options -------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_MC_MCTARGETOPTIONS_H
|
|
#define LLVM_MC_MCTARGETOPTIONS_H
|
|
|
|
#include <string>
|
|
|
|
namespace llvm {
|
|
|
|
class StringRef;
|
|
|
|
class MCTargetOptions {
|
|
public:
|
|
enum AsmInstrumentation {
|
|
AsmInstrumentationNone,
|
|
AsmInstrumentationAddress
|
|
};
|
|
|
|
/// Enables AddressSanitizer instrumentation at machine level.
|
|
bool SanitizeAddress : 1;
|
|
|
|
bool MCRelaxAll : 1;
|
|
bool MCNoExecStack : 1;
|
|
bool MCFatalWarnings : 1;
|
|
bool MCNoWarn : 1;
|
|
bool MCSaveTempLabels : 1;
|
|
bool MCUseDwarfDirectory : 1;
|
|
bool MCIncrementalLinkerCompatible : 1;
|
|
bool ShowMCEncoding : 1;
|
|
bool ShowMCInst : 1;
|
|
bool AsmVerbose : 1;
|
|
int DwarfVersion;
|
|
/// getABIName - If this returns a non-empty string this represents the
|
|
/// textual name of the ABI that we want the backend to use, e.g. o32, or
|
|
/// aapcs-linux.
|
|
StringRef getABIName() const;
|
|
std::string ABIName;
|
|
MCTargetOptions();
|
|
};
|
|
|
|
inline bool operator==(const MCTargetOptions &LHS, const MCTargetOptions &RHS) {
|
|
#define ARE_EQUAL(X) LHS.X == RHS.X
|
|
return (ARE_EQUAL(SanitizeAddress) &&
|
|
ARE_EQUAL(MCRelaxAll) &&
|
|
ARE_EQUAL(MCNoExecStack) &&
|
|
ARE_EQUAL(MCFatalWarnings) &&
|
|
ARE_EQUAL(MCNoWarn) &&
|
|
ARE_EQUAL(MCSaveTempLabels) &&
|
|
ARE_EQUAL(MCUseDwarfDirectory) &&
|
|
ARE_EQUAL(MCIncrementalLinkerCompatible) &&
|
|
ARE_EQUAL(ShowMCEncoding) &&
|
|
ARE_EQUAL(ShowMCInst) &&
|
|
ARE_EQUAL(AsmVerbose) &&
|
|
ARE_EQUAL(DwarfVersion) &&
|
|
ARE_EQUAL(ABIName));
|
|
#undef ARE_EQUAL
|
|
}
|
|
|
|
inline bool operator!=(const MCTargetOptions &LHS, const MCTargetOptions &RHS) {
|
|
return !(LHS == RHS);
|
|
}
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif
|