Line data Source code
1 : /* Return the size of an object file type.
2 : Copyright (C) 1998, 1999, 2000, 2002, 2015 Red Hat, Inc.
3 : This file is part of elfutils.
4 : Written by Ulrich Drepper <drepper@redhat.com>, 1998.
5 :
6 : This file is free software; you can redistribute it and/or modify
7 : it under the terms of either
8 :
9 : * the GNU Lesser General Public License as published by the Free
10 : Software Foundation; either version 3 of the License, or (at
11 : your option) any later version
12 :
13 : or
14 :
15 : * the GNU General Public License as published by the Free
16 : Software Foundation; either version 2 of the License, or (at
17 : your option) any later version
18 :
19 : or both in parallel, as here.
20 :
21 : elfutils is distributed in the hope that it will be useful, but
22 : WITHOUT ANY WARRANTY; without even the implied warranty of
23 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 : General Public License for more details.
25 :
26 : You should have received copies of the GNU General Public License and
27 : the GNU Lesser General Public License along with this program. If
28 : not, see <http://www.gnu.org/licenses/>. */
29 :
30 : #ifdef HAVE_CONFIG_H
31 : # include <config.h>
32 : #endif
33 :
34 : #include <libelf.h>
35 : #include "libelfP.h"
36 :
37 : #ifndef LIBELFBITS
38 : # define LIBELFBITS 32
39 : #endif
40 :
41 :
42 : size_t
43 66014 : elfw2(LIBELFBITS, fsize) (Elf_Type type, size_t count, unsigned int version)
44 : {
45 : /* We do not have differences between file and memory sizes. Better
46 : not since otherwise `mmap' would not work. */
47 66014 : if (unlikely (version == EV_NONE) || unlikely (version >= EV_NUM))
48 : {
49 0 : __libelf_seterrno (ELF_E_UNKNOWN_VERSION);
50 0 : return 0;
51 : }
52 :
53 66014 : if (unlikely (type >= ELF_T_NUM))
54 : {
55 0 : __libelf_seterrno (ELF_E_UNKNOWN_TYPE);
56 0 : return 0;
57 : }
58 :
59 : #if EV_NUM != 2
60 : return (count
61 : * __libelf_type_sizes[version - 1][ELFW(ELFCLASS,LIBELFBITS) - 1][type]);
62 : #else
63 : return (count
64 66014 : * __libelf_type_sizes[0][ELFW(ELFCLASS,LIBELFBITS) - 1][type]);
65 : #endif
66 : }
67 : #define local_strong_alias(n1, n2) strong_alias (n1, n2)
68 : local_strong_alias (elfw2(LIBELFBITS, fsize), __elfw2(LIBELFBITS, msize))
|