* configure.in: Check for working mmap, ansi headers, string.h,
strings.h, and memory.h. * configure: Regenerated. * gdb_stat.h: New file, "portable" <sys/stat.h>. * gdb_string.h: New file, "portable" <string.h>. * altos-xdep.c, arm-tdep.c, arm-xdep.c, convex-tdep.c, convex-xdep.c, coredep.c, cxux-nat.c, dbxread.c, exec.c, gould-xdep.c, hppa-tdep.c, i386aix-nat.c, i386b-nat.c, i386mach-nat.c, i386v-nat.c, infptrace.c, m88k-nat.c, main.c, mdebugread.c, objfiles.c, os9kread.c, procfs.c, pyr-xdep.c, rs6000-nat.c, source.c, standalone.c, stuff.c, sun386-nat.c, symfile.c, symm-nat.c, symm-tdep.c, symtab.c, top.c, ultra3-nat.c, ultra3-xdep.c, umax-xdep.c, xcoffread.c: Include "gdb_stat.h" instead of <sys/stat.h>. * alpha-tdep.c, breakpoint.c, buildsym.c, c-typeprint.c, ch-typeprint.c, coffread.c, command.c, core-sol2.c, core-svr4.c, core.c, corelow.c, cp-valprint.c, dbxread.c, dcache.c, demangle.c, dpx2-nat.c, dstread.c, dwarfread.c, elfread.c, environ.c, eval.c, exec.c, f-lang.c, f-typeprint.c, f-valprint.c, findvar.c, fork-child.c, gdbtypes.c, hpread.c, i386-tdep.c, infcmd.c, inflow.c, infptrace.c, infrun.c, irix5-nat.c, language.c, m2-typeprint.c, main.c, mdebugread.c, minsyms.c, mipsread.c, monitor.c, nlmread.c, objfiles.c, os9kread.c, osfsolib.c, parse.c, printcmd.c, procfs.c, regex.c, remote-adapt.c, remote-arc.c, remote-array.c, remote-bug.c, remote-e7000.c, remote-eb.c, remote-es.c, remote-hms.c, remote-mm.c, remote-os9k.c, remote-pa.c, remote-sim.c, remote-st.c, remote-udi.c, remote-utils.c, remote-vx.c, remote-vx29k.c, remote-vx68.c, remote-vx960.c, remote-vxmips.c, remote-vxsparc.c, remote.c, solib.c, somread.c, source.c, stabsread.c, stack.c, symfile.c, symmisc.c, symtab.c, target.c, top.c, typeprint.c, utils.c, valarith.c, valops.c, valprint.c, values.c, xcoffread.c: Include "gdb_string.h" instead of <string.h>. * gdbtk.c: Likewise. * config/xm-sysv4.h, i386/xm-ptx.h, m68k/xm-sun3os4.h, sparc/xm-sun4os4.h (HAVE_MMAP): Removed. * config/xm-lynx.h, config/i386/xm-ptx.h, config/m68k/nm-apollo68b.h, config/m68k/xm-hp300hpux.h, config/mips/xm-irix3.h, config/mips/xm-mips.h, config/mips/xm-news-mips.h, config/mips/xm-riscos.h, config/pa/hppah.h, config/rs6000/xm-rs6000.h, config/sparc/xm-sun4os4.h, config/sparc/xm-sun4sol2.h, config/vax/xm-vaxbsd.h, config/vax/xm-vaxult.h, config/vax/xm-vaxult2.h (MEM_FNS_DECLARED): Removed. * config/mips/xm-irix3.h, config/mips/xm-mips.h, config/pa/xm-hppah.h (memcpy, memset): Removed declarations.
This commit is contained in:
parent
a1bdcf913a
commit
2b57629364
137 changed files with 2207 additions and 1157 deletions
178
gdb/valprint.c
178
gdb/valprint.c
|
@ -1,5 +1,6 @@
|
|||
/* Print values for GDB, the GNU debugger.
|
||||
Copyright 1986, 1988, 1989, 1991 Free Software Foundation, Inc.
|
||||
Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
|
@ -18,7 +19,7 @@ along with this program; if not, write to the Free Software
|
|||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
#include "defs.h"
|
||||
#include <string.h>
|
||||
#include "gdb_string.h"
|
||||
#include "symtab.h"
|
||||
#include "gdbtypes.h"
|
||||
#include "value.h"
|
||||
|
@ -61,9 +62,6 @@ set_output_radix PARAMS ((char *, int, struct cmd_list_element *));
|
|||
static void
|
||||
set_output_radix_1 PARAMS ((int, unsigned));
|
||||
|
||||
static void value_print_array_elements PARAMS ((value_ptr, GDB_FILE *, int,
|
||||
enum val_prettyprint));
|
||||
|
||||
/* Maximum number of chars to print for a string pointer value or vector
|
||||
contents, or UINT_MAX for no limit. Note that "set print elements 0"
|
||||
stores UINT_MAX in print_max, which displays in a show command as
|
||||
|
@ -84,8 +82,17 @@ int output_format = 0;
|
|||
|
||||
unsigned int repeat_count_threshold = 10;
|
||||
|
||||
int prettyprint_structs; /* Controls pretty printing of structures */
|
||||
int prettyprint_arrays; /* Controls pretty printing of arrays. */
|
||||
/* If nonzero, stops printing of char arrays at first null. */
|
||||
|
||||
int stop_print_at_null;
|
||||
|
||||
/* Controls pretty printing of structures. */
|
||||
|
||||
int prettyprint_structs;
|
||||
|
||||
/* Controls pretty printing of arrays. */
|
||||
|
||||
int prettyprint_arrays;
|
||||
|
||||
/* If nonzero, causes unions inside structures or other unions to be
|
||||
printed. */
|
||||
|
@ -163,8 +170,6 @@ value_print (val, stream, format, pretty)
|
|||
int format;
|
||||
enum val_prettyprint pretty;
|
||||
{
|
||||
register unsigned int n, typelen;
|
||||
|
||||
if (val == 0)
|
||||
{
|
||||
printf_filtered ("<address of value unknown>");
|
||||
|
@ -175,59 +180,7 @@ value_print (val, stream, format, pretty)
|
|||
printf_filtered ("<value optimized out>");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* A "repeated" value really contains several values in a row.
|
||||
They are made by the @ operator.
|
||||
Print such values as if they were arrays. */
|
||||
|
||||
if (VALUE_REPEATED (val))
|
||||
{
|
||||
n = VALUE_REPETITIONS (val);
|
||||
typelen = TYPE_LENGTH (VALUE_TYPE (val));
|
||||
fprintf_filtered (stream, "{");
|
||||
/* Print arrays of characters using string syntax. */
|
||||
if (typelen == 1 && TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_INT
|
||||
&& format == 0)
|
||||
LA_PRINT_STRING (stream, VALUE_CONTENTS (val), n, 0);
|
||||
else
|
||||
{
|
||||
value_print_array_elements (val, stream, format, pretty);
|
||||
}
|
||||
fprintf_filtered (stream, "}");
|
||||
return (n * typelen);
|
||||
}
|
||||
else
|
||||
{
|
||||
struct type *type = VALUE_TYPE (val);
|
||||
|
||||
/* If it is a pointer, indicate what it points to.
|
||||
|
||||
Print type also if it is a reference.
|
||||
|
||||
C++: if it is a member pointer, we will take care
|
||||
of that when we print it. */
|
||||
if (TYPE_CODE (type) == TYPE_CODE_PTR ||
|
||||
TYPE_CODE (type) == TYPE_CODE_REF)
|
||||
{
|
||||
/* Hack: remove (char *) for char strings. Their
|
||||
type is indicated by the quoted string anyway. */
|
||||
if (TYPE_CODE (type) == TYPE_CODE_PTR &&
|
||||
TYPE_LENGTH (TYPE_TARGET_TYPE (type)) == sizeof(char) &&
|
||||
TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_INT &&
|
||||
!TYPE_UNSIGNED (TYPE_TARGET_TYPE (type)))
|
||||
{
|
||||
/* Print nothing */
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf_filtered (stream, "(");
|
||||
type_print (type, "", stream, -1);
|
||||
fprintf_filtered (stream, ") ");
|
||||
}
|
||||
}
|
||||
return (val_print (type, VALUE_CONTENTS (val),
|
||||
VALUE_ADDRESS (val), stream, format, 1, 0, pretty));
|
||||
}
|
||||
return LA_VALUE_PRINT (val, stream, format, pretty);
|
||||
}
|
||||
|
||||
/* Called by various <lang>_val_print routines to print TYPE_CODE_INT's */
|
||||
|
@ -252,29 +205,41 @@ val_print_type_code_int (type, valaddr, stream)
|
|||
sizeof (LONGEST) ones. */
|
||||
len = TYPE_LENGTH (type);
|
||||
|
||||
#if TARGET_BYTE_ORDER == BIG_ENDIAN
|
||||
for (p = valaddr;
|
||||
len > sizeof (LONGEST) && p < valaddr + TYPE_LENGTH (type);
|
||||
p++)
|
||||
#else /* Little endian. */
|
||||
first_addr = valaddr;
|
||||
for (p = valaddr + TYPE_LENGTH (type) - 1;
|
||||
len > sizeof (LONGEST) && p >= valaddr;
|
||||
p--)
|
||||
#endif /* Little endian. */
|
||||
if (TARGET_BYTE_ORDER == BIG_ENDIAN)
|
||||
{
|
||||
if (*p == 0)
|
||||
for (p = valaddr;
|
||||
len > sizeof (LONGEST) && p < valaddr + TYPE_LENGTH (type);
|
||||
p++)
|
||||
{
|
||||
len--;
|
||||
if (*p == 0)
|
||||
{
|
||||
len--;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
first_addr = p;
|
||||
}
|
||||
else
|
||||
{
|
||||
first_addr = valaddr;
|
||||
for (p = valaddr + TYPE_LENGTH (type) - 1;
|
||||
len > sizeof (LONGEST) && p >= valaddr;
|
||||
p--)
|
||||
{
|
||||
break;
|
||||
if (*p == 0)
|
||||
{
|
||||
len--;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#if TARGET_BYTE_ORDER == BIG_ENDIAN
|
||||
first_addr = p;
|
||||
#endif
|
||||
|
||||
if (len <= sizeof (LONGEST))
|
||||
{
|
||||
/* The most significant bytes are zero, so we can just get
|
||||
|
@ -363,6 +328,7 @@ print_longest (stream, format, use_local, val_long)
|
|||
fprintf_filtered (stream,
|
||||
use_local ? local_octal_format_custom ("ll")
|
||||
: "%llo",
|
||||
val_long);
|
||||
break;
|
||||
case 'b':
|
||||
fprintf_filtered (stream, local_hex_format_custom ("02ll"), val_long);
|
||||
|
@ -499,13 +465,16 @@ print_floating (valaddr, type, stream)
|
|||
|
||||
/* Assume that floating point byte order is the same as
|
||||
integer byte order. */
|
||||
#if TARGET_BYTE_ORDER == BIG_ENDIAN
|
||||
low = extract_unsigned_integer (valaddr + 4, 4);
|
||||
high = extract_unsigned_integer (valaddr, 4);
|
||||
#else
|
||||
low = extract_unsigned_integer (valaddr, 4);
|
||||
high = extract_unsigned_integer (valaddr + 4, 4);
|
||||
#endif
|
||||
if (TARGET_BYTE_ORDER == BIG_ENDIAN)
|
||||
{
|
||||
low = extract_unsigned_integer (valaddr + 4, 4);
|
||||
high = extract_unsigned_integer (valaddr, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
low = extract_unsigned_integer (valaddr, 4);
|
||||
high = extract_unsigned_integer (valaddr + 4, 4);
|
||||
}
|
||||
nonnegative = ((high & 0x80000000) == 0);
|
||||
is_nan = (((high >> 20) & 0x7ff) == 0x7ff
|
||||
&& ! ((((high & 0xfffff) == 0)) && (low == 0)));
|
||||
|
@ -553,17 +522,23 @@ print_hex_chars (stream, valaddr, len)
|
|||
/* FIXME: We should be not printing leading zeroes in most cases. */
|
||||
|
||||
fprintf_filtered (stream, local_hex_format_prefix ());
|
||||
#if TARGET_BYTE_ORDER == BIG_ENDIAN
|
||||
for (p = valaddr;
|
||||
p < valaddr + len;
|
||||
p++)
|
||||
#else /* Little endian. */
|
||||
for (p = valaddr + len - 1;
|
||||
p >= valaddr;
|
||||
p--)
|
||||
#endif
|
||||
if (TARGET_BYTE_ORDER == BIG_ENDIAN)
|
||||
{
|
||||
fprintf_filtered (stream, "%02x", *p);
|
||||
for (p = valaddr;
|
||||
p < valaddr + len;
|
||||
p++)
|
||||
{
|
||||
fprintf_filtered (stream, "%02x", *p);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (p = valaddr + len - 1;
|
||||
p >= valaddr;
|
||||
p--)
|
||||
{
|
||||
fprintf_filtered (stream, "%02x", *p);
|
||||
}
|
||||
}
|
||||
fprintf_filtered (stream, local_hex_format_suffix ());
|
||||
}
|
||||
|
@ -657,7 +632,7 @@ val_print_array_elements (type, valaddr, address, stream, format, deref_ref,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
value_print_array_elements (val, stream, format, pretty)
|
||||
value_ptr val;
|
||||
GDB_FILE *stream;
|
||||
|
@ -696,7 +671,7 @@ value_print_array_elements (val, stream, format, pretty)
|
|||
val_print (VALUE_TYPE (val), VALUE_CONTENTS (val) + typelen * i,
|
||||
VALUE_ADDRESS (val) + typelen * i, stream, format, 1,
|
||||
0, pretty);
|
||||
fprintf_unfiltered (stream, " <repeats %u times>", reps);
|
||||
fprintf_filtered (stream, " <repeats %u times>", reps);
|
||||
i = rep1 - 1;
|
||||
things_printed += repeat_count_threshold;
|
||||
}
|
||||
|
@ -1055,6 +1030,13 @@ _initialize_valprint ()
|
|||
&setprintlist),
|
||||
&showprintlist);
|
||||
|
||||
add_show_from_set
|
||||
(add_set_cmd ("null-stop", no_class, var_boolean,
|
||||
(char *)&stop_print_at_null,
|
||||
"Set printing of char arrays to stop at first null char.",
|
||||
&setprintlist),
|
||||
&showprintlist);
|
||||
|
||||
add_show_from_set
|
||||
(add_set_cmd ("repeats", no_class, var_uinteger,
|
||||
(char *)&repeat_count_threshold,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue