X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Finclude%2Fxed%2Fxed-inst-printer.h;fp=palacios%2Finclude%2Fxed%2Fxed-inst-printer.h;h=bb722f706d19cbbf88acd62b92d45ec7d77525fc;hp=0000000000000000000000000000000000000000;hb=ddc16b0737cf58f7aa90a69c6652cdf4090aec51;hpb=626595465a2c6987606a6bc697df65130ad8c2d3 diff --git a/palacios/include/xed/xed-inst-printer.h b/palacios/include/xed/xed-inst-printer.h new file mode 100644 index 0000000..bb722f7 --- /dev/null +++ b/palacios/include/xed/xed-inst-printer.h @@ -0,0 +1,172 @@ +/*BEGIN_LEGAL +Intel Open Source License + +Copyright (c) 2002-2007 Intel Corporation +All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. Redistributions +in binary form must reproduce the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. Neither the name of +the Intel Corporation nor the names of its contributors may be used to +endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +END_LEGAL */ +/// @file xed-inst-printer.h +/// @author Mark Charney + + +#ifndef _XED_INST_PRINTER_H_ +# define _XED_INST_PRINTER_H_ +#include +#include +#include + +/// @name Legacy printers without context parameter +//@{ +/// Disassemble the decoded instruction using the ATT SYSV syntax. The +/// output buffer must be at least 16 bytes long. Returns true if +/// disassembly proceeded without errors. +/// @param xedd a #xed_decoded_inst_t for a decoded instruction +/// @param out_buffer a buffer to write the disassembly in to. +/// @param buffer_len maximum length of the disassembly buffer +/// @param runtime_instruction_address the address of the instruction being disassembled +/// @return Returns 0 if the disassembly fails, 1 otherwise. +///@ingroup PRINT +XED_DLL_EXPORT xed_bool_t +xed_format_att(xed_decoded_inst_t* xedd, + char* out_buffer, + xed_uint32_t buffer_len, + xed_uint64_t runtime_instruction_address); + +/// Disassemble the decoded instruction using the Intel syntax. The +/// output buffer must be at least 16 bytes long. Returns true if +/// disassembly proceeded without errors. +/// @param xedd a #xed_decoded_inst_t for a decoded instruction +/// @param out_buffer a buffer to write the disassembly in to. +/// @param buffer_len maximum length of the disassembly buffer +/// @param runtime_instruction_address the address of the instruction being disassembled +/// @return Returns 0 if the disassembly fails, 1 otherwise. +///@ingroup PRINT +XED_DLL_EXPORT xed_bool_t +xed_format_intel(xed_decoded_inst_t* xedd, + char* out_buffer, + xed_uint32_t buffer_len, + xed_uint64_t runtime_instruction_address); + +/// Disassemble the decoded instruction using the XED syntax providing all +/// operand resources (implicit, explicit, suppressed). The output buffer +/// must be at least 25 bytes long. Returns true if disassembly proceeded +/// without errors. +/// @param xedd a #xed_decoded_inst_t for a decoded instruction +/// @param out_buffer a buffer to write the disassembly in to. +/// @param buffer_len maximum length of the disassembly buffer +/// @param runtime_instruction_address the address of the instruction being disassembled +/// @return Returns 0 if the disassembly fails, 1 otherwise. +///@ingroup PRINT +XED_DLL_EXPORT xed_bool_t +xed_format_xed(xed_decoded_inst_t* xedd, + char* out_buffer, + xed_uint32_t buffer_len, + xed_uint64_t runtime_instruction_address); + + +/// Disassemble the decoded instruction using the specified syntax. +/// The output buffer must be at least 25 bytes long. Returns true if +/// disassembly proceeded without errors. +/// @param syntax a #xed_syntax_enum_t the specifies the disassembly format +/// @param xedd a #xed_decoded_inst_t for a decoded instruction +/// @param out_buffer a buffer to write the disassembly in to. +/// @param buffer_len maximum length of the disassembly buffer +/// @param runtime_instruction_address the address of the instruction being disassembled +/// @return Returns 0 if the disassembly fails, 1 otherwise. +///@ingroup PRINT +XED_DLL_EXPORT xed_bool_t +xed_format(xed_syntax_enum_t syntax, + xed_decoded_inst_t* xedd, + char* out_buffer, + int buffer_len, + xed_uint64_t runtime_instruction_address); + + +//@} +////////////////////////////////////////////////////////////////////////// + + +/// @name Printers with context parameter +//@{ +/// Disassemble the decoded instruction using the ATT SYSV syntax. The +/// output buffer must be at least 16 bytes long. Returns true if +/// disassembly proceeded without errors. +/// @param xedd a #xed_decoded_inst_t for a decoded instruction +/// @param out_buffer a buffer to write the disassembly in to. +/// @param buffer_len maximum length of the disassembly buffer +/// @param runtime_instruction_address the address of the instruction being disassembled +/// @param context A void* used only for the call back routine for symbolic disassembly if one is registered. +/// @return Returns 0 if the disassembly fails, 1 otherwise. +///@ingroup PRINT +XED_DLL_EXPORT xed_bool_t +xed_format_att_context(xed_decoded_inst_t* xedd, + char* out_buffer, + xed_uint32_t buffer_len, + xed_uint64_t runtime_instruction_address, + void* context); + +/// Disassemble the decoded instruction using the Intel syntax. The +/// output buffer must be at least 16 bytes long. Returns true if +/// disassembly proceeded without errors. +/// @param xedd a #xed_decoded_inst_t for a decoded instruction +/// @param out_buffer a buffer to write the disassembly in to. +/// @param buffer_len maximum length of the disassembly buffer +/// @param runtime_instruction_address the address of the instruction being disassembled +/// @param context A void* used only for the call back routine for symbolic disassembly if one is registered. +/// @return Returns 0 if the disassembly fails, 1 otherwise. +///@ingroup PRINT +XED_DLL_EXPORT xed_bool_t +xed_format_intel_context(xed_decoded_inst_t* xedd, + char* out_buffer, + xed_uint32_t buffer_len, + xed_uint64_t runtime_instruction_address, + void* context); + + +/// Disassemble the decoded instruction using the specified syntax. +/// The output buffer must be at least 25 bytes long. Returns true if +/// disassembly proceeded without errors. +/// @param syntax a #xed_syntax_enum_t the specifies the disassembly format +/// @param xedd a #xed_decoded_inst_t for a decoded instruction +/// @param out_buffer a buffer to write the disassembly in to. +/// @param buffer_len maximum length of the disassembly buffer +/// @param runtime_instruction_address the address of the instruction being disassembled +/// @param context A void* used only for the call back routine for symbolic disassembly if one is registered. +/// @return Returns 0 if the disassembly fails, 1 otherwise. +///@ingroup PRINT +XED_DLL_EXPORT xed_bool_t +xed_format_context(xed_syntax_enum_t syntax, + xed_decoded_inst_t* xedd, + char* out_buffer, + int buffer_len, + xed_uint64_t runtime_instruction_address, + void* context); +//@} +#endif +//////////////////////////////////////////////////////////////////////////// +//Local Variables: +//pref: "../../xed-inst-printer.c" +//End: