Rev 5197 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5197 | serge | 1 | /* genlink.h -- interface to the BFD generic linker |
6324 | serge | 2 | Copyright (C) 1993-2015 Free Software Foundation, Inc. |
5197 | serge | 3 | Written by Ian Lance Taylor, Cygnus Support. |
4 | |||
5 | This file is part of BFD, the Binary File Descriptor library. |
||
6 | |||
7 | This program is free software; you can redistribute it and/or modify |
||
8 | it under the terms of the GNU General Public License as published by |
||
9 | the Free Software Foundation; either version 3 of the License, or |
||
10 | (at your option) any later version. |
||
11 | |||
12 | This program is distributed in the hope that it will be useful, |
||
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
15 | GNU General Public License for more details. |
||
16 | |||
17 | You should have received a copy of the GNU General Public License |
||
18 | along with this program; if not, write to the Free Software |
||
19 | Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, |
||
20 | MA 02110-1301, USA. */ |
||
21 | |||
22 | #ifndef GENLINK_H |
||
23 | #define GENLINK_H |
||
24 | |||
25 | /* This header file is internal to BFD. It describes the internal |
||
26 | structures and functions used by the BFD generic linker, in case |
||
27 | any of the more specific linkers want to use or call them. Note |
||
28 | that some functions, such as _bfd_generic_link_hash_table_create, |
||
29 | are declared in libbfd.h, because they are expected to be widely |
||
30 | used. The functions and structures in this file will probably only |
||
31 | be used by a few files besides linker.c itself. In fact, this file |
||
32 | is not particularly complete; I have only put in the interfaces I |
||
33 | actually needed. */ |
||
34 | |||
35 | /* The generic linker uses a hash table which is a derived class of |
||
36 | the standard linker hash table, just as the other backend specific |
||
37 | linkers do. Do not confuse the generic linker hash table with the |
||
38 | standard BFD linker hash table it is built upon. */ |
||
39 | |||
40 | /* Generic linker hash table entries. */ |
||
41 | |||
42 | struct generic_link_hash_entry |
||
43 | { |
||
44 | struct bfd_link_hash_entry root; |
||
45 | /* Whether this symbol has been written out. */ |
||
46 | bfd_boolean written; |
||
47 | /* Symbol from input BFD. */ |
||
48 | asymbol *sym; |
||
49 | }; |
||
50 | |||
51 | /* Generic linker hash table. */ |
||
52 | |||
53 | struct generic_link_hash_table |
||
54 | { |
||
55 | struct bfd_link_hash_table root; |
||
56 | }; |
||
57 | |||
58 | /* Look up an entry in a generic link hash table. */ |
||
59 | |||
60 | #define _bfd_generic_link_hash_lookup(table, string, create, copy, follow) \ |
||
61 | ((struct generic_link_hash_entry *) \ |
||
62 | bfd_link_hash_lookup (&(table)->root, (string), (create), (copy), (follow))) |
||
63 | |||
64 | /* Traverse a generic link hash table. */ |
||
65 | |||
66 | #define _bfd_generic_link_hash_traverse(table, func, info) \ |
||
67 | (bfd_link_hash_traverse \ |
||
68 | (&(table)->root, \ |
||
69 | (bfd_boolean (*) (struct bfd_link_hash_entry *, void *)) (func), \ |
||
70 | (info))) |
||
71 | |||
72 | /* Get the generic link hash table from the info structure. This is |
||
73 | just a cast. */ |
||
74 | |||
75 | #define _bfd_generic_hash_table(p) \ |
||
76 | ((struct generic_link_hash_table *) ((p)->hash)) |
||
77 | |||
78 | /* The generic linker reads in the asymbol structures for an input BFD |
||
79 | and keeps them in the outsymbol and symcount fields. */ |
||
80 | |||
81 | #define _bfd_generic_link_get_symbols(abfd) ((abfd)->outsymbols) |
||
82 | #define _bfd_generic_link_get_symcount(abfd) ((abfd)->symcount) |
||
83 | |||
84 | /* Add the symbols of input_bfd to the symbols being built for |
||
85 | output_bfd. */ |
||
86 | extern bfd_boolean _bfd_generic_link_output_symbols |
||
87 | (bfd *, bfd *, struct bfd_link_info *, size_t *); |
||
88 | |||
89 | /* This structure is used to pass information to |
||
90 | _bfd_generic_link_write_global_symbol, which may be called via |
||
91 | _bfd_generic_link_hash_traverse. */ |
||
92 | |||
93 | struct generic_write_global_symbol_info |
||
94 | { |
||
95 | struct bfd_link_info *info; |
||
96 | bfd *output_bfd; |
||
97 | size_t *psymalloc; |
||
98 | }; |
||
99 | |||
100 | /* Write out a single global symbol. This is expected to be called |
||
101 | via _bfd_generic_link_hash_traverse. The second argument must |
||
102 | actually be a struct generic_write_global_symbol_info *. */ |
||
103 | extern bfd_boolean _bfd_generic_link_write_global_symbol |
||
104 | (struct generic_link_hash_entry *, void *); |
||
105 | |||
106 | /* Generic link hash table entry creation routine. */ |
||
107 | struct bfd_hash_entry *_bfd_generic_link_hash_newfunc |
||
108 | (struct bfd_hash_entry *, struct bfd_hash_table *, const char *); |
||
109 | |||
110 | #endif |