diff options
author | Yichao Yu <yyc1992@gmail.com> | 2017-10-31 11:55:07 -0400 |
---|---|---|
committer | Dave Watson <davejwatson@fb.com> | 2017-10-31 08:55:07 -0700 |
commit | 1870b26a006ba5195d95691b9d4e81305a4dfe97 (patch) | |
tree | 8fd45638b6f3dc5ddf28e5a868d71758fc469017 | |
parent | 9e81e9efee5e2e3e295b9bfd1c9f0718a244d926 (diff) | |
download | libunwind-1870b26a006ba5195d95691b9d4e81305a4dfe97.tar.gz |
dwarf: Allow DWARF version both 3 and 4 (#56)
-rw-r--r-- | include/dwarf.h | 3 | ||||
-rw-r--r-- | src/dwarf/Gfde.c | 7 |
2 files changed, 6 insertions, 4 deletions
diff --git a/include/dwarf.h b/include/dwarf.h index db2a7697..f45d0e4a 100644 --- a/include/dwarf.h +++ b/include/dwarf.h @@ -135,7 +135,8 @@ typedef enum } dwarf_expr_op_t; -#define DWARF_CIE_VERSION 3 /* GCC emits version 1??? */ +#define DWARF_CIE_VERSION 3 +#define DWARF_CIE_VERSION_MAX 4 #define DWARF_CFA_OPCODE_MASK 0xc0 #define DWARF_CFA_OPERAND_MASK 0x3f diff --git a/src/dwarf/Gfde.c b/src/dwarf/Gfde.c index 49484eee..9250b895 100644 --- a/src/dwarf/Gfde.c +++ b/src/dwarf/Gfde.c @@ -116,10 +116,11 @@ parse_cie (unw_addr_space_t as, unw_accessors_t *a, unw_word_t addr, if ((ret = dwarf_readu8 (as, a, &addr, &version, arg)) < 0) return ret; - if (version != 1 && version != DWARF_CIE_VERSION) + /* GCC emits version 1??? */ + if (version != 1 && (version < DWARF_CIE_VERSION || version > DWARF_CIE_VERSION_MAX)) { - Debug (1, "Got CIE version %u, expected version 1 or " - STR (DWARF_CIE_VERSION) "\n", version); + Debug (1, "Got CIE version %u, expected version 1 or between " + STR (DWARF_CIE_VERSION) " and " STR (DWARF_CIE_VERSION_MAX) "\n", version); return -UNW_EBADVERSION; } |