72 scm_from_int (insn_len)));
83 struct disassemble_info *dinfo = data->
dinfo;
85 SCM seekto, newpos,
port = disasm_data->
port;
89 newpos = scm_seek (port, seekto, scm_from_int (
SEEK_SET));
90 if (!scm_is_eq (seekto, newpos))
93 bytes_read = scm_c_read (port, data->
myaddr, data->
length);
95 if (bytes_read != data->
length)
107 struct disassemble_info *dinfo)
132 struct disassemble_info *info)
165 struct disassemble_info di;
173 di.application_data = &data;
180 if (branch_delay_insns)
182 if (di.insn_info_valid)
183 *branch_delay_insns = di.branch_delay_insns;
185 *branch_delay_insns = 0;
214 const SCM keywords[] = {
217 int port_arg_pos = -1, offset_arg_pos = -1;
218 int size_arg_pos = -1, count_arg_pos = -1;
219 SCM port = SCM_BOOL_F;
221 unsigned int count = 1;
231 start_scm, &start_arg, rest,
232 &port_arg_pos, &port,
233 &offset_arg_pos, &offset,
234 &size_arg_pos, &size,
235 &count_arg_pos, &count);
240 if (port_arg_pos > 0)
244 port, port_arg_pos,
FUNC_NAME,
_(
"input port"));
248 if (offset_arg_pos > 0
254 _(
"offset provided but port is missing"));
257 if (size_arg_pos > 0)
263 if (start + size < start)
268 _(
"start+size overflows"));
270 end = start + size - 1;
280 for (pc = start, i = 0; pc <= end && i < count; )
314 return scm_reverse_x (result, SCM_EOL);
323 Return list of disassembled instructions in memory.\n\
325 Arguments: <gdb:arch> start-address\n\
326 [#:port port] [#:offset address]\n\
327 [#:size <integer>] [#:count <integer>]\n\
328 port: If non-#f, it is an input port to read bytes from.\n\
329 offset: Specifies the address offset of the first byte in the port.\n\
330 This is useful if the input is from something other than memory\n\
331 (e.g., a bytevector) and you want the result to be as if the bytes\n\
332 came from that address. The value to pass for start-address is\n\
333 then also the desired disassembly address, not the offset in, e.g.,\n\
335 size: Limit the number of bytes read to this amount.\n\
336 count: Limit the number of instructions to this amount.\n\
339 Each instruction in the result is an alist:\n\
340 (('address . address) ('asm . disassembly) ('length . length))." },
arch_smob * arscm_get_arch_smob_arg_unsafe(SCM arch_scm, int arg_pos, const char *func_name)
struct disassemble_info * dinfo
void gdbscm_define_functions(const scheme_function *, int is_public)
void print_address(struct gdbarch *, CORE_ADDR, struct ui_file *)
static void * gdbscm_disasm_read_memory_worker(void *datap)
SCM gdbscm_scm_from_ulongest(ULONGEST l)
static int branch_delay_insns
char * ui_file_xstrdup(struct ui_file *file, long *length)
struct gdbarch * arscm_get_gdbarch(arch_smob *a_smob)
static SCM gdbscm_arch_disassemble(SCM self, SCM start_scm, SCM rest)
#define gdbscm_is_true(scm)
void memory_error(enum target_xfer_status err, CORE_ADDR memaddr)
#define CATCH(EXCEPTION, MASK)
static SCM dascm_make_insn(CORE_ADDR pc, const char *assembly, int insn_len)
SCM gdbscm_scm_from_c_string(const char *string)
#define gdbscm_is_false(scm)
static int gdbscm_disasm_read_memory(bfd_vma memaddr, bfd_byte *myaddr, unsigned int length, struct disassemble_info *dinfo)
mach_port_t mach_port_t name mach_port_t mach_port_t name error_t int status
int gdb_print_insn(struct gdbarch *gdbarch, CORE_ADDR memaddr, struct ui_file *stream, int *branch_delay_insns)
static void gdbscm_disasm_print_address(bfd_vma addr, struct disassemble_info *info)
static SCM offset_keyword
struct ui_file * mem_fileopen(void)
struct cleanup * make_cleanup_ui_file_delete(struct ui_file *arg)
void gdbscm_out_of_range_error(const char *subr, int arg_pos, SCM bad_value, const char *error) ATTRIBUTE_NORETURN
void gdbscm_initialize_disasm(void)
void * gdbscm_with_guile(void *(*func)(void *), void *data)
#define GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS(exception, cleanups)
static SCM address_symbol
struct disassemble_info gdb_disassemble_info(struct gdbarch *gdbarch, struct ui_file *file)
void gdbscm_parse_function_args(const char *function_name, int beginning_arg_pos, const SCM *keywords, const char *format,...)
unsigned long long ULONGEST
static void gdbscm_disasm_memory_error(int status, bfd_vma memaddr, struct disassemble_info *info)
int gdbarch_print_insn(struct gdbarch *gdbarch, bfd_vma vma, struct disassemble_info *info)
void do_cleanups(struct cleanup *old_chain)
static int gdbscm_print_insn_from_port(struct gdbarch *gdbarch, SCM port, ULONGEST offset, CORE_ADDR memaddr, struct ui_file *stream, int *branch_delay_insns)