forked from OSchip/llvm-project
Remove YAML/Native round-trip passes.
The round-trip passes were introduced in r193300. The intention of the change was to make sure that LLD is capable of reading end writing such file formats. But that turned out to be yet another over-designed stuff that had been slowing down everyday development. The passes ran after the core linker and before the writer. If you had an additional piece of information that needs to be passed from front-end to the writer, you had to invent a way to save the data to YAML/Native. These passes forced us to do that even if that data was not needed to be represented neither in an object file nor in an executable/DSO. It doesn't make sense. We don't need these passes. http://reviews.llvm.org/D7480 llvm-svn: 230069
This commit is contained in:
parent
860660ea5e
commit
2c64aef35f
|
@ -1,39 +0,0 @@
|
|||
//===--Passes/RoundTripNativePass.h - Write Native file/Read it back------===//
|
||||
//
|
||||
// The LLVM Linker
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLD_PASSES_ROUND_TRIP_NATIVE_PASS_H
|
||||
#define LLD_PASSES_ROUND_TRIP_NATIVE_PASS_H
|
||||
|
||||
#include "lld/Core/File.h"
|
||||
#include "lld/Core/LinkingContext.h"
|
||||
#include "lld/Core/Pass.h"
|
||||
#include <vector>
|
||||
|
||||
namespace lld {
|
||||
class RoundTripNativePass : public Pass {
|
||||
public:
|
||||
RoundTripNativePass(LinkingContext &context) : Pass(), _context(context) {}
|
||||
|
||||
/// Writes to a native file and reads the atoms from the native file back.
|
||||
/// Replaces mergedFile with the contents of the native File.
|
||||
void perform(std::unique_ptr<MutableFile> &mergedFile) override;
|
||||
|
||||
virtual ~RoundTripNativePass() {}
|
||||
|
||||
private:
|
||||
LinkingContext &_context;
|
||||
// Keep the parsed file alive for the rest of the link. All atoms
|
||||
// that are created by the RoundTripNativePass are owned by the
|
||||
// nativeFile.
|
||||
std::vector<std::unique_ptr<File> > _nativeFile;
|
||||
};
|
||||
|
||||
} // namespace lld
|
||||
|
||||
#endif // LLD_PASSES_ROUND_TRIP_NATIVE_PASS_H
|
|
@ -1,39 +0,0 @@
|
|||
//===--Passes/RoundTripYAMLPass.h- Write YAML file/Read it back-----------===//
|
||||
//
|
||||
// The LLVM Linker
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLD_PASSES_ROUND_TRIP_YAML_PASS_H
|
||||
#define LLD_PASSES_ROUND_TRIP_YAML_PASS_H
|
||||
|
||||
#include "lld/Core/File.h"
|
||||
#include "lld/Core/LinkingContext.h"
|
||||
#include "lld/Core/Pass.h"
|
||||
#include <vector>
|
||||
|
||||
namespace lld {
|
||||
class RoundTripYAMLPass : public Pass {
|
||||
public:
|
||||
RoundTripYAMLPass(LinkingContext &context) : Pass(), _context(context) {}
|
||||
|
||||
/// Writes to a YAML file and reads the atoms from the YAML file back.
|
||||
/// Replaces the mergedFile with new contents.
|
||||
void perform(std::unique_ptr<MutableFile> &mergedFile) override;
|
||||
|
||||
virtual ~RoundTripYAMLPass() {}
|
||||
|
||||
private:
|
||||
LinkingContext &_context;
|
||||
// Keep the parsed file alive for the rest of the link. All atoms
|
||||
// that are created by the RoundTripYAMLPass are owned by the
|
||||
// yamlFile.
|
||||
std::vector<std::unique_ptr<File> > _yamlFile;
|
||||
};
|
||||
|
||||
} // namespace lld
|
||||
|
||||
#endif // LLD_PASSES_ROUND_TRIP_YAML_PASS_H
|
|
@ -1,5 +1,4 @@
|
|||
add_subdirectory(Config)
|
||||
add_subdirectory(Core)
|
||||
add_subdirectory(Driver)
|
||||
add_subdirectory(Passes)
|
||||
add_subdirectory(ReaderWriter)
|
||||
|
|
|
@ -20,7 +20,6 @@ add_llvm_library(lldDriver
|
|||
WinLinkModuleDef.cpp
|
||||
LINK_LIBS
|
||||
lldConfig
|
||||
lldPasses
|
||||
lldMachO
|
||||
lldPECOFF
|
||||
lldELF
|
||||
|
|
|
@ -17,8 +17,6 @@
|
|||
#include "lld/Core/Resolver.h"
|
||||
#include "lld/Core/Writer.h"
|
||||
#include "lld/Driver/Driver.h"
|
||||
#include "lld/Passes/RoundTripNativePass.h"
|
||||
#include "lld/Passes/RoundTripYAMLPass.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/ADT/StringSwitch.h"
|
||||
#include "llvm/Option/Arg.h"
|
||||
|
@ -116,17 +114,6 @@ bool Driver::link(LinkingContext &context, raw_ostream &diagnostics) {
|
|||
ScopedTask passTask(getDefaultDomain(), "Passes");
|
||||
PassManager pm;
|
||||
context.addPasses(pm);
|
||||
|
||||
#ifndef NDEBUG
|
||||
llvm::Optional<std::string> env =
|
||||
llvm::sys::Process::GetEnv("LLD_RUN_ROUNDTRIP_TEST");
|
||||
|
||||
if (env.hasValue() && !env.getValue().empty()) {
|
||||
pm.add(llvm::make_unique<RoundTripYAMLPass>(context));
|
||||
pm.add(llvm::make_unique<RoundTripNativePass>(context));
|
||||
}
|
||||
#endif
|
||||
|
||||
pm.runOnFile(merged);
|
||||
passTask.end();
|
||||
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
add_llvm_library(lldPasses
|
||||
RoundTripNativePass.cpp
|
||||
RoundTripYAMLPass.cpp
|
||||
LINK_LIBS
|
||||
lldCore
|
||||
lldNative
|
||||
lldYAML
|
||||
LLVMSupport
|
||||
)
|
|
@ -1,13 +0,0 @@
|
|||
##===- lld/lib/Passes/Makefile ---------------------------*- Makefile -*-===##
|
||||
#
|
||||
# The LLVM Compiler Infrastructure
|
||||
#
|
||||
# This file is distributed under the University of Illinois Open Source
|
||||
# License. See LICENSE.TXT for details.
|
||||
#
|
||||
##===----------------------------------------------------------------------===##
|
||||
|
||||
LLD_LEVEL := ../..
|
||||
LIBRARYNAME := lldPasses
|
||||
|
||||
include $(LLD_LEVEL)/Makefile
|
|
@ -1,53 +0,0 @@
|
|||
//===--Passes/RoundTripNativePass.cpp - Write Native file/Read it back-----===//
|
||||
//
|
||||
// The LLVM Linker
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "lld/Core/Instrumentation.h"
|
||||
#include "lld/Core/Simple.h"
|
||||
#include "lld/Core/Writer.h"
|
||||
#include "lld/Passes/RoundTripNativePass.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
#include <memory>
|
||||
|
||||
using namespace lld;
|
||||
|
||||
#define DEBUG_TYPE "RoundTripNativePass"
|
||||
|
||||
/// Perform the actual pass
|
||||
void RoundTripNativePass::perform(std::unique_ptr<MutableFile> &mergedFile) {
|
||||
ScopedTask task(getDefaultDomain(), "RoundTripNativePass");
|
||||
std::unique_ptr<Writer> nativeWriter = createWriterNative();
|
||||
SmallString<128> tmpNativeFile;
|
||||
// Separate the directory from the filename
|
||||
StringRef outFile = llvm::sys::path::filename(_context.outputPath());
|
||||
if (llvm::sys::fs::createTemporaryFile(outFile, "native", tmpNativeFile))
|
||||
return;
|
||||
DEBUG(llvm::dbgs() << "RoundTripNativePass: " << tmpNativeFile << "\n");
|
||||
|
||||
// The file that is written would be kept around if there is a problem
|
||||
// writing to the file or when reading atoms back from the file.
|
||||
nativeWriter->writeFile(*mergedFile, tmpNativeFile.str());
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> mb =
|
||||
MemoryBuffer::getFile(tmpNativeFile.str());
|
||||
if (!mb)
|
||||
return;
|
||||
|
||||
std::error_code ec = _context.registry().loadFile(
|
||||
std::move(mb.get()), _nativeFile);
|
||||
if (ec) {
|
||||
// Note: we need a way for Passes to report errors.
|
||||
llvm_unreachable("native reader not registered or read error");
|
||||
}
|
||||
File *objFile = _nativeFile[0].get();
|
||||
if (objFile->parse())
|
||||
llvm_unreachable("native reader parse error");
|
||||
mergedFile.reset(new SimpleFile(objFile->path()));
|
||||
copyAtoms(mergedFile.get(), objFile);
|
||||
llvm::sys::fs::remove(tmpNativeFile.str());
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
//===--Passes/RoundTripYAMLPass.cpp - Write YAML file/Read it back---------===//
|
||||
//
|
||||
// The LLVM Linker
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "lld/Core/Instrumentation.h"
|
||||
#include "lld/Core/Simple.h"
|
||||
#include "lld/Core/Writer.h"
|
||||
#include "lld/Passes/RoundTripYAMLPass.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
#include <memory>
|
||||
|
||||
using namespace lld;
|
||||
|
||||
#define DEBUG_TYPE "RoundTripYAMLPass"
|
||||
|
||||
/// Perform the actual pass
|
||||
void RoundTripYAMLPass::perform(std::unique_ptr<MutableFile> &mergedFile) {
|
||||
ScopedTask task(getDefaultDomain(), "RoundTripYAMLPass");
|
||||
std::unique_ptr<Writer> yamlWriter = createWriterYAML(_context);
|
||||
SmallString<128> tmpYAMLFile;
|
||||
// Separate the directory from the filename
|
||||
StringRef outFile = llvm::sys::path::filename(_context.outputPath());
|
||||
if (llvm::sys::fs::createTemporaryFile(outFile, "yaml", tmpYAMLFile))
|
||||
return;
|
||||
DEBUG(llvm::dbgs() << "RoundTripYAMLPass: " << tmpYAMLFile << "\n");
|
||||
|
||||
// The file that is written would be kept around if there is a problem
|
||||
// writing to the file or when reading atoms back from the file.
|
||||
yamlWriter->writeFile(*mergedFile, tmpYAMLFile.str());
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> mb =
|
||||
MemoryBuffer::getFile(tmpYAMLFile.str());
|
||||
if (!mb)
|
||||
return;
|
||||
|
||||
std::error_code ec = _context.registry().loadFile(
|
||||
std::move(mb.get()), _yamlFile);
|
||||
if (ec) {
|
||||
// Note: we need a way for Passes to report errors.
|
||||
llvm_unreachable("yaml reader not registered or read error");
|
||||
}
|
||||
File *objFile = _yamlFile[0].get();
|
||||
if (objFile->parse())
|
||||
llvm_unreachable("native reader parse error");
|
||||
mergedFile.reset(new SimpleFile(objFile->path()));
|
||||
copyAtoms(mergedFile.get(), objFile);
|
||||
llvm::sys::fs::remove(tmpYAMLFile.str());
|
||||
}
|
|
@ -14,7 +14,6 @@ add_llvm_library(lldReaderWriter
|
|||
LinkerScript.cpp
|
||||
LINK_LIBS
|
||||
lldCore
|
||||
lldPasses
|
||||
lldYAML
|
||||
LLVMObject
|
||||
LLVMSupport
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include "lld/Core/Pass.h"
|
||||
#include "lld/Core/PassManager.h"
|
||||
#include "lld/Core/Simple.h"
|
||||
#include "lld/Passes/RoundTripYAMLPass.h"
|
||||
#include "lld/ReaderWriter/CoreLinkingContext.h"
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ add_llvm_library(lldELF
|
|||
Writer.cpp
|
||||
LINK_LIBS
|
||||
lldCore
|
||||
lldPasses
|
||||
lldYAML
|
||||
LLVMSupport
|
||||
)
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
#include "TargetHandler.h"
|
||||
#include "lld/Core/Instrumentation.h"
|
||||
#include "lld/Core/SharedLibraryFile.h"
|
||||
#include "lld/Passes/RoundTripYAMLPass.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/Config/config.h"
|
||||
#include "llvm/Support/ELF.h"
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
|
||||
LLD_LEVEL := ../../..
|
||||
LIBRARYNAME := lldELF
|
||||
USEDLIBS = lldPasses.a
|
||||
|
||||
CPP.Flags += -I$(PROJ_SRC_DIR)/$(LLD_LEVEL)/lib/ReaderWriter/ELF
|
||||
|
||||
|
|
|
@ -18,7 +18,6 @@ add_llvm_library(lldMachO
|
|||
WriterMachO.cpp
|
||||
LINK_LIBS
|
||||
lldCore
|
||||
lldPasses
|
||||
lldYAML
|
||||
LLVMObject
|
||||
LLVMSupport
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#include "lld/Core/Reader.h"
|
||||
#include "lld/Core/Writer.h"
|
||||
#include "lld/Driver/Driver.h"
|
||||
#include "lld/Passes/RoundTripYAMLPass.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/Config/config.h"
|
||||
|
|
|
@ -11,7 +11,6 @@ add_llvm_library(lldPECOFF
|
|||
WriterPECOFF.cpp
|
||||
LINK_LIBS
|
||||
lldCore
|
||||
lldPasses
|
||||
LLVMObject
|
||||
LLVMSupport
|
||||
)
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
# Check that LLD shows an error if ADDIUPC immediate is out of range.
|
||||
|
||||
# RUN: yaml2obj -format=elf %s > %t-obj
|
||||
# RUN: env LLD_RUN_ROUNDTRIP_TEST= \
|
||||
# RUN: lld -flavor gnu -target mipsel -o %t-exe %t-obj 2>&1 | FileCheck %s
|
||||
# RUN: lld -flavor gnu -target mipsel -o %t-exe %t-obj 2>&1 | FileCheck %s
|
||||
|
||||
# CHECK: The addiupc instruction immediate 0x02000008 is out of range
|
||||
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
# This tests the functionality of the RoundTrip Passes and verifies
|
||||
# that the atoms belong to the native file after the passes finish
|
||||
|
||||
# REQUIRES: asserts
|
||||
|
||||
RUN: lld -flavor gnu -target x86_64 %p/Inputs/foo.o.x86-64 --noinhibit-exec \
|
||||
RUN: --output-filetype=yaml -o %t1
|
||||
RUN: FileCheck %s < %t1
|
||||
|
||||
CHECK:path:{{.*}}.native
|
||||
|
|
@ -28,9 +28,6 @@ config.suffixes = ['.objtxt', '.test']
|
|||
# test_source_root: The root path where tests are located.
|
||||
config.test_source_root = os.path.dirname(__file__)
|
||||
|
||||
# run RoundTrip{YAML,Native}Tests.
|
||||
config.environment['LLD_RUN_ROUNDTRIP_TEST'] = '1'
|
||||
|
||||
# test_exec_root: The root path where tests should be run.
|
||||
lld_obj_root = getattr(config, 'lld_obj_root', None)
|
||||
if lld_obj_root is not None:
|
||||
|
|
|
@ -20,7 +20,7 @@ include $(LEVEL)/Makefile.config
|
|||
|
||||
LINK_COMPONENTS := $(TARGETS_TO_BUILD)
|
||||
USEDLIBS = lldDriver.a lldConfig.a \
|
||||
lldELF.a lldMachO.a lldPasses.a lldPECOFF.a lldYAML.a \
|
||||
lldELF.a lldMachO.a lldPECOFF.a lldYAML.a \
|
||||
lldReaderWriter.a lldCore.a lldNative.a \
|
||||
lldHexagonELFTarget.a lldMipsELFTarget.a \
|
||||
lldX86ELFTarget.a lldX86_64ELFTarget.a lldAArch64ELFTarget.a \
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
LLD_LEVEL = ../..
|
||||
TESTNAME = DriverTests
|
||||
USEDLIBS = lldDriver.a lldConfig.a \
|
||||
lldELF.a lldMachO.a lldPasses.a lldPECOFF.a \
|
||||
lldELF.a lldMachO.a lldPECOFF.a \
|
||||
lldCore.a lldNative.a lldReaderWriter.a \
|
||||
lldHexagonELFTarget.a lldMipsELFTarget.a \
|
||||
lldX86ELFTarget.a lldX86_64ELFTarget.a lldYAML.a \
|
||||
|
|
Loading…
Reference in New Issue