[lld] r222983 - [Core] Add flag to check if RoundTripPasses need to be run.
Shankar Easwaran
shankare at codeaurora.org
Sun Nov 30 17:04:11 PST 2014
Author: shankare
Date: Sun Nov 30 19:04:11 2014
New Revision: 222983
URL: http://llvm.org/viewvc/llvm-project?rev=222983&view=rev
Log:
[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.
Modified:
lld/trunk/include/lld/Core/LinkingContext.h
lld/trunk/lib/Core/LinkingContext.cpp
lld/trunk/lib/Driver/Driver.cpp
Modified: lld/trunk/include/lld/Core/LinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/LinkingContext.h?rev=222983&r1=222982&r2=222983&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/LinkingContext.h (original)
+++ lld/trunk/include/lld/Core/LinkingContext.h Sun Nov 30 19:04:11 2014
@@ -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;
Modified: lld/trunk/lib/Core/LinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/LinkingContext.cpp?rev=222983&r1=222982&r2=222983&view=diff
==============================================================================
--- lld/trunk/lib/Core/LinkingContext.cpp (original)
+++ lld/trunk/lib/Core/LinkingContext.cpp Sun Nov 30 19:04:11 2014
@@ -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() {}
Modified: lld/trunk/lib/Driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/Driver.cpp?rev=222983&r1=222982&r2=222983&view=diff
==============================================================================
--- lld/trunk/lib/Driver/Driver.cpp (original)
+++ lld/trunk/lib/Driver/Driver.cpp Sun Nov 30 19:04:11 2014
@@ -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 &contex
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)));
}
More information about the llvm-commits
mailing list