]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp
Vendor import of lld trunk r233088:
[FreeBSD/FreeBSD.git] / lib / ReaderWriter / ELF / X86 / X86TargetHandler.cpp
1 //===- lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp ----------------------===//
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 #include "X86TargetHandler.h"
11 #include "X86DynamicLibraryWriter.h"
12 #include "X86ExecutableWriter.h"
13 #include "X86LinkingContext.h"
14 #include "X86RelocationHandler.h"
15
16 using namespace lld;
17 using namespace elf;
18
19 using namespace llvm::ELF;
20
21 std::unique_ptr<Writer> X86TargetHandler::getWriter() {
22   switch (_x86LinkingContext.getOutputELFType()) {
23   case llvm::ELF::ET_EXEC:
24     return std::unique_ptr<Writer>(new X86ExecutableWriter<X86ELFType>(
25         _x86LinkingContext, *_x86TargetLayout.get()));
26   case llvm::ELF::ET_DYN:
27     return std::unique_ptr<Writer>(new X86DynamicLibraryWriter<X86ELFType>(
28         _x86LinkingContext, *_x86TargetLayout.get()));
29   case llvm::ELF::ET_REL:
30     llvm_unreachable("TODO: support -r mode");
31   default:
32     llvm_unreachable("unsupported output type");
33   }
34 }
35
36 #define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name),
37
38 const Registry::KindStrings X86TargetHandler::kindStrings[] = {
39 #include "llvm/Support/ELFRelocs/i386.def"
40   LLD_KIND_STRING_END
41 };
42
43 #undef ELF_RELOC
44
45 void X86TargetHandler::registerRelocationNames(Registry &registry) {
46   registry.addKindTable(Reference::KindNamespace::ELF, Reference::KindArch::x86,
47                         kindStrings);
48 }
49
50 X86TargetHandler::X86TargetHandler(X86LinkingContext &context)
51     : _x86LinkingContext(context),
52       _x86TargetLayout(new X86TargetLayout<X86ELFType>(context)),
53       _x86RelocationHandler(new X86TargetRelocationHandler()) {}