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
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");
}
(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");
}
}
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);
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
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);
}
}
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
fprintf_filtered (stream, "LOC(");
print_address_numeric
(extract_address (valaddr, TARGET_PTR_BIT / HOST_CHAR_BIT),
+ 1,
stream);
fprintf_filtered (stream, ")");
if (deref_ref)
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);
}
{
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);
if (err != 0)
{
fprintf_filtered (stream, "<invalid address ");
- print_address_numeric ((CORE_ADDR) baddr, stream);
+ print_address_numeric ((CORE_ADDR) baddr, 1, stream);
fprintf_filtered (stream, ">");
}
else
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
CORE_ADDR addr;
GDB_FILE *stream;
{
- print_address_numeric (addr, stream);
+ print_address_numeric (addr, 1, stream);
print_address_symbolic (addr, stream, asm_demangle, " ");
}
}
else if (addressprint)
{
- print_address_numeric (addr, stream);
+ print_address_numeric (addr, 1, stream);
print_address_symbolic (addr, stream, do_demangle, " ");
}
else
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
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:
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:
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;
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");
}
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,
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);
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;
\f
struct print_stack_frame_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;
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,
{
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);
/* 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. */
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:
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)
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");
{
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 (",");
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");
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);
else
{
printf_filtered (" Locals at ");
- print_address_numeric (arg_list, gdb_stdout);
+ print_address_numeric (arg_list, 1, gdb_stdout);
printf_filtered (",");
}
}
/* 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++)
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)
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);
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.");