]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h
Vendor import of lld trunk r233088:
[FreeBSD/FreeBSD.git] / lib / ReaderWriter / ELF / X86_64 / X86_64ELFReader.h
1 //===- lib/ReaderWriter/ELF/X86_64/X86_64ELFReader.h ----------------------===//
2 //
3 //                             The LLVM Linker
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef LLD_READER_WRITER_X86_64_X86_64_ELF_READER_H
11 #define LLD_READER_WRITER_X86_64_X86_64_ELF_READER_H
12
13 #include "ELFReader.h"
14 #include "X86_64ELFFile.h"
15
16 namespace lld {
17 namespace elf {
18
19 typedef llvm::object::ELFType<llvm::support::little, 2, true> X86_64ELFType;
20
21 struct X86_64DynamicFileCreateELFTraits {
22   typedef llvm::ErrorOr<std::unique_ptr<lld::SharedLibraryFile>> result_type;
23
24   template <class ELFT>
25   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
26                             X86_64LinkingContext &ctx) {
27     return lld::elf::X86_64DynamicFile<ELFT>::create(std::move(mb), ctx);
28   }
29 };
30
31 struct X86_64ELFFileCreateELFTraits {
32   typedef llvm::ErrorOr<std::unique_ptr<lld::File>> result_type;
33
34   template <class ELFT>
35   static result_type create(std::unique_ptr<llvm::MemoryBuffer> mb,
36                             X86_64LinkingContext &ctx) {
37     return lld::elf::X86_64ELFFile<ELFT>::create(std::move(mb), ctx);
38   }
39 };
40
41 class X86_64ELFObjectReader
42     : public ELFObjectReader<X86_64ELFType, X86_64ELFFileCreateELFTraits,
43                              X86_64LinkingContext> {
44 public:
45   X86_64ELFObjectReader(X86_64LinkingContext &ctx)
46       : ELFObjectReader<X86_64ELFType, X86_64ELFFileCreateELFTraits,
47                         X86_64LinkingContext>(ctx, llvm::ELF::EM_X86_64) {}
48 };
49
50 class X86_64ELFDSOReader
51     : public ELFDSOReader<X86_64ELFType, X86_64DynamicFileCreateELFTraits,
52                           X86_64LinkingContext> {
53 public:
54   X86_64ELFDSOReader(X86_64LinkingContext &ctx)
55       : ELFDSOReader<X86_64ELFType, X86_64DynamicFileCreateELFTraits,
56                      X86_64LinkingContext>(ctx, llvm::ELF::EM_X86_64) {}
57 };
58
59 } // namespace elf
60 } // namespace lld
61
62 #endif // LLD_READER_WRITER_ELF_X86_64_X86_64_READER_H