summaryrefslogtreecommitdiff
path: root/src/aarch64/unwind_i.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/aarch64/unwind_i.h')
-rw-r--r--src/aarch64/unwind_i.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/aarch64/unwind_i.h b/src/aarch64/unwind_i.h
index e4947a3c..2bea8f3d 100644
--- a/src/aarch64/unwind_i.h
+++ b/src/aarch64/unwind_i.h
@@ -32,6 +32,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
#include "libunwind_i.h"
+/* DWARF column numbers for AArch64: */
+#define X29 29
+#define FP 29
+#define X30 30
+#define LR 30
+#define SP 31
+
#define aarch64_lock UNW_OBJ(lock)
#define aarch64_local_resume UNW_OBJ(local_resume)
#define aarch64_local_addr_space_init UNW_OBJ(local_addr_space_init)
@@ -40,4 +47,16 @@ extern void aarch64_local_addr_space_init (void);
extern int aarch64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor,
void *arg);
+/* By-pass calls to access_mem() when known to be safe. */
+#ifdef UNW_LOCAL_ONLY
+# undef ACCESS_MEM_FAST
+# define ACCESS_MEM_FAST(ret,validate,cur,addr,to) \
+ do { \
+ if (unlikely(validate)) \
+ (ret) = dwarf_get ((cur), DWARF_MEM_LOC ((cur), (addr)), &(to)); \
+ else \
+ (ret) = 0, (to) = *(unw_word_t *)(addr); \
+ } while (0)
+#endif
+
#endif /* unwind_i_h */