From: Simon Marchi <simon.marchi@polymtl.ca>
To: Luis Machado <lgustavo@codesourcery.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] Add -verify option to load command
Date: Fri, 06 Jan 2017 19:17:00 -0000 [thread overview]
Message-ID: <01a92fce926525df375f1317da45e2df@polymtl.ca> (raw)
In-Reply-To: <1483720912-6563-1-git-send-email-lgustavo@codesourcery.com>
On 2017-01-06 11:41, Luis Machado wrote:
> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
> index 44ae068..39de23c 100644
> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo
> @@ -19592,7 +19592,7 @@ Show the current status of displaying
> communications between
> @table @code
>
> @kindex load @var{filename}
> -@item load @var{filename}
> +@item load @var{filename} [-verify]
I just noticed the documentation here doesn't talk about OFFSET.
> @@ -2099,19 +2101,30 @@ generic_load (const char *args, int from_tty)
> filename = tilde_expand (argv[0]);
> make_cleanup (xfree, filename);
>
> - if (argv[1] != NULL)
> + arg_idx = 1;
> + if (argv[arg_idx] != NULL)
> {
> const char *endptr;
>
> - cbdata.load_offset = strtoulst (argv[1], &endptr, 0);
> + if (strcmp (argv[arg_idx], "-verify") == 0)
> + {
> + verify = 1;
> + arg_idx++;
> + }
> +
> + if (argv[arg_idx] != NULL)
> + {
> + cbdata.load_offset = strtoul ((const char *) argv[arg_idx],
> + (char **) &endptr, 0);
>
> - /* If the last word was not a valid number then
> - treat it as a file name with spaces in. */
> - if (argv[1] == endptr)
> - error (_("Invalid download offset:%s."), argv[1]);
> + /* If the last word was not a valid number then
> + treat it as a file name with spaces in. */
> + if (argv[arg_idx] == endptr)
> + error (_("Invalid download offset:%s."), argv[arg_idx]);
You could sneak a space after the colon here :).
I know that's old code, but I don't really understand it. According to
the help text of load, from your other patch, the offset can be an
expression, s I assume "$foo + 1" should work. The check with strtoul
would clearly not accept that.
> @@ -2140,7 +2153,7 @@ generic_load (const char *args, int from_tty)
> steady_clock::time_point start_time = steady_clock::now ();
>
> if (target_write_memory_blocks (cbdata.requests, flash_discard,
> - load_progress) != 0)
> + load_progress, verify) != 0)
> error (_("Load failed"));
>
> steady_clock::time_point end_time = steady_clock::now ();
> @@ -3952,8 +3965,8 @@ that lies within the boundaries of this symbol
> file in memory."),
> c = add_cmd ("load", class_files, load_command, _("\
> Dynamically load FILE into the running program, and record its
> symbols\n\
> for access from GDB.\n\
> -A load offset may also be given.\n\
> -Usage: load [FILE] [offset expression]"), &cmdlist);
> +A load offset and write verification option may also be given.\n\
> +Usage: load [FILE] [-verify] [offset expression]"), &cmdlist);
Is there a reason why you placed the [-verify] between the two other
arguments and not before them? That's where I would usually expect the
"dash" arguments to be placed in the usage message.
From what I understand it is possible to use load without specifying
FILE, which will load the executable currently loaded in gdb. So I
think all these forms should be valid:
(gdb) load -verify
(gdb) load myfile
(gdb) load -verify myfile
(gdb) load myfile myoffset
(gdb) load -verify myfile myoffset
Ideally, we should be able to place the "dash" arguments anywhere, just
like with any good command line tool. Since we don't have that, I think
that having between the command and the positional arguments makes more
sense. That's my opinion though, I'm curious to hear what others think.
> + /* Do we need to verify if the data was properly written to the
> target's
> + memory? */
> + if (verify)
> + {
> + /* Go through all memory regions that GDB wrote to and verify
> the
> + contents. */
> + for (i = 0; VEC_iterate (memory_write_request_s, blocks, i, r);
> ++i)
> + if (target_verify_memory (r->data, r->begin, r->end - r->begin) <= 0)
> + error ("Load verification failed for region starting at 0x%x",
> + (unsigned int) r->begin);
> + else
> + current_uiout->message ("Verified load, size 0x%x lma 0x%x\n",
> + (unsigned int) (r->end - r->begin),
> + (unsigned int) r->begin);
I guess the end and begin fields of memory_write_request should be of
type CORE_ADDR, and this should use paddress.
> diff --git a/gdb/target.h b/gdb/target.h
> index e239c2c..6fc89d4 100644
> --- a/gdb/target.h
> +++ b/gdb/target.h
> @@ -1497,11 +1497,14 @@ enum flash_preserve_mode
> feedback to user. It will be called with the baton corresponding
> to the request currently being written. It may also be called
> with a NULL baton, when preserved flash sectors are being
> rewritten.
> + VERIFY is non-zero if verification should be performed for the data
> written
> + to the target's memory and zero if no verification should be
> performed.
Make sure that the line wrapping matches the other arguments.
>
> The function returns 0 on success, and error otherwise. */
> int target_write_memory_blocks (VEC(memory_write_request_s) *requests,
> enum flash_preserve_mode preserve_flash_p,
> - void (*progress_cb) (ULONGEST, void *));
> + void (*progress_cb) (ULONGEST, void *),
> + int verify);
bool? (for the whole call chain)
Thanks,
Simon
next prev parent reply other threads:[~2017-01-06 19:17 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-06 16:42 Luis Machado
2017-01-06 18:17 ` Eli Zaretskii
2017-01-06 18:30 ` Luis Machado
2017-01-07 7:53 ` Eli Zaretskii
2017-01-06 19:17 ` Simon Marchi [this message]
2017-01-06 19:33 ` Luis Machado
2017-01-06 19:59 ` Simon Marchi
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=01a92fce926525df375f1317da45e2df@polymtl.ca \
--to=simon.marchi@polymtl.ca \
--cc=gdb-patches@sourceware.org \
--cc=lgustavo@codesourcery.com \
/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: link
Be 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