[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