1251ef612a812ac99edeab6c08a752bf8ca220921Sean Callanan//===-- lib/MC/MCDisassembler.cpp - Disassembler interface ------*- C++ -*-===//
2251ef612a812ac99edeab6c08a752bf8ca220921Sean Callanan//
3251ef612a812ac99edeab6c08a752bf8ca220921Sean Callanan//                     The LLVM Compiler Infrastructure
4251ef612a812ac99edeab6c08a752bf8ca220921Sean Callanan//
5251ef612a812ac99edeab6c08a752bf8ca220921Sean Callanan// This file is distributed under the University of Illinois Open Source
6251ef612a812ac99edeab6c08a752bf8ca220921Sean Callanan// License. See LICENSE.TXT for details.
7251ef612a812ac99edeab6c08a752bf8ca220921Sean Callanan//
8251ef612a812ac99edeab6c08a752bf8ca220921Sean Callanan//===----------------------------------------------------------------------===//
9251ef612a812ac99edeab6c08a752bf8ca220921Sean Callanan
10251ef612a812ac99edeab6c08a752bf8ca220921Sean Callanan#include "llvm/MC/MCDisassembler.h"
112c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha#include "llvm/MC/MCExternalSymbolizer.h"
122c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha#include "llvm/Support/raw_ostream.h"
132c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha
142a1744f553442fbc3cd74114cbcd1305d91d8a90Chris Lattnerusing namespace llvm;
15251ef612a812ac99edeab6c08a752bf8ca220921Sean Callanan
162a1744f553442fbc3cd74114cbcd1305d91d8a90Chris LattnerMCDisassembler::~MCDisassembler() {
17aa5c1b7f9366950b4cbe710c8426d8589d5d975bEdward O'Callaghan}
182c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha
192c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougachabool MCDisassembler::tryAddingSymbolicOperand(MCInst &Inst, int64_t Value,
202c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha                                              uint64_t Address, bool IsBranch,
212c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha                                              uint64_t Offset,
222c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha                                              uint64_t InstSize) const {
232c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha  raw_ostream &cStream = CommentStream ? *CommentStream : nulls();
242c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha  if (Symbolizer)
252c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha    return Symbolizer->tryAddingSymbolicOperand(Inst, cStream, Value, Address,
262c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha                                                IsBranch, Offset, InstSize);
272c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha  return false;
282c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha}
292c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha
302c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougachavoid MCDisassembler::tryAddingPcLoadReferenceComment(int64_t Value,
312c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha                                                     uint64_t Address) const {
322c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha  raw_ostream &cStream = CommentStream ? *CommentStream : nulls();
332c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha  if (Symbolizer)
342c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha    Symbolizer->tryAddingPcLoadReferenceComment(cStream, Value, Address);
352c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha}
362c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha
3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesvoid MCDisassembler::setSymbolizer(std::unique_ptr<MCSymbolizer> Symzer) {
3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  Symbolizer = std::move(Symzer);
392c94d0faa0e1c268893d5e04dc77e8a35889db00Ahmed Bougacha}
40