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