This is the mail archive of the gdb-patches@sources.redhat.com 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: DWARF2 location lists vs. shared libraries


On Tue, May 04, 2004 at 08:45:52PM -0400, Bryce McKinlay wrote:
> 2004-05-04  Bryce McKinlay  <mckinlay@redhat.com>
> 
> 	* dwarf2read.c (dwarf2_symbol_mark_computed): Use ANOFFSET to 
> 	adjust baton's base_address for shared libraries.

I spoke briefly to Bryce about this (on IRC).

I think the right thing to do would be to add the offset when
searching, rather than when saving.  This will help us with relocating
objfiles, which I think would be good to support - that way we can
cache debug info for unchanged shared libraries across runs.

Does this make sense to others?  I'll try to write the patch tomorrow
or Thursday.

> 
> Index: dwarf2read.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/dwarf2read.c,v
> retrieving revision 1.150
> diff -u -r1.150 dwarf2read.c
> --- dwarf2read.c	4 May 2004 00:11:25 -0000	1.150
> +++ dwarf2read.c	5 May 2004 00:41:00 -0000
> @@ -8662,6 +8662,7 @@
>    if (attr->form == DW_FORM_data4 || attr->form == DW_FORM_data8)
>      {
>        struct dwarf2_loclist_baton *baton;
> +      CORE_ADDR base_offset;
>  
>        baton = obstack_alloc (&cu->objfile->objfile_obstack,
>  			     sizeof (struct dwarf2_loclist_baton));
> @@ -8671,7 +8672,10 @@
>  	 don't run off the edge of the section.  */
>        baton->size = dwarf2_per_objfile->loc_size - DW_UNSND (attr);
>        baton->data = dwarf2_per_objfile->loc_buffer + DW_UNSND (attr);
> -      baton->base_address = cu->header.base_address;
> +      /* Set base_address, adjusting for shared libraries.  */
> +      base_offset = ANOFFSET (cu->objfile->section_offsets, 
> +			      SECT_OFF_TEXT (cu->objfile));
> +      baton->base_address = cu->header.base_address + base_offset;
>        if (cu->header.base_known == 0)
>  	complaint (&symfile_complaints,
>  		   "Location list used without specifying the CU base address.");


-- 
Daniel Jacobowitz


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