diff options
Diffstat (limited to 'contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp b/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp index 6f6f543f2f47..a16f760cd1cb 100644 --- a/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/contrib/llvm-project/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -978,8 +978,8 @@ collectLocalBranchTargets(ArrayRef<uint8_t> Bytes, const MCInstrAnalysis *MIA, const MCSubtargetInfo *STI, uint64_t SectionAddr, uint64_t Start, uint64_t End, std::unordered_map<uint64_t, std::string> &Labels) { - // So far only supports X86. - if (!STI->getTargetTriple().isX86()) + // So far only supports PowerPC and X86. + if (!STI->getTargetTriple().isPPC() && !STI->getTargetTriple().isX86()) return; Labels.clear(); @@ -999,8 +999,11 @@ collectLocalBranchTargets(ArrayRef<uint8_t> Bytes, const MCInstrAnalysis *MIA, if (Disassembled && MIA) { uint64_t Target; bool TargetKnown = MIA->evaluateBranch(Inst, Index, Size, Target); + // On PowerPC, if the address of a branch is the same as the target, it + // means that it's a function call. Do not mark the label for this case. if (TargetKnown && (Target >= Start && Target < End) && - !Labels.count(Target)) + !Labels.count(Target) && + !(STI->getTargetTriple().isPPC() && Target == Index)) Labels[Target] = ("L" + Twine(LabelCount++)).str(); } |