forked from OSchip/llvm-project
[Core] Add flag to check if RoundTripPasses need to be run.
This would allow other flavor specific contexts to override the default value, if they want to optionally run the round trip passes. There is some information lost like the original file owner of the atom with RoundTripPasses. The Gnu flavor needs this information inorder to implement LinkerScript matching and for other diagnostic outputs such as Map files. The flag also can be used to record information in the Atom if the information to the Writer needs to be conveyed through References too. llvm-svn: 222983
This commit is contained in:
parent
a0184368d6
commit
2895527ec2
|
@ -318,8 +318,15 @@ public:
|
|||
/// Return the next ordinal and Increment it.
|
||||
virtual uint64_t getNextOrdinalAndIncrement() const { return _nextOrdinal++; }
|
||||
|
||||
/// @}
|
||||
#ifndef NDEBUG
|
||||
void setRunRoundTripPass(bool roundTripPass) {
|
||||
_runRoundTripPasses = roundTripPass;
|
||||
}
|
||||
|
||||
bool runRoundTripPass() const { return _runRoundTripPasses; }
|
||||
#endif
|
||||
|
||||
/// @}
|
||||
protected:
|
||||
LinkingContext(); // Must be subclassed
|
||||
|
||||
|
@ -350,6 +357,9 @@ protected:
|
|||
bool _allowRemainingUndefines;
|
||||
bool _logInputFiles;
|
||||
bool _allowShlibUndefines;
|
||||
#ifndef NDEBUG
|
||||
bool _runRoundTripPasses;
|
||||
#endif
|
||||
OutputFileType _outputFileType;
|
||||
std::vector<StringRef> _deadStripRoots;
|
||||
std::map<std::string, std::string> _aliasSymbols;
|
||||
|
|
|
@ -13,9 +13,28 @@
|
|||
#include "lld/Core/Simple.h"
|
||||
#include "lld/ReaderWriter/Writer.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/Support/Process.h"
|
||||
|
||||
namespace lld {
|
||||
|
||||
#ifndef NDEBUG
|
||||
LinkingContext::LinkingContext()
|
||||
: _deadStrip(false), _allowDuplicates(false),
|
||||
_globalsAreDeadStripRoots(false),
|
||||
_searchArchivesToOverrideTentativeDefinitions(false),
|
||||
_searchSharedLibrariesToOverrideTentativeDefinitions(false),
|
||||
_warnIfCoalesableAtomsHaveDifferentCanBeNull(false),
|
||||
_warnIfCoalesableAtomsHaveDifferentLoadName(false),
|
||||
_printRemainingUndefines(true), _allowRemainingUndefines(false),
|
||||
_logInputFiles(false), _allowShlibUndefines(false),
|
||||
_runRoundTripPasses(false), _outputFileType(OutputFileType::Default),
|
||||
_nextOrdinal(0) {
|
||||
llvm::Optional<std::string> env =
|
||||
llvm::sys::Process::GetEnv("LLD_RUN_ROUNDTRIP_TEST");
|
||||
if (env.hasValue() && !env.getValue().empty())
|
||||
setRunRoundTripPass(true);
|
||||
}
|
||||
#else
|
||||
LinkingContext::LinkingContext()
|
||||
: _deadStrip(false), _allowDuplicates(false),
|
||||
_globalsAreDeadStripRoots(false),
|
||||
|
@ -26,6 +45,7 @@ LinkingContext::LinkingContext()
|
|||
_printRemainingUndefines(true), _allowRemainingUndefines(false),
|
||||
_logInputFiles(false), _allowShlibUndefines(false),
|
||||
_outputFileType(OutputFileType::Default), _nextOrdinal(0) {}
|
||||
#endif
|
||||
|
||||
LinkingContext::~LinkingContext() {}
|
||||
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
#include "llvm/Support/Process.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <mutex>
|
||||
|
||||
|
@ -114,8 +113,7 @@ bool Driver::link(LinkingContext &context, raw_ostream &diagnostics) {
|
|||
context.addPasses(pm);
|
||||
|
||||
#ifndef NDEBUG
|
||||
llvm::Optional<std::string> env = llvm::sys::Process::GetEnv("LLD_RUN_ROUNDTRIP_TEST");
|
||||
if (env.hasValue() && !env.getValue().empty()) {
|
||||
if (context.runRoundTripPass()) {
|
||||
pm.add(std::unique_ptr<Pass>(new RoundTripYAMLPass(context)));
|
||||
pm.add(std::unique_ptr<Pass>(new RoundTripNativePass(context)));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue