summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYichao Yu <yyc1992@gmail.com>2016-09-30 00:40:56 -0400
committerDave Watson <davejwatson@fb.com>2017-08-15 10:34:23 -0700
commitac1427d87fd9254366d9e262c5b9f35676f3cc10 (patch)
tree3538857c4c3d4cef527e5ab4e178942eed8c39be
parent1a4b357598ccb718b38739701f99b1cc4fccbf21 (diff)
downloadlibunwind-ac1427d87fd9254366d9e262c5b9f35676f3cc10.tar.gz
Support dynamic unwind info on ARM
-rw-r--r--src/arm/Gstep.c10
-rw-r--r--src/mi/Gdyn-extract.c1
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: */