[libbacktrace] Handle DW_FORM_GNU_strp_alt

Handle DW_FORM_GNU_strp_alt which references the .debug_str section in the
.gnu_debugaltlink file.

2019-01-17  Tom de Vries  <tdevries@suse.de>

	PR libbacktrace/82857
	* dwarf.c (read_attribute): Handle DW_FORM_GNU_strp_alt
	using altlink.

From-SVN: r267996
This commit is contained in:
Tom de Vries 2019-01-17 00:08:05 +00:00 committed by Tom de Vries
parent 944f59ffe2
commit f2f00d3a04
2 changed files with 23 additions and 8 deletions

View File

@ -1,3 +1,9 @@
2019-01-17 Tom de Vries <tdevries@suse.de>
PR libbacktrace/82857
* dwarf.c (read_attribute): Handle DW_FORM_GNU_strp_alt
using altlink.
2019-01-17 Tom de Vries <tdevries@suse.de>
* dwarf.c (enum attr_val_encoding): Add ATTR_VAL_NONE.

View File

@ -843,14 +843,23 @@ read_attribute (enum dwarf_form form, struct dwarf_buf *buf,
val->encoding = ATTR_VAL_REF_SECTION;
return 1;
case DW_FORM_GNU_strp_alt:
val->u.uint = read_offset (buf, is_dwarf64);
if (altlink == NULL)
{
val->encoding = ATTR_VAL_NONE;
return 1;
}
val->encoding = ATTR_VAL_REF_SECTION;
return 1;
{
uint64_t offset;
offset = read_offset (buf, is_dwarf64);
if (altlink == NULL)
{
val->encoding = ATTR_VAL_NONE;
return 1;
}
if (offset >= altlink->dwarf_str_size)
{
dwarf_buf_error (buf, "DW_FORM_GNU_strp_alt out of range");
return 0;
}
val->encoding = ATTR_VAL_STRING;
val->u.string = (const char *) altlink->dwarf_str + offset;
return 1;
}
default:
dwarf_buf_error (buf, "unrecognized DWARF form");
return 0;