Handle DW_FORM_GNU_strp_alt which references the .debug_str section in the .gnu_debugaltlink file.
2018-11-11 Tom de Vries <tdevr...@suse.de> * dwarf.c (read_attribute): Handle DW_FORM_GNU_strp_alt using altlink. --- libbacktrace/dwarf.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/libbacktrace/dwarf.c b/libbacktrace/dwarf.c index 8b802a085ca..341b84605c0 100644 --- a/libbacktrace/dwarf.c +++ b/libbacktrace/dwarf.c @@ -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; -- 2.16.4