diff options
author | Yichao Yu <yyc1992@gmail.com> | 2016-09-30 00:40:56 -0400 |
---|---|---|
committer | Dave Watson <davejwatson@fb.com> | 2017-08-15 10:34:23 -0700 |
commit | ac1427d87fd9254366d9e262c5b9f35676f3cc10 (patch) | |
tree | 3538857c4c3d4cef527e5ab4e178942eed8c39be | |
parent | 1a4b357598ccb718b38739701f99b1cc4fccbf21 (diff) | |
download | libunwind-ac1427d87fd9254366d9e262c5b9f35676f3cc10.tar.gz |
Support dynamic unwind info on ARM
-rw-r--r-- | src/arm/Gstep.c | 10 | ||||
-rw-r--r-- | src/mi/Gdyn-extract.c | 1 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/arm/Gstep.c b/src/arm/Gstep.c index 3ffda083..b3463eff 100644 --- a/src/arm/Gstep.c +++ b/src/arm/Gstep.c @@ -45,8 +45,14 @@ arm_exidx_step (struct cursor *c) /* mark PC unsaved */ c->dwarf.loc[UNW_ARM_R15] = DWARF_NULL_LOC; - if ((ret = tdep_find_proc_info (&c->dwarf, c->dwarf.ip, 1)) < 0) - return ret; + /* check dynamic info first --- it overrides everything else */ + ret = unwi_find_dynamic_proc_info (c->dwarf.as, c->dwarf.ip, &c->dwarf.pi, 1, + c->dwarf.as_arg); + if (ret == -UNW_ENOINFO) + { + if ((ret = tdep_find_proc_info (&c->dwarf, c->dwarf.ip, 1)) < 0) + return ret; + } if (c->dwarf.pi.format != UNW_INFO_FORMAT_ARM_EXIDX) return -UNW_ENOINFO; diff --git a/src/mi/Gdyn-extract.c b/src/mi/Gdyn-extract.c index c8ae7a03..5f7682e6 100644 --- a/src/mi/Gdyn-extract.c +++ b/src/mi/Gdyn-extract.c @@ -49,6 +49,7 @@ unwi_extract_dynamic_proc_info (unw_addr_space_t as, unw_word_t ip, case UNW_INFO_FORMAT_TABLE: case UNW_INFO_FORMAT_REMOTE_TABLE: + case UNW_INFO_FORMAT_ARM_EXIDX: case UNW_INFO_FORMAT_IP_OFFSET: #ifdef tdep_search_unwind_table /* call platform-specific search routine: */ |