diff options
author | Michael Snyder <msnyder@vmware.com> | 1998-06-04 19:16:00 +0000 |
---|---|---|
committer | Michael Snyder <msnyder@vmware.com> | 1998-06-04 19:16:00 +0000 |
commit | d6b6757b7ab2fca3efc939eea7d33a3d77c30935 (patch) | |
tree | 18b6eab2a617c52cc4bf69138fb04efc14b5e48b /gdb/printcmd.c | |
parent | fed03c013db5576a26ffac9db0b5a13ac236a1a3 (diff) | |
download | gdb-d6b6757b7ab2fca3efc939eea7d33a3d77c30935.zip gdb-d6b6757b7ab2fca3efc939eea7d33a3d77c30935.tar.gz gdb-d6b6757b7ab2fca3efc939eea7d33a3d77c30935.tar.bz2 |
Thu Jun 4 12:14:48 1998 Michael Snyder <msnyder@cleaver.cygnus.com>
* printcmd.c (disassemble_command): Fix off-by-one error for
disassembling functions in unmapped overlay sections.
Diffstat (limited to 'gdb/printcmd.c')
-rw-r--r-- | gdb/printcmd.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/gdb/printcmd.c b/gdb/printcmd.c index ba28068..ad1ad37 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -121,6 +121,11 @@ static int display_number; int (*tm_print_insn) PARAMS ((bfd_vma, disassemble_info *)); disassemble_info tm_print_insn_info; +/* Functions exported for general use: */ + +void output_command PARAMS ((char *, int)); + + /* Prototypes for local functions. */ static void delete_display PARAMS ((int)); @@ -146,14 +151,12 @@ static void free_display PARAMS ((struct display *)); static void display_command PARAMS ((char *, int)); -static void x_command PARAMS ((char *, int)); +void x_command PARAMS ((char *, int)); static void address_info PARAMS ((char *, int)); static void set_command PARAMS ((char *, int)); -static void output_command PARAMS ((char *, int)); - static void call_command PARAMS ((char *, int)); static void inspect_command PARAMS ((char *, int)); @@ -906,7 +909,7 @@ call_command (exp, from_tty) } /* ARGSUSED */ -static void +void output_command (exp, from_tty) char *exp; int from_tty; @@ -1194,7 +1197,7 @@ address_info (exp, from_tty) printf_filtered (".\n"); } -static void +void x_command (exp, from_tty) char *exp; int from_tty; @@ -1808,8 +1811,14 @@ print_frame_args (func, fi, num, stream) annotate_arg_value (val == NULL ? NULL : VALUE_TYPE (val)); if (val) + { +#ifdef GDB_TARGET_IS_D10V + if (SYMBOL_CLASS(sym) == LOC_REGPARM && TYPE_CODE(VALUE_TYPE(val)) == TYPE_CODE_PTR) + TYPE_LENGTH(VALUE_TYPE(val)) = 2; +#endif val_print (VALUE_TYPE (val), VALUE_CONTENTS (val), VALUE_ADDRESS (val), stream, 0, 0, 2, Val_no_prettyprint); + } else fputs_filtered ("???", stream); @@ -2181,6 +2190,7 @@ disassemble_command (arg, from_tty) if (find_pc_partial_function (pc, &name, &low, &high) == 0) error ("No function contains program counter for selected frame.\n"); low += FUNCTION_START_OFFSET; + high -= 1; } else if (!(space_index = (char *) strchr (arg, ' '))) { @@ -2188,6 +2198,8 @@ disassemble_command (arg, from_tty) pc = parse_and_eval_address (arg); if (find_pc_partial_function (pc, &name, &low, &high) == 0) error ("No function contains specified address.\n"); + low += FUNCTION_START_OFFSET; + high -= 1; if (overlay_debugging) { section = find_pc_overlay (pc); @@ -2196,11 +2208,11 @@ disassemble_command (arg, from_tty) /* find_pc_partial_function will have returned low and high relative to the symbolic (mapped) address range. Need to translate them back to the unmapped range where PC is. */ + low = overlay_unmapped_address (low, section); high = overlay_unmapped_address (high, section); } } - low += FUNCTION_START_OFFSET; } else { @@ -2208,6 +2220,7 @@ disassemble_command (arg, from_tty) *space_index = '\0'; low = parse_and_eval_address (arg); high = parse_and_eval_address (space_index + 1); + high -= 1; } printf_filtered ("Dump of assembler code "); @@ -2233,7 +2246,7 @@ disassemble_command (arg, from_tty) pc_masked = pc; #endif - while (pc_masked < high) + while (pc_masked <= high) { QUIT; print_address (pc_masked, gdb_stdout); |