diff options
| author | Sid Manning <sidneym@codeaurora.org> | 2012-10-09 02:20:47 +0000 |
|---|---|---|
| committer | Sid Manning <sidneym@codeaurora.org> | 2012-10-09 02:20:47 +0000 |
| commit | 42064e5b603e46abadc9adea24c49d5c1a4b259b (patch) | |
| tree | b148abf437ac41e38f931f51102df0846f105b99 /lld/lib/ReaderWriter/ELF/ReferenceKinds.cpp | |
| parent | 503eb2bb49f05c762fd79e42cb96ac6e86f0691e (diff) | |
| download | bcm5719-llvm-42064e5b603e46abadc9adea24c49d5c1a4b259b.tar.gz bcm5719-llvm-42064e5b603e46abadc9adea24c49d5c1a4b259b.zip | |
* Add relocation reference support for Hexagon and PowerPC.
- Hexagon has many relocation types, this patch covers just
a subset, more will be added.
- PowerPC support was added so that we can verify mixed endian
environments.
* Add some basic test cases
* Update ldd-core to accept -endian flag
llvm-svn: 165477
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/ReferenceKinds.cpp')
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/ReferenceKinds.cpp | 86 |
1 files changed, 10 insertions, 76 deletions
diff --git a/lld/lib/ReaderWriter/ELF/ReferenceKinds.cpp b/lld/lib/ReaderWriter/ELF/ReferenceKinds.cpp index 3ff983a0c2e..06d97325e54 100644 --- a/lld/lib/ReaderWriter/ELF/ReferenceKinds.cpp +++ b/lld/lib/ReaderWriter/ELF/ReferenceKinds.cpp @@ -28,12 +28,15 @@ KindHandler::KindHandler() { KindHandler::~KindHandler() { } -std::unique_ptr<KindHandler> KindHandler::makeHandler(uint16_t arch) { +std::unique_ptr<KindHandler> KindHandler::makeHandler(uint16_t arch, + llvm::support::endianness endian) { switch(arch) { case llvm::ELF::EM_HEXAGON: return std::unique_ptr<KindHandler>(new KindHandler_hexagon()); case llvm::ELF::EM_386: return std::unique_ptr<KindHandler>(new KindHandler_x86()); + case llvm::ELF::EM_PPC: + return std::unique_ptr<KindHandler>(new KindHandler_ppc(endian)); default: llvm_unreachable("arch not supported"); } @@ -55,9 +58,9 @@ Reference::Kind KindHandler_x86::stringToKind(StringRef str) { StringRef KindHandler_x86::kindToString(Reference::Kind kind) { switch ( (Kinds)kind ) { case invalid: - return StringRef("invalid"); + return "invalid"; case none: - return StringRef("none"); + return "none"; } llvm_unreachable("invalid x86 Reference kind"); } @@ -82,82 +85,13 @@ bool KindHandler_x86::isLazyTarget(Kind kind) { return false; } - -void KindHandler_x86::applyFixup(Kind kind, uint64_t addend, - uint8_t *location, uint64_t fixupAddress, - uint64_t targetAddress) { - switch ((Kinds)kind) { - case none: - // do nothing - break; - case invalid: - assert(0 && "invalid Reference Kind"); - break; - } -} - -//===----------------------------------------------------------------------===// -// KindHandler_hexagon -// TODO: more to do here -//===----------------------------------------------------------------------===// - -KindHandler_hexagon::~KindHandler_hexagon() { -} - -Reference::Kind KindHandler_hexagon::stringToKind(StringRef str) { - return llvm::StringSwitch<Reference::Kind>(str) - .Case("none", none) - .Default(invalid); - - llvm_unreachable("invalid hexagon Reference kind"); -} - -StringRef KindHandler_hexagon::kindToString(Reference::Kind kind) { - switch ( (Kinds)kind ) { - case invalid: - return StringRef("invalid"); - case none: - return StringRef("none"); - } - llvm_unreachable("invalid hexagon Reference kind"); -} - -bool KindHandler_hexagon::isCallSite(Kind kind) { - llvm_unreachable("Unimplemented: KindHandler_hexagon::isCallSite"); - return false; -} - -bool KindHandler_hexagon::isPointer(Kind kind) { - llvm_unreachable("Unimplemented: KindHandler_hexagon::isPointer"); - return false; -} - -bool KindHandler_hexagon::isLazyImmediate(Kind kind) { - llvm_unreachable("Unimplemented: KindHandler_hexagon::isLazyImmediate"); - return false; -} - -bool KindHandler_hexagon::isLazyTarget(Kind kind) { - llvm_unreachable("Unimplemented: KindHandler_hexagon::isLazyTarget"); - return false; -} - - -void KindHandler_hexagon::applyFixup(Kind kind, uint64_t addend, - uint8_t *location, uint64_t fixupAddress, +void KindHandler_x86::applyFixup(int32_t reloc, uint64_t addend, + uint8_t *location, uint64_t fixupAddress, uint64_t targetAddress) { - switch ((Kinds)kind) { - case none: - // do nothing - break; - case invalid: - llvm_unreachable("invalid Reference Kind"); - break; - } +// TODO: Add reloc funcs for X86 + return; } - - } // namespace elf } // namespace lld |

