From 9c222630e4c9c20eeaaa03ece4f0c2da56ea711c Mon Sep 17 00:00:00 2001 From: Jean-Daniel Dupas Date: Sun, 15 Feb 2015 15:23:48 +0000 Subject: Update ARM and x86 ArchHandler to check switch completeness. NFC Define an explicit type for arch specific reference kinds to make sure all cases are covered in switch statements. llvm-svn: 229314 --- lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp') diff --git a/lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp b/lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp index 2b77b7ce352..9701ad104bf 100644 --- a/lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp +++ b/lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp @@ -138,7 +138,7 @@ private: static const Registry::KindStrings _sKindStrings[]; static const StubInfo _sStubInfoArmPIC; - enum : Reference::KindValue { + enum Arm_Kinds : Reference::KindValue { invalid, /// for error condition modeThumbCode, /// Content starting at this offset is thumb. @@ -207,6 +207,7 @@ ArchHandler_arm::ArchHandler_arm() { } ArchHandler_arm::~ArchHandler_arm() { } const Registry::KindStrings ArchHandler_arm::_sKindStrings[] = { + LLD_KIND_STRING_ENTRY(invalid), LLD_KIND_STRING_ENTRY(modeThumbCode), LLD_KIND_STRING_ENTRY(modeArmCode), LLD_KIND_STRING_ENTRY(modeData), @@ -912,7 +913,7 @@ void ArchHandler_arm::applyFixupFinal(const Reference &ref, uint8_t *loc, int32_t displacement; uint16_t value16; uint32_t value32; - switch (ref.kindValue()) { + switch (static_cast(ref.kindValue())) { case modeThumbCode: thumbMode = true; break; @@ -1068,13 +1069,16 @@ void ArchHandler_arm::applyFixupRelocatable(const Reference &ref, uint8_t *loc, uint64_t inAtomAddress, bool &thumbMode, bool targetIsThumb) { + if (ref.kindNamespace() != Reference::KindNamespace::mach_o) + return; + assert(ref.kindArch() == Reference::KindArch::ARM); bool useExternalReloc = useExternalRelocationTo(*ref.target()); ulittle32_t *loc32 = reinterpret_cast(loc); int32_t displacement; uint16_t value16; uint32_t value32; bool targetIsUndef = isa(ref.target()); - switch (ref.kindValue()) { + switch (static_cast(ref.kindValue())) { case modeThumbCode: thumbMode = true; break; @@ -1168,7 +1172,7 @@ void ArchHandler_arm::applyFixupRelocatable(const Reference &ref, uint8_t *loc, case lazyImmediateLocation: // do nothing break; - default: + case invalid: llvm_unreachable("invalid ARM Reference Kind"); break; } @@ -1190,11 +1194,10 @@ void ArchHandler_arm::appendSectionRelocations( uint32_t targetAtomAddress; uint32_t fromAtomAddress; uint16_t other16; - switch (ref.kindValue()) { + switch (static_cast(ref.kindValue())) { case modeThumbCode: case modeArmCode: case modeData: - break; // Do nothing. break; case thumb_b22: @@ -1382,7 +1385,7 @@ void ArchHandler_arm::appendSectionRelocations( case lazyImmediateLocation: // do nothing break; - default: + case invalid: llvm_unreachable("invalid ARM Reference Kind"); break; } -- cgit v1.2.3