This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] btrace, vdso: add vdso target sections


Not yet, sorry, but I will soon.  I'm busy fixing a few
regressions exposed by an earlier run control series.  I
think I have good fixes already, and should hopefully be
posting them today or tomorrow...

-- 
Pedro Alves

On 04/22/2014 03:31 PM, Metzger, Markus T wrote:
> Hello Pedro,
> 
> Did you find some time to review this?  This is related to the BFD changes you
> and Alan Modra were discussing.
> 
> It makes GDB use the BFD sections that Alan's patch added to fix an issue with
> disassembling vdso code in record btrace.
> 
> Thanks,
> Markus.
> 
>> -----Original Message-----
>> From: Metzger, Markus T
>> Sent: Friday, April 04, 2014 10:53 AM
>> To: palves@redhat.com
>> Cc: gdb-patches@sourceware.org
>> Subject: [PATCH] btrace, vdso: add vdso target sections
>>
>> When loading symbols for the vdso, also add its sections to target_sections.
>>
>> This fixes an issue with record btrace where vdso instructions could not be
>> disassembled during replay.
>>
>> 2014-04-04  Markus Metzger  <markus.t.metzger@intel.com>
>>
>> 	* symfile-mem.c (symbol_file_add_from_memory): Add
>> add_sections
>> 	parameter.  Add BFD sections.  Adjust all callers.
>> 	(struct symbol_file_add_from_memory_args): Add add_sections
>> field.
>>
>> testsuite/
>> 	* gdb.btrace/vdso.c: New.
>> 	* gdb.btrace/vdso.exp: New.
>>
>>
>> ---
>>  gdb/symfile-mem.c                 | 33 ++++++++++++++++++++++++----
>>  gdb/testsuite/gdb.btrace/vdso.c   | 30 +++++++++++++++++++++++++
>>  gdb/testsuite/gdb.btrace/vdso.exp | 46
>> +++++++++++++++++++++++++++++++++++++++
>>  3 files changed, 105 insertions(+), 4 deletions(-)
>>  create mode 100644 gdb/testsuite/gdb.btrace/vdso.c
>>  create mode 100644 gdb/testsuite/gdb.btrace/vdso.exp
>>
>> diff --git a/gdb/symfile-mem.c b/gdb/symfile-mem.c
>> index 3f09c4d..6f67cd8 100644
>> --- a/gdb/symfile-mem.c
>> +++ b/gdb/symfile-mem.c
>> @@ -80,10 +80,12 @@ target_read_memory_bfd (bfd_vma memaddr,
>> bfd_byte *myaddr, bfd_size_type len)
>>     non-zero, is the known size of the object.  TEMPL is a bfd
>>     representing the target's format.  NAME is the name to use for this
>>     symbol file in messages; it can be NULL or a malloc-allocated string
>> -   which will be attached to the BFD.  */
>> +   which will be attached to the BFD.  If ADD_SECTIONS is non-zero,
>> +   add the sections of the loaded BFD.  */
>>  static struct objfile *
>>  symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr,
>> -			     size_t size, char *name, int from_tty)
>> +			     size_t size, char *name, int add_sections,
>> +			     int from_tty)
>>  {
>>    struct objfile *objf;
>>    struct bfd *nbfd;
>> @@ -131,6 +133,27 @@ symbol_file_add_from_memory (struct bfd *templ,
>> CORE_ADDR addr,
>>  				   from_tty ? SYMFILE_VERBOSE : 0,
>>                                     sai, OBJF_SHARED, NULL);
>>
>> +  if (add_sections)
>> +    {
>> +      struct target_section *sections, *sections_end, *tsec;
>> +
>> +      sections = NULL;
>> +      sections_end = NULL;
>> +      make_cleanup (xfree, sections);
>> +
>> +      if (build_section_table (nbfd, &sections, &sections_end) == 0)
>> +	{
>> +	  /* Adjust the target section addresses by the load address.  */
>> +	  for (tsec = sections; tsec != sections_end; ++tsec)
>> +	    {
>> +	      tsec->addr += loadbase;
>> +	      tsec->endaddr += loadbase;
>> +	    }
>> +
>> +	  add_target_sections (&nbfd, sections, sections_end);
>> +	}
>> +    }
>> +
>>    /* This might change our ideas about frames already looked at.  */
>>    reinit_frame_cache ();
>>
>> @@ -159,7 +182,7 @@ add_symbol_file_from_memory_command (char
>> *args, int from_tty)
>>      error (_("Must use symbol-file or exec-file "
>>  	     "before add-symbol-file-from-memory."));
>>
>> -  symbol_file_add_from_memory (templ, addr, 0, NULL, from_tty);
>> +  symbol_file_add_from_memory (templ, addr, 0, NULL, 0, from_tty);
>>  }
>>
>>  /* Arguments for symbol_file_add_from_memory_wrapper.  */
>> @@ -171,6 +194,7 @@ struct symbol_file_add_from_memory_args
>>    size_t size;
>>    char *name;
>>    int from_tty;
>> +  int add_sections;
>>  };
>>
>>  /* Wrapper function for symbol_file_add_from_memory, for
>> @@ -182,7 +206,7 @@ symbol_file_add_from_memory_wrapper (struct
>> ui_out *uiout, void *data)
>>    struct symbol_file_add_from_memory_args *args = data;
>>
>>    symbol_file_add_from_memory (args->bfd, args->sysinfo_ehdr, args-
>>> size,
>> -			       args->name, args->from_tty);
>> +			       args->name, args->add_sections, args-
>>> from_tty);
>>    return 0;
>>  }
>>
>> @@ -247,6 +271,7 @@ add_vsyscall_page (struct target_ops *target, int
>> from_tty)
>>  	 vsyscall DSO was not triggered by the user, even if the user
>>  	 typed "run" at the TTY.  */
>>        args.from_tty = 0;
>> +      args.add_sections = 1;
>>        catch_exceptions (current_uiout,
>> symbol_file_add_from_memory_wrapper,
>>  			&args, RETURN_MASK_ALL);
>>      }
>> diff --git a/gdb/testsuite/gdb.btrace/vdso.c
>> b/gdb/testsuite/gdb.btrace/vdso.c
>> new file mode 100644
>> index 0000000..3e73071
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.btrace/vdso.c
>> @@ -0,0 +1,30 @@
>> +/* This testcase is part of GDB, the GNU debugger.
>> +
>> +   Copyright 2014 Free Software Foundation, Inc.
>> +
>> +   Contributed by Intel Corp. <markus.t.metzger@intel.com>
>> +
>> +   This program is free software; you can redistribute it and/or modify
>> +   it under the terms of the GNU General Public License as published by
>> +   the Free Software Foundation; either version 3 of the License, or
>> +   (at your option) any later version.
>> +
>> +   This program is distributed in the hope that it will be useful,
>> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +   GNU General Public License for more details.
>> +
>> +   You should have received a copy of the GNU General Public License
>> +   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
>> +
>> +#include <sys/time.h>
>> +
>> +int
>> +main (void)
>> +{
>> +  struct timeval tv;
>> +
>> +  gettimeofday (&tv, 0);
>> +
>> +  return 0;
>> +}
>> diff --git a/gdb/testsuite/gdb.btrace/vdso.exp
>> b/gdb/testsuite/gdb.btrace/vdso.exp
>> new file mode 100644
>> index 0000000..2f415ff
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.btrace/vdso.exp
>> @@ -0,0 +1,46 @@
>> +# This testcase is part of GDB, the GNU debugger.
>> +#
>> +# Copyright 2014 Free Software Foundation, Inc.
>> +#
>> +# Contributed by Intel Corp. <markus.t.metzger@intel.com>
>> +#
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +#
>> +#
>> +# Test that we can access the vdso memory during replay for stepping.
>> +
>> +# check for btrace support
>> +if { [skip_btrace_tests] } { return -1 }
>> +
>> +# start inferior
>> +standard_testfile
>> +if [prepare_for_testing $testfile.exp $testfile $srcfile] {
>> +    return -1
>> +}
>> +if ![runto_main] {
>> +    return -1
>> +}
>> +
>> +# trace the test code
>> +gdb_test_no_output "record btrace"
>> +gdb_test "next"
>> +
>> +# start replaying
>> +gdb_test "reverse-stepi"
>> +
>> +# disassemble the code around the current PC
>> +gdb_test "disassemble \$pc, +10" [join [list \
>> +	".*" \
>> +	"End of assembler dump\." \
>> +    ] "\r\n"]
>> --
>> 1.8.3.1
> 
> Intel GmbH
> Dornacher Strasse 1
> 85622 Feldkirchen/Muenchen, Deutschland
> Sitz der Gesellschaft: Feldkirchen bei Muenchen
> Geschaeftsfuehrer: Christian Lamprechter, Hannes Schwaderer, Douglas Lusk
> Registergericht: Muenchen HRB 47456
> Ust.-IdNr./VAT Registration No.: DE129385895
> Citibank Frankfurt a.M. (BLZ 502 109 00) 600119052
> 



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]