llvm-objdump.h revision eef7b6219ebe5d0ded0be4adb3003055fa8a63c4
10b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer//===-- llvm-objdump.h ----------------------------------------------------===//
20b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer//
30b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer//                     The LLVM Compiler Infrastructure
40b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer//
50b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer// This file is distributed under the University of Illinois Open Source
60b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer// License. See LICENSE.TXT for details.
70b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer//
80b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer//===----------------------------------------------------------------------===//
90b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
100b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer#ifndef LLVM_OBJDUMP_H
110b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer#define LLVM_OBJDUMP_H
120b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
130b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer#include "llvm/ADT/StringRef.h"
140b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer#include "llvm/Support/CommandLine.h"
150b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer#include "llvm/Support/DataTypes.h"
160b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer#include "llvm/Support/MemoryObject.h"
170b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
180b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramernamespace llvm {
190b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
20eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencernamespace object {
21eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencer  class COFFObjectFile;
22eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencer  class RelocationRef;
23eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencer}
24eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencerclass error_code;
25eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencer
260b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramerextern cl::opt<std::string> TripleName;
270b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramerextern cl::opt<std::string> ArchName;
280b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
290b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer// Various helper functions.
30eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencerbool error(error_code ec);
31eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencerbool RelocAddressLess(object::RelocationRef a, object::RelocationRef b);
320b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramervoid DumpBytes(StringRef bytes);
330b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramervoid DisassembleInputMachO(StringRef Filename);
34eef7b6219ebe5d0ded0be4adb3003055fa8a63c4Michael J. Spencervoid printCOFFUnwindInfo(const object::COFFObjectFile* o);
350b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
360b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramerclass StringRefMemoryObject : public MemoryObject {
372d24e2a396a1d211baaeedf32148a3b657240170David Blaikie  virtual void anchor();
380b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer  StringRef Bytes;
390b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramerpublic:
400b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer  StringRefMemoryObject(StringRef bytes) : Bytes(bytes) {}
410b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
420b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer  uint64_t getBase() const { return 0; }
43adef06a71458ded0716935a61b3d43d164d4df12Derek Schuff  uint64_t getExtent() const { return Bytes.size(); }
440b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
45adef06a71458ded0716935a61b3d43d164d4df12Derek Schuff  int readByte(uint64_t Addr, uint8_t *Byte) const {
460b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer    if (Addr >= getExtent())
470b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer      return -1;
480b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer    *Byte = Bytes[Addr];
490b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer    return 0;
500b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer  }
510b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer};
520b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
530b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer}
540b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer
550b8b771e9f2f251460a6f200c45efe9d55640d60Benjamin Kramer#endif
56