18482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm/* libunwind - a platform-independent unwind library 207b01ad205162a93dab42722caaa4dbb7ba43b3fhp.com!davidm Copyright (C) 2001-2002, 2005 Hewlett-Packard Co 38482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm Contributed by David Mosberger-Tang <davidm@hpl.hp.com> 48482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm 58482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmThis file is part of libunwind. 68482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm 78482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmPermission is hereby granted, free of charge, to any person obtaining 88482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidma copy of this software and associated documentation files (the 98482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm"Software"), to deal in the Software without restriction, including 108482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmwithout limitation the rights to use, copy, modify, merge, publish, 118482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmdistribute, sublicense, and/or sell copies of the Software, and to 128482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmpermit persons to whom the Software is furnished to do so, subject to 138482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmthe following conditions: 148482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm 158482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmThe above copyright notice and this permission notice shall be 168482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmincluded in all copies or substantial portions of the Software. 178482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm 188482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 198482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 208482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 218482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 228482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 238482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 248482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ 258482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm 2607b01ad205162a93dab42722caaa4dbb7ba43b3fhp.com!davidm#include "libunwind_i.h" 278482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm 288482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmHIDDEN int 298482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidmunwi_extract_dynamic_proc_info (unw_addr_space_t as, unw_word_t ip, 308482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm unw_proc_info_t *pi, unw_dyn_info_t *di, 318482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm int need_unwind_info, void *arg) 328482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm{ 338482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm pi->start_ip = di->start_ip; 348482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm pi->end_ip = di->end_ip; 358482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm pi->gp = di->gp; 368482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm pi->format = di->format; 378482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm switch (di->format) 388482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm { 398482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm case UNW_INFO_FORMAT_DYNAMIC: 408482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm pi->handler = di->u.pi.handler; 418482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm pi->lsda = 0; 428482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm pi->flags = di->u.pi.flags; 438482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm pi->unwind_info_size = 0; 448482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm if (need_unwind_info) 458482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm pi->unwind_info = di; 468482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm else 478482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm pi->unwind_info = NULL; 488482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm return 0; 498482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm 508482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm case UNW_INFO_FORMAT_TABLE: 518482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm case UNW_INFO_FORMAT_REMOTE_TABLE: 528482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm#ifdef tdep_search_unwind_table 538482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm /* call platform-specific search routine: */ 548482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm return tdep_search_unwind_table (as, ip, di, pi, need_unwind_info, arg); 558482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm#else 568482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm /* fall through */ 578482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm#endif 588482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm default: 598482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm break; 608482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm } 618482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm return -UNW_EINVAL; 628482adb47dcdd257027afecd9702a7617b7f964ehp.com!davidm} 63