diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2015-03-24 21:31:36 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2015-03-24 21:31:36 +0000 |
commit | fb911942f1434f3d1750f83f25f5e42c80e60638 (patch) | |
tree | 1678c4a4f0182e4029a86d135aa4a1b7d09e3c41 /lib/ReaderWriter/ELF/X86_64/ExampleSubTarget |
Notes
Diffstat (limited to 'lib/ReaderWriter/ELF/X86_64/ExampleSubTarget')
6 files changed, 146 insertions, 0 deletions
diff --git a/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/CMakeLists.txt b/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/CMakeLists.txt new file mode 100644 index 0000000000000..d13c98008e55f --- /dev/null +++ b/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/CMakeLists.txt @@ -0,0 +1,11 @@ +add_llvm_library(lldExampleSubTarget + ExampleLinkingContext.cpp + ExampleTargetHandler.cpp + LINK_LIBS + lldX86_64ELFTarget + lldELF + lldReaderWriter + lldCore + LLVMObject + LLVMSupport + ) diff --git a/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.cpp b/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.cpp new file mode 100644 index 0000000000000..dbbb3ad3bc90d --- /dev/null +++ b/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.cpp @@ -0,0 +1,35 @@ +//===- lib/ReaderWriter/ELF/X86_64/ExampleTarget/ExampleLinkingContext.cpp ----===// +// +// The LLVM Linker +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "ExampleLinkingContext.h" +#include "ExampleTargetHandler.h" + +using namespace lld; +using namespace elf; + +std::unique_ptr<ELFLinkingContext> +ExampleLinkingContext::create(llvm::Triple triple) { + if (triple.getVendorName() == "example") + return llvm::make_unique<ExampleLinkingContext>(triple); + return nullptr; +} + +ExampleLinkingContext::ExampleLinkingContext(llvm::Triple triple) + : X86_64LinkingContext(triple, std::unique_ptr<TargetHandlerBase>( + new ExampleTargetHandler(*this))) { + _outputELFType = llvm::ELF::ET_LOPROC; +} + +StringRef ExampleLinkingContext::entrySymbolName() const { + return "_start"; +} + +void ExampleLinkingContext::addPasses(PassManager &p) { + ELFLinkingContext::addPasses(p); +} diff --git a/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.h b/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.h new file mode 100644 index 0000000000000..5bb11cd35b41e --- /dev/null +++ b/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.h @@ -0,0 +1,31 @@ +//===- lib/ReaderWriter/ELF/X86_64/ExampleTarget/ExampleLinkingContext.h --===// +// +// The LLVM Linker +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLD_READER_WRITER_ELF_X86_64_EXAMPLE_TARGET_EXAMPLE_LINKING_CONTEXT +#define LLD_READER_WRITER_ELF_X86_64_EXAMPLE_TARGET_EXAMPLE_LINKING_CONTEXT + +#include "X86_64LinkingContext.h" +#include "X86_64TargetHandler.h" + +namespace lld { +namespace elf { + +class ExampleLinkingContext final : public X86_64LinkingContext { +public: + static std::unique_ptr<ELFLinkingContext> create(llvm::Triple); + ExampleLinkingContext(llvm::Triple triple); + + StringRef entrySymbolName() const override; + void addPasses(PassManager &) override; +}; + +} // end namespace elf +} // end namespace lld + +#endif diff --git a/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleTargetHandler.cpp b/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleTargetHandler.cpp new file mode 100644 index 0000000000000..b66b0d903f6a4 --- /dev/null +++ b/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleTargetHandler.cpp @@ -0,0 +1,23 @@ +//===- lib/ReaderWriter/ELF/X86_64/ExampleTarget/ExampleTargetHandler.cpp -===// +// +// The LLVM Linker +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "ExampleTargetHandler.h" +#include "X86_64ExecutableWriter.h" +#include "ExampleLinkingContext.h" + +using namespace lld; +using namespace elf; + +ExampleTargetHandler::ExampleTargetHandler(ExampleLinkingContext &c) + : X86_64TargetHandler(c), _exampleContext(c) {} + +std::unique_ptr<Writer> ExampleTargetHandler::getWriter() { + return std::unique_ptr<Writer>( + new X86_64ExecutableWriter(_exampleContext, *_x86_64TargetLayout)); +} diff --git a/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleTargetHandler.h b/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleTargetHandler.h new file mode 100644 index 0000000000000..19a642113359f --- /dev/null +++ b/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleTargetHandler.h @@ -0,0 +1,31 @@ +//===- lib/ReaderWriter/ELF/X86_64/ExampleTarget/ExampleTargetHandler.h ---===// +// +// The LLVM Linker +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLD_READER_WRITER_ELF_X86_64_EXAMPLE_TARGET_EXAMPLE_TARGET_HANDLER_H +#define LLD_READER_WRITER_ELF_X86_64_EXAMPLE_TARGET_EXAMPLE_TARGET_HANDLER_H + +#include "X86_64TargetHandler.h" + +namespace lld { +namespace elf { +class ExampleLinkingContext; + +class ExampleTargetHandler final : public X86_64TargetHandler { +public: + ExampleTargetHandler(ExampleLinkingContext &c); + + std::unique_ptr<Writer> getWriter() override; + +private: + ExampleLinkingContext &_exampleContext; +}; +} // end namespace elf +} // end namespace lld + +#endif diff --git a/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/Makefile b/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/Makefile new file mode 100644 index 0000000000000..8f0b0fead1f69 --- /dev/null +++ b/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/Makefile @@ -0,0 +1,15 @@ +##===- lld/lib/ReaderWriter/ELF/X86_64/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 := lldExampleSubTarget +USEDLIBS = lldX86_64ELFTarget.a +CPP.Flags += -I$(PROJ_SRC_DIR)/$(LLD_LEVEL)/lib/ReaderWriter/ELF + +include $(LLD_LEVEL)/Makefile |