/src/libunwind/src/mi/Gdyn-extract.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* libunwind - a platform-independent unwind library |
2 | | Copyright (C) 2001-2002, 2005 Hewlett-Packard Co |
3 | | Contributed by David Mosberger-Tang <davidm@hpl.hp.com> |
4 | | |
5 | | This file is part of libunwind. |
6 | | |
7 | | Permission is hereby granted, free of charge, to any person obtaining |
8 | | a copy of this software and associated documentation files (the |
9 | | "Software"), to deal in the Software without restriction, including |
10 | | without limitation the rights to use, copy, modify, merge, publish, |
11 | | distribute, sublicense, and/or sell copies of the Software, and to |
12 | | permit persons to whom the Software is furnished to do so, subject to |
13 | | the following conditions: |
14 | | |
15 | | The above copyright notice and this permission notice shall be |
16 | | included in all copies or substantial portions of the Software. |
17 | | |
18 | | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
19 | | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
20 | | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
21 | | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
22 | | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
23 | | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
24 | | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ |
25 | | |
26 | | #include "libunwind_i.h" |
27 | | |
28 | | HIDDEN int |
29 | | unwi_extract_dynamic_proc_info (unw_addr_space_t as, unw_word_t ip, |
30 | | unw_proc_info_t *pi, unw_dyn_info_t *di, |
31 | | int need_unwind_info, void *arg) |
32 | 0 | { |
33 | 0 | pi->start_ip = di->start_ip; |
34 | 0 | pi->end_ip = di->end_ip; |
35 | 0 | pi->gp = di->gp; |
36 | 0 | pi->format = di->format; |
37 | 0 | switch (di->format) |
38 | 0 | { |
39 | 0 | case UNW_INFO_FORMAT_DYNAMIC: |
40 | 0 | pi->handler = di->u.pi.handler; |
41 | 0 | pi->lsda = 0; |
42 | 0 | pi->flags = di->u.pi.flags; |
43 | 0 | pi->unwind_info_size = 0; |
44 | 0 | if (need_unwind_info) |
45 | 0 | pi->unwind_info = di; |
46 | 0 | else |
47 | 0 | pi->unwind_info = NULL; |
48 | 0 | return 0; |
49 | | |
50 | 0 | case UNW_INFO_FORMAT_TABLE: |
51 | 0 | case UNW_INFO_FORMAT_REMOTE_TABLE: |
52 | 0 | case UNW_INFO_FORMAT_ARM_EXIDX: |
53 | 0 | case UNW_INFO_FORMAT_IP_OFFSET: |
54 | 0 | #ifdef tdep_search_unwind_table |
55 | | /* call platform-specific search routine: */ |
56 | 0 | return tdep_search_unwind_table (as, ip, di, pi, need_unwind_info, arg); |
57 | | #else |
58 | | /* fall through */ |
59 | | #endif |
60 | 0 | default: |
61 | 0 | break; |
62 | 0 | } |
63 | 0 | return -UNW_EINVAL; |
64 | 0 | } |