+2018-05-08 Mark Wielaard <mark@klomp.org>
+
+ * dwarf_formref.c (__libdw_formref): Explicitly don't handle
+ DW_FORM_ref_sup4 and DW_FORM_ref_sup8.
+ * dwarf_formref_die.c (dwarf_formref_die): Handle DW_FORM_ref_sup4
+ and DW_FORM_ref_sup8.
+ * dwarf_formstring.c (dwarf_formstring): Handle DW_FORM_strp_sup
+ as DW_FORM_GNU_strp_alt.
+
2018-05-05 Mark Wielaard <mark@klomp.org>
* dwarf.h: Add DWARF line content descriptions.
case DW_FORM_ref_addr:
case DW_FORM_ref_sig8:
case DW_FORM_GNU_ref_alt:
+ case DW_FORM_ref_sup4:
+ case DW_FORM_ref_sup8:
/* These aren't handled by dwarf_formref, only by dwarf_formref_die. */
__libdw_seterrno (DWARF_E_INVALID_REFERENCE);
return -1;
struct Dwarf_CU *cu = attr->cu;
Dwarf_Off offset;
- if (attr->form == DW_FORM_ref_addr || attr->form == DW_FORM_GNU_ref_alt)
+ if (attr->form == DW_FORM_ref_addr || attr->form == DW_FORM_GNU_ref_alt
+ || attr->form == DW_FORM_ref_sup4 || attr->form == DW_FORM_ref_sup8)
{
/* This has an absolute offset. */
- uint8_t ref_size = (cu->version == 2 && attr->form == DW_FORM_ref_addr
- ? cu->address_size
- : cu->offset_size);
+ uint8_t ref_size;
+ if (cu->version == 2 && attr->form == DW_FORM_ref_addr)
+ ref_size = cu->address_size;
+ else if (attr->form == DW_FORM_ref_sup4)
+ ref_size = 4;
+ else if (attr->form == DW_FORM_ref_sup8)
+ ref_size = 8;
+ else
+ ref_size = cu->offset_size;
Dwarf *dbg_ret = (attr->form == DW_FORM_GNU_ref_alt
? INTUSE(dwarf_getalt) (cu->dbg) : cu->dbg);
Dwarf_CU *cu = attrp->cu;
Dwarf *dbg = cu->dbg;
- Dwarf *dbg_ret = (attrp->form == DW_FORM_GNU_strp_alt
+ Dwarf *dbg_ret = ((attrp->form == DW_FORM_GNU_strp_alt
+ || attrp->form == DW_FORM_strp_sup)
? INTUSE(dwarf_getalt) (dbg) : dbg);
if (unlikely (dbg_ret == NULL))
uint64_t off;
if (attrp->form == DW_FORM_strp
- || attrp->form == DW_FORM_GNU_strp_alt)
+ || attrp->form == DW_FORM_GNU_strp_alt
+ || attrp->form == DW_FORM_strp_sup)
{
if (__libdw_read_offset (dbg, dbg_ret, cu_sec_idx (cu),
attrp->valp, cu->offset_size, &off,
+2018-05-05 Mark Wielaard <mark@klomp.org>
+
+ * readelf.c (attr_callback): Handle DW_FORM_ref_sup4 and
+ DW_FORM_ref_sup8 as references.
+
2018-04-24 Mark Wielaard <mark@klomp.org>
* readelf.c (print_debug_str_section): Take raw section data. Don't
case DW_FORM_ref2:
case DW_FORM_ref1:
case DW_FORM_GNU_ref_alt:
+ case DW_FORM_ref_sup4:
+ case DW_FORM_ref_sup8:
if (cbargs->silent)
break;
Dwarf_Die ref;