mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[MC] Pass the symbol rather than its name to onSymbolStart()
Summary: This allows targets to also consider the symbol's type and/or address if needed. Reviewers: scott.linder, jhenderson, MaskRay, aardappel Reviewed By: scott.linder, MaskRay Subscribers: dschuff, sbc100, jgravelle-google, hiraditya, aheejin, rupprecht, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D82090
This commit is contained in:
parent
729989c981
commit
735565a7a5
@ -135,7 +135,7 @@ public:
|
||||
/// Base implementation returns None. So all targets by default ignore to
|
||||
/// treat symbols separately.
|
||||
///
|
||||
/// \param Name - The name of the symbol.
|
||||
/// \param Symbol - The symbol.
|
||||
/// \param Size - The number of bytes consumed.
|
||||
/// \param Address - The address, in the memory space of region, of the first
|
||||
/// byte of the symbol.
|
||||
@ -150,10 +150,9 @@ public:
|
||||
/// done by buffering the output if needed.
|
||||
/// - None if the target doesn't want to handle the symbol
|
||||
/// separately. Value of Size is ignored in this case.
|
||||
virtual Optional<DecodeStatus> onSymbolStart(StringRef Name, uint64_t &Size,
|
||||
ArrayRef<uint8_t> Bytes,
|
||||
uint64_t Address,
|
||||
raw_ostream &CStream) const;
|
||||
virtual Optional<DecodeStatus>
|
||||
onSymbolStart(SymbolInfoTy &Symbol, uint64_t &Size, ArrayRef<uint8_t> Bytes,
|
||||
uint64_t Address, raw_ostream &CStream) const;
|
||||
// TODO:
|
||||
// Implement similar hooks that can be used at other points during
|
||||
// disassembly. Something along the following lines:
|
||||
|
@ -17,7 +17,7 @@ using namespace llvm;
|
||||
MCDisassembler::~MCDisassembler() = default;
|
||||
|
||||
Optional<MCDisassembler::DecodeStatus>
|
||||
MCDisassembler::onSymbolStart(StringRef Name, uint64_t &Size,
|
||||
MCDisassembler::onSymbolStart(SymbolInfoTy &Symbol, uint64_t &Size,
|
||||
ArrayRef<uint8_t> Bytes, uint64_t Address,
|
||||
raw_ostream &CStream) const {
|
||||
return None;
|
||||
|
@ -46,7 +46,7 @@ class WebAssemblyDisassembler final : public MCDisassembler {
|
||||
DecodeStatus getInstruction(MCInst &Instr, uint64_t &Size,
|
||||
ArrayRef<uint8_t> Bytes, uint64_t Address,
|
||||
raw_ostream &CStream) const override;
|
||||
Optional<DecodeStatus> onSymbolStart(StringRef Name, uint64_t &Size,
|
||||
Optional<DecodeStatus> onSymbolStart(SymbolInfoTy &Symbol, uint64_t &Size,
|
||||
ArrayRef<uint8_t> Bytes,
|
||||
uint64_t Address,
|
||||
raw_ostream &CStream) const override;
|
||||
@ -122,8 +122,8 @@ bool parseImmediate(MCInst &MI, uint64_t &Size, ArrayRef<uint8_t> Bytes) {
|
||||
}
|
||||
|
||||
Optional<MCDisassembler::DecodeStatus> WebAssemblyDisassembler::onSymbolStart(
|
||||
StringRef Name, uint64_t &Size, ArrayRef<uint8_t> Bytes, uint64_t Address,
|
||||
raw_ostream &CStream) const {
|
||||
SymbolInfoTy &Symbol, uint64_t &Size, ArrayRef<uint8_t> Bytes,
|
||||
uint64_t Address, raw_ostream &CStream) const {
|
||||
Size = 0;
|
||||
if (Address == 0) {
|
||||
// Start of a code section: we're parsing only the function count.
|
||||
|
@ -1429,7 +1429,7 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj,
|
||||
continue;
|
||||
}
|
||||
|
||||
auto Status = DisAsm->onSymbolStart(SymbolName, Size,
|
||||
auto Status = DisAsm->onSymbolStart(Symbols[SI], Size,
|
||||
Bytes.slice(Start, End - Start),
|
||||
SectionAddr + Start, CommentStream);
|
||||
// To have round trippable disassembly, we fall back to decoding the
|
||||
|
Loading…
x
Reference in New Issue
Block a user