1
0
Fork 0
mirror of https://github.com/tobast/libunwind-eh_elf.git synced 2024-11-23 16:07:37 +01:00

(is_local_addr_space): Test for _ULia64_local_addr_space only if UNW_GENERIC_ONLY

is not defined.
(tdep_find_proc_info) [HAVE_DLMODINFO): Declare new type "struct unwind_header"
	to accommodate HP-UX unwind header.  Fetch unwind table from this
	header.

(Logical change 1.75)
This commit is contained in:
mostang.com!davidm 2003-04-03 07:59:15 +00:00
parent 9abe0decf0
commit ee12f505ed

View file

@ -54,7 +54,11 @@ is_local_addr_space (unw_addr_space_t as)
#else #else
extern unw_addr_space_t _ULia64_local_addr_space; extern unw_addr_space_t _ULia64_local_addr_space;
return (as == _Uia64_local_addr_space || as == _ULia64_local_addr_space); return (as == _Uia64_local_addr_space
# ifndef UNW_GENERIC_ONLY
|| as == _ULia64_local_addr_space
# endif
);
#endif #endif
} }
@ -402,6 +406,14 @@ tdep_find_proc_info (unw_addr_space_t as, unw_word_t ip,
} }
#elif defined(HAVE_DLMODINFO) #elif defined(HAVE_DLMODINFO)
struct load_module_desc lmd; struct load_module_desc lmd;
unw_dyn_info_t di, *dip = &di;
struct unwind_header
{
uint64_t format;
uint64_t start_offset;
uint64_t end_offset;
}
*uhdr;
if (!dlmodinfo (ip, &lmd, sizeof (lmd), NULL, 0, 0)) if (!dlmodinfo (ip, &lmd, sizeof (lmd), NULL, 0, 0))
return -UNW_ENOINFO; return -UNW_ENOINFO;
@ -410,9 +422,13 @@ tdep_find_proc_info (unw_addr_space_t as, unw_word_t ip,
di.start_ip = lmd.text_base; di.start_ip = lmd.text_base;
di.end_ip = lmd.text_base + lmd.text_size; di.end_ip = lmd.text_base + lmd.text_size;
di.u.ti.name_ptr = 0; /* no obvious table-name available */ di.u.ti.name_ptr = 0; /* no obvious table-name available */
di.u.ti.table_data = lmd.unwind_base;
di.u.ti.table_len = lmd.unwind_size / sizeof (unw_word_t);
di.u.ti.segbase = lmd.text_base; di.u.ti.segbase = lmd.text_base;
uhdr = (struct unwind_header *) lmd.unwind_base;
di.u.ti.table_data = (unw_word_t *) (di.u.ti.segbase + uhdr->start_offset);
di.u.ti.table_len = ((uhdr->end_offset - uhdr->start_offset)
/ sizeof (unw_word_t));
debug (100, "unwind: found table `%s': segbase=%lx, len=%lu, gp=%lx, " debug (100, "unwind: found table `%s': segbase=%lx, len=%lu, gp=%lx, "
"table_data=%p\n", (char *) di.u.ti.name_ptr, di.u.ti.segbase, "table_data=%p\n", (char *) di.u.ti.name_ptr, di.u.ti.segbase,
di.u.ti.table_len, di.gp, di.u.ti.table_data); di.u.ti.table_len, di.gp, di.u.ti.table_data);