blob: 06d97325e54ad9b4c44d9e0222da7f6a54d34879 [file] [log] [blame]
Hemant Kulkarni927bbc22012-09-14 16:11:34 +00001//===- lib/ReaderWriter/ELF/ReferenceKinds.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
11#include "ReferenceKinds.h"
12
13#include "llvm/ADT/StringRef.h"
14#include "llvm/ADT/StringSwitch.h"
15
16#include "llvm/Support/ErrorHandling.h"
17#include "llvm/Support/ELF.h"
18namespace lld {
19namespace elf {
20
21//===----------------------------------------------------------------------===//
22// KindHandler
23//===----------------------------------------------------------------------===//
24
25KindHandler::KindHandler() {
26}
27
28KindHandler::~KindHandler() {
29}
30
Sid Manning42064e52012-10-09 02:20:47 +000031std::unique_ptr<KindHandler> KindHandler::makeHandler(uint16_t arch,
32 llvm::support::endianness endian) {
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000033 switch(arch) {
34 case llvm::ELF::EM_HEXAGON:
35 return std::unique_ptr<KindHandler>(new KindHandler_hexagon());
36 case llvm::ELF::EM_386:
37 return std::unique_ptr<KindHandler>(new KindHandler_x86());
Sid Manning42064e52012-10-09 02:20:47 +000038 case llvm::ELF::EM_PPC:
39 return std::unique_ptr<KindHandler>(new KindHandler_ppc(endian));
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000040 default:
41 llvm_unreachable("arch not supported");
42 }
43}
44
45//===----------------------------------------------------------------------===//
46// KindHandler_x86
47// TODO: more to do here
48//===----------------------------------------------------------------------===//
49
50KindHandler_x86::~KindHandler_x86() {}
51
52Reference::Kind KindHandler_x86::stringToKind(StringRef str) {
53 return llvm::StringSwitch<Reference::Kind>(str)
54 .Case("none", none)
55 .Default(invalid);
56}
57
58StringRef KindHandler_x86::kindToString(Reference::Kind kind) {
59 switch ( (Kinds)kind ) {
60 case invalid:
Sid Manning42064e52012-10-09 02:20:47 +000061 return "invalid";
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000062 case none:
Sid Manning42064e52012-10-09 02:20:47 +000063 return "none";
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000064 }
65 llvm_unreachable("invalid x86 Reference kind");
66}
67
68bool KindHandler_x86::isCallSite(Kind kind) {
69 llvm_unreachable("Unimplemented: KindHandler_x86::isCallSite");
70 return false;
71}
72
73bool KindHandler_x86::isPointer(Kind kind) {
74 llvm_unreachable("Unimplemented: KindHandler_x86::isPointer");
75 return false;
76}
77
78bool KindHandler_x86::isLazyImmediate(Kind kind) {
79 llvm_unreachable("Unimplemented: KindHandler_x86::isLazyImmediate");
80 return false;
81}
82
83bool KindHandler_x86::isLazyTarget(Kind kind) {
84 llvm_unreachable("Unimplemented: KindHandler_x86::isLazyTarget");
85 return false;
86}
87
Sid Manning42064e52012-10-09 02:20:47 +000088void KindHandler_x86::applyFixup(int32_t reloc, uint64_t addend,
89 uint8_t *location, uint64_t fixupAddress,
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000090 uint64_t targetAddress) {
Sid Manning42064e52012-10-09 02:20:47 +000091// TODO: Add reloc funcs for X86
92 return;
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000093}
94
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000095} // namespace elf
96} // namespace lld
97
98
99