]>
Commit | Line | Data |
---|---|---|
b08d5a8f | 1 | /* Return symbol binding name. |
70c442ca | 2 | Copyright (C) 2001, 2002, 2009 Red Hat, Inc. |
de2ed97f | 3 | This file is part of elfutils. |
b08d5a8f UD |
4 | Written by Ulrich Drepper <drepper@redhat.com>, 2001. |
5 | ||
de2ed97f MW |
6 | This file is free software; you can redistribute it and/or modify |
7 | it under the terms of either | |
b08d5a8f | 8 | |
de2ed97f MW |
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 | |
361df7da UD |
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 | ||
de2ed97f MW |
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/>. */ | |
b08d5a8f UD |
29 | |
30 | #ifdef HAVE_CONFIG_H | |
31 | # include <config.h> | |
32 | #endif | |
33 | ||
34 | #include <stdio.h> | |
35 | #include <libeblP.h> | |
36 | ||
37 | ||
38 | const char * | |
1ccdfb68 | 39 | ebl_symbol_binding_name (Ebl *ebl, int binding, char *buf, size_t len) |
b08d5a8f UD |
40 | { |
41 | const char *res; | |
42 | ||
43 | res = ebl != NULL ? ebl->symbol_type_name (binding, buf, len) : NULL; | |
44 | if (res == NULL) | |
45 | { | |
46 | static const char *stb_names[STB_NUM] = | |
47 | { | |
48 | "LOCAL", "GLOBAL", "WEAK" | |
49 | }; | |
50 | ||
51 | /* Standard binding? */ | |
52 | if (binding < STB_NUM) | |
53 | res = stb_names[binding]; | |
54 | else | |
55 | { | |
70c442ca UD |
56 | char *ident; |
57 | ||
b08d5a8f UD |
58 | if (binding >= STB_LOPROC && binding <= STB_HIPROC) |
59 | snprintf (buf, len, "LOPROC+%d", binding - STB_LOPROC); | |
70c442ca | 60 | else if (binding == STB_GNU_UNIQUE |
7190c204 | 61 | && ebl != NULL |
70c442ca UD |
62 | && (ident = elf_getident (ebl->elf, NULL)) != NULL |
63 | && ident[EI_OSABI] == ELFOSABI_LINUX) | |
64 | return "GNU_UNIQUE"; | |
b08d5a8f UD |
65 | else if (binding >= STB_LOOS && binding <= STB_HIOS) |
66 | snprintf (buf, len, "LOOS+%d", binding - STB_LOOS); | |
67 | else | |
2e0ae048 | 68 | snprintf (buf, len, _("<unknown>: %d"), binding); |
b08d5a8f UD |
69 | |
70 | res = buf; | |
71 | } | |
72 | } | |
73 | ||
74 | return res; | |
75 | } |