blob: 083e843237ce1944d06866cade3ff749044b5fad [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
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000010#include "ReferenceKinds.h"
11
12#include "llvm/ADT/StringRef.h"
13#include "llvm/ADT/StringSwitch.h"
14
15#include "llvm/Support/ErrorHandling.h"
16#include "llvm/Support/ELF.h"
Michael J. Spencerb14ac9b2013-01-05 00:46:10 +000017
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000018namespace lld {
19namespace elf {
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000020KindHandler::KindHandler() {
21}
22
23KindHandler::~KindHandler() {
24}
25
Michael J. Spencerb14ac9b2013-01-05 00:46:10 +000026std::unique_ptr<KindHandler>
27KindHandler::makeHandler(uint16_t arch, llvm::support::endianness endian) {
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000028 switch(arch) {
29 case llvm::ELF::EM_HEXAGON:
Sid Manning823e8bb2012-10-25 17:53:04 +000030 return std::unique_ptr<KindHandler>(new HexagonKindHandler());
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000031 case llvm::ELF::EM_386:
Sid Manning823e8bb2012-10-25 17:53:04 +000032 return std::unique_ptr<KindHandler>(new X86KindHandler());
Michael J. Spencer31244222013-01-05 00:47:04 +000033 case llvm::ELF::EM_X86_64:
34 return std::unique_ptr<KindHandler>(new X86_64KindHandler());
Sid Manning42064e52012-10-09 02:20:47 +000035 case llvm::ELF::EM_PPC:
Sid Manning823e8bb2012-10-25 17:53:04 +000036 return std::unique_ptr<KindHandler>(new PPCKindHandler(endian));
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000037 default:
38 llvm_unreachable("arch not supported");
39 }
40}
Hemant Kulkarni927bbc22012-09-14 16:11:34 +000041} // namespace elf
42} // namespace lld