diff options
author | Pete Cooper <peter_cooper@apple.com> | 2015-12-14 23:10:52 +0000 |
---|---|---|
committer | Pete Cooper <peter_cooper@apple.com> | 2015-12-14 23:10:52 +0000 |
commit | 6a5def90d9a0416efc15f8c0fcd15b24e269e7ff (patch) | |
tree | f7b08c41a2db03f0e2447f7e6bdd44774a2e6977 /llvm/tools/llvm-objdump/MachODump.cpp | |
parent | 2a83045ab140dd535ff1f6f0f94891213af61f0c (diff) | |
download | bcm5719-llvm-6a5def90d9a0416efc15f8c0fcd15b24e269e7ff.tar.gz bcm5719-llvm-6a5def90d9a0416efc15f8c0fcd15b24e269e7ff.zip |
Factor out some duplication. NFC.
llvm-svn: 255569
Diffstat (limited to 'llvm/tools/llvm-objdump/MachODump.cpp')
-rw-r--r-- | llvm/tools/llvm-objdump/MachODump.cpp | 64 |
1 files changed, 20 insertions, 44 deletions
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp index 2fd0751dd8c..65de70c58e0 100644 --- a/llvm/tools/llvm-objdump/MachODump.cpp +++ b/llvm/tools/llvm-objdump/MachODump.cpp @@ -6771,6 +6771,22 @@ static unsigned getSizeForEncoding(bool is64Bit, } } +static uint64_t readPointer(const char *&Pos, bool is64Bit, unsigned Encoding) { + switch (getSizeForEncoding(is64Bit, Encoding)) { + case 2: + return readNext<uint16_t>(Pos); + break; + case 4: + return readNext<uint32_t>(Pos); + break; + case 8: + return readNext<uint64_t>(Pos); + break; + default: + llvm_unreachable("Illegal data size"); + } +} + static void printMachOEHFrameSection(const MachOObjectFile *Obj, std::map<uint64_t, SymbolRef> &Symbols, const SectionRef &EHFrame) { @@ -6867,19 +6883,7 @@ static void printMachOEHFrameSection(const MachOObjectFile *Obj, case 'P': { assert(!Personality && "Duplicate personality"); PersonalityEncoding = readNext<uint8_t>(Pos); - switch (getSizeForEncoding(is64Bit, *PersonalityEncoding)) { - case 2: - Personality = readNext<uint16_t>(Pos); - break; - case 4: - Personality = readNext<uint32_t>(Pos); - break; - case 8: - Personality = readNext<uint64_t>(Pos); - break; - default: - llvm_unreachable("Illegal data size"); - } + Personality = readPointer(Pos, is64Bit, *PersonalityEncoding); break; } case 'R': @@ -6953,24 +6957,8 @@ static void printMachOEHFrameSection(const MachOObjectFile *Obj, uint64_t PCPointerSize = getSizeForEncoding(is64Bit, *CIE.FDEPointerEncoding); - uint64_t PCBegin; - uint64_t PCRange; - switch (PCPointerSize) { - case 2: - PCBegin = readNext<uint16_t>(Pos); - PCRange = readNext<uint16_t>(Pos); - break; - case 4: - PCBegin = readNext<uint32_t>(Pos); - PCRange = readNext<uint32_t>(Pos); - break; - case 8: - PCBegin = readNext<uint64_t>(Pos); - PCRange = readNext<uint64_t>(Pos); - break; - default: - llvm_unreachable("Illegal data size"); - } + uint64_t PCBegin = readPointer(Pos, is64Bit, *CIE.FDEPointerEncoding); + uint64_t PCRange = readPointer(Pos, is64Bit, *CIE.FDEPointerEncoding); Optional<uint64_t> AugmentationLength; uint32_t LSDAPointerSize; @@ -6984,19 +6972,7 @@ static void printMachOEHFrameSection(const MachOObjectFile *Obj, // Decode the LSDA if the CIE augmentation string said we should. if (CIE.LSDAPointerEncoding) { LSDAPointerSize = getSizeForEncoding(is64Bit, *CIE.LSDAPointerEncoding); - switch (LSDAPointerSize) { - case 2: - LSDAPointer = readNext<uint16_t>(Pos); - break; - case 4: - LSDAPointer = readNext<uint32_t>(Pos); - break; - case 8: - LSDAPointer = readNext<uint64_t>(Pos); - break; - default: - llvm_unreachable("Illegal data size"); - } + LSDAPointer = readPointer(Pos, is64Bit, *CIE.LSDAPointerEncoding); } } |