Line data Source code
1 : /* Find EH CFI for a module in libdwfl.
2 : Copyright (C) 2009-2010 Red Hat, Inc.
3 : This file is part of elfutils.
4 :
5 : This file is free software; you can redistribute it and/or modify
6 : it under the terms of either
7 :
8 : * the GNU Lesser General Public License as published by the Free
9 : Software Foundation; either version 3 of the License, or (at
10 : your option) any later version
11 :
12 : or
13 :
14 : * the GNU General Public License as published by the Free
15 : Software Foundation; either version 2 of the License, or (at
16 : your option) any later version
17 :
18 : or both in parallel, as here.
19 :
20 : elfutils is distributed in the hope that it will be useful, but
21 : WITHOUT ANY WARRANTY; without even the implied warranty of
22 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23 : General Public License for more details.
24 :
25 : You should have received copies of the GNU General Public License and
26 : the GNU Lesser General Public License along with this program. If
27 : not, see <http://www.gnu.org/licenses/>. */
28 :
29 : #include "libdwflP.h"
30 : #include "../libdw/cfi.h"
31 :
32 : Dwarf_CFI *
33 177 : dwfl_module_eh_cfi (Dwfl_Module *mod, Dwarf_Addr *bias)
34 : {
35 177 : if (mod == NULL)
36 : return NULL;
37 :
38 177 : if (mod->eh_cfi != NULL)
39 : {
40 121 : *bias = dwfl_adjusted_address (mod, 0);
41 121 : return mod->eh_cfi;
42 : }
43 :
44 56 : __libdwfl_getelf (mod);
45 56 : if (mod->elferr != DWFL_E_NOERROR)
46 : {
47 10 : __libdwfl_seterrno (mod->elferr);
48 10 : return NULL;
49 : }
50 :
51 46 : *bias = dwfl_adjusted_address (mod, 0);
52 46 : return __libdwfl_set_cfi (mod, &mod->eh_cfi,
53 : INTUSE(dwarf_getcfi_elf) (mod->main.elf));
54 : }
55 : INTDEF (dwfl_module_eh_cfi)
|