From d24c05991f1e82a948bd1e362e677aad103f9edd Mon Sep 17 00:00:00 2001 From: Jim Kingdon Date: Wed, 4 May 1994 15:24:41 +0000 Subject: [PATCH] * valprint.c (print_longest): Clarify comment about use_local. * printcmd.c, defs.h (print_address_numeric), callers in symmisc.c, symfile.c, stack.c, source.c, remote.c, infcmd.c, cp-valprint.c, core.c, ch-valprint.c, c-valprint.c, breakpoint.c, exec.c: New argument use_local. * source.c (identify_source_line): Use filtered output. Use print_address_numeric. --- gdb/ChangeLog | 8 ++++++ gdb/breakpoint.c | 6 ++--- gdb/c-valprint.c | 4 +-- gdb/ch-valprint.c | 3 ++- gdb/core.c | 4 +-- gdb/cp-valprint.c | 2 +- gdb/printcmd.c | 23 +++++++++-------- gdb/remote.c | 8 +++--- gdb/stack.c | 64 +++++++++++++++++++++++++++++++---------------- 9 files changed, 78 insertions(+), 44 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c5f4be274c1..06b1277fd7d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,13 @@ Wed May 4 06:56:03 1994 Jim Kingdon (kingdon@lioth.cygnus.com) + * valprint.c (print_longest): Clarify comment about use_local. + * printcmd.c, defs.h (print_address_numeric), callers in + symmisc.c, symfile.c, stack.c, source.c, remote.c, infcmd.c, + cp-valprint.c, core.c, ch-valprint.c, c-valprint.c, breakpoint.c, + exec.c: New argument use_local. + * source.c (identify_source_line): Use filtered output. Use + print_address_numeric. + * core.c (memory_error), symtab.c (cplusplus_hint, decode_line_1), language.c (type_error, range_error): Use filtered output. * utils.c (error_begin): Update comment to tell people to use diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index b9efd0546b0..3e43ca34b5f 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -1648,7 +1648,7 @@ breakpoint_1 (bnum, allflag) printf_filtered ("\n\032\032field 6\n"); printf_filtered ("\tstop only in stack frame at "); - print_address_numeric (b->frame, gdb_stdout); + print_address_numeric (b->frame, 1, gdb_stdout); printf_filtered ("\n"); } @@ -1760,7 +1760,7 @@ describe_other_breakpoints (pc) (others > 1) ? "," : ((others == 1) ? " and" : "")); } printf_filtered ("also set at pc "); - print_address_numeric (pc, gdb_stdout); + print_address_numeric (pc, 1, gdb_stdout); printf_filtered (".\n"); } } @@ -2001,7 +2001,7 @@ mention (b) break; case bp_breakpoint: printf_filtered ("Breakpoint %d at ", b->number); - print_address_numeric (b->address, gdb_stdout); + print_address_numeric (b->address, 1, gdb_stdout); if (b->source_file) printf_filtered (": file %s, line %d.", b->source_file, b->line_number); diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c index 905c313613a..0eb313370a0 100644 --- a/gdb/c-valprint.c +++ b/gdb/c-valprint.c @@ -172,7 +172,7 @@ c_val_print (type, valaddr, address, stream, format, deref_ref, recurse, if (addressprint && format != 's') { - print_address_numeric (addr, stream); + print_address_numeric (addr, 1, stream); } /* For a pointer to char or unsigned char, also print the string @@ -255,7 +255,7 @@ c_val_print (type, valaddr, address, stream, format, deref_ref, recurse, fprintf_filtered (stream, "@"); print_address_numeric (extract_address (valaddr, - TARGET_PTR_BIT / HOST_CHAR_BIT), stream); + TARGET_PTR_BIT / HOST_CHAR_BIT), 1, stream); if (deref_ref) fputs_filtered (": ", stream); } diff --git a/gdb/ch-valprint.c b/gdb/ch-valprint.c index 24e50311361..68ea1a7aaaa 100644 --- a/gdb/ch-valprint.c +++ b/gdb/ch-valprint.c @@ -159,7 +159,7 @@ chill_val_print (type, valaddr, address, stream, format, deref_ref, recurse, } if (addressprint && format != 's') { - print_address_numeric (addr, stream); + print_address_numeric (addr, 1, stream); } /* For a pointer to char or unsigned char, also print the string @@ -269,6 +269,7 @@ chill_val_print (type, valaddr, address, stream, format, deref_ref, recurse, fprintf_filtered (stream, "LOC("); print_address_numeric (extract_address (valaddr, TARGET_PTR_BIT / HOST_CHAR_BIT), + 1, stream); fprintf_filtered (stream, ")"); if (deref_ref) diff --git a/gdb/core.c b/gdb/core.c index bd77a91a8f8..974e55c1859 100644 --- a/gdb/core.c +++ b/gdb/core.c @@ -144,7 +144,7 @@ memory_error (status, memaddr) was out of bounds. */ error_begin (); printf_filtered ("Cannot access memory at address "); - print_address_numeric (memaddr, gdb_stdout); + print_address_numeric (memaddr, 1, gdb_stdout); printf_filtered (".\n"); return_to_top_level (RETURN_ERROR); } @@ -152,7 +152,7 @@ memory_error (status, memaddr) { error_begin (); printf_filtered ("Error accessing memory address "); - print_address_numeric (memaddr, gdb_stdout); + print_address_numeric (memaddr, 1, gdb_stdout); printf_filtered (": %s.\n", safe_strerror (status)); return_to_top_level (RETURN_ERROR); diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c index 0346c033f03..c3bb3a4411b 100644 --- a/gdb/cp-valprint.c +++ b/gdb/cp-valprint.c @@ -411,7 +411,7 @@ cplus_print_value (type, valaddr, stream, format, recurse, pretty, dont_print) if (err != 0) { fprintf_filtered (stream, ""); } else diff --git a/gdb/printcmd.c b/gdb/printcmd.c index 0052b31f82b..25c27454087 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -613,10 +613,12 @@ print_address_symbolic (addr, stream, do_demangle, leadin) fputs_filtered (">", stream); } -/* Print address ADDR on STREAM. */ +/* Print address ADDR on STREAM. USE_LOCAL means the same thing as for + print_longest. */ void -print_address_numeric (addr, stream) +print_address_numeric (addr, use_local, stream) CORE_ADDR addr; + int use_local; GDB_FILE *stream; { /* This assumes a CORE_ADDR can fit in a LONGEST. Probably a safe @@ -634,7 +636,7 @@ print_address (addr, stream) CORE_ADDR addr; GDB_FILE *stream; { - print_address_numeric (addr, stream); + print_address_numeric (addr, 1, stream); print_address_symbolic (addr, stream, asm_demangle, " "); } @@ -655,7 +657,7 @@ print_address_demangle (addr, stream, do_demangle) } else if (addressprint) { - print_address_numeric (addr, stream); + print_address_numeric (addr, 1, stream); print_address_symbolic (addr, stream, do_demangle, " "); } else @@ -983,7 +985,8 @@ address_info (exp, from_tty) fprintf_symbol_filtered (gdb_stdout, exp, current_language->la_language, DMGL_ANSI); printf_filtered ("\" is at "); - print_address_numeric (SYMBOL_VALUE_ADDRESS (msymbol), gdb_stdout); + print_address_numeric (SYMBOL_VALUE_ADDRESS (msymbol), 1, + gdb_stdout); printf_filtered (" in a file compiled without debugging.\n"); } else @@ -1007,7 +1010,7 @@ address_info (exp, from_tty) case LOC_LABEL: printf_filtered ("a label at address "); - print_address_numeric (SYMBOL_VALUE_ADDRESS (sym), gdb_stdout); + print_address_numeric (SYMBOL_VALUE_ADDRESS (sym), 1, gdb_stdout); break; case LOC_REGISTER: @@ -1016,7 +1019,7 @@ address_info (exp, from_tty) case LOC_STATIC: printf_filtered ("static storage at address "); - print_address_numeric (SYMBOL_VALUE_ADDRESS (sym), gdb_stdout); + print_address_numeric (SYMBOL_VALUE_ADDRESS (sym), 1, gdb_stdout); break; case LOC_REGPARM: @@ -1059,7 +1062,7 @@ address_info (exp, from_tty) case LOC_BLOCK: printf_filtered ("a function at address "); - print_address_numeric (BLOCK_START (SYMBOL_BLOCK_VALUE (sym)), + print_address_numeric (BLOCK_START (SYMBOL_BLOCK_VALUE (sym)), 1, gdb_stdout); break; @@ -2075,9 +2078,9 @@ disassemble_command (arg, from_tty) else { printf_filtered ("from "); - print_address_numeric (low, gdb_stdout); + print_address_numeric (low, 1, gdb_stdout); printf_filtered (" to "); - print_address_numeric (high, gdb_stdout); + print_address_numeric (high, 1, gdb_stdout); printf_filtered (":\n"); } diff --git a/gdb/remote.c b/gdb/remote.c index 09eb616d951..6da0f21b486 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -824,8 +824,8 @@ remote_write_bytes (memaddr, myaddr, len) int i; char *p; - /* FIXME-32x64: Need a version of print_address_numeric which doesn't - set use_local (and also puts the result in a buffer like sprintf). */ + /* FIXME-32x64: Need a version of print_address_numeric which puts the + result in a buffer like sprintf. */ sprintf (buf, "M%lx,%x:", (unsigned long) memaddr, len); /* We send target system values byte by byte, in increasing byte addresses, @@ -875,8 +875,8 @@ remote_read_bytes (memaddr, myaddr, len) if (len > PBUFSIZ / 2 - 1) abort (); - /* FIXME-32x64: Need a version of print_address_numeric which doesn't - set use_local (and also puts the result in a buffer like sprintf). */ + /* FIXME-32x64: Need a version of print_address_numeric which puts the + result in a buffer like sprintf. */ sprintf (buf, "m%lx,%x", (unsigned long) memaddr, len); putpkt (buf); getpkt (buf, 0); diff --git a/gdb/stack.c b/gdb/stack.c index f85fa1a593b..4d84dafda10 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -101,10 +101,13 @@ FRAME selected_frame; int selected_frame_level; -/* Nonzero means print the full filename and linenumber - when a frame is printed, and do so in a format programs can parse. */ +/* Zero means do things normally; we are interacting directly with the + user. One means print the full filename and linenumber when a + frame is printed, and do so in a format emacs18/emacs19.22 can + parse. Two means print similar annotations, but in many more + cases and in a slightly different syntax. */ -int frame_file_full_name = 0; +int annotation_level = 0; struct print_stack_frame_args { @@ -255,9 +258,14 @@ print_frame_info (fi, level, source, args) && (SYMBOL_VALUE_ADDRESS (msymbol) > BLOCK_START (SYMBOL_BLOCK_VALUE (func)))) { +#if 0 + /* There is no particular reason to think the line number + information is wrong. Someone might have just put in + a label with asm() but left the line numbers alone. */ /* In this case we have no way of knowing the source file and line number, so don't print them. */ sal.symtab = 0; +#endif /* We also don't know anything about the function besides its address and name. */ func = 0; @@ -287,7 +295,7 @@ print_frame_info (fi, level, source, args) if (addressprint) if (fi->pc != sal.pc || !sal.symtab) { - print_address_numeric (fi->pc, gdb_stdout); + print_address_numeric (fi->pc, 1, gdb_stdout); printf_filtered (" in "); } fprintf_symbol_filtered (gdb_stdout, funname ? funname : "??", funlang, @@ -324,14 +332,14 @@ print_frame_info (fi, level, source, args) { int done = 0; int mid_statement = source < 0 && fi->pc != sal.pc; - if (frame_file_full_name) + if (annotation_level) done = identify_source_line (sal.symtab, sal.line, mid_statement, fi->pc); if (!done) { if (addressprint && mid_statement) { - print_address_numeric (fi->pc, gdb_stdout); + print_address_numeric (fi->pc, 1, gdb_stdout); printf_filtered ("\t"); } print_source_lines (sal.symtab, sal.line, sal.line + 1, 0); @@ -402,6 +410,22 @@ parse_frame_specification (frame_exp) /* find_relative_frame was successful */ return fid; + /* If SETUP_ARBITRARY_FRAME is defined, then frame specifications + take at least 2 addresses. It is important to detect this case + here so that "frame 100" does not give a confusing error message + like "frame specification requires two addresses". This of course + does not solve the "frame 100" problem for machines on which + a frame specification can be made with one address. To solve + that, we need a new syntax for a specifying a frame by address. + I think the cleanest syntax is $frame(0x45) ($frame(0x23,0x45) for + two args, etc.), but people might think that is too much typing, + so I guess *0x23,0x45 would be a possible alternative (commas + really should be used instead of spaces to delimit; using spaces + normally works in an expression). */ +#ifdef SETUP_ARBITRARY_FRAME + error ("No frame %d", args[0]); +#endif + /* If (s)he specifies the frame with an address, he deserves what (s)he gets. Still, give the highest one that matches. */ @@ -416,9 +440,7 @@ parse_frame_specification (frame_exp) fid = tfid; /* We couldn't identify the frame as an existing frame, but - perhaps we can create one with a single argument. - Fall through to default case; it's up to SETUP_ARBITRARY_FRAME - to complain if it doesn't like a single arg. */ + perhaps we can create one with a single argument. */ } default: @@ -498,18 +520,18 @@ frame_info (addr_exp, from_tty) if (!addr_exp && selected_frame_level >= 0) { printf_filtered ("Stack level %d, frame at ", selected_frame_level); - print_address_numeric (FRAME_FP(frame), gdb_stdout); + print_address_numeric (FRAME_FP(frame), 1, gdb_stdout); printf_filtered (":\n"); } else { printf_filtered ("Stack frame at "); - print_address_numeric (FRAME_FP(frame), gdb_stdout); + print_address_numeric (FRAME_FP(frame), 1, gdb_stdout); printf_filtered (":\n"); } printf_filtered (" %s = ", reg_names[PC_REGNUM]); - print_address_numeric (fi->pc, gdb_stdout); + print_address_numeric (fi->pc, 1, gdb_stdout); wrap_here (" "); if (funname) @@ -524,7 +546,7 @@ frame_info (addr_exp, from_tty) puts_filtered ("; "); wrap_here (" "); printf_filtered ("saved %s ", reg_names[PC_REGNUM]); - print_address_numeric (FRAME_SAVED_PC (frame), gdb_stdout); + print_address_numeric (FRAME_SAVED_PC (frame), 1, gdb_stdout); printf_filtered ("\n"); { @@ -539,7 +561,7 @@ frame_info (addr_exp, from_tty) if (calling_frame) { printf_filtered (" called by frame at "); - print_address_numeric (FRAME_FP (calling_frame), gdb_stdout); + print_address_numeric (FRAME_FP (calling_frame), 1, gdb_stdout); } if (fi->next && calling_frame) puts_filtered (","); @@ -547,7 +569,7 @@ frame_info (addr_exp, from_tty) if (fi->next) { printf_filtered (" caller of frame at "); - print_address_numeric (fi->next->frame, gdb_stdout); + print_address_numeric (fi->next->frame, 1, gdb_stdout); } if (fi->next || calling_frame) puts_filtered ("\n"); @@ -569,7 +591,7 @@ frame_info (addr_exp, from_tty) else { printf_filtered (" Arglist at "); - print_address_numeric (arg_list, gdb_stdout); + print_address_numeric (arg_list, 1, gdb_stdout); printf_filtered (","); FRAME_NUM_ARGS (numargs, fi); @@ -594,7 +616,7 @@ frame_info (addr_exp, from_tty) else { printf_filtered (" Locals at "); - print_address_numeric (arg_list, gdb_stdout); + print_address_numeric (arg_list, 1, gdb_stdout); printf_filtered (","); } } @@ -604,7 +626,7 @@ frame_info (addr_exp, from_tty) /* The sp is special; what's returned isn't the save address, but actually the value of the previous frame's sp. */ printf_filtered (" Previous frame's sp is "); - print_address_numeric (fsr.regs[SP_REGNUM], gdb_stdout); + print_address_numeric (fsr.regs[SP_REGNUM], 1, gdb_stdout); printf_filtered ("\n"); count = 0; for (i = 0; i < NUM_REGS; i++) @@ -616,7 +638,7 @@ frame_info (addr_exp, from_tty) puts_filtered (","); wrap_here (" "); printf_filtered (" %s at ", reg_names[i]); - print_address_numeric (fsr.regs[i], gdb_stdout); + print_address_numeric (fsr.regs[i], 1, gdb_stdout); count++; } if (count) @@ -826,7 +848,7 @@ print_block_frame_labels (b, have_default, stream) if (addressprint) { fprintf_filtered (stream, " "); - print_address_numeric (SYMBOL_VALUE_ADDRESS (sym), stream); + print_address_numeric (SYMBOL_VALUE_ADDRESS (sym), 1, stream); } fprintf_filtered (stream, " in file %s, line %d\n", sal.symtab->filename, sal.line); @@ -1272,7 +1294,7 @@ return_command (retval_exp, from_tty) FRAME_ADDR selected_frame_addr; CORE_ADDR selected_frame_pc; FRAME frame; - value return_value = NULL; + value_ptr return_value = NULL; if (selected_frame == NULL) error ("No selected frame."); -- 2.30.2