On Thu, Jan 17, 2019 at 6:14 AM Tom de Vries <tdevr...@suse.de> wrote:
>
> On 17-01-19 01:35, Ian Lance Taylor wrote:
> > On Wed, Jan 16, 2019 at 4:17 PM Tom de Vries <tdevr...@suse.de> wrote:
> >>
> >> this handles DW_FORM_GNU_ref_alt which references the .debug_info
> >> section in the .gnu_debugaltlink file.
> >>
> >> OK for trunk?
> >>
> >> Thanks,
> >> - Tom
> >>
> >> On 11-12-18 11:14, Tom de Vries wrote:
> >>> 2018-12-10  Tom de Vries  <tdevr...@suse.de>
> >>>
> >>>       * dwarf.c (enum attr_val_encoding): Add ATTR_VAL_REF_ALT_INFO.
> >>>       (struct unit): Add low and high fields.
> >>>       (struct unit_vector): New type.
> >>>       (struct dwarf_data): Add units and units_counts fields.
> >>>       (read_attribute): Handle DW_FORM_GNU_ref_alt using
> >>>       ATTR_VAL_REF_ALT_INFO.
> >>>       (find_unit): New function.
> >>>       (find_address_ranges): Add and handle unit_tag parameter.
> >>>       (build_address_map): Add and handle units_vec parameter.
> >>>       (read_referenced_name_1): Handle DW_FORM_GNU_ref_alt.
> >>>       (build_dwarf_data): Pass units_vec to build_address_map.  Store 
> >>> resulting
> >>>       units vector.
> >
> >
> >>> @@ -281,6 +283,10 @@ struct unit
> >>>    /* The offset of UNIT_DATA from the start of the information for
> >>>       this compilation unit.  */
> >>>    size_t unit_data_offset;
> >>> +  /* Start of the compilation unit.  */
> >>> +  size_t low;
> >>> +  /* End of the compilation unit.  */
> >>> +  size_t high;
> >
> > The comments should say what low and high are measured in, which I
> > guess is file offset.  Or is it offset from the start of UNIT_DATA?
> > Either way, If that is right, then the fields should be named
> > low_offset and high_offset.  Otherwise it seems easy to confuse with
> > function_addrs, where low and high refer to PC values.
> >
>
> Done.
>
> > Also if they are offsets from UNIT_DATA then size_t is OK, but if the
> > are file offsets they should be off_t.
> >
>
> AFAIU, in the case where off_t vs size_t would make a difference, we're
> running into trouble much earlier.  I've filed PR 88890 - "libbacktrace
> on 32-bit system with _FILE_OFFSET_BITS == 64" (
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88890 ) about this.
>
> Anyway, I've made the conservative choice of using off_t for now (but I
> could argue that it's a memory offset, given that the assumption is that
> the entire debug section is read into memory).

Since the entire debug section is read into memory, if they are
offsets from UNIT_DATA, they should be size_t, not off_t.  I wasn't
trying to say that we should make a conservative choice here, I was
trying to say that we should make a correct choice.  An offset from
UNIT_DATA should be size_t, a file offset should be off_t.

Ian

Reply via email to