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: Thu, 24 May 2018 14:35:00 -0000	[thread overview]
Message-ID: <092eb92c83693a6a444ff517c9b0168f@polymtl.ca> (raw)
In-Reply-To: <20180523104956.35a01bcc@ezekiel.suse.cz>

On 2018-05-23 04:49, Petr Tesarik wrote:
> Hi all,
> 
> any comment on my patch? If it's not good, can you elaborate on what
> needs improvement, please?
> 
> Petr T

Hi Petr,

Sorry about that, with the volume on the list patches fall through the 
cracks some times, it is perfectly appropriate to ping them after a 
while as you did.

I am not against adding that new feature to "symbol-file" (it seems 
useful), but I am just wondering first if you can achieve the same thing 
using "add-symbol-file" instead.  add-symbol-file doesn't take an 
offset, but the beginning address of the .text section.  Other sections 
(e.g. .data and .bss) need to be specified separately though.  I'd then 
like to know if it would be possible to make symbol-file similar to 
add-symbol-file, and if that would be practical/easy to use.  On one 
side, it would be weird if symbol-file and add-symbol-file had different 
syntaxes to achieve the same thing, but on the other hand having to 
specify a single offset for all sections of the object file (probably 
enough 99.9% of the time) sounds much easier than having to specify the 
base addresses of multiple sections...

I don't have big comments on the patch itself, just nits here and there.

>> @@ -1222,16 +1222,20 @@ symbol_file_add (const char *name, 
>> symfile_add_flags add_flags,
>>  void
>>  symbol_file_add_main (const char *args, symfile_add_flags add_flags)
>>  {
>> -  symbol_file_add_main_1 (args, add_flags, 0);
>> +  symbol_file_add_main_1 (args, add_flags, 0, 0);
>>  }
>> 
>>  static void
>>  symbol_file_add_main_1 (const char *args, symfile_add_flags 
>> add_flags,
>> -			objfile_flags flags)
>> +			objfile_flags flags, CORE_ADDR offset)
>>  {
>> +  struct objfile *objfile;
>> +
>>    add_flags |= current_inferior ()->symfile_flags | SYMFILE_MAINLINE;
>> 
>> -  symbol_file_add (args, add_flags, NULL, flags);
>> +  objfile = symbol_file_add (args, add_flags, NULL, flags);

You can declare and assign the variable on the same line.


>> @@ -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);
	    }



>> diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
>> index 34da102c62..68431cb035 100644
>> --- a/gdb/testsuite/ChangeLog
>> +++ b/gdb/testsuite/ChangeLog
>> @@ -1,3 +1,7 @@
>> +2018-04-27  Petr Tesarik  <ptesarik@suse.com>
>> +
>> +	* gdb.base/relocate.exp: Add test for "symbol-file -o ".
>> +
>>  2018-04-26  Pedro Alves  <palves@redhat.com>
>> 
>>  	* gdb.base/gnu-ifunc.exp (set-break): Test that GDB resolves
>> diff --git a/gdb/testsuite/gdb.base/relocate.exp 
>> b/gdb/testsuite/gdb.base/relocate.exp
>> index 89f2fffcd9..4383e79cb2 100644
>> --- a/gdb/testsuite/gdb.base/relocate.exp
>> +++ b/gdb/testsuite/gdb.base/relocate.exp
>> @@ -196,6 +196,39 @@ if { "${function_foo_addr}" == 
>> "${new_function_foo_addr}" } {
>>    pass "function foo has a different address"
>>  }
>> 
>> +# Load the object using symbol-file with an offset and check that
>> +# all addresses are moved by that offset.
>> +
>> +set offset 0x10000
>> +clean_restart
>> +gdb_test "symbol-file -o $offset $binfile" \
>> +    "Reading symbols from ${binfile}\.\.\.done\." \
>> +    "symbol-file with offset"
>> +
>> +# Make sure the address of a static variable is moved by offset.
>> +set new_static_foo_addr [get_var_address static_foo]
>> +if { "${new_static_foo_addr}" == "${static_foo_addr}" + $offset } {
>> +  pass "static variable foo is moved by offset"
>> +} else {
>> +  fail "static variable foo is moved by offset"
>> +}

You can simplify these using gdb_assert:

gdb_assert "${new_static_foo_addr} == ${static_foo_addr} + $offset" \
     "static variable foo is moved by offset"

Thanks,

Simon


  reply	other threads:[~2018-05-24 13:33 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 [this message]
2018-05-25 11:41     ` Petr Tesarik
2018-05-25 14:58       ` Simon Marchi
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=092eb92c83693a6a444ff517c9b0168f@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