mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 15:26:06 +00:00

This presents misleading and confusing output. If you have a function defined at the beginning of an XCOFF object file, and you have a function call to an external function, the function call disassembles as a branch to the local function. That is, `void f() { f(); g();}` disassembles as >00000000 <.f>: 0: 7c 08 02 a6 mflr 0 4: 94 21 ff c0 stwu 1, -64(1) 8: 90 01 00 48 stw 0, 72(1) c: 4b ff ff f5 bl 0x0 <.f> 10: 4b ff ff f1 bl 0x0 <.f> With this PR, the second call will display: `10: 4b ff ff f1 bl 0x0 <.g> ` Using -r can help, but you still get the confusing output: >10: 4b ff ff f1 bl 0x0 <.f> 00000010: R_RBR .g
46 lines
1.7 KiB
C++
46 lines
1.7 KiB
C++
//===-- XCOFFDump.h ---------------------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_TOOLS_LLVM_OBJDUMP_XCOFFDUMP_H
|
|
#define LLVM_TOOLS_LLVM_OBJDUMP_XCOFFDUMP_H
|
|
|
|
#include "llvm/Object/XCOFFObjectFile.h"
|
|
|
|
namespace llvm {
|
|
|
|
class formatted_raw_ostream;
|
|
class MCSubtargetInfo;
|
|
struct SymbolInfoTy;
|
|
|
|
namespace objdump {
|
|
std::optional<XCOFF::StorageMappingClass>
|
|
getXCOFFSymbolCsectSMC(const object::XCOFFObjectFile &Obj,
|
|
const object::SymbolRef &Sym);
|
|
|
|
std::optional<object::SymbolRef>
|
|
getXCOFFSymbolContainingSymbolRef(const object::XCOFFObjectFile &Obj,
|
|
const object::SymbolRef &Sym);
|
|
|
|
bool isLabel(const object::XCOFFObjectFile &Obj, const object::SymbolRef &Sym);
|
|
|
|
std::string getXCOFFSymbolDescription(const SymbolInfoTy &SymbolInfo,
|
|
StringRef SymbolName);
|
|
|
|
Error getXCOFFRelocationValueString(const object::XCOFFObjectFile &Obj,
|
|
const object::RelocationRef &RelRef,
|
|
bool SymbolDescription,
|
|
llvm::SmallVectorImpl<char> &Result);
|
|
|
|
void dumpTracebackTable(ArrayRef<uint8_t> Bytes, uint64_t Address,
|
|
formatted_raw_ostream &OS, uint64_t End,
|
|
const MCSubtargetInfo &STI,
|
|
const object::XCOFFObjectFile *Obj);
|
|
} // namespace objdump
|
|
} // namespace llvm
|
|
#endif
|