Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Simon Marchi <simon.marchi@polymtl.ca>
To: Petr Tesarik <ptesarik@suse.cz>
Cc: gdb-patches@sourceware.org, Jeff Mahoney <jeffm@suse.com>
Subject: Re: [PATCH] Add an optional offset option to the "symbol-file" command
Date: Fri, 25 May 2018 14:58:00 -0000	[thread overview]
Message-ID: <71f5bfcc0ee2efc88b5fda63c04f3957@polymtl.ca> (raw)
In-Reply-To: <20180525072312.3d50b6b3@ezekiel.suse.cz>

On 2018-05-25 01:23, Petr Tesarik wrote:
> Yes, technically, add-symbol-file can be used for the same purpose, but
> it is very inconvenient. Most notably, it requires listing all ELF
> sections explicitly, and the Linux kernel has a lot of them (typically
> a few dozen).
> 
> So, my current solution is:
> 
>  1. exec-file vmlinux
>  2. info target
>  3. # parse the output, adding an offset to each section's start
>  4. add-symbol-file vmlinux $textaddr -s ... # a very long list
>  5. exec-file  # to make sure that only target memory is used
> 
> Although I have already written a Python script to initialise the
> session, it's ugly, especially when it comes to parsing the output of
> "info target".

Thanks for confirming.

> Regarding consistency, add-symbol-file does not currently have any
> conflicting "-o" option, so I can add one for the same purpose.
> 
> Shall I do that?

I think it would be a good idea.  It would improve the usability of 
add-symbol-file and keep both commands more or less in sync, so it 
sounds like a win-win to me.

I assume the second positional argument of add-symbol-file (which gives 
the start address of .text) would become optional?  You just need to 
think carefully about what should happen when mixing the different 
arguments.  The .text positional argument and -o would probably be 
mutually exclusive?  -o applies to all sections, but you could use -s to 
override the address of a particular section?

> Indeed. I tend to forget that gdb has switched to C++.

Yep, you can get wild!

>> >> @@ -1568,6 +1579,8 @@ symbol_file_command (const char *args, int
>> >> from_tty)
>> >>  	    flags |= OBJF_READNOW;
>> >>  	  else if (strcmp (arg, "-readnever") == 0)
>> >>  	    flags |= OBJF_READNEVER;
>> >> +	  else if (strcmp (arg, "-o") == 0)
>> >> +	    expecting_offset = true;
>> 
>> This doesn't handle correctly (IMO) "symbol-file foo -o", which
>> should be rejected with an error message.  I think it would be
>> simpler to do something like this:
>> 
>> 	  else if (strcmp (arg, "-o") == 0)
>> 	    {
>> 	      arg = built_argv[++idx];
>> 	      if (arg == NULL)
>> 		error (_("Missing argument to -o"));
>> 
>> 	      offset = parse_and_eval_address (arg);
>> 	    }
> 
> Ah, so that's how it's done. Honestly, I was quite surprised to find no
> variant of getopt() here...

I think GDB would benefit of having such a variant of getopt to 
standardize how arguments are parsed throughout the CLI.  And to avoid 
having to do manual parsing like this, which often gives a fragile 
result.

>> You can simplify these using gdb_assert:
>> 
>> gdb_assert "${new_static_foo_addr} == ${static_foo_addr} + $offset" \
>>      "static variable foo is moved by offset"
> 
> Will do. I should probably simplify other similar stanzas in the test
> suite in a separate patch.

If you are up for it, it would be appreciated!

> Thank you for your review! I will send an improved patch soon (but
> maybe not today, as I'm at a conference).

But but... it's the ideal time to work on side-quest patches! ;)

Thanks,

Simon


  reply	other threads:[~2018-05-25 14:14 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-27  9:25 Petr Tesarik
2018-05-23 10:37 ` Petr Tesarik
2018-05-24 14:35   ` Simon Marchi
2018-05-25 11:41     ` Petr Tesarik
2018-05-25 14:58       ` Simon Marchi [this message]
2018-05-25 23:20         ` John Baldwin

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=71f5bfcc0ee2efc88b5fda63c04f3957@polymtl.ca \
    --to=simon.marchi@polymtl.ca \
    --cc=gdb-patches@sourceware.org \
    --cc=jeffm@suse.com \
    --cc=ptesarik@suse.cz \
    /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