public inbox for gdb-cvs@sourceware.org help / color / mirror / Atom feed
From: Tom Tromey <tromey@sourceware.org> To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Introduce value_print_scalar_formatted Date: Sat, 14 Mar 2020 00:05:20 +0000 (GMT) [thread overview] Message-ID: <20200314000520.E6DE83AAA088@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=4f9ae810130bc4202ec1c5eae934900c542a9016 commit 4f9ae810130bc4202ec1c5eae934900c542a9016 Author: Tom Tromey <tom@tromey.com> Date: Fri Mar 13 17:39:52 2020 -0600 Introduce value_print_scalar_formatted This introduces a value_print_scalar_formatted, which is an analogue of val_print_scalar_formatted that uses the value API. gdb/ChangeLog 2020-03-13 Tom Tromey <tom@tromey.com> * valprint.h (value_print_scalar_formatted): Declare. * valprint.c (value_print_scalar_formatted): New function. Diff: --- gdb/ChangeLog | 5 +++++ gdb/valprint.c | 40 ++++++++++++++++++++++++++++++++++++++++ gdb/valprint.h | 10 ++++++++++ 3 files changed, 55 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 48572cb4d2a..264565edf19 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2020-03-13 Tom Tromey <tom@tromey.com> + + * valprint.h (value_print_scalar_formatted): Declare. + * valprint.c (value_print_scalar_formatted): New function. + 2020-03-13 Tom Tromey <tom@tromey.com> * valprint.h (generic_value_print): Declare. diff --git a/gdb/valprint.c b/gdb/valprint.c index 7b0365a3ba8..9cdf18ee864 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -1394,6 +1394,46 @@ val_print_scalar_formatted (struct type *type, options, size, stream); } +/* See valprint.h. */ + +void +value_print_scalar_formatted (struct value *val, + const struct value_print_options *options, + int size, + struct ui_file *stream) +{ + struct type *type = check_typedef (value_type (val)); + + gdb_assert (val != NULL); + + /* If we get here with a string format, try again without it. Go + all the way back to the language printers, which may call us + again. */ + if (options->format == 's') + { + struct value_print_options opts = *options; + opts.format = 0; + opts.deref_ref = 0; + common_val_print (val, stream, 0, &opts, current_language); + return; + } + + /* value_contents_for_printing fetches all VAL's contents. They are + needed to check whether VAL is optimized-out or unavailable + below. */ + const gdb_byte *valaddr = value_contents_for_printing (val); + + /* A scalar object that does not have all bits available can't be + printed, because all bits contribute to its representation. */ + if (value_bits_any_optimized_out (val, 0, + TARGET_CHAR_BIT * TYPE_LENGTH (type))) + val_print_optimized_out (val, stream); + else if (!value_bytes_available (val, 0, TYPE_LENGTH (type))) + val_print_unavailable (stream); + else + print_scalar_formatted (valaddr, type, options, size, stream); +} + /* Print a number according to FORMAT which is one of d,u,x,o,b,h,w,g. The raison d'etre of this function is to consolidate printing of LONG_LONG's into this one function. The format chars b,h,w,g are diff --git a/gdb/valprint.h b/gdb/valprint.h index 1aca29463f4..90df12dbd7e 100644 --- a/gdb/valprint.h +++ b/gdb/valprint.h @@ -141,6 +141,16 @@ extern void val_print_scalar_formatted (struct type *, int, struct ui_file *); +/* Print a scalar according to OPTIONS and SIZE on STREAM. Format 'i' + is not supported at this level. + + This is how the elements of an array or structure are printed + with a format. */ + +extern void value_print_scalar_formatted + (struct value *val, const struct value_print_options *options, + int size, struct ui_file *stream); + extern void print_binary_chars (struct ui_file *, const gdb_byte *, unsigned int, enum bfd_endian, bool);
reply other threads:[~2020-03-14 0:05 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200314000520.E6DE83AAA088@sourceware.org \ --to=tromey@sourceware.org \ --cc=gdb-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).