* 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:
J.T. Conklin 1995-08-01 20:14:27 +00:00
parent a1bdcf913a
commit 2b57629364
137 changed files with 2207 additions and 1157 deletions

View file

@ -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,