blob: 3ff983a0c2e267d95e51f01b283de0f87e99aab3 [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
31std::unique_ptr<KindHandler> KindHandler::makeHandler(uint16_t arch) {
32 switch(arch) {
33 case llvm::ELF::EM_HEXAGON:
34 return std::unique_ptr<KindHandler>(new KindHandler_hexagon());
35 case llvm::ELF::EM_386:
36 return std::unique_ptr<KindHandler>(new KindHandler_x86());
37 default:
38 llvm_unreachable("arch not supported");
39 }
40}
41
42//===----------------------------------------------------------------------===//
43// KindHandler_x86
44// TODO: more to do here
45//===----------------------------------------------------------------------===//
46
47KindHandler_x86::~KindHandler_x86() {}
48
49Reference::Kind KindHandler_x86::stringToKind(StringRef str) {
50 return llvm::StringSwitch<Reference::Kind>(str)
51 .Case("none", none)
52 .Default(invalid);
53}
54
55StringRef KindHandler_x86::kindToString(Reference::Kind kind) {
56 switch ( (Kinds)kind ) {
57 case invalid:
58 return StringRef("invalid");
59 case none:
60 return StringRef("none");
61 }
62 llvm_unreachable("invalid x86 Reference kind");
63}
64
65bool KindHandler_x86::isCallSite(Kind kind) {
66 llvm_unreachable("Unimplemented: KindHandler_x86::isCallSite");
67 return false;
68}
69
70bool KindHandler_x86::isPointer(Kind kind) {
71 llvm_unreachable("Unimplemented: KindHandler_x86::isPointer");
72 return false;
73}
74
75bool KindHandler_x86::isLazyImmediate(Kind kind) {
76 llvm_unreachable("Unimplemented: KindHandler_x86::isLazyImmediate");
77 return false;
78}
79
80bool KindHandler_x86::isLazyTarget(Kind kind) {
81 llvm_unreachable("Unimplemented: KindHandler_x86::isLazyTarget");
82 return false;
83}
84
85
86void KindHandler_x86::applyFixup(Kind kind, uint64_t addend,
87 uint8_t *location, uint64_t fixupAddress,
88 uint64_t targetAddress) {
89 switch ((Kinds)kind) {
90 case none:
91 // do nothing
92 break;
93 case invalid:
94 assert(0 && "invalid Reference Kind");
95 break;
96 }
97}
98
99//===----------------------------------------------------------------------===//
100// KindHandler_hexagon
101// TODO: more to do here
102//===----------------------------------------------------------------------===//
103
104KindHandler_hexagon::~KindHandler_hexagon() {
105}
106
107Reference::Kind KindHandler_hexagon::stringToKind(StringRef str) {
108 return llvm::StringSwitch<Reference::Kind>(str)
109 .Case("none", none)
110 .Default(invalid);
111
112 llvm_unreachable("invalid hexagon Reference kind");
113}
114
115StringRef KindHandler_hexagon::kindToString(Reference::Kind kind) {
116 switch ( (Kinds)kind ) {
117 case invalid:
118 return StringRef("invalid");
119 case none:
120 return StringRef("none");
121 }
122 llvm_unreachable("invalid hexagon Reference kind");
123}
124
125bool KindHandler_hexagon::isCallSite(Kind kind) {
126 llvm_unreachable("Unimplemented: KindHandler_hexagon::isCallSite");
127 return false;
128}
129
130bool KindHandler_hexagon::isPointer(Kind kind) {
131 llvm_unreachable("Unimplemented: KindHandler_hexagon::isPointer");
132 return false;
133}
134
135bool KindHandler_hexagon::isLazyImmediate(Kind kind) {
136 llvm_unreachable("Unimplemented: KindHandler_hexagon::isLazyImmediate");
137 return false;
138}
139
140bool KindHandler_hexagon::isLazyTarget(Kind kind) {
141 llvm_unreachable("Unimplemented: KindHandler_hexagon::isLazyTarget");
142 return false;
143}
144
145
146void KindHandler_hexagon::applyFixup(Kind kind, uint64_t addend,
147 uint8_t *location, uint64_t fixupAddress,
148 uint64_t targetAddress) {
149 switch ((Kinds)kind) {
150 case none:
151 // do nothing
152 break;
153 case invalid:
154 llvm_unreachable("invalid Reference Kind");
155 break;
156 }
157}
158
159
160
161} // namespace elf
162} // namespace lld
163
164
165