diff options
author | J.T. Conklin <jtc@acorntoolworks.com> | 1995-08-01 20:14:27 +0000 |
---|---|---|
committer | J.T. Conklin <jtc@acorntoolworks.com> | 1995-08-01 20:14:27 +0000 |
commit | 2b57629364528ef2fd913154e58f626123d51f1c (patch) | |
tree | 649b55da772d6aa5e9190ebcfa4bee6a5a31f998 /gdb/valprint.c | |
parent | a1bdcf913a6f7ee2bbb715dd48b1a75e10a43414 (diff) | |
download | ppe42-binutils-2b57629364528ef2fd913154e58f626123d51f1c.tar.gz ppe42-binutils-2b57629364528ef2fd913154e58f626123d51f1c.zip |
* 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.
Diffstat (limited to 'gdb/valprint.c')
-rw-r--r-- | gdb/valprint.c | 178 |
1 files changed, 80 insertions, 98 deletions
diff --git a/gdb/valprint.c b/gdb/valprint.c index d4c8696983..591978a4f1 100644 --- a/gdb/valprint.c +++ b/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; } @@ -1056,6 +1031,13 @@ _initialize_valprint () &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, "Set threshold for repeated print elements.\n\ |