[llvm-commits] CVS: llvm/lib/Support/Disassembler.cpp
Reid Spencer
rspencer at reidspencer.com
Fri Jan 19 09:32:23 PST 2007
On Fri, 2007-01-19 at 11:25 -0600, Anton Korobeynikov wrote:
>
> Changes in directory llvm/lib/Support:
>
> Disassembler.cpp added (r1.1)
> ---
> Log message:
>
> Adding disassembler interface and external hook to udis86 library.
Anton,
If the disassembly library is not available, please make the
disassembleBuffer function return something like "could not disassemble:
no disassembler configure" as the function result instead of an empty
string. This way, the user gets a clue about why there's no disassembly.
Thanks,
Reid.
>
>
> ---
> Diffs of the changes: (+53 -0)
>
> Disassembler.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 53 insertions(+)
>
>
> Index: llvm/lib/Support/Disassembler.cpp
> diff -c /dev/null llvm/lib/Support/Disassembler.cpp:1.1
> *** /dev/null Fri Jan 19 11:25:27 2007
> --- llvm/lib/Support/Disassembler.cpp Fri Jan 19 11:25:17 2007
> ***************
> *** 0 ****
> --- 1,53 ----
> + //===- lib/Support/Disassembler.cpp -----------------------------*- C++ -*-===//
> + //
> + // The LLVM Compiler Infrastructure
> + //
> + // This file was developed by Anton Korobeynikov and is distributed under the
> + // University of Illinois Open Source License. See LICENSE.TXT for details.
> + //
> + //===----------------------------------------------------------------------===//
> + //
> + // This file implements the necessary glue to call external disassembler
> + // libraries.
> + //
> + //===----------------------------------------------------------------------===//
> +
> + #include "llvm/Config/config.h"
> + #include "llvm/Support/Disassembler.h"
> +
> + #include <cassert>
> + #include <iomanip>
> + #include <string>
> + #include <sstream>
> +
> + #if USE_UDIS86
> + #include <udis86.h>
> + #endif
> +
> + using namespace llvm;
> +
> + std::string llvm::disassembleBuffer(uint8_t* start, size_t length,
> + Disassembler::Type type, uint64_t pc) {
> + std::stringstream res;
> +
> + if (type == Disassembler::X86_32 || type == Disassembler::X86_64) {
> + #if USE_UDIS86
> + ud_t ud_obj;
> +
> + ud_init(&ud_obj);
> + ud_set_input_buffer(&ud_obj, start, length);
> + ud_set_mode(&ud_obj, (type == Disassembler::X86_32 ? 32 : 64));
> + ud_set_pc(&ud_obj, pc);
> + ud_set_syntax(&ud_obj, UD_SYN_ATT);
> +
> + res << std::setbase(16)
> + << std::setw((type == Disassembler::X86_32 ? 8 : 16));
> +
> + while (ud_disassemble(&ud_obj)) {
> + res << ud_insn_off(&ud_obj) << ":\t" << ud_insn_asm(&ud_obj) << "\n";
> + }
> + #endif
> + }
> +
> + return res.str();
> + }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list