diff options
Diffstat (limited to 'src/aarch64/unwind_i.h')
-rw-r--r-- | src/aarch64/unwind_i.h | 19 |
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 */ |