Imported Upstream version 1.3.1
[platform/upstream/libunwind.git] / include / tdep-mips / libunwind_i.h
index 3ef1cef..3fe40c0 100644 (file)
@@ -59,21 +59,21 @@ struct unw_addr_space
 #else
     uint32_t cache_generation;
 #endif
-    unw_word_t dyn_generation;         /* see dyn-common.h */
-    unw_word_t dyn_info_list_addr;     /* (cached) dyn_info_list_addr */
+    unw_word_t dyn_generation;          /* see dyn-common.h */
+    unw_word_t dyn_info_list_addr;      /* (cached) dyn_info_list_addr */
     struct dwarf_rs_cache global_cache;
     struct unw_debug_frame_list *debug_frames;
 };
 
-#define tdep_big_endian(as)            ((as)->big_endian)
+#define tdep_big_endian(as)             ((as)->big_endian)
 
 struct cursor
   {
-    struct dwarf_cursor dwarf;         /* must be first */
+    struct dwarf_cursor dwarf;          /* must be first */
     unw_word_t sigcontext_addr;
   };
 
-#define DWARF_GET_LOC(l)       ((l).val)
+#define DWARF_GET_LOC(l)        ((l).val)
 
 #ifndef UNW_REMOTE_ONLY
 # if _MIPS_SIM == _ABIN32
@@ -84,15 +84,15 @@ typedef long mips_reg_t;
 #endif
 
 #ifdef UNW_LOCAL_ONLY
-# define DWARF_NULL_LOC                DWARF_LOC (0, 0)
-# define DWARF_IS_NULL_LOC(l)  (DWARF_GET_LOC (l) == 0)
-# define DWARF_LOC(r, t)       ((dwarf_loc_t) { .val = (r) })
-# define DWARF_IS_REG_LOC(l)   0
-# define DWARF_REG_LOC(c,r)    (DWARF_LOC((unw_word_t) (intptr_t)           \
-                                tdep_uc_addr((c)->as_arg, (r)), 0))
-# define DWARF_MEM_LOC(c,m)    DWARF_LOC ((m), 0)
-# define DWARF_FPREG_LOC(c,r)  (DWARF_LOC((unw_word_t) (intptr_t)           \
-                                tdep_uc_addr((c)->as_arg, (r)), 0))
+# define DWARF_NULL_LOC         DWARF_LOC (0, 0)
+# define DWARF_IS_NULL_LOC(l)   (DWARF_GET_LOC (l) == 0)
+# define DWARF_LOC(r, t)        ((dwarf_loc_t) { .val = (r) })
+# define DWARF_IS_REG_LOC(l)    0
+# define DWARF_REG_LOC(c,r)     (DWARF_LOC((unw_word_t) (intptr_t)           \
+                                 tdep_uc_addr((c)->as_arg, (r)), 0))
+# define DWARF_MEM_LOC(c,m)     DWARF_LOC ((m), 0)
+# define DWARF_FPREG_LOC(c,r)   (DWARF_LOC((unw_word_t) (intptr_t)           \
+                                 tdep_uc_addr((c)->as_arg, (r)), 0))
 
 /* FIXME: Implement these for the MIPS FPU.  */
 static inline int
@@ -132,18 +132,18 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
 }
 
 #else /* !UNW_LOCAL_ONLY */
-# define DWARF_LOC_TYPE_FP     (1 << 0)
-# define DWARF_LOC_TYPE_REG    (1 << 1)
-# define DWARF_NULL_LOC                DWARF_LOC (0, 0)
-# define DWARF_IS_NULL_LOC(l)                                          \
-               ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; })
-# define DWARF_LOC(r, t)       ((dwarf_loc_t) { .val = (r), .type = (t) })
-# define DWARF_IS_REG_LOC(l)   (((l).type & DWARF_LOC_TYPE_REG) != 0)
-# define DWARF_IS_FP_LOC(l)    (((l).type & DWARF_LOC_TYPE_FP) != 0)
-# define DWARF_REG_LOC(c,r)    DWARF_LOC((r), DWARF_LOC_TYPE_REG)
-# define DWARF_MEM_LOC(c,m)    DWARF_LOC ((m), 0)
-# define DWARF_FPREG_LOC(c,r)  DWARF_LOC((r), (DWARF_LOC_TYPE_REG      \
-                                               | DWARF_LOC_TYPE_FP))
+# define DWARF_LOC_TYPE_FP      (1 << 0)
+# define DWARF_LOC_TYPE_REG     (1 << 1)
+# define DWARF_NULL_LOC         DWARF_LOC (0, 0)
+# define DWARF_IS_NULL_LOC(l)                                           \
+                ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; })
+# define DWARF_LOC(r, t)        ((dwarf_loc_t) { .val = (r), .type = (t) })
+# define DWARF_IS_REG_LOC(l)    (((l).type & DWARF_LOC_TYPE_REG) != 0)
+# define DWARF_IS_FP_LOC(l)     (((l).type & DWARF_LOC_TYPE_FP) != 0)
+# define DWARF_REG_LOC(c,r)     DWARF_LOC((r), DWARF_LOC_TYPE_REG)
+# define DWARF_MEM_LOC(c,m)     DWARF_LOC ((m), 0)
+# define DWARF_FPREG_LOC(c,r)   DWARF_LOC((r), (DWARF_LOC_TYPE_REG      \
+                                                | DWARF_LOC_TYPE_FP))
 
 static inline int
 read_s32 (struct dwarf_cursor *c, unw_word_t addr, unw_word_t *val)
@@ -196,15 +196,15 @@ dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val)
 
   if (DWARF_IS_REG_LOC (loc))
     return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc),
-                                      val, 0, c->as_arg);
+                                       val, 0, c->as_arg);
 
   addr = DWARF_GET_LOC (loc);
   if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp,
-                                      0, c->as_arg)) < 0)
+                                       0, c->as_arg)) < 0)
     return ret;
 
   return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, 0,
-                                  c->as_arg);
+                                   c->as_arg);
 }
 
 static inline int
@@ -219,15 +219,15 @@ dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val)
 
   if (DWARF_IS_REG_LOC (loc))
     return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc),
-                                      &val, 1, c->as_arg);
+                                       &val, 1, c->as_arg);
 
   addr = DWARF_GET_LOC (loc);
   if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp,
-                                      1, c->as_arg)) < 0)
+                                       1, c->as_arg)) < 0)
     return ret;
 
   return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1,
-                                  1, c->as_arg);
+                                   1, c->as_arg);
 }
 
 static inline int
@@ -244,12 +244,12 @@ dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val)
 
   if (DWARF_IS_REG_LOC (loc))
     return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), val,
-                                    0, c->as_arg);
+                                     0, c->as_arg);
   else if (c->as->abi == UNW_MIPS_ABI_O32)
     return read_s32 (c, DWARF_GET_LOC (loc), val);
   else
     return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val,
-                                    0, c->as_arg);
+                                     0, c->as_arg);
 }
 
 static inline int
@@ -266,64 +266,66 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
 
   if (DWARF_IS_REG_LOC (loc))
     return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), &val,
-                                    1, c->as_arg);
+                                     1, c->as_arg);
   else if (c->as->abi == UNW_MIPS_ABI_O32)
     return write_s32 (c, DWARF_GET_LOC (loc), &val);
   else
     return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val,
-                                    1, c->as_arg);
+                                     1, c->as_arg);
 }
 
 #endif /* !UNW_LOCAL_ONLY */
 
 #define tdep_getcontext_trace           unw_getcontext
-#define tdep_init_done                 UNW_OBJ(init_done)
-#define tdep_init                      UNW_OBJ(init)
+#define tdep_init_done                  UNW_OBJ(init_done)
+#define tdep_init                       UNW_OBJ(init)
 /* Platforms that support UNW_INFO_FORMAT_TABLE need to define
    tdep_search_unwind_table.  */
-#define tdep_search_unwind_table       dwarf_search_unwind_table
-#define tdep_find_unwind_table         dwarf_find_unwind_table
-#define tdep_uc_addr                   UNW_ARCH_OBJ(uc_addr)
-#define tdep_get_elf_image             UNW_ARCH_OBJ(get_elf_image)
-#define tdep_access_reg                        UNW_OBJ(access_reg)
-#define tdep_access_fpreg              UNW_OBJ(access_fpreg)
-#define tdep_fetch_frame(c,ip,n)       do {} while(0)
-#define tdep_cache_frame(c,rs)         do {} while(0)
-#define tdep_reuse_frame(c,rs)         do {} while(0)
-#define tdep_stash_frame(c,rs)         do {} while(0)
-#define tdep_trace(cur,addr,n)         (-UNW_ENOINFO)
+#define tdep_search_unwind_table        dwarf_search_unwind_table
+#define tdep_find_unwind_table          dwarf_find_unwind_table
+#define tdep_uc_addr                    UNW_ARCH_OBJ(uc_addr)
+#define tdep_get_elf_image              UNW_ARCH_OBJ(get_elf_image)
+#define tdep_get_exe_image_path         UNW_ARCH_OBJ(get_exe_image_path)
+#define tdep_access_reg                 UNW_OBJ(access_reg)
+#define tdep_access_fpreg               UNW_OBJ(access_fpreg)
+#define tdep_fetch_frame(c,ip,n)        do {} while(0)
+#define tdep_cache_frame(c)             0
+#define tdep_reuse_frame(c,frame)       do {} while(0)
+#define tdep_stash_frame(c,rs)          do {} while(0)
+#define tdep_trace(cur,addr,n)          (-UNW_ENOINFO)
 
 #ifdef UNW_LOCAL_ONLY
-# define tdep_find_proc_info(c,ip,n)                           \
-       dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n),      \
-                                      (c)->as_arg)
-# define tdep_put_unwind_info(as,pi,arg)               \
-       dwarf_put_unwind_info((as), (pi), (arg))
+# define tdep_find_proc_info(c,ip,n)                            \
+        dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n),      \
+                                       (c)->as_arg)
+# define tdep_put_unwind_info(as,pi,arg)                \
+        dwarf_put_unwind_info((as), (pi), (arg))
 #else
-# define tdep_find_proc_info(c,ip,n)                                   \
-       (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n),    \
-                                      (c)->as_arg)
-# define tdep_put_unwind_info(as,pi,arg)               \
-       (*(as)->acc.put_unwind_info)((as), (pi), (arg))
+# define tdep_find_proc_info(c,ip,n)                                    \
+        (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n),    \
+                                       (c)->as_arg)
+# define tdep_put_unwind_info(as,pi,arg)                \
+        (*(as)->acc.put_unwind_info)((as), (pi), (arg))
 #endif
 
-#define tdep_get_as(c)                 ((c)->dwarf.as)
-#define tdep_get_as_arg(c)             ((c)->dwarf.as_arg)
-#define tdep_get_ip(c)                 ((c)->dwarf.ip)
+#define tdep_get_as(c)                  ((c)->dwarf.as)
+#define tdep_get_as_arg(c)              ((c)->dwarf.as_arg)
+#define tdep_get_ip(c)                  ((c)->dwarf.ip)
 
 extern int tdep_init_done;
 
 extern void tdep_init (void);
 extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip,
-                                    unw_dyn_info_t *di, unw_proc_info_t *pi,
-                                    int need_unwind_info, void *arg);
+                                     unw_dyn_info_t *di, unw_proc_info_t *pi,
+                                     int need_unwind_info, void *arg);
 extern void *tdep_uc_addr (ucontext_t *uc, int reg);
 extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip,
-                              unsigned long *segbase, unsigned long *mapoff,
-                              char *path, size_t pathlen);
+                               unsigned long *segbase, unsigned long *mapoff,
+                               char *path, size_t pathlen);
+extern void tdep_get_exe_image_path (char *path);
 extern int tdep_access_reg (struct cursor *c, unw_regnum_t reg,
-                           unw_word_t *valp, int write);
+                            unw_word_t *valp, int write);
 extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg,
-                             unw_fpreg_t *valp, int write);
+                              unw_fpreg_t *valp, int write);
 
 #endif /* MIPS_LIBUNWIND_I_H */