1 1.1 skrll /* linker.c -- BFD linker routines 2 1.13 christos Copyright (C) 1993-2026 Free Software Foundation, Inc. 3 1.1 skrll Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support 4 1.1 skrll 5 1.1 skrll This file is part of BFD, the Binary File Descriptor library. 6 1.1 skrll 7 1.1 skrll This program is free software; you can redistribute it and/or modify 8 1.1 skrll it under the terms of the GNU General Public License as published by 9 1.1 skrll the Free Software Foundation; either version 3 of the License, or 10 1.1 skrll (at your option) any later version. 11 1.1 skrll 12 1.1 skrll This program is distributed in the hope that it will be useful, 13 1.1 skrll but WITHOUT ANY WARRANTY; without even the implied warranty of 14 1.1 skrll MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 1.1 skrll GNU General Public License for more details. 16 1.1 skrll 17 1.1 skrll You should have received a copy of the GNU General Public License 18 1.1 skrll along with this program; if not, write to the Free Software 19 1.1 skrll Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 20 1.1 skrll MA 02110-1301, USA. */ 21 1.1 skrll 22 1.1 skrll #include "sysdep.h" 23 1.1 skrll #include "bfd.h" 24 1.1 skrll #include "libbfd.h" 25 1.1 skrll #include "bfdlink.h" 26 1.1 skrll #include "genlink.h" 27 1.1 skrll 28 1.1 skrll /* 29 1.1 skrll SECTION 30 1.1 skrll Linker Functions 31 1.1 skrll 32 1.1 skrll @cindex Linker 33 1.1 skrll The linker uses three special entry points in the BFD target 34 1.1 skrll vector. It is not necessary to write special routines for 35 1.1 skrll these entry points when creating a new BFD back end, since 36 1.1 skrll generic versions are provided. However, writing them can 37 1.1 skrll speed up linking and make it use significantly less runtime 38 1.1 skrll memory. 39 1.1 skrll 40 1.1 skrll The first routine creates a hash table used by the other 41 1.1 skrll routines. The second routine adds the symbols from an object 42 1.1 skrll file to the hash table. The third routine takes all the 43 1.1 skrll object files and links them together to create the output 44 1.1 skrll file. These routines are designed so that the linker proper 45 1.1 skrll does not need to know anything about the symbols in the object 46 1.1 skrll files that it is linking. The linker merely arranges the 47 1.1 skrll sections as directed by the linker script and lets BFD handle 48 1.1 skrll the details of symbols and relocs. 49 1.1 skrll 50 1.1 skrll The second routine and third routines are passed a pointer to 51 1.1 skrll a <<struct bfd_link_info>> structure (defined in 52 1.1 skrll <<bfdlink.h>>) which holds information relevant to the link, 53 1.1 skrll including the linker hash table (which was created by the 54 1.1 skrll first routine) and a set of callback functions to the linker 55 1.1 skrll proper. 56 1.1 skrll 57 1.1 skrll The generic linker routines are in <<linker.c>>, and use the 58 1.1 skrll header file <<genlink.h>>. As of this writing, the only back 59 1.1 skrll ends which have implemented versions of these routines are 60 1.1 skrll a.out (in <<aoutx.h>>) and ECOFF (in <<ecoff.c>>). The a.out 61 1.1 skrll routines are used as examples throughout this section. 62 1.1 skrll 63 1.1 skrll @menu 64 1.1 skrll @* Creating a Linker Hash Table:: 65 1.1 skrll @* Adding Symbols to the Hash Table:: 66 1.1 skrll @* Performing the Final Link:: 67 1.1 skrll @end menu 68 1.1 skrll 69 1.1 skrll INODE 70 1.1 skrll Creating a Linker Hash Table, Adding Symbols to the Hash Table, Linker Functions, Linker Functions 71 1.1 skrll SUBSECTION 72 1.1 skrll Creating a linker hash table 73 1.1 skrll 74 1.1 skrll @cindex _bfd_link_hash_table_create in target vector 75 1.1 skrll @cindex target vector (_bfd_link_hash_table_create) 76 1.1 skrll The linker routines must create a hash table, which must be 77 1.1 skrll derived from <<struct bfd_link_hash_table>> described in 78 1.1 skrll <<bfdlink.c>>. @xref{Hash Tables}, for information on how to 79 1.1 skrll create a derived hash table. This entry point is called using 80 1.1 skrll the target vector of the linker output file. 81 1.1 skrll 82 1.1 skrll The <<_bfd_link_hash_table_create>> entry point must allocate 83 1.1 skrll and initialize an instance of the desired hash table. If the 84 1.1 skrll back end does not require any additional information to be 85 1.1 skrll stored with the entries in the hash table, the entry point may 86 1.1 skrll simply create a <<struct bfd_link_hash_table>>. Most likely, 87 1.1 skrll however, some additional information will be needed. 88 1.1 skrll 89 1.1 skrll For example, with each entry in the hash table the a.out 90 1.1 skrll linker keeps the index the symbol has in the final output file 91 1.1 skrll (this index number is used so that when doing a relocatable 92 1.1 skrll link the symbol index used in the output file can be quickly 93 1.1 skrll filled in when copying over a reloc). The a.out linker code 94 1.1 skrll defines the required structures and functions for a hash table 95 1.1 skrll derived from <<struct bfd_link_hash_table>>. The a.out linker 96 1.1 skrll hash table is created by the function 97 1.1 skrll <<NAME(aout,link_hash_table_create)>>; it simply allocates 98 1.1 skrll space for the hash table, initializes it, and returns a 99 1.1 skrll pointer to it. 100 1.1 skrll 101 1.1 skrll When writing the linker routines for a new back end, you will 102 1.1 skrll generally not know exactly which fields will be required until 103 1.1 skrll you have finished. You should simply create a new hash table 104 1.1 skrll which defines no additional fields, and then simply add fields 105 1.1 skrll as they become necessary. 106 1.1 skrll 107 1.1 skrll INODE 108 1.1 skrll Adding Symbols to the Hash Table, Performing the Final Link, Creating a Linker Hash Table, Linker Functions 109 1.1 skrll SUBSECTION 110 1.1 skrll Adding symbols to the hash table 111 1.1 skrll 112 1.1 skrll @cindex _bfd_link_add_symbols in target vector 113 1.1 skrll @cindex target vector (_bfd_link_add_symbols) 114 1.1 skrll The linker proper will call the <<_bfd_link_add_symbols>> 115 1.1 skrll entry point for each object file or archive which is to be 116 1.1 skrll linked (typically these are the files named on the command 117 1.1 skrll line, but some may also come from the linker script). The 118 1.1 skrll entry point is responsible for examining the file. For an 119 1.1 skrll object file, BFD must add any relevant symbol information to 120 1.1 skrll the hash table. For an archive, BFD must determine which 121 1.1 skrll elements of the archive should be used and adding them to the 122 1.1 skrll link. 123 1.1 skrll 124 1.1 skrll The a.out version of this entry point is 125 1.1 skrll <<NAME(aout,link_add_symbols)>>. 126 1.1 skrll 127 1.1 skrll @menu 128 1.1 skrll @* Differing file formats:: 129 1.1 skrll @* Adding symbols from an object file:: 130 1.1 skrll @* Adding symbols from an archive:: 131 1.1 skrll @end menu 132 1.1 skrll 133 1.1 skrll INODE 134 1.1 skrll Differing file formats, Adding symbols from an object file, Adding Symbols to the Hash Table, Adding Symbols to the Hash Table 135 1.1 skrll SUBSUBSECTION 136 1.1 skrll Differing file formats 137 1.1 skrll 138 1.1 skrll Normally all the files involved in a link will be of the same 139 1.1 skrll format, but it is also possible to link together different 140 1.1 skrll format object files, and the back end must support that. The 141 1.1 skrll <<_bfd_link_add_symbols>> entry point is called via the target 142 1.1 skrll vector of the file to be added. This has an important 143 1.1 skrll consequence: the function may not assume that the hash table 144 1.1 skrll is the type created by the corresponding 145 1.1 skrll <<_bfd_link_hash_table_create>> vector. All the 146 1.1 skrll <<_bfd_link_add_symbols>> function can assume about the hash 147 1.1 skrll table is that it is derived from <<struct 148 1.1 skrll bfd_link_hash_table>>. 149 1.1 skrll 150 1.1 skrll Sometimes the <<_bfd_link_add_symbols>> function must store 151 1.1 skrll some information in the hash table entry to be used by the 152 1.1 skrll <<_bfd_final_link>> function. In such a case the output bfd 153 1.1 skrll xvec must be checked to make sure that the hash table was 154 1.1 skrll created by an object file of the same format. 155 1.1 skrll 156 1.1 skrll The <<_bfd_final_link>> routine must be prepared to handle a 157 1.1 skrll hash entry without any extra information added by the 158 1.1 skrll <<_bfd_link_add_symbols>> function. A hash entry without 159 1.1 skrll extra information will also occur when the linker script 160 1.1 skrll directs the linker to create a symbol. Note that, regardless 161 1.1 skrll of how a hash table entry is added, all the fields will be 162 1.1 skrll initialized to some sort of null value by the hash table entry 163 1.1 skrll initialization function. 164 1.1 skrll 165 1.1 skrll See <<ecoff_link_add_externals>> for an example of how to 166 1.1 skrll check the output bfd before saving information (in this 167 1.1 skrll case, the ECOFF external symbol debugging information) in a 168 1.1 skrll hash table entry. 169 1.1 skrll 170 1.1 skrll INODE 171 1.1 skrll Adding symbols from an object file, Adding symbols from an archive, Differing file formats, Adding Symbols to the Hash Table 172 1.1 skrll SUBSUBSECTION 173 1.1 skrll Adding symbols from an object file 174 1.1 skrll 175 1.1 skrll When the <<_bfd_link_add_symbols>> routine is passed an object 176 1.1 skrll file, it must add all externally visible symbols in that 177 1.1 skrll object file to the hash table. The actual work of adding the 178 1.1 skrll symbol to the hash table is normally handled by the function 179 1.1 skrll <<_bfd_generic_link_add_one_symbol>>. The 180 1.1 skrll <<_bfd_link_add_symbols>> routine is responsible for reading 181 1.1 skrll all the symbols from the object file and passing the correct 182 1.1 skrll information to <<_bfd_generic_link_add_one_symbol>>. 183 1.1 skrll 184 1.1 skrll The <<_bfd_link_add_symbols>> routine should not use 185 1.1 skrll <<bfd_canonicalize_symtab>> to read the symbols. The point of 186 1.1 skrll providing this routine is to avoid the overhead of converting 187 1.1 skrll the symbols into generic <<asymbol>> structures. 188 1.1 skrll 189 1.1 skrll @findex _bfd_generic_link_add_one_symbol 190 1.1 skrll <<_bfd_generic_link_add_one_symbol>> handles the details of 191 1.1 skrll combining common symbols, warning about multiple definitions, 192 1.1 skrll and so forth. It takes arguments which describe the symbol to 193 1.1 skrll add, notably symbol flags, a section, and an offset. The 194 1.1 skrll symbol flags include such things as <<BSF_WEAK>> or 195 1.1 skrll <<BSF_INDIRECT>>. The section is a section in the object 196 1.1 skrll file, or something like <<bfd_und_section_ptr>> for an undefined 197 1.1 skrll symbol or <<bfd_com_section_ptr>> for a common symbol. 198 1.1 skrll 199 1.1 skrll If the <<_bfd_final_link>> routine is also going to need to 200 1.1 skrll read the symbol information, the <<_bfd_link_add_symbols>> 201 1.1 skrll routine should save it somewhere attached to the object file 202 1.1 skrll BFD. However, the information should only be saved if the 203 1.1 skrll <<keep_memory>> field of the <<info>> argument is TRUE, so 204 1.1 skrll that the <<-no-keep-memory>> linker switch is effective. 205 1.1 skrll 206 1.1 skrll The a.out function which adds symbols from an object file is 207 1.1 skrll <<aout_link_add_object_symbols>>, and most of the interesting 208 1.1 skrll work is in <<aout_link_add_symbols>>. The latter saves 209 1.1 skrll pointers to the hash tables entries created by 210 1.1 skrll <<_bfd_generic_link_add_one_symbol>> indexed by symbol number, 211 1.1 skrll so that the <<_bfd_final_link>> routine does not have to call 212 1.1 skrll the hash table lookup routine to locate the entry. 213 1.1 skrll 214 1.1 skrll INODE 215 1.1 skrll Adding symbols from an archive, , Adding symbols from an object file, Adding Symbols to the Hash Table 216 1.1 skrll SUBSUBSECTION 217 1.1 skrll Adding symbols from an archive 218 1.1 skrll 219 1.1 skrll When the <<_bfd_link_add_symbols>> routine is passed an 220 1.1 skrll archive, it must look through the symbols defined by the 221 1.1 skrll archive and decide which elements of the archive should be 222 1.1 skrll included in the link. For each such element it must call the 223 1.1 skrll <<add_archive_element>> linker callback, and it must add the 224 1.3 christos symbols from the object file to the linker hash table. (The 225 1.3 christos callback may in fact indicate that a replacement BFD should be 226 1.3 christos used, in which case the symbols from that BFD should be added 227 1.3 christos to the linker hash table instead.) 228 1.1 skrll 229 1.1 skrll @findex _bfd_generic_link_add_archive_symbols 230 1.1 skrll In most cases the work of looking through the symbols in the 231 1.1 skrll archive should be done by the 232 1.5 christos <<_bfd_generic_link_add_archive_symbols>> function. 233 1.1 skrll <<_bfd_generic_link_add_archive_symbols>> is passed a function 234 1.1 skrll to call to make the final decision about adding an archive 235 1.1 skrll element to the link and to do the actual work of adding the 236 1.5 christos symbols to the linker hash table. If the element is to 237 1.1 skrll be included, the <<add_archive_element>> linker callback 238 1.1 skrll routine must be called with the element as an argument, and 239 1.3 christos the element's symbols must be added to the linker hash table 240 1.1 skrll just as though the element had itself been passed to the 241 1.5 christos <<_bfd_link_add_symbols>> function. 242 1.1 skrll 243 1.1 skrll When the a.out <<_bfd_link_add_symbols>> function receives an 244 1.1 skrll archive, it calls <<_bfd_generic_link_add_archive_symbols>> 245 1.1 skrll passing <<aout_link_check_archive_element>> as the function 246 1.1 skrll argument. <<aout_link_check_archive_element>> calls 247 1.1 skrll <<aout_link_check_ar_symbols>>. If the latter decides to add 248 1.1 skrll the element (an element is only added if it provides a real, 249 1.1 skrll non-common, definition for a previously undefined or common 250 1.1 skrll symbol) it calls the <<add_archive_element>> callback and then 251 1.1 skrll <<aout_link_check_archive_element>> calls 252 1.1 skrll <<aout_link_add_symbols>> to actually add the symbols to the 253 1.3 christos linker hash table - possibly those of a substitute BFD, if the 254 1.3 christos <<add_archive_element>> callback avails itself of that option. 255 1.1 skrll 256 1.1 skrll The ECOFF back end is unusual in that it does not normally 257 1.1 skrll call <<_bfd_generic_link_add_archive_symbols>>, because ECOFF 258 1.1 skrll archives already contain a hash table of symbols. The ECOFF 259 1.1 skrll back end searches the archive itself to avoid the overhead of 260 1.1 skrll creating a new hash table. 261 1.1 skrll 262 1.1 skrll INODE 263 1.1 skrll Performing the Final Link, , Adding Symbols to the Hash Table, Linker Functions 264 1.1 skrll SUBSECTION 265 1.1 skrll Performing the final link 266 1.1 skrll 267 1.1 skrll @cindex _bfd_link_final_link in target vector 268 1.1 skrll @cindex target vector (_bfd_final_link) 269 1.1 skrll When all the input files have been processed, the linker calls 270 1.1 skrll the <<_bfd_final_link>> entry point of the output BFD. This 271 1.1 skrll routine is responsible for producing the final output file, 272 1.1 skrll which has several aspects. It must relocate the contents of 273 1.1 skrll the input sections and copy the data into the output sections. 274 1.1 skrll It must build an output symbol table including any local 275 1.1 skrll symbols from the input files and the global symbols from the 276 1.1 skrll hash table. When producing relocatable output, it must 277 1.1 skrll modify the input relocs and write them into the output file. 278 1.1 skrll There may also be object format dependent work to be done. 279 1.1 skrll 280 1.1 skrll The linker will also call the <<write_object_contents>> entry 281 1.1 skrll point when the BFD is closed. The two entry points must work 282 1.1 skrll together in order to produce the correct output file. 283 1.1 skrll 284 1.1 skrll The details of how this works are inevitably dependent upon 285 1.1 skrll the specific object file format. The a.out 286 1.1 skrll <<_bfd_final_link>> routine is <<NAME(aout,final_link)>>. 287 1.1 skrll 288 1.1 skrll @menu 289 1.1 skrll @* Information provided by the linker:: 290 1.1 skrll @* Relocating the section contents:: 291 1.1 skrll @* Writing the symbol table:: 292 1.1 skrll @end menu 293 1.1 skrll 294 1.1 skrll INODE 295 1.1 skrll Information provided by the linker, Relocating the section contents, Performing the Final Link, Performing the Final Link 296 1.1 skrll SUBSUBSECTION 297 1.1 skrll Information provided by the linker 298 1.1 skrll 299 1.1 skrll Before the linker calls the <<_bfd_final_link>> entry point, 300 1.1 skrll it sets up some data structures for the function to use. 301 1.1 skrll 302 1.1 skrll The <<input_bfds>> field of the <<bfd_link_info>> structure 303 1.1 skrll will point to a list of all the input files included in the 304 1.5 christos link. These files are linked through the <<link.next>> field 305 1.1 skrll of the <<bfd>> structure. 306 1.1 skrll 307 1.1 skrll Each section in the output file will have a list of 308 1.1 skrll <<link_order>> structures attached to the <<map_head.link_order>> 309 1.1 skrll field (the <<link_order>> structure is defined in 310 1.1 skrll <<bfdlink.h>>). These structures describe how to create the 311 1.1 skrll contents of the output section in terms of the contents of 312 1.1 skrll various input sections, fill constants, and, eventually, other 313 1.1 skrll types of information. They also describe relocs that must be 314 1.1 skrll created by the BFD backend, but do not correspond to any input 315 1.1 skrll file; this is used to support -Ur, which builds constructors 316 1.1 skrll while generating a relocatable object file. 317 1.1 skrll 318 1.1 skrll INODE 319 1.1 skrll Relocating the section contents, Writing the symbol table, Information provided by the linker, Performing the Final Link 320 1.1 skrll SUBSUBSECTION 321 1.1 skrll Relocating the section contents 322 1.1 skrll 323 1.1 skrll The <<_bfd_final_link>> function should look through the 324 1.1 skrll <<link_order>> structures attached to each section of the 325 1.1 skrll output file. Each <<link_order>> structure should either be 326 1.1 skrll handled specially, or it should be passed to the function 327 1.1 skrll <<_bfd_default_link_order>> which will do the right thing 328 1.1 skrll (<<_bfd_default_link_order>> is defined in <<linker.c>>). 329 1.1 skrll 330 1.1 skrll For efficiency, a <<link_order>> of type 331 1.1 skrll <<bfd_indirect_link_order>> whose associated section belongs 332 1.1 skrll to a BFD of the same format as the output BFD must be handled 333 1.1 skrll specially. This type of <<link_order>> describes part of an 334 1.1 skrll output section in terms of a section belonging to one of the 335 1.1 skrll input files. The <<_bfd_final_link>> function should read the 336 1.1 skrll contents of the section and any associated relocs, apply the 337 1.1 skrll relocs to the section contents, and write out the modified 338 1.1 skrll section contents. If performing a relocatable link, the 339 1.1 skrll relocs themselves must also be modified and written out. 340 1.1 skrll 341 1.1 skrll @findex _bfd_relocate_contents 342 1.1 skrll @findex _bfd_final_link_relocate 343 1.1 skrll The functions <<_bfd_relocate_contents>> and 344 1.1 skrll <<_bfd_final_link_relocate>> provide some general support for 345 1.1 skrll performing the actual relocations, notably overflow checking. 346 1.1 skrll Their arguments include information about the symbol the 347 1.1 skrll relocation is against and a <<reloc_howto_type>> argument 348 1.1 skrll which describes the relocation to perform. These functions 349 1.1 skrll are defined in <<reloc.c>>. 350 1.1 skrll 351 1.1 skrll The a.out function which handles reading, relocating, and 352 1.1 skrll writing section contents is <<aout_link_input_section>>. The 353 1.1 skrll actual relocation is done in <<aout_link_input_section_std>> 354 1.1 skrll and <<aout_link_input_section_ext>>. 355 1.1 skrll 356 1.1 skrll INODE 357 1.1 skrll Writing the symbol table, , Relocating the section contents, Performing the Final Link 358 1.1 skrll SUBSUBSECTION 359 1.1 skrll Writing the symbol table 360 1.1 skrll 361 1.1 skrll The <<_bfd_final_link>> function must gather all the symbols 362 1.1 skrll in the input files and write them out. It must also write out 363 1.1 skrll all the symbols in the global hash table. This must be 364 1.1 skrll controlled by the <<strip>> and <<discard>> fields of the 365 1.1 skrll <<bfd_link_info>> structure. 366 1.1 skrll 367 1.1 skrll The local symbols of the input files will not have been 368 1.1 skrll entered into the linker hash table. The <<_bfd_final_link>> 369 1.1 skrll routine must consider each input file and include the symbols 370 1.1 skrll in the output file. It may be convenient to do this when 371 1.1 skrll looking through the <<link_order>> structures, or it may be 372 1.1 skrll done by stepping through the <<input_bfds>> list. 373 1.1 skrll 374 1.1 skrll The <<_bfd_final_link>> routine must also traverse the global 375 1.1 skrll hash table to gather all the externally visible symbols. It 376 1.1 skrll is possible that most of the externally visible symbols may be 377 1.1 skrll written out when considering the symbols of each input file, 378 1.1 skrll but it is still necessary to traverse the hash table since the 379 1.1 skrll linker script may have defined some symbols that are not in 380 1.1 skrll any of the input files. 381 1.1 skrll 382 1.1 skrll The <<strip>> field of the <<bfd_link_info>> structure 383 1.1 skrll controls which symbols are written out. The possible values 384 1.1 skrll are listed in <<bfdlink.h>>. If the value is <<strip_some>>, 385 1.1 skrll then the <<keep_hash>> field of the <<bfd_link_info>> 386 1.1 skrll structure is a hash table of symbols to keep; each symbol 387 1.1 skrll should be looked up in this hash table, and only symbols which 388 1.1 skrll are present should be included in the output file. 389 1.1 skrll 390 1.1 skrll If the <<strip>> field of the <<bfd_link_info>> structure 391 1.1 skrll permits local symbols to be written out, the <<discard>> field 392 1.1 skrll is used to further controls which local symbols are included 393 1.1 skrll in the output file. If the value is <<discard_l>>, then all 394 1.1 skrll local symbols which begin with a certain prefix are discarded; 395 1.1 skrll this is controlled by the <<bfd_is_local_label_name>> entry point. 396 1.1 skrll 397 1.1 skrll The a.out backend handles symbols by calling 398 1.1 skrll <<aout_link_write_symbols>> on each input BFD and then 399 1.1 skrll traversing the global hash table with the function 400 1.1 skrll <<aout_link_write_other_symbol>>. It builds a string table 401 1.1 skrll while writing out the symbols, which is written to the output 402 1.1 skrll file at the end of <<NAME(aout,final_link)>>. 403 1.1 skrll */ 404 1.1 skrll 405 1.12 christos /* This structure is used to pass information to 406 1.12 christos _bfd_generic_link_write_global_symbol, which may be called via 407 1.12 christos _bfd_generic_link_hash_traverse. */ 408 1.12 christos 409 1.12 christos struct generic_write_global_symbol_info 410 1.12 christos { 411 1.12 christos struct bfd_link_info *info; 412 1.12 christos bfd *output_bfd; 413 1.12 christos size_t *psymalloc; 414 1.12 christos bool failed; 415 1.12 christos }; 416 1.12 christos 417 1.10 christos static bool generic_link_add_object_symbols 418 1.7 christos (bfd *, struct bfd_link_info *); 419 1.10 christos static bool generic_link_check_archive_element 420 1.5 christos (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *, 421 1.10 christos bool *); 422 1.10 christos static bool generic_link_add_symbol_list 423 1.7 christos (bfd *, struct bfd_link_info *, bfd_size_type count, asymbol **); 424 1.10 christos static bool generic_add_output_symbol 425 1.1 skrll (bfd *, size_t *psymalloc, asymbol *); 426 1.10 christos static bool default_data_link_order 427 1.1 skrll (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *); 428 1.10 christos static bool default_indirect_link_order 429 1.1 skrll (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *, 430 1.10 christos bool); 431 1.12 christos static bool _bfd_generic_link_output_symbols 432 1.12 christos (bfd *, bfd *, struct bfd_link_info *, size_t *); 433 1.12 christos static bool _bfd_generic_link_write_global_symbol 434 1.12 christos (struct generic_link_hash_entry *, void *); 435 1.1 skrll 436 1.1 skrll /* The link hash table structure is defined in bfdlink.h. It provides 437 1.1 skrll a base hash table which the backend specific hash tables are built 438 1.1 skrll upon. */ 439 1.1 skrll 440 1.1 skrll /* Routine to create an entry in the link hash table. */ 441 1.1 skrll 442 1.1 skrll struct bfd_hash_entry * 443 1.1 skrll _bfd_link_hash_newfunc (struct bfd_hash_entry *entry, 444 1.1 skrll struct bfd_hash_table *table, 445 1.1 skrll const char *string) 446 1.1 skrll { 447 1.1 skrll /* Allocate the structure if it has not already been allocated by a 448 1.1 skrll subclass. */ 449 1.1 skrll if (entry == NULL) 450 1.1 skrll { 451 1.3 christos entry = (struct bfd_hash_entry *) 452 1.7 christos bfd_hash_allocate (table, sizeof (struct bfd_link_hash_entry)); 453 1.1 skrll if (entry == NULL) 454 1.1 skrll return entry; 455 1.1 skrll } 456 1.1 skrll 457 1.1 skrll /* Call the allocation method of the superclass. */ 458 1.1 skrll entry = bfd_hash_newfunc (entry, table, string); 459 1.1 skrll if (entry) 460 1.1 skrll { 461 1.1 skrll struct bfd_link_hash_entry *h = (struct bfd_link_hash_entry *) entry; 462 1.1 skrll 463 1.1 skrll /* Initialize the local fields. */ 464 1.3 christos memset ((char *) &h->root + sizeof (h->root), 0, 465 1.3 christos sizeof (*h) - sizeof (h->root)); 466 1.1 skrll } 467 1.1 skrll 468 1.1 skrll return entry; 469 1.1 skrll } 470 1.1 skrll 471 1.1 skrll /* Initialize a link hash table. The BFD argument is the one 472 1.1 skrll responsible for creating this table. */ 473 1.1 skrll 474 1.10 christos bool 475 1.1 skrll _bfd_link_hash_table_init 476 1.1 skrll (struct bfd_link_hash_table *table, 477 1.1 skrll bfd *abfd ATTRIBUTE_UNUSED, 478 1.1 skrll struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *, 479 1.1 skrll struct bfd_hash_table *, 480 1.1 skrll const char *), 481 1.1 skrll unsigned int entsize) 482 1.1 skrll { 483 1.10 christos bool ret; 484 1.5 christos 485 1.5 christos BFD_ASSERT (!abfd->is_linker_output && !abfd->link.hash); 486 1.1 skrll table->undefs = NULL; 487 1.1 skrll table->undefs_tail = NULL; 488 1.1 skrll table->type = bfd_link_generic_hash_table; 489 1.1 skrll 490 1.5 christos ret = bfd_hash_table_init (&table->table, newfunc, entsize); 491 1.5 christos if (ret) 492 1.5 christos { 493 1.5 christos /* Arrange for destruction of this hash table on closing ABFD. */ 494 1.5 christos table->hash_table_free = _bfd_generic_link_hash_table_free; 495 1.13 christos table->merge_info = NULL; 496 1.5 christos abfd->link.hash = table; 497 1.10 christos abfd->is_linker_output = true; 498 1.5 christos } 499 1.5 christos return ret; 500 1.1 skrll } 501 1.1 skrll 502 1.1 skrll /* Look up a symbol in a link hash table. If follow is TRUE, we 503 1.1 skrll follow bfd_link_hash_indirect and bfd_link_hash_warning links to 504 1.9 christos the real symbol. 505 1.9 christos 506 1.9 christos .{* Return TRUE if the symbol described by a linker hash entry H 507 1.9 christos . is going to be absolute. Linker-script defined symbols can be 508 1.9 christos . converted from absolute to section-relative ones late in the 509 1.9 christos . link. Use this macro to correctly determine whether the symbol 510 1.9 christos . will actually end up absolute in output. *} 511 1.9 christos .#define bfd_is_abs_symbol(H) \ 512 1.9 christos . (((H)->type == bfd_link_hash_defined \ 513 1.9 christos . || (H)->type == bfd_link_hash_defweak) \ 514 1.9 christos . && bfd_is_abs_section ((H)->u.def.section) \ 515 1.9 christos . && !(H)->rel_from_abs) 516 1.9 christos . 517 1.9 christos */ 518 1.1 skrll 519 1.1 skrll struct bfd_link_hash_entry * 520 1.1 skrll bfd_link_hash_lookup (struct bfd_link_hash_table *table, 521 1.1 skrll const char *string, 522 1.10 christos bool create, 523 1.10 christos bool copy, 524 1.10 christos bool follow) 525 1.1 skrll { 526 1.1 skrll struct bfd_link_hash_entry *ret; 527 1.1 skrll 528 1.8 christos if (table == NULL || string == NULL) 529 1.8 christos return NULL; 530 1.8 christos 531 1.1 skrll ret = ((struct bfd_link_hash_entry *) 532 1.1 skrll bfd_hash_lookup (&table->table, string, create, copy)); 533 1.1 skrll 534 1.1 skrll if (follow && ret != NULL) 535 1.1 skrll { 536 1.1 skrll while (ret->type == bfd_link_hash_indirect 537 1.1 skrll || ret->type == bfd_link_hash_warning) 538 1.1 skrll ret = ret->u.i.link; 539 1.1 skrll } 540 1.1 skrll 541 1.1 skrll return ret; 542 1.1 skrll } 543 1.1 skrll 544 1.1 skrll /* Look up a symbol in the main linker hash table if the symbol might 545 1.1 skrll be wrapped. This should only be used for references to an 546 1.1 skrll undefined symbol, not for definitions of a symbol. */ 547 1.1 skrll 548 1.1 skrll struct bfd_link_hash_entry * 549 1.1 skrll bfd_wrapped_link_hash_lookup (bfd *abfd, 550 1.1 skrll struct bfd_link_info *info, 551 1.1 skrll const char *string, 552 1.10 christos bool create, 553 1.10 christos bool copy, 554 1.10 christos bool follow) 555 1.1 skrll { 556 1.10 christos size_t amt; 557 1.1 skrll 558 1.1 skrll if (info->wrap_hash != NULL) 559 1.1 skrll { 560 1.1 skrll const char *l; 561 1.1 skrll char prefix = '\0'; 562 1.1 skrll 563 1.1 skrll l = string; 564 1.11 christos if (*l 565 1.11 christos && (*l == bfd_get_symbol_leading_char (abfd) 566 1.11 christos || *l == info->wrap_char)) 567 1.1 skrll { 568 1.1 skrll prefix = *l; 569 1.1 skrll ++l; 570 1.1 skrll } 571 1.1 skrll 572 1.1 skrll #undef WRAP 573 1.1 skrll #define WRAP "__wrap_" 574 1.1 skrll 575 1.10 christos if (bfd_hash_lookup (info->wrap_hash, l, false, false) != NULL) 576 1.1 skrll { 577 1.1 skrll char *n; 578 1.1 skrll struct bfd_link_hash_entry *h; 579 1.1 skrll 580 1.1 skrll /* This symbol is being wrapped. We want to replace all 581 1.7 christos references to SYM with references to __wrap_SYM. */ 582 1.1 skrll 583 1.1 skrll amt = strlen (l) + sizeof WRAP + 1; 584 1.3 christos n = (char *) bfd_malloc (amt); 585 1.1 skrll if (n == NULL) 586 1.1 skrll return NULL; 587 1.1 skrll 588 1.1 skrll n[0] = prefix; 589 1.1 skrll n[1] = '\0'; 590 1.1 skrll strcat (n, WRAP); 591 1.1 skrll strcat (n, l); 592 1.10 christos h = bfd_link_hash_lookup (info->hash, n, create, true, follow); 593 1.12 christos if (h != NULL) 594 1.12 christos h->wrapper_symbol = true; 595 1.1 skrll free (n); 596 1.1 skrll return h; 597 1.1 skrll } 598 1.1 skrll 599 1.1 skrll #undef REAL 600 1.1 skrll #define REAL "__real_" 601 1.1 skrll 602 1.1 skrll if (*l == '_' 603 1.10 christos && startswith (l, REAL) 604 1.1 skrll && bfd_hash_lookup (info->wrap_hash, l + sizeof REAL - 1, 605 1.10 christos false, false) != NULL) 606 1.1 skrll { 607 1.1 skrll char *n; 608 1.1 skrll struct bfd_link_hash_entry *h; 609 1.1 skrll 610 1.1 skrll /* This is a reference to __real_SYM, where SYM is being 611 1.7 christos wrapped. We want to replace all references to __real_SYM 612 1.7 christos with references to SYM. */ 613 1.1 skrll 614 1.1 skrll amt = strlen (l + sizeof REAL - 1) + 2; 615 1.3 christos n = (char *) bfd_malloc (amt); 616 1.1 skrll if (n == NULL) 617 1.1 skrll return NULL; 618 1.1 skrll 619 1.1 skrll n[0] = prefix; 620 1.1 skrll n[1] = '\0'; 621 1.1 skrll strcat (n, l + sizeof REAL - 1); 622 1.10 christos h = bfd_link_hash_lookup (info->hash, n, create, true, follow); 623 1.10 christos if (h != NULL) 624 1.10 christos h->ref_real = 1; 625 1.1 skrll free (n); 626 1.1 skrll return h; 627 1.1 skrll } 628 1.1 skrll 629 1.1 skrll #undef REAL 630 1.1 skrll } 631 1.1 skrll 632 1.1 skrll return bfd_link_hash_lookup (info->hash, string, create, copy, follow); 633 1.1 skrll } 634 1.1 skrll 635 1.5 christos /* If H is a wrapped symbol, ie. the symbol name starts with "__wrap_" 636 1.5 christos and the remainder is found in wrap_hash, return the real symbol. */ 637 1.5 christos 638 1.5 christos struct bfd_link_hash_entry * 639 1.5 christos unwrap_hash_lookup (struct bfd_link_info *info, 640 1.5 christos bfd *input_bfd, 641 1.5 christos struct bfd_link_hash_entry *h) 642 1.5 christos { 643 1.5 christos const char *l = h->root.string; 644 1.5 christos 645 1.11 christos if (*l 646 1.11 christos && (*l == bfd_get_symbol_leading_char (input_bfd) 647 1.11 christos || *l == info->wrap_char)) 648 1.5 christos ++l; 649 1.5 christos 650 1.10 christos if (startswith (l, WRAP)) 651 1.5 christos { 652 1.5 christos l += sizeof WRAP - 1; 653 1.5 christos 654 1.10 christos if (bfd_hash_lookup (info->wrap_hash, l, false, false) != NULL) 655 1.5 christos { 656 1.5 christos char save = 0; 657 1.5 christos if (l - (sizeof WRAP - 1) != h->root.string) 658 1.5 christos { 659 1.5 christos --l; 660 1.5 christos save = *l; 661 1.5 christos *(char *) l = *h->root.string; 662 1.5 christos } 663 1.10 christos h = bfd_link_hash_lookup (info->hash, l, false, false, false); 664 1.5 christos if (save) 665 1.5 christos *(char *) l = save; 666 1.5 christos } 667 1.5 christos } 668 1.5 christos return h; 669 1.5 christos } 670 1.5 christos #undef WRAP 671 1.5 christos 672 1.4 christos /* Traverse a generic link hash table. Differs from bfd_hash_traverse 673 1.4 christos in the treatment of warning symbols. When warning symbols are 674 1.4 christos created they replace the real symbol, so you don't get to see the 675 1.7 christos real symbol in a bfd_hash_traverse. This traversal calls func with 676 1.4 christos the real symbol. */ 677 1.1 skrll 678 1.1 skrll void 679 1.1 skrll bfd_link_hash_traverse 680 1.4 christos (struct bfd_link_hash_table *htab, 681 1.10 christos bool (*func) (struct bfd_link_hash_entry *, void *), 682 1.1 skrll void *info) 683 1.1 skrll { 684 1.4 christos unsigned int i; 685 1.4 christos 686 1.4 christos htab->table.frozen = 1; 687 1.4 christos for (i = 0; i < htab->table.size; i++) 688 1.4 christos { 689 1.4 christos struct bfd_link_hash_entry *p; 690 1.4 christos 691 1.4 christos p = (struct bfd_link_hash_entry *) htab->table.table[i]; 692 1.4 christos for (; p != NULL; p = (struct bfd_link_hash_entry *) p->root.next) 693 1.4 christos if (!(*func) (p->type == bfd_link_hash_warning ? p->u.i.link : p, info)) 694 1.4 christos goto out; 695 1.4 christos } 696 1.4 christos out: 697 1.4 christos htab->table.frozen = 0; 698 1.1 skrll } 699 1.1 skrll 700 1.1 skrll /* Add a symbol to the linker hash table undefs list. */ 701 1.1 skrll 702 1.1 skrll void 703 1.1 skrll bfd_link_add_undef (struct bfd_link_hash_table *table, 704 1.1 skrll struct bfd_link_hash_entry *h) 705 1.1 skrll { 706 1.1 skrll BFD_ASSERT (h->u.undef.next == NULL); 707 1.1 skrll if (table->undefs_tail != NULL) 708 1.1 skrll table->undefs_tail->u.undef.next = h; 709 1.1 skrll if (table->undefs == NULL) 710 1.1 skrll table->undefs = h; 711 1.1 skrll table->undefs_tail = h; 712 1.1 skrll } 713 1.1 skrll 714 1.1 skrll /* The undefs list was designed so that in normal use we don't need to 715 1.1 skrll remove entries. However, if symbols on the list are changed from 716 1.1 skrll bfd_link_hash_undefined to either bfd_link_hash_undefweak or 717 1.1 skrll bfd_link_hash_new for some reason, then they must be removed from the 718 1.1 skrll list. Failure to do so might result in the linker attempting to add 719 1.1 skrll the symbol to the list again at a later stage. */ 720 1.1 skrll 721 1.1 skrll void 722 1.1 skrll bfd_link_repair_undef_list (struct bfd_link_hash_table *table) 723 1.1 skrll { 724 1.1 skrll struct bfd_link_hash_entry **pun; 725 1.1 skrll 726 1.1 skrll pun = &table->undefs; 727 1.1 skrll while (*pun != NULL) 728 1.1 skrll { 729 1.1 skrll struct bfd_link_hash_entry *h = *pun; 730 1.1 skrll 731 1.1 skrll if (h->type == bfd_link_hash_new 732 1.1 skrll || h->type == bfd_link_hash_undefweak) 733 1.1 skrll { 734 1.1 skrll *pun = h->u.undef.next; 735 1.1 skrll h->u.undef.next = NULL; 736 1.1 skrll if (h == table->undefs_tail) 737 1.1 skrll { 738 1.1 skrll if (pun == &table->undefs) 739 1.1 skrll table->undefs_tail = NULL; 740 1.1 skrll else 741 1.1 skrll /* pun points at an u.undef.next field. Go back to 742 1.1 skrll the start of the link_hash_entry. */ 743 1.1 skrll table->undefs_tail = (struct bfd_link_hash_entry *) 744 1.1 skrll ((char *) pun - ((char *) &h->u.undef.next - (char *) h)); 745 1.1 skrll break; 746 1.1 skrll } 747 1.1 skrll } 748 1.1 skrll else 749 1.1 skrll pun = &h->u.undef.next; 750 1.1 skrll } 751 1.1 skrll } 752 1.1 skrll 753 1.1 skrll /* Routine to create an entry in a generic link hash table. */ 755 1.12 christos 756 1.1 skrll static struct bfd_hash_entry * 757 1.1 skrll _bfd_generic_link_hash_newfunc (struct bfd_hash_entry *entry, 758 1.1 skrll struct bfd_hash_table *table, 759 1.1 skrll const char *string) 760 1.1 skrll { 761 1.1 skrll /* Allocate the structure if it has not already been allocated by a 762 1.1 skrll subclass. */ 763 1.1 skrll if (entry == NULL) 764 1.3 christos { 765 1.1 skrll entry = (struct bfd_hash_entry *) 766 1.1 skrll bfd_hash_allocate (table, sizeof (struct generic_link_hash_entry)); 767 1.1 skrll if (entry == NULL) 768 1.1 skrll return entry; 769 1.1 skrll } 770 1.1 skrll 771 1.1 skrll /* Call the allocation method of the superclass. */ 772 1.1 skrll entry = _bfd_link_hash_newfunc (entry, table, string); 773 1.1 skrll if (entry) 774 1.1 skrll { 775 1.1 skrll struct generic_link_hash_entry *ret; 776 1.1 skrll 777 1.1 skrll /* Set local fields. */ 778 1.10 christos ret = (struct generic_link_hash_entry *) entry; 779 1.1 skrll ret->written = false; 780 1.1 skrll ret->sym = NULL; 781 1.1 skrll } 782 1.1 skrll 783 1.1 skrll return entry; 784 1.1 skrll } 785 1.1 skrll 786 1.1 skrll /* Create a generic link hash table. */ 787 1.1 skrll 788 1.1 skrll struct bfd_link_hash_table * 789 1.1 skrll _bfd_generic_link_hash_table_create (bfd *abfd) 790 1.1 skrll { 791 1.10 christos struct generic_link_hash_table *ret; 792 1.1 skrll size_t amt = sizeof (struct generic_link_hash_table); 793 1.3 christos 794 1.1 skrll ret = (struct generic_link_hash_table *) bfd_malloc (amt); 795 1.1 skrll if (ret == NULL) 796 1.1 skrll return NULL; 797 1.1 skrll if (! _bfd_link_hash_table_init (&ret->root, abfd, 798 1.1 skrll _bfd_generic_link_hash_newfunc, 799 1.1 skrll sizeof (struct generic_link_hash_entry))) 800 1.1 skrll { 801 1.1 skrll free (ret); 802 1.1 skrll return NULL; 803 1.1 skrll } 804 1.1 skrll return &ret->root; 805 1.1 skrll } 806 1.1 skrll 807 1.5 christos void 808 1.1 skrll _bfd_generic_link_hash_table_free (bfd *obfd) 809 1.5 christos { 810 1.1 skrll struct generic_link_hash_table *ret; 811 1.5 christos 812 1.5 christos BFD_ASSERT (obfd->is_linker_output && obfd->link.hash); 813 1.13 christos ret = (struct generic_link_hash_table *) obfd->link.hash; 814 1.1 skrll _bfd_merge_sections_free (ret->root.merge_info); 815 1.1 skrll bfd_hash_table_free (&ret->root.table); 816 1.5 christos free (ret); 817 1.10 christos obfd->link.hash = NULL; 818 1.1 skrll obfd->is_linker_output = false; 819 1.1 skrll } 820 1.1 skrll 821 1.1 skrll /* Grab the symbols for an object file when doing a generic link. We 822 1.1 skrll store the symbols in the outsymbols field. We need to keep them 823 1.1 skrll around for the entire link to ensure that we only read them once. 824 1.1 skrll If we read them multiple times, we might wind up with relocs and 825 1.1 skrll the hash table pointing to different instances of the symbol 826 1.1 skrll structure. */ 827 1.10 christos 828 1.1 skrll bool 829 1.1 skrll bfd_generic_link_read_symbols (bfd *abfd) 830 1.1 skrll { 831 1.1 skrll if (bfd_get_outsymbols (abfd) == NULL) 832 1.1 skrll { 833 1.1 skrll long symsize; 834 1.1 skrll long symcount; 835 1.1 skrll 836 1.1 skrll symsize = bfd_get_symtab_upper_bound (abfd); 837 1.10 christos if (symsize < 0) 838 1.9 christos return false; 839 1.1 skrll abfd->outsymbols = bfd_alloc (abfd, symsize); 840 1.10 christos if (bfd_get_outsymbols (abfd) == NULL && symsize != 0) 841 1.1 skrll return false; 842 1.1 skrll symcount = bfd_canonicalize_symtab (abfd, bfd_get_outsymbols (abfd)); 843 1.10 christos if (symcount < 0) 844 1.9 christos return false; 845 1.1 skrll abfd->symcount = symcount; 846 1.1 skrll } 847 1.10 christos 848 1.1 skrll return true; 849 1.1 skrll } 850 1.1 skrll 851 1.1 skrll /* Indicate that we are only retrieving symbol values from this 853 1.1 skrll section. We want the symbols to act as though the values in the 854 1.1 skrll file are absolute. */ 855 1.1 skrll 856 1.1 skrll void 857 1.1 skrll _bfd_generic_link_just_syms (asection *sec, 858 1.4 christos struct bfd_link_info *info ATTRIBUTE_UNUSED) 859 1.1 skrll { 860 1.1 skrll sec->sec_info_type = SEC_INFO_TYPE_JUST_SYMS; 861 1.1 skrll sec->output_section = bfd_abs_section_ptr; 862 1.1 skrll sec->output_offset = sec->vma; 863 1.5 christos } 864 1.5 christos 865 1.3 christos /* Copy the symbol type and other attributes for a linker script 866 1.3 christos assignment from HSRC to HDEST. 867 1.3 christos The default implementation does nothing. */ 868 1.5 christos void 869 1.5 christos _bfd_generic_copy_link_hash_symbol_type (bfd *abfd ATTRIBUTE_UNUSED, 870 1.3 christos struct bfd_link_hash_entry *hdest ATTRIBUTE_UNUSED, 871 1.3 christos struct bfd_link_hash_entry *hsrc ATTRIBUTE_UNUSED) 872 1.3 christos { 873 1.7 christos } 874 1.7 christos 875 1.1 skrll /* Generic function to add symbols from an object file to the 876 1.10 christos global hash table. */ 877 1.7 christos 878 1.1 skrll bool 879 1.10 christos _bfd_generic_link_add_symbols (bfd *abfd, struct bfd_link_info *info) 880 1.1 skrll { 881 1.1 skrll bool ret; 882 1.1 skrll 883 1.1 skrll switch (bfd_get_format (abfd)) 884 1.7 christos { 885 1.1 skrll case bfd_object: 886 1.1 skrll ret = generic_link_add_object_symbols (abfd, info); 887 1.1 skrll break; 888 1.7 christos case bfd_archive: 889 1.1 skrll ret = (_bfd_generic_link_add_archive_symbols 890 1.1 skrll (abfd, info, generic_link_check_archive_element)); 891 1.1 skrll break; 892 1.10 christos default: 893 1.1 skrll bfd_set_error (bfd_error_wrong_format); 894 1.1 skrll ret = false; 895 1.1 skrll } 896 1.1 skrll 897 1.1 skrll return ret; 898 1.1 skrll } 899 1.1 skrll 900 1.10 christos /* Add symbols from an object file to the global hash table. */ 901 1.1 skrll 902 1.7 christos static bool 903 1.1 skrll generic_link_add_object_symbols (bfd *abfd, 904 1.1 skrll struct bfd_link_info *info) 905 1.1 skrll { 906 1.1 skrll bfd_size_type symcount; 907 1.1 skrll struct bfd_symbol **outsyms; 908 1.10 christos 909 1.1 skrll if (!bfd_generic_link_read_symbols (abfd)) 910 1.1 skrll return false; 911 1.7 christos symcount = _bfd_generic_link_get_symcount (abfd); 912 1.1 skrll outsyms = _bfd_generic_link_get_symbols (abfd); 913 1.1 skrll return generic_link_add_symbol_list (abfd, info, symcount, outsyms); 914 1.1 skrll } 915 1.1 skrll 916 1.1 skrll /* Generic function to add symbols from an archive file to the global 918 1.5 christos hash file. This function presumes that the archive symbol table 919 1.5 christos has already been read in (this is normally done by the 920 1.5 christos bfd_check_format entry point). It looks through the archive symbol 921 1.5 christos table for symbols that are undefined or common in the linker global 922 1.5 christos symbol hash table. When one is found, the CHECKFN argument is used 923 1.5 christos to see if an object file should be included. This allows targets 924 1.5 christos to customize common symbol behaviour. CHECKFN should set *PNEEDED 925 1.5 christos to TRUE if the object file should be included, and must also call 926 1.5 christos the bfd_link_info add_archive_element callback function and handle 927 1.5 christos adding the symbols to the global hash table. CHECKFN must notice 928 1.1 skrll if the callback indicates a substitute BFD, and arrange to add 929 1.10 christos those symbols instead if it does so. CHECKFN should only return 930 1.1 skrll FALSE if some sort of error occurs. */ 931 1.1 skrll 932 1.1 skrll bool 933 1.10 christos _bfd_generic_link_add_archive_symbols 934 1.10 christos (bfd *abfd, 935 1.1 skrll struct bfd_link_info *info, 936 1.10 christos bool (*checkfn) (bfd *, struct bfd_link_info *, 937 1.5 christos struct bfd_link_hash_entry *, const char *, bool *)) 938 1.5 christos { 939 1.1 skrll bool loop; 940 1.1 skrll bfd_size_type amt; 941 1.1 skrll unsigned char *included; 942 1.1 skrll 943 1.1 skrll if (! bfd_has_map (abfd)) 944 1.10 christos { 945 1.1 skrll /* An empty archive is a special case. */ 946 1.10 christos if (bfd_openr_next_archived_file (abfd, NULL) == NULL) 947 1.1 skrll return true; 948 1.1 skrll bfd_set_error (bfd_error_no_armap); 949 1.5 christos return false; 950 1.5 christos } 951 1.10 christos 952 1.5 christos amt = bfd_ardata (abfd)->symdef_count; 953 1.5 christos if (amt == 0) 954 1.5 christos return true; 955 1.10 christos amt *= sizeof (*included); 956 1.1 skrll included = (unsigned char *) bfd_zmalloc (amt); 957 1.5 christos if (included == NULL) 958 1.1 skrll return false; 959 1.5 christos 960 1.5 christos do 961 1.5 christos { 962 1.5 christos carsym *arsyms; 963 1.5 christos carsym *arsym_end; 964 1.10 christos carsym *arsym; 965 1.5 christos unsigned int indx; 966 1.5 christos file_ptr last_ar_offset = -1; 967 1.10 christos bool needed = false; 968 1.5 christos bfd *element = NULL; 969 1.5 christos 970 1.5 christos loop = false; 971 1.1 skrll arsyms = bfd_ardata (abfd)->symdefs; 972 1.5 christos arsym_end = arsyms + bfd_ardata (abfd)->symdef_count; 973 1.5 christos for (arsym = arsyms, indx = 0; arsym < arsym_end; arsym++, indx++) 974 1.1 skrll { 975 1.5 christos struct bfd_link_hash_entry *h; 976 1.5 christos struct bfd_link_hash_entry *undefs_tail; 977 1.5 christos 978 1.1 skrll if (included[indx]) 979 1.5 christos continue; 980 1.1 skrll if (needed && arsym->file_offset == last_ar_offset) 981 1.1 skrll { 982 1.1 skrll included[indx] = 1; 983 1.8 christos continue; 984 1.8 christos } 985 1.9 christos 986 1.5 christos if (arsym->name == NULL) 987 1.10 christos goto error_return; 988 1.1 skrll 989 1.5 christos h = bfd_link_hash_lookup (info->hash, arsym->name, 990 1.5 christos false, false, true); 991 1.10 christos 992 1.5 christos if (h == NULL 993 1.10 christos && info->pei386_auto_import 994 1.5 christos && startswith (arsym->name, "__imp_")) 995 1.1 skrll h = bfd_link_hash_lookup (info->hash, arsym->name + 6, 996 1.1 skrll false, false, true); 997 1.5 christos if (h == NULL) 998 1.5 christos continue; 999 1.1 skrll 1000 1.5 christos if (h->type != bfd_link_hash_undefined 1001 1.5 christos && h->type != bfd_link_hash_common) 1002 1.5 christos { 1003 1.1 skrll if (h->type != bfd_link_hash_undefweak) 1004 1.1 skrll /* Symbol must be defined. Don't check it again. */ 1005 1.1 skrll included[indx] = 1; 1006 1.5 christos continue; 1007 1.5 christos } 1008 1.5 christos 1009 1.10 christos if (last_ar_offset != arsym->file_offset) 1010 1.10 christos { 1011 1.5 christos last_ar_offset = arsym->file_offset; 1012 1.5 christos element = _bfd_get_elt_at_filepos (abfd, last_ar_offset, 1013 1.5 christos info); 1014 1.5 christos if (element == NULL 1015 1.5 christos || !bfd_check_format (element, bfd_object)) 1016 1.5 christos goto error_return; 1017 1.5 christos } 1018 1.1 skrll 1019 1.1 skrll undefs_tail = info->hash->undefs_tail; 1020 1.5 christos 1021 1.1 skrll /* CHECKFN will see if this element should be included, and 1022 1.1 skrll go ahead and include it if appropriate. */ 1023 1.5 christos if (! (*checkfn) (element, info, h, arsym->name, &needed)) 1024 1.1 skrll goto error_return; 1025 1.5 christos 1026 1.1 skrll if (needed) 1027 1.5 christos { 1028 1.5 christos unsigned int mark; 1029 1.5 christos 1030 1.5 christos /* Look backward to mark all symbols from this object file 1031 1.5 christos which we have already seen in this pass. */ 1032 1.5 christos mark = indx; 1033 1.5 christos do 1034 1.5 christos { 1035 1.5 christos included[mark] = 1; 1036 1.5 christos if (mark == 0) 1037 1.5 christos break; 1038 1.5 christos --mark; 1039 1.5 christos } 1040 1.10 christos while (arsyms[mark].file_offset == last_ar_offset); 1041 1.1 skrll 1042 1.1 skrll if (undefs_tail != info->hash->undefs_tail) 1043 1.5 christos loop = true; 1044 1.1 skrll } 1045 1.5 christos } 1046 1.10 christos } while (loop); 1047 1.1 skrll 1048 1.1 skrll free (included); 1049 1.5 christos return true; 1050 1.10 christos 1051 1.1 skrll error_return: 1052 1.1 skrll free (included); 1053 1.7 christos return false; 1054 1.1 skrll } 1055 1.10 christos 1056 1.1 skrll /* See if we should include an archive element. */ 1058 1.5 christos 1059 1.5 christos static bool 1060 1.10 christos generic_link_check_archive_element (bfd *abfd, 1061 1.1 skrll struct bfd_link_info *info, 1062 1.1 skrll struct bfd_link_hash_entry *h, 1063 1.1 skrll const char *name ATTRIBUTE_UNUSED, 1064 1.10 christos bool *pneeded) 1065 1.1 skrll { 1066 1.1 skrll asymbol **pp, **ppend; 1067 1.10 christos 1068 1.1 skrll *pneeded = false; 1069 1.1 skrll 1070 1.1 skrll if (!bfd_generic_link_read_symbols (abfd)) 1071 1.1 skrll return false; 1072 1.1 skrll 1073 1.1 skrll pp = _bfd_generic_link_get_symbols (abfd); 1074 1.1 skrll ppend = pp + _bfd_generic_link_get_symcount (abfd); 1075 1.1 skrll for (; pp < ppend; pp++) 1076 1.1 skrll { 1077 1.1 skrll asymbol *p; 1078 1.1 skrll 1079 1.1 skrll p = *pp; 1080 1.1 skrll 1081 1.1 skrll /* We are only interested in globally visible symbols. */ 1082 1.1 skrll if (! bfd_is_com_section (p->section) 1083 1.1 skrll && (p->flags & (BSF_GLOBAL | BSF_INDIRECT | BSF_WEAK)) == 0) 1084 1.1 skrll continue; 1085 1.1 skrll 1086 1.1 skrll /* We are only interested if we know something about this 1087 1.10 christos symbol, and it is undefined or common. An undefined weak 1088 1.10 christos symbol (type bfd_link_hash_undefweak) is not considered to be 1089 1.1 skrll a reference when pulling files out of an archive. See the 1090 1.1 skrll SVR4 ABI, p. 4-27. */ 1091 1.1 skrll h = bfd_link_hash_lookup (info->hash, bfd_asymbol_name (p), false, 1092 1.1 skrll false, true); 1093 1.1 skrll if (h == NULL 1094 1.1 skrll || (h->type != bfd_link_hash_undefined 1095 1.1 skrll && h->type != bfd_link_hash_common)) 1096 1.5 christos continue; 1097 1.5 christos 1098 1.5 christos /* P is a symbol we are looking for. */ 1099 1.1 skrll 1100 1.5 christos if (! bfd_is_com_section (p->section) 1101 1.5 christos || (h->type == bfd_link_hash_undefined 1102 1.5 christos && h->u.undef.abfd == NULL)) 1103 1.10 christos { 1104 1.3 christos /* P is not a common symbol, or an undefined reference was 1105 1.3 christos created from outside BFD such as from a linker -u option. 1106 1.3 christos This object file defines the symbol, so pull it in. */ 1107 1.10 christos *pneeded = true; 1108 1.3 christos if (!(*info->callbacks 1109 1.3 christos ->add_archive_element) (info, abfd, bfd_asymbol_name (p), 1110 1.7 christos &abfd)) 1111 1.1 skrll return false; 1112 1.1 skrll /* Potentially, the add_archive_element hook may have set a 1113 1.1 skrll substitute BFD for us. */ 1114 1.1 skrll return bfd_link_add_symbols (abfd, info); 1115 1.1 skrll } 1116 1.1 skrll 1117 1.1 skrll /* P is a common symbol. */ 1118 1.1 skrll 1119 1.1 skrll if (h->type == bfd_link_hash_undefined) 1120 1.1 skrll { 1121 1.1 skrll bfd *symbfd; 1122 1.1 skrll bfd_vma size; 1123 1.1 skrll unsigned int power; 1124 1.1 skrll 1125 1.1 skrll /* Turn the symbol into a common symbol but do not link in 1126 1.1 skrll the object file. This is how a.out works. Object 1127 1.1 skrll formats that require different semantics must implement 1128 1.5 christos this function differently. This symbol is already on the 1129 1.1 skrll undefs list. We add the section to a common section 1130 1.3 christos attached to symbfd to ensure that it is in a BFD which 1131 1.1 skrll will be linked in. */ 1132 1.1 skrll symbfd = h->u.undef.abfd; 1133 1.1 skrll h->type = bfd_link_hash_common; 1134 1.10 christos h->u.c.p = (struct bfd_link_hash_common_entry *) 1135 1.1 skrll bfd_hash_allocate (&info->hash->table, 1136 1.1 skrll sizeof (struct bfd_link_hash_common_entry)); 1137 1.1 skrll if (h->u.c.p == NULL) 1138 1.1 skrll return false; 1139 1.1 skrll 1140 1.1 skrll size = bfd_asymbol_value (p); 1141 1.1 skrll h->u.c.size = size; 1142 1.1 skrll 1143 1.1 skrll power = bfd_log2 (size); 1144 1.1 skrll if (power > 4) 1145 1.1 skrll power = 4; 1146 1.1 skrll h->u.c.p->alignment_power = power; 1147 1.1 skrll 1148 1.1 skrll if (p->section == bfd_com_section_ptr) 1149 1.3 christos h->u.c.p->section = bfd_make_section_old_way (symbfd, "COMMON"); 1150 1.1 skrll else 1151 1.1 skrll h->u.c.p->section = bfd_make_section_old_way (symbfd, 1152 1.1 skrll p->section->name); 1153 1.1 skrll h->u.c.p->section->flags |= SEC_ALLOC; 1154 1.1 skrll } 1155 1.1 skrll else 1156 1.1 skrll { 1157 1.1 skrll /* Adjust the size of the common symbol if necessary. This 1158 1.1 skrll is how a.out works. Object formats that require 1159 1.1 skrll different semantics must implement this function 1160 1.1 skrll differently. */ 1161 1.1 skrll if (bfd_asymbol_value (p) > h->u.c.size) 1162 1.1 skrll h->u.c.size = bfd_asymbol_value (p); 1163 1.10 christos } 1164 1.1 skrll } 1165 1.1 skrll 1166 1.1 skrll /* This archive element is not needed. */ 1167 1.1 skrll return true; 1168 1.7 christos } 1169 1.1 skrll 1170 1.10 christos /* Add the symbols from an object file to the global hash table. ABFD 1171 1.1 skrll is the object file. INFO is the linker information. SYMBOL_COUNT 1172 1.1 skrll is the number of symbols. SYMBOLS is the list of symbols. */ 1173 1.1 skrll 1174 1.7 christos static bool 1175 1.1 skrll generic_link_add_symbol_list (bfd *abfd, 1176 1.1 skrll struct bfd_link_info *info, 1177 1.1 skrll bfd_size_type symbol_count, 1178 1.1 skrll asymbol **symbols) 1179 1.1 skrll { 1180 1.1 skrll asymbol **pp, **ppend; 1181 1.1 skrll 1182 1.1 skrll pp = symbols; 1183 1.1 skrll ppend = symbols + symbol_count; 1184 1.1 skrll for (; pp < ppend; pp++) 1185 1.1 skrll { 1186 1.1 skrll asymbol *p; 1187 1.1 skrll 1188 1.1 skrll p = *pp; 1189 1.1 skrll 1190 1.1 skrll if ((p->flags & (BSF_INDIRECT 1191 1.9 christos | BSF_WARNING 1192 1.9 christos | BSF_GLOBAL 1193 1.9 christos | BSF_CONSTRUCTOR 1194 1.1 skrll | BSF_WEAK)) != 0 1195 1.1 skrll || bfd_is_und_section (bfd_asymbol_section (p)) 1196 1.1 skrll || bfd_is_com_section (bfd_asymbol_section (p)) 1197 1.1 skrll || bfd_is_ind_section (bfd_asymbol_section (p))) 1198 1.1 skrll { 1199 1.1 skrll const char *name; 1200 1.1 skrll const char *string; 1201 1.1 skrll struct generic_link_hash_entry *h; 1202 1.1 skrll struct bfd_link_hash_entry *bh; 1203 1.1 skrll 1204 1.1 skrll string = name = bfd_asymbol_name (p); 1205 1.1 skrll if (((p->flags & BSF_INDIRECT) != 0 1206 1.1 skrll || bfd_is_ind_section (p->section)) 1207 1.1 skrll && pp + 1 < ppend) 1208 1.1 skrll { 1209 1.1 skrll pp++; 1210 1.1 skrll string = bfd_asymbol_name (*pp); 1211 1.1 skrll } 1212 1.1 skrll else if ((p->flags & BSF_WARNING) != 0 1213 1.1 skrll && pp + 1 < ppend) 1214 1.1 skrll { 1215 1.1 skrll /* The name of P is actually the warning string, and the 1216 1.1 skrll next symbol is the one to warn about. */ 1217 1.1 skrll pp++; 1218 1.1 skrll name = bfd_asymbol_name (*pp); 1219 1.9 christos } 1220 1.10 christos 1221 1.10 christos bh = NULL; 1222 1.1 skrll if (! (_bfd_generic_link_add_one_symbol 1223 1.1 skrll (info, abfd, name, p->flags, bfd_asymbol_section (p), 1224 1.1 skrll p->value, string, false, false, &bh))) 1225 1.7 christos return false; 1226 1.7 christos h = (struct generic_link_hash_entry *) bh; 1227 1.7 christos 1228 1.1 skrll /* If this is a constructor symbol, and the linker didn't do 1229 1.1 skrll anything with it, then we want to just pass the symbol 1230 1.1 skrll through to the output file. This will happen when 1231 1.1 skrll linking with -r. */ 1232 1.1 skrll if ((p->flags & BSF_CONSTRUCTOR) != 0 1233 1.1 skrll && (h == NULL || h->root.type == bfd_link_hash_new)) 1234 1.1 skrll { 1235 1.1 skrll p->udata.p = NULL; 1236 1.1 skrll continue; 1237 1.1 skrll } 1238 1.1 skrll 1239 1.1 skrll /* Save the BFD symbol so that we don't lose any backend 1240 1.1 skrll specific information that may be attached to it. We only 1241 1.1 skrll want this one if it gives more information than the 1242 1.1 skrll existing one; we don't want to replace a defined symbol 1243 1.1 skrll with an undefined one. This routine may be called with a 1244 1.1 skrll hash table other than the generic hash table, so we only 1245 1.1 skrll do this if we are certain that the hash table is a 1246 1.9 christos generic one. */ 1247 1.9 christos if (info->output_bfd->xvec == abfd->xvec) 1248 1.9 christos { 1249 1.1 skrll if (h->sym == NULL 1250 1.1 skrll || (! bfd_is_und_section (bfd_asymbol_section (p)) 1251 1.1 skrll && (! bfd_is_com_section (bfd_asymbol_section (p)) 1252 1.1 skrll || bfd_is_und_section (bfd_asymbol_section (h->sym))))) 1253 1.1 skrll { 1254 1.9 christos h->sym = p; 1255 1.1 skrll /* BSF_OLD_COMMON is a hack to support COFF reloc 1256 1.1 skrll reading, and it should go away when the COFF 1257 1.1 skrll linker is switched to the new version. */ 1258 1.1 skrll if (bfd_is_com_section (bfd_asymbol_section (p))) 1259 1.1 skrll p->flags |= BSF_OLD_COMMON; 1260 1.1 skrll } 1261 1.1 skrll } 1262 1.1 skrll 1263 1.1 skrll /* Store a back pointer from the symbol to the hash 1264 1.1 skrll table entry for the benefit of relaxation code until 1265 1.1 skrll it gets rewritten to not use asymbol structures. 1266 1.1 skrll Setting this is also used to check whether these 1267 1.1 skrll symbols were set up by the generic linker. */ 1268 1.10 christos p->udata.p = h; 1269 1.1 skrll } 1270 1.1 skrll } 1271 1.1 skrll 1272 1.1 skrll return true; 1273 1.1 skrll } 1274 1.1 skrll 1275 1.1 skrll /* We use a state table to deal with adding symbols from an object 1277 1.1 skrll file. The first index into the state table describes the symbol 1278 1.1 skrll from the object file. The second index into the state table is the 1279 1.1 skrll type of the symbol in the hash table. */ 1280 1.1 skrll 1281 1.1 skrll /* The symbol from the object file is turned into one of these row 1282 1.1 skrll values. */ 1283 1.1 skrll 1284 1.1 skrll enum link_row 1285 1.1 skrll { 1286 1.1 skrll UNDEF_ROW, /* Undefined. */ 1287 1.1 skrll UNDEFW_ROW, /* Weak undefined. */ 1288 1.1 skrll DEF_ROW, /* Defined. */ 1289 1.1 skrll DEFW_ROW, /* Weak defined. */ 1290 1.1 skrll COMMON_ROW, /* Common. */ 1291 1.1 skrll INDR_ROW, /* Indirect. */ 1292 1.1 skrll WARN_ROW, /* Warning. */ 1293 1.1 skrll SET_ROW /* Member of set. */ 1294 1.1 skrll }; 1295 1.1 skrll 1296 1.1 skrll /* apparently needed for Hitachi 3050R(HI-UX/WE2)? */ 1297 1.1 skrll #undef FAIL 1298 1.1 skrll 1299 1.1 skrll /* The actions to take in the state table. */ 1300 1.1 skrll 1301 1.1 skrll enum link_action 1302 1.1 skrll { 1303 1.1 skrll FAIL, /* Abort. */ 1304 1.1 skrll UND, /* Mark symbol undefined. */ 1305 1.1 skrll WEAK, /* Mark symbol weak undefined. */ 1306 1.1 skrll DEF, /* Mark symbol defined. */ 1307 1.1 skrll DEFW, /* Mark symbol weak defined. */ 1308 1.1 skrll COM, /* Mark symbol common. */ 1309 1.1 skrll REF, /* Mark defined symbol referenced. */ 1310 1.1 skrll CREF, /* Possibly warn about common reference to defined symbol. */ 1311 1.1 skrll CDEF, /* Define existing common symbol. */ 1312 1.1 skrll NOACT, /* No action. */ 1313 1.1 skrll BIG, /* Mark symbol common using largest size. */ 1314 1.1 skrll MDEF, /* Multiple definition error. */ 1315 1.5 christos MIND, /* Multiple indirect symbols. */ 1316 1.1 skrll IND, /* Make indirect symbol. */ 1317 1.1 skrll CIND, /* Make indirect symbol from existing common symbol. */ 1318 1.1 skrll SET, /* Add value to set. */ 1319 1.1 skrll MWARN, /* Make warning symbol. */ 1320 1.1 skrll WARN, /* Warn if referenced, else MWARN. */ 1321 1.1 skrll CYCLE, /* Repeat with symbol pointed to. */ 1322 1.1 skrll REFC, /* Mark indirect symbol referenced and then CYCLE. */ 1323 1.1 skrll WARNC /* Issue warning and then CYCLE. */ 1324 1.1 skrll }; 1325 1.1 skrll 1326 1.1 skrll /* The state table itself. The first index is a link_row and the 1327 1.7 christos second index is a bfd_link_hash_type. */ 1328 1.1 skrll 1329 1.10 christos static const enum link_action link_action[8][8] = 1330 1.7 christos { 1331 1.1 skrll /* current\prev new undef undefw def defw com indr warn */ 1332 1.1 skrll /* UNDEF_ROW */ {UND, NOACT, UND, REF, REF, NOACT, REFC, WARNC }, 1333 1.5 christos /* UNDEFW_ROW */ {WEAK, NOACT, NOACT, REF, REF, NOACT, REFC, WARNC }, 1334 1.1 skrll /* DEF_ROW */ {DEF, DEF, DEF, MDEF, DEF, CDEF, MIND, CYCLE }, 1335 1.1 skrll /* DEFW_ROW */ {DEFW, DEFW, DEFW, NOACT, NOACT, NOACT, NOACT, CYCLE }, 1336 1.1 skrll /* COMMON_ROW */ {COM, COM, COM, CREF, COM, BIG, REFC, WARNC }, 1337 1.1 skrll /* INDR_ROW */ {IND, IND, IND, MDEF, IND, CIND, MIND, CYCLE }, 1338 1.1 skrll /* WARN_ROW */ {MWARN, WARN, WARN, WARN, WARN, WARN, WARN, NOACT }, 1339 1.1 skrll /* SET_ROW */ {SET, SET, SET, SET, SET, SET, CYCLE, CYCLE } 1340 1.1 skrll }; 1341 1.1 skrll 1342 1.1 skrll /* Most of the entries in the LINK_ACTION table are straightforward, 1343 1.1 skrll but a few are somewhat subtle. 1344 1.1 skrll 1345 1.1 skrll A reference to an indirect symbol (UNDEF_ROW/indr or 1346 1.1 skrll UNDEFW_ROW/indr) is counted as a reference both to the indirect 1347 1.1 skrll symbol and to the symbol the indirect symbol points to. 1348 1.1 skrll 1349 1.1 skrll A reference to a warning symbol (UNDEF_ROW/warn or UNDEFW_ROW/warn) 1350 1.1 skrll causes the warning to be issued. 1351 1.1 skrll 1352 1.1 skrll A common definition of an indirect symbol (COMMON_ROW/indr) is 1353 1.1 skrll treated as a multiple definition error. Likewise for an indirect 1354 1.1 skrll definition of a common symbol (INDR_ROW/com). 1355 1.1 skrll 1356 1.1 skrll An indirect definition of a warning (INDR_ROW/warn) does not cause 1357 1.1 skrll the warning to be issued. 1358 1.1 skrll 1359 1.1 skrll If a warning is created for an indirect symbol (WARN_ROW/indr) no 1360 1.1 skrll warning is created for the symbol the indirect symbol points to. 1361 1.1 skrll 1362 1.1 skrll Adding an entry to a set does not count as a reference to a set, 1363 1.1 skrll and no warning is issued (SET_ROW/warn). */ 1364 1.1 skrll 1365 1.1 skrll /* Return the BFD in which a hash entry has been defined, if known. */ 1366 1.1 skrll 1367 1.1 skrll static bfd * 1368 1.1 skrll hash_entry_bfd (struct bfd_link_hash_entry *h) 1369 1.1 skrll { 1370 1.1 skrll while (h->type == bfd_link_hash_warning) 1371 1.1 skrll h = h->u.i.link; 1372 1.1 skrll switch (h->type) 1373 1.1 skrll { 1374 1.1 skrll default: 1375 1.1 skrll return NULL; 1376 1.1 skrll case bfd_link_hash_undefined: 1377 1.1 skrll case bfd_link_hash_undefweak: 1378 1.1 skrll return h->u.undef.abfd; 1379 1.1 skrll case bfd_link_hash_defined: 1380 1.1 skrll case bfd_link_hash_defweak: 1381 1.1 skrll return h->u.def.section->owner; 1382 1.1 skrll case bfd_link_hash_common: 1383 1.12 christos return h->u.c.p->section->owner; 1384 1.12 christos } 1385 1.12 christos /*NOTREACHED*/ 1386 1.12 christos } 1387 1.12 christos 1388 1.12 christos /* 1389 1.12 christos FUNCTION 1390 1.12 christos _bfd_generic_link_add_one_symbol 1391 1.12 christos 1392 1.12 christos SYNOPSIS 1393 1.12 christos bool _bfd_generic_link_add_one_symbol 1394 1.12 christos (struct bfd_link_info *info, 1395 1.12 christos bfd *abfd, 1396 1.12 christos const char *name, 1397 1.12 christos flagword flags, 1398 1.12 christos asection *section, 1399 1.12 christos bfd_vma value, 1400 1.12 christos const char *string, 1401 1.12 christos bool copy, 1402 1.1 skrll bool collect, 1403 1.1 skrll struct bfd_link_hash_entry **hashp); 1404 1.1 skrll 1405 1.1 skrll DESCRIPTION 1406 1.1 skrll Add a symbol to the global hash table. 1407 1.1 skrll ABFD is the BFD the symbol comes from. 1408 1.1 skrll NAME is the name of the symbol. 1409 1.1 skrll FLAGS is the BSF_* bits associated with the symbol. 1410 1.1 skrll SECTION is the section in which the symbol is defined; this may be 1411 1.1 skrll bfd_und_section_ptr or bfd_com_section_ptr. 1412 1.1 skrll VALUE is the value of the symbol, relative to the section. 1413 1.1 skrll STRING is used for either an indirect symbol, in which case it is 1414 1.1 skrll the name of the symbol to indirect to, or a warning symbol, in 1415 1.1 skrll which case it is the warning string. 1416 1.1 skrll COPY is TRUE if NAME or STRING must be copied into locally 1417 1.1 skrll allocated memory if they need to be saved. 1418 1.1 skrll COLLECT is TRUE if we should automatically collect gcc constructor 1419 1.10 christos or destructor names as collect2 does. 1420 1.1 skrll HASHP, if not NULL, is a place to store the created hash table 1421 1.1 skrll entry; if *HASHP is not NULL, the caller has already looked up 1422 1.1 skrll the hash table entry, and stored it in *HASHP. */ 1423 1.1 skrll 1424 1.1 skrll bool 1425 1.1 skrll _bfd_generic_link_add_one_symbol (struct bfd_link_info *info, 1426 1.1 skrll bfd *abfd, 1427 1.10 christos const char *name, 1428 1.10 christos flagword flags, 1429 1.1 skrll asection *section, 1430 1.1 skrll bfd_vma value, 1431 1.1 skrll const char *string, 1432 1.1 skrll bool copy, 1433 1.5 christos bool collect, 1434 1.10 christos struct bfd_link_hash_entry **hashp) 1435 1.1 skrll { 1436 1.4 christos enum link_row row; 1437 1.4 christos struct bfd_link_hash_entry *h; 1438 1.1 skrll struct bfd_link_hash_entry *inh = NULL; 1439 1.1 skrll bool cycle; 1440 1.5 christos 1441 1.5 christos BFD_ASSERT (section != NULL); 1442 1.5 christos 1443 1.5 christos if (bfd_is_ind_section (section) 1444 1.5 christos || (flags & BSF_INDIRECT) != 0) 1445 1.10 christos { 1446 1.10 christos row = INDR_ROW; 1447 1.5 christos /* Create the indirect symbol here. This is for the benefit of 1448 1.10 christos the plugin "notice" function. 1449 1.5 christos STRING is the name of the symbol we want to indirect to. */ 1450 1.1 skrll inh = bfd_wrapped_link_hash_lookup (abfd, info, string, true, 1451 1.1 skrll copy, false); 1452 1.1 skrll if (inh == NULL) 1453 1.1 skrll return false; 1454 1.1 skrll } 1455 1.1 skrll else if ((flags & BSF_WARNING) != 0) 1456 1.1 skrll row = WARN_ROW; 1457 1.1 skrll else if ((flags & BSF_CONSTRUCTOR) != 0) 1458 1.1 skrll row = SET_ROW; 1459 1.1 skrll else if (bfd_is_und_section (section)) 1460 1.1 skrll { 1461 1.1 skrll if ((flags & BSF_WEAK) != 0) 1462 1.1 skrll row = UNDEFW_ROW; 1463 1.1 skrll else 1464 1.5 christos row = UNDEF_ROW; 1465 1.5 christos } 1466 1.6 christos else if ((flags & BSF_WEAK) != 0) 1467 1.10 christos row = DEFW_ROW; 1468 1.7 christos else if (bfd_is_com_section (section)) 1469 1.7 christos { 1470 1.7 christos row = COMMON_ROW; 1471 1.7 christos if (!bfd_link_relocatable (info) 1472 1.8 christos && name != NULL 1473 1.5 christos && name[0] == '_' 1474 1.1 skrll && name[1] == '_' 1475 1.1 skrll && strcmp (name + (name[2] == '_'), "__gnu_lto_slim") == 0) 1476 1.1 skrll _bfd_error_handler 1477 1.1 skrll (_("%pB: plugin needed to handle lto object"), abfd); 1478 1.1 skrll } 1479 1.1 skrll else 1480 1.1 skrll row = DEF_ROW; 1481 1.1 skrll 1482 1.10 christos if (hashp != NULL && *hashp != NULL) 1483 1.1 skrll h = *hashp; 1484 1.10 christos else 1485 1.1 skrll { 1486 1.1 skrll if (row == UNDEF_ROW || row == UNDEFW_ROW) 1487 1.1 skrll h = bfd_wrapped_link_hash_lookup (abfd, info, name, true, copy, false); 1488 1.1 skrll else 1489 1.10 christos h = bfd_link_hash_lookup (info->hash, name, true, copy, false); 1490 1.1 skrll if (h == NULL) 1491 1.1 skrll { 1492 1.1 skrll if (hashp != NULL) 1493 1.1 skrll *hashp = NULL; 1494 1.1 skrll return false; 1495 1.10 christos } 1496 1.1 skrll } 1497 1.5 christos 1498 1.5 christos if (info->notice_all 1499 1.10 christos || (info->notice_hash != NULL 1500 1.1 skrll && bfd_hash_lookup (info->notice_hash, name, false, false) != NULL)) 1501 1.1 skrll { 1502 1.1 skrll if (! (*info->callbacks->notice) (info, h, inh, 1503 1.1 skrll abfd, section, value, flags)) 1504 1.1 skrll return false; 1505 1.1 skrll } 1506 1.1 skrll 1507 1.1 skrll if (hashp != NULL) 1508 1.7 christos *hashp = h; 1509 1.1 skrll 1510 1.7 christos do 1511 1.7 christos { 1512 1.7 christos enum link_action action; 1513 1.7 christos int prev; 1514 1.10 christos 1515 1.7 christos prev = h->type; 1516 1.1 skrll /* Treat symbols defined by early linker script pass as undefined. */ 1517 1.1 skrll if (h->ldscript_def) 1518 1.1 skrll prev = bfd_link_hash_undefined; 1519 1.1 skrll cycle = false; 1520 1.1 skrll action = link_action[(int) row][prev]; 1521 1.1 skrll switch (action) 1522 1.1 skrll { 1523 1.1 skrll case FAIL: 1524 1.1 skrll abort (); 1525 1.1 skrll 1526 1.1 skrll case NOACT: 1527 1.1 skrll /* Do nothing. */ 1528 1.1 skrll break; 1529 1.1 skrll 1530 1.1 skrll case UND: 1531 1.1 skrll /* Make a new undefined symbol. */ 1532 1.1 skrll h->type = bfd_link_hash_undefined; 1533 1.1 skrll h->u.undef.abfd = abfd; 1534 1.1 skrll bfd_link_add_undef (info->hash, h); 1535 1.1 skrll break; 1536 1.1 skrll 1537 1.1 skrll case WEAK: 1538 1.1 skrll /* Make a new weak undefined symbol. */ 1539 1.1 skrll h->type = bfd_link_hash_undefweak; 1540 1.1 skrll h->u.undef.abfd = abfd; 1541 1.1 skrll break; 1542 1.6 christos 1543 1.6 christos case CDEF: 1544 1.1 skrll /* We have found a definition for a symbol which was 1545 1.1 skrll previously common. */ 1546 1.1 skrll BFD_ASSERT (h->type == bfd_link_hash_common); 1547 1.1 skrll (*info->callbacks->multiple_common) (info, h, abfd, 1548 1.1 skrll bfd_link_hash_defined, 0); 1549 1.1 skrll /* Fall through. */ 1550 1.1 skrll case DEF: 1551 1.1 skrll case DEFW: 1552 1.1 skrll { 1553 1.1 skrll enum bfd_link_hash_type oldtype; 1554 1.1 skrll 1555 1.1 skrll /* Define a symbol. */ 1556 1.1 skrll oldtype = h->type; 1557 1.1 skrll if (action == DEFW) 1558 1.5 christos h->type = bfd_link_hash_defweak; 1559 1.7 christos else 1560 1.1 skrll h->type = bfd_link_hash_defined; 1561 1.1 skrll h->u.def.section = section; 1562 1.1 skrll h->u.def.value = value; 1563 1.1 skrll h->linker_def = 0; 1564 1.1 skrll h->ldscript_def = 0; 1565 1.1 skrll 1566 1.1 skrll /* If we have been asked to, we act like collect2 and 1567 1.1 skrll identify all functions that might be global 1568 1.1 skrll constructors and destructors and pass them up in a 1569 1.1 skrll callback. We only do this for certain object file 1570 1.1 skrll types, since many object file types can handle this 1571 1.1 skrll automatically. */ 1572 1.1 skrll if (collect && name[0] == '_') 1573 1.1 skrll { 1574 1.1 skrll const char *s; 1575 1.1 skrll 1576 1.1 skrll /* A constructor or destructor name starts like this: 1577 1.1 skrll _+GLOBAL_[_.$][ID][_.$] where the first [_.$] and 1578 1.1 skrll the second are the same character (we accept any 1579 1.1 skrll character there, in case a new object file format 1580 1.1 skrll comes along with even worse naming restrictions). */ 1581 1.1 skrll 1582 1.1 skrll #define CONS_PREFIX "GLOBAL_" 1583 1.10 christos #define CONS_PREFIX_LEN (sizeof CONS_PREFIX - 1) 1584 1.1 skrll 1585 1.1 skrll s = name + 1; 1586 1.1 skrll while (*s == '_') 1587 1.1 skrll ++s; 1588 1.1 skrll if (s[0] == 'G' && startswith (s, CONS_PREFIX)) 1589 1.1 skrll { 1590 1.1 skrll char c; 1591 1.1 skrll 1592 1.7 christos c = s[CONS_PREFIX_LEN + 1]; 1593 1.7 christos if ((c == 'I' || c == 'D') 1594 1.7 christos && s[CONS_PREFIX_LEN] == s[CONS_PREFIX_LEN + 2]) 1595 1.7 christos { 1596 1.7 christos /* If this is a definition of a symbol which 1597 1.7 christos was previously weakly defined, we are in 1598 1.1 skrll trouble. We have already added a 1599 1.1 skrll constructor entry for the weak defined 1600 1.1 skrll symbol, and now we are trying to add one 1601 1.6 christos for the new symbol. Fortunately, this case 1602 1.6 christos should never arise in practice. */ 1603 1.6 christos if (oldtype == bfd_link_hash_defweak) 1604 1.1 skrll abort (); 1605 1.1 skrll 1606 1.1 skrll (*info->callbacks->constructor) (info, c == 'I', 1607 1.1 skrll h->root.string, abfd, 1608 1.1 skrll section, value); 1609 1.1 skrll } 1610 1.1 skrll } 1611 1.1 skrll } 1612 1.1 skrll } 1613 1.1 skrll 1614 1.1 skrll break; 1615 1.1 skrll 1616 1.3 christos case COM: 1617 1.1 skrll /* We have found a common definition for a symbol. */ 1618 1.1 skrll if (h->type == bfd_link_hash_new) 1619 1.1 skrll bfd_link_add_undef (info->hash, h); 1620 1.10 christos h->type = bfd_link_hash_common; 1621 1.1 skrll h->u.c.p = (struct bfd_link_hash_common_entry *) 1622 1.1 skrll bfd_hash_allocate (&info->hash->table, 1623 1.1 skrll sizeof (struct bfd_link_hash_common_entry)); 1624 1.1 skrll if (h->u.c.p == NULL) 1625 1.7 christos return false; 1626 1.1 skrll 1627 1.1 skrll h->u.c.size = value; 1628 1.1 skrll 1629 1.1 skrll /* Select a default alignment based on the size. This may 1630 1.1 skrll be overridden by the caller. */ 1631 1.1 skrll { 1632 1.1 skrll unsigned int power; 1633 1.1 skrll 1634 1.1 skrll power = bfd_log2 (value); 1635 1.1 skrll if (power > 4) 1636 1.7 christos power = 4; 1637 1.7 christos h->u.c.p->alignment_power = power; 1638 1.7 christos } 1639 1.7 christos 1640 1.7 christos /* The section of a common symbol is only used if the common 1641 1.7 christos symbol is actually allocated. It basically provides a 1642 1.7 christos hook for the linker script to decide which output section 1643 1.7 christos the common symbols should be put in. In most cases, the 1644 1.7 christos section of a common symbol will be bfd_com_section_ptr, 1645 1.1 skrll the code here will choose a common symbol section named 1646 1.1 skrll "COMMON", and the linker script will contain *(COMMON) in 1647 1.1 skrll the appropriate place. A few targets use separate common 1648 1.3 christos sections for small symbols, and they require special 1649 1.1 skrll handling. */ 1650 1.1 skrll if (section == bfd_com_section_ptr) 1651 1.1 skrll { 1652 1.1 skrll h->u.c.p->section = bfd_make_section_old_way (abfd, "COMMON"); 1653 1.1 skrll h->u.c.p->section->flags |= SEC_ALLOC; 1654 1.3 christos } 1655 1.1 skrll else if (section->owner != abfd) 1656 1.1 skrll { 1657 1.1 skrll h->u.c.p->section = bfd_make_section_old_way (abfd, 1658 1.5 christos section->name); 1659 1.7 christos h->u.c.p->section->flags |= SEC_ALLOC; 1660 1.1 skrll } 1661 1.1 skrll else 1662 1.1 skrll h->u.c.p->section = section; 1663 1.1 skrll h->linker_def = 0; 1664 1.1 skrll h->ldscript_def = 0; 1665 1.1 skrll break; 1666 1.1 skrll 1667 1.1 skrll case REF: 1668 1.1 skrll /* A reference to a defined symbol. */ 1669 1.1 skrll if (h->u.undef.next == NULL && info->hash->undefs_tail != h) 1670 1.1 skrll h->u.undef.next = h; 1671 1.1 skrll break; 1672 1.1 skrll 1673 1.6 christos case BIG: 1674 1.6 christos /* We have found a common definition for a symbol which 1675 1.1 skrll already had a common definition. Use the maximum of the 1676 1.1 skrll two sizes, and use the section required by the larger symbol. */ 1677 1.1 skrll BFD_ASSERT (h->type == bfd_link_hash_common); 1678 1.1 skrll (*info->callbacks->multiple_common) (info, h, abfd, 1679 1.1 skrll bfd_link_hash_common, value); 1680 1.1 skrll if (value > h->u.c.size) 1681 1.1 skrll { 1682 1.1 skrll unsigned int power; 1683 1.1 skrll 1684 1.1 skrll h->u.c.size = value; 1685 1.1 skrll 1686 1.1 skrll /* Select a default alignment based on the size. This may 1687 1.1 skrll be overridden by the caller. */ 1688 1.1 skrll power = bfd_log2 (value); 1689 1.1 skrll if (power > 4) 1690 1.1 skrll power = 4; 1691 1.1 skrll h->u.c.p->alignment_power = power; 1692 1.1 skrll 1693 1.1 skrll /* Some systems have special treatment for small commons, 1694 1.1 skrll hence we want to select the section used by the larger 1695 1.1 skrll symbol. This makes sure the symbol does not go in a 1696 1.3 christos small common section if it is now too large. */ 1697 1.1 skrll if (section == bfd_com_section_ptr) 1698 1.1 skrll { 1699 1.1 skrll h->u.c.p->section 1700 1.1 skrll = bfd_make_section_old_way (abfd, "COMMON"); 1701 1.1 skrll h->u.c.p->section->flags |= SEC_ALLOC; 1702 1.3 christos } 1703 1.1 skrll else if (section->owner != abfd) 1704 1.1 skrll { 1705 1.1 skrll h->u.c.p->section 1706 1.1 skrll = bfd_make_section_old_way (abfd, section->name); 1707 1.1 skrll h->u.c.p->section->flags |= SEC_ALLOC; 1708 1.1 skrll } 1709 1.1 skrll else 1710 1.3 christos h->u.c.p->section = section; 1711 1.3 christos } 1712 1.6 christos break; 1713 1.6 christos 1714 1.1 skrll case CREF: 1715 1.1 skrll /* We have found a common definition for a symbol which 1716 1.1 skrll was already defined. */ 1717 1.1 skrll (*info->callbacks->multiple_common) (info, h, abfd, 1718 1.1 skrll bfd_link_hash_common, value); 1719 1.12 christos break; 1720 1.12 christos 1721 1.10 christos case MIND: 1722 1.10 christos /* Multiple indirect symbols. This is OK if they both point 1723 1.10 christos to the same symbol. */ 1724 1.10 christos if (h->u.i.link == inh) 1725 1.10 christos break; 1726 1.10 christos if (h->u.i.link->type == bfd_link_hash_defweak) 1727 1.10 christos { 1728 1.10 christos /* It is also OK to redefine a symbol that indirects to 1729 1.10 christos a weak definition. So for sym@ver -> sym@@ver where 1730 1.10 christos sym@@ver is weak and we have a new strong sym@ver, 1731 1.10 christos redefine sym@@ver. Of course if there exists 1732 1.1 skrll sym -> sym@@ver then this also redefines sym. */ 1733 1.1 skrll h = h->u.i.link; 1734 1.1 skrll cycle = true; 1735 1.6 christos break; 1736 1.6 christos } 1737 1.1 skrll /* Fall through. */ 1738 1.1 skrll case MDEF: 1739 1.1 skrll /* Handle a multiple definition. */ 1740 1.1 skrll (*info->callbacks->multiple_definition) (info, h, 1741 1.1 skrll abfd, section, value); 1742 1.6 christos break; 1743 1.6 christos 1744 1.1 skrll case CIND: 1745 1.1 skrll /* Create an indirect symbol from an existing common symbol. */ 1746 1.5 christos BFD_ASSERT (h->type == bfd_link_hash_common); 1747 1.5 christos (*info->callbacks->multiple_common) (info, h, abfd, 1748 1.5 christos bfd_link_hash_indirect, 0); 1749 1.7 christos /* Fall through. */ 1750 1.7 christos case IND: 1751 1.8 christos if (inh->type == bfd_link_hash_indirect 1752 1.5 christos && inh->u.i.link == h) 1753 1.5 christos { 1754 1.10 christos _bfd_error_handler 1755 1.5 christos /* xgettext:c-format */ 1756 1.5 christos (_("%pB: indirect symbol `%s' to `%s' is a loop"), 1757 1.5 christos abfd, name, string); 1758 1.5 christos bfd_set_error (bfd_error_invalid_operation); 1759 1.5 christos return false; 1760 1.5 christos } 1761 1.5 christos if (inh->type == bfd_link_hash_new) 1762 1.5 christos { 1763 1.5 christos inh->type = bfd_link_hash_undefined; 1764 1.5 christos inh->u.undef.abfd = abfd; 1765 1.5 christos bfd_link_add_undef (info->hash, inh); 1766 1.5 christos } 1767 1.5 christos 1768 1.5 christos /* If the indirect symbol has been referenced, we need to 1769 1.5 christos push the reference down to the symbol we are referencing. */ 1770 1.10 christos if (h->type != bfd_link_hash_new) 1771 1.5 christos { 1772 1.5 christos /* ??? If inh->type == bfd_link_hash_undefweak this 1773 1.5 christos converts inh to bfd_link_hash_undefined. */ 1774 1.5 christos row = UNDEF_ROW; 1775 1.5 christos cycle = true; 1776 1.5 christos } 1777 1.5 christos 1778 1.5 christos h->type = bfd_link_hash_indirect; 1779 1.5 christos h->u.i.link = inh; 1780 1.5 christos /* Not setting h = h->u.i.link here means that when cycle is 1781 1.1 skrll set above we'll always go to REFC, and then cycle again 1782 1.1 skrll to the indirected symbol. This means that any successful 1783 1.1 skrll change of an existing symbol to indirect counts as a 1784 1.1 skrll reference. ??? That may not be correct when the existing 1785 1.6 christos symbol was defweak. */ 1786 1.6 christos break; 1787 1.1 skrll 1788 1.1 skrll case SET: 1789 1.1 skrll /* Add an entry to a set. */ 1790 1.5 christos (*info->callbacks->add_to_set) (info, h, BFD_RELOC_CTOR, 1791 1.5 christos abfd, section, value); 1792 1.5 christos break; 1793 1.5 christos 1794 1.1 skrll case WARNC: 1795 1.6 christos /* Issue a warning and cycle, except when the reference is 1796 1.6 christos in LTO IR. */ 1797 1.1 skrll if (h->u.i.warning != NULL 1798 1.1 skrll && (abfd->flags & BFD_PLUGIN) == 0) 1799 1.1 skrll { 1800 1.1 skrll (*info->callbacks->warning) (info, h->u.i.warning, 1801 1.1 skrll h->root.string, abfd, NULL, 0); 1802 1.1 skrll /* Only issue a warning once. */ 1803 1.1 skrll h->u.i.warning = NULL; 1804 1.10 christos } 1805 1.1 skrll /* Fall through. */ 1806 1.1 skrll case CYCLE: 1807 1.1 skrll /* Try again with the referenced symbol. */ 1808 1.1 skrll h = h->u.i.link; 1809 1.1 skrll cycle = true; 1810 1.1 skrll break; 1811 1.1 skrll 1812 1.10 christos case REFC: 1813 1.1 skrll /* A reference to an indirect symbol. */ 1814 1.1 skrll if (h->u.undef.next == NULL && info->hash->undefs_tail != h) 1815 1.1 skrll h->u.undef.next = h; 1816 1.5 christos h = h->u.i.link; 1817 1.5 christos cycle = true; 1818 1.5 christos break; 1819 1.5 christos 1820 1.7 christos case WARN: 1821 1.7 christos /* Warn if this symbol has been referenced already from non-IR, 1822 1.1 skrll otherwise add a warning. */ 1823 1.6 christos if ((!info->lto_plugin_active 1824 1.6 christos && (h->u.undef.next != NULL || info->hash->undefs_tail == h)) 1825 1.11 christos || h->non_ir_ref_regular 1826 1.11 christos || h->non_ir_ref_dynamic) 1827 1.11 christos { 1828 1.11 christos (*info->callbacks->warning) (info, string, h->root.string, 1829 1.11 christos hash_entry_bfd (h), NULL, 0); 1830 1.11 christos /* PR 31067: If garbage collection is enabled then the 1831 1.11 christos referenced symbol may actually be discarded later on. 1832 1.11 christos This could be very confusing to the user. So give them 1833 1.1 skrll a hint as to what might be happening. */ 1834 1.1 skrll if (info->gc_sections) 1835 1.1 skrll (*info->callbacks->info) 1836 1.1 skrll (_("%P: %pB: note: the message above does not take linker garbage collection into account\n"), 1837 1.1 skrll hash_entry_bfd (h)); 1838 1.1 skrll break; 1839 1.1 skrll } 1840 1.1 skrll /* Fall through. */ 1841 1.1 skrll case MWARN: 1842 1.1 skrll /* Make a warning symbol. */ 1843 1.1 skrll { 1844 1.1 skrll struct bfd_link_hash_entry *sub; 1845 1.1 skrll 1846 1.10 christos /* STRING is the warning to give. */ 1847 1.1 skrll sub = ((struct bfd_link_hash_entry *) 1848 1.1 skrll ((*info->hash->table.newfunc) 1849 1.1 skrll (NULL, &info->hash->table, h->root.string))); 1850 1.1 skrll if (sub == NULL) 1851 1.1 skrll return false; 1852 1.1 skrll *sub = *h; 1853 1.1 skrll sub->type = bfd_link_hash_warning; 1854 1.1 skrll sub->u.i.link = h; 1855 1.1 skrll if (! copy) 1856 1.1 skrll sub->u.i.warning = string; 1857 1.3 christos else 1858 1.1 skrll { 1859 1.10 christos char *w; 1860 1.1 skrll size_t len = strlen (string) + 1; 1861 1.1 skrll 1862 1.1 skrll w = (char *) bfd_hash_allocate (&info->hash->table, len); 1863 1.1 skrll if (w == NULL) 1864 1.1 skrll return false; 1865 1.1 skrll memcpy (w, string, len); 1866 1.1 skrll sub->u.i.warning = w; 1867 1.1 skrll } 1868 1.1 skrll 1869 1.1 skrll bfd_hash_replace (&info->hash->table, 1870 1.1 skrll (struct bfd_hash_entry *) h, 1871 1.1 skrll (struct bfd_hash_entry *) sub); 1872 1.1 skrll if (hashp != NULL) 1873 1.1 skrll *hashp = sub; 1874 1.1 skrll } 1875 1.10 christos break; 1876 1.1 skrll } 1877 1.12 christos } 1878 1.12 christos while (cycle); 1879 1.12 christos 1880 1.12 christos return true; 1881 1.12 christos } 1882 1.12 christos 1883 1.12 christos /* 1884 1.12 christos FUNCTION 1885 1.12 christos bfd_link_align_section 1886 1.12 christos 1887 1.12 christos SYNOPSIS 1888 1.12 christos bool bfd_link_align_section (asection *, unsigned int); 1889 1.12 christos 1890 1.12 christos DESCRIPTION 1891 1.12 christos Increase section alignment if the current section alignment is 1892 1.12 christos less than the requested value. Adjust output section 1893 1.12 christos alignment too, so that linker layout adjusts for alignment on 1894 1.12 christos the current lang_size_sections pass. This is important for 1895 1.12 christos lang_size_relro_segment. If the output section alignment 1896 1.12 christos isn't adjusted, the linker will place the output section at an 1897 1.12 christos address depending on its current alignment. When sizing the 1898 1.12 christos output section, input sections attached transfer any increase 1899 1.12 christos in alignment to the output section, which will affect layout 1900 1.12 christos for the next sizing pass. Which is all well and good except 1901 1.12 christos that lang_size_relro_segment for the current sizing pass uses 1902 1.12 christos that possibly increased alignment with a layout that doesn't 1903 1.12 christos suit. 1904 1.12 christos */ 1905 1.12 christos 1906 1.12 christos bool 1907 1.12 christos bfd_link_align_section (asection *sec, unsigned int align_p2) 1908 1.12 christos { 1909 1.12 christos if (align_p2 > bfd_section_alignment (sec)) 1910 1.12 christos { 1911 1.12 christos if (!bfd_set_section_alignment (sec, align_p2)) 1912 1.12 christos return false; 1913 1.12 christos asection *osec = sec->output_section; 1914 1.12 christos if (osec && align_p2 > bfd_section_alignment (osec)) 1915 1.12 christos { 1916 1.12 christos if (!bfd_set_section_alignment (osec, align_p2)) 1917 1.12 christos return false; 1918 1.1 skrll } 1919 1.1 skrll } 1920 1.10 christos return true; 1921 1.1 skrll } 1922 1.1 skrll 1923 1.1 skrll /* Generic final link routine. */ 1924 1.1 skrll 1925 1.1 skrll bool 1926 1.1 skrll _bfd_generic_final_link (bfd *abfd, struct bfd_link_info *info) 1927 1.1 skrll { 1928 1.1 skrll bfd *sub; 1929 1.9 christos asection *o; 1930 1.9 christos struct bfd_link_order *p; 1931 1.1 skrll size_t outsymalloc; 1932 1.1 skrll struct generic_write_global_symbol_info wginfo; 1933 1.1 skrll 1934 1.1 skrll abfd->outsymbols = NULL; 1935 1.1 skrll abfd->symcount = 0; 1936 1.1 skrll outsymalloc = 0; 1937 1.10 christos 1938 1.1 skrll /* Mark all sections which will be included in the output file. */ 1939 1.1 skrll for (o = abfd->sections; o != NULL; o = o->next) 1940 1.5 christos for (p = o->map_head.link_order; p != NULL; p = p->next) 1941 1.1 skrll if (p->type == bfd_indirect_link_order) 1942 1.10 christos p->u.indirect.section->linker_mark = true; 1943 1.1 skrll 1944 1.1 skrll /* Build the output symbol table. */ 1945 1.1 skrll for (sub = info->input_bfds; sub != NULL; sub = sub->link.next) 1946 1.1 skrll if (! _bfd_generic_link_output_symbols (abfd, sub, info, &outsymalloc)) 1947 1.1 skrll return false; 1948 1.12 christos 1949 1.1 skrll /* Accumulate the global symbols. */ 1950 1.1 skrll wginfo.info = info; 1951 1.1 skrll wginfo.output_bfd = abfd; 1952 1.12 christos wginfo.psymalloc = &outsymalloc; 1953 1.12 christos wginfo.failed = false; 1954 1.1 skrll _bfd_generic_link_hash_traverse (_bfd_generic_hash_table (info), 1955 1.1 skrll _bfd_generic_link_write_global_symbol, 1956 1.1 skrll &wginfo); 1957 1.1 skrll if (wginfo.failed) 1958 1.1 skrll return false; 1959 1.10 christos 1960 1.1 skrll /* Make sure we have a trailing NULL pointer on OUTSYMBOLS. We 1961 1.5 christos shouldn't really need one, since we have SYMCOUNT, but some old 1962 1.1 skrll code still expects one. */ 1963 1.1 skrll if (! generic_add_output_symbol (abfd, &outsymalloc, NULL)) 1964 1.1 skrll return false; 1965 1.1 skrll 1966 1.1 skrll if (bfd_link_relocatable (info)) 1967 1.1 skrll { 1968 1.1 skrll /* Allocate space for the output relocs for each section. */ 1969 1.1 skrll for (o = abfd->sections; o != NULL; o = o->next) 1970 1.1 skrll { 1971 1.1 skrll o->reloc_count = 0; 1972 1.1 skrll for (p = o->map_head.link_order; p != NULL; p = p->next) 1973 1.1 skrll { 1974 1.1 skrll if (p->type == bfd_section_reloc_link_order 1975 1.1 skrll || p->type == bfd_symbol_reloc_link_order) 1976 1.1 skrll ++o->reloc_count; 1977 1.1 skrll else if (p->type == bfd_indirect_link_order) 1978 1.1 skrll { 1979 1.1 skrll asection *input_section; 1980 1.1 skrll bfd *input_bfd; 1981 1.1 skrll long relsize; 1982 1.1 skrll arelent **relocs; 1983 1.1 skrll asymbol **symbols; 1984 1.1 skrll long reloc_count; 1985 1.1 skrll 1986 1.10 christos input_section = p->u.indirect.section; 1987 1.3 christos input_bfd = input_section->owner; 1988 1.1 skrll relsize = bfd_get_reloc_upper_bound (input_bfd, 1989 1.10 christos input_section); 1990 1.1 skrll if (relsize < 0) 1991 1.1 skrll return false; 1992 1.1 skrll relocs = (arelent **) bfd_malloc (relsize); 1993 1.1 skrll if (!relocs && relsize != 0) 1994 1.1 skrll return false; 1995 1.1 skrll symbols = _bfd_generic_link_get_symbols (input_bfd); 1996 1.1 skrll reloc_count = bfd_canonicalize_reloc (input_bfd, 1997 1.10 christos input_section, 1998 1.1 skrll relocs, 1999 1.1 skrll symbols); 2000 1.1 skrll free (relocs); 2001 1.1 skrll if (reloc_count < 0) 2002 1.1 skrll return false; 2003 1.1 skrll BFD_ASSERT ((unsigned long) reloc_count 2004 1.1 skrll == input_section->reloc_count); 2005 1.1 skrll o->reloc_count += reloc_count; 2006 1.1 skrll } 2007 1.1 skrll } 2008 1.1 skrll if (o->reloc_count > 0) 2009 1.3 christos { 2010 1.1 skrll bfd_size_type amt; 2011 1.10 christos 2012 1.1 skrll amt = o->reloc_count; 2013 1.1 skrll amt *= sizeof (arelent *); 2014 1.1 skrll o->orelocation = (struct reloc_cache_entry **) bfd_alloc (abfd, amt); 2015 1.1 skrll if (!o->orelocation) 2016 1.1 skrll return false; 2017 1.1 skrll o->flags |= SEC_RELOC; 2018 1.1 skrll /* Reset the count so that it can be used as an index 2019 1.1 skrll when putting in the output relocs. */ 2020 1.1 skrll o->reloc_count = 0; 2021 1.1 skrll } 2022 1.1 skrll } 2023 1.1 skrll } 2024 1.1 skrll 2025 1.1 skrll /* Handle all the link order information for the sections. */ 2026 1.1 skrll for (o = abfd->sections; o != NULL; o = o->next) 2027 1.1 skrll { 2028 1.1 skrll for (p = o->map_head.link_order; p != NULL; p = p->next) 2029 1.1 skrll { 2030 1.10 christos switch (p->type) 2031 1.1 skrll { 2032 1.1 skrll case bfd_section_reloc_link_order: 2033 1.10 christos case bfd_symbol_reloc_link_order: 2034 1.10 christos if (! _bfd_generic_reloc_link_order (abfd, info, o, p)) 2035 1.1 skrll return false; 2036 1.1 skrll break; 2037 1.1 skrll case bfd_indirect_link_order: 2038 1.10 christos if (! default_indirect_link_order (abfd, info, o, p, true)) 2039 1.1 skrll return false; 2040 1.1 skrll break; 2041 1.1 skrll default: 2042 1.1 skrll if (! _bfd_default_link_order (abfd, info, o, p)) 2043 1.1 skrll return false; 2044 1.10 christos break; 2045 1.1 skrll } 2046 1.1 skrll } 2047 1.1 skrll } 2048 1.1 skrll 2049 1.10 christos return true; 2050 1.1 skrll } 2051 1.1 skrll 2052 1.12 christos /* Add an output symbol to the output BFD. */ 2053 1.12 christos 2054 1.12 christos static bool 2055 1.1 skrll generic_add_output_symbol (bfd *output_bfd, size_t *psymalloc, asymbol *sym) 2056 1.1 skrll { 2057 1.1 skrll if (!(bfd_applicable_file_flags (output_bfd) & HAS_SYMS)) 2058 1.1 skrll return true; 2059 1.1 skrll 2060 1.1 skrll if (bfd_get_symcount (output_bfd) >= *psymalloc) 2061 1.1 skrll { 2062 1.1 skrll asymbol **newsyms; 2063 1.1 skrll bfd_size_type amt; 2064 1.1 skrll 2065 1.1 skrll if (*psymalloc == 0) 2066 1.3 christos *psymalloc = 124; 2067 1.1 skrll else 2068 1.10 christos *psymalloc *= 2; 2069 1.9 christos amt = *psymalloc; 2070 1.1 skrll amt *= sizeof (asymbol *); 2071 1.1 skrll newsyms = (asymbol **) bfd_realloc (bfd_get_outsymbols (output_bfd), amt); 2072 1.9 christos if (newsyms == NULL) 2073 1.1 skrll return false; 2074 1.9 christos output_bfd->outsymbols = newsyms; 2075 1.1 skrll } 2076 1.10 christos 2077 1.1 skrll output_bfd->outsymbols[output_bfd->symcount] = sym; 2078 1.1 skrll if (sym != NULL) 2079 1.1 skrll ++output_bfd->symcount; 2080 1.1 skrll 2081 1.12 christos return true; 2082 1.1 skrll } 2083 1.1 skrll 2084 1.1 skrll /* Handle the symbols for an input BFD. */ 2085 1.1 skrll 2086 1.1 skrll static bool 2087 1.1 skrll _bfd_generic_link_output_symbols (bfd *output_bfd, 2088 1.1 skrll bfd *input_bfd, 2089 1.1 skrll struct bfd_link_info *info, 2090 1.1 skrll size_t *psymalloc) 2091 1.10 christos { 2092 1.1 skrll asymbol **sym_ptr; 2093 1.1 skrll asymbol **sym_end; 2094 1.1 skrll 2095 1.1 skrll if (!bfd_generic_link_read_symbols (input_bfd)) 2096 1.1 skrll return false; 2097 1.1 skrll 2098 1.1 skrll /* Create a filename symbol if we are supposed to. */ 2099 1.1 skrll if (info->create_object_symbols_section != NULL) 2100 1.1 skrll { 2101 1.1 skrll asection *sec; 2102 1.1 skrll 2103 1.1 skrll for (sec = input_bfd->sections; sec != NULL; sec = sec->next) 2104 1.1 skrll { 2105 1.1 skrll if (sec->output_section == info->create_object_symbols_section) 2106 1.10 christos { 2107 1.10 christos asymbol *newsym; 2108 1.1 skrll 2109 1.1 skrll newsym = bfd_make_empty_symbol (input_bfd); 2110 1.1 skrll if (!newsym) 2111 1.1 skrll return false; 2112 1.1 skrll newsym->name = bfd_get_filename (input_bfd); 2113 1.1 skrll newsym->value = 0; 2114 1.10 christos newsym->flags = BSF_LOCAL | BSF_FILE; 2115 1.1 skrll newsym->section = sec; 2116 1.1 skrll 2117 1.1 skrll if (! generic_add_output_symbol (output_bfd, psymalloc, 2118 1.1 skrll newsym)) 2119 1.1 skrll return false; 2120 1.1 skrll 2121 1.1 skrll break; 2122 1.1 skrll } 2123 1.1 skrll } 2124 1.1 skrll } 2125 1.1 skrll 2126 1.1 skrll /* Adjust the values of the globally visible symbols, and write out 2127 1.1 skrll local symbols. */ 2128 1.1 skrll sym_ptr = _bfd_generic_link_get_symbols (input_bfd); 2129 1.1 skrll sym_end = sym_ptr + _bfd_generic_link_get_symcount (input_bfd); 2130 1.1 skrll for (; sym_ptr < sym_end; sym_ptr++) 2131 1.1 skrll { 2132 1.1 skrll asymbol *sym; 2133 1.1 skrll struct generic_link_hash_entry *h; 2134 1.1 skrll 2135 1.1 skrll h = NULL; 2136 1.1 skrll sym = *sym_ptr; 2137 1.9 christos if ((sym->flags & (BSF_INDIRECT 2138 1.9 christos | BSF_WARNING 2139 1.9 christos | BSF_GLOBAL 2140 1.1 skrll | BSF_CONSTRUCTOR 2141 1.1 skrll | BSF_WEAK)) != 0 2142 1.3 christos || bfd_is_und_section (bfd_asymbol_section (sym)) 2143 1.1 skrll || bfd_is_com_section (bfd_asymbol_section (sym)) 2144 1.1 skrll || bfd_is_ind_section (bfd_asymbol_section (sym))) 2145 1.1 skrll { 2146 1.7 christos if (sym->udata.p != NULL) 2147 1.7 christos h = (struct generic_link_hash_entry *) sym->udata.p; 2148 1.7 christos else if ((sym->flags & BSF_CONSTRUCTOR) != 0) 2149 1.7 christos { 2150 1.7 christos /* This case normally means that the main linker code 2151 1.7 christos deliberately ignored this constructor symbol. We 2152 1.7 christos should just pass it through. This will screw up if 2153 1.1 skrll the constructor symbol is from a different, 2154 1.1 skrll non-generic, object file format, but the case will 2155 1.9 christos only arise when linking with -r, which will probably 2156 1.1 skrll fail anyhow, since there will be no way to represent 2157 1.1 skrll the relocs in the output format being used. */ 2158 1.1 skrll h = NULL; 2159 1.10 christos } 2160 1.1 skrll else if (bfd_is_und_section (bfd_asymbol_section (sym))) 2161 1.1 skrll h = ((struct generic_link_hash_entry *) 2162 1.1 skrll bfd_wrapped_link_hash_lookup (output_bfd, info, 2163 1.10 christos bfd_asymbol_name (sym), 2164 1.1 skrll false, false, true)); 2165 1.1 skrll else 2166 1.1 skrll h = _bfd_generic_link_hash_lookup (_bfd_generic_hash_table (info), 2167 1.1 skrll bfd_asymbol_name (sym), 2168 1.1 skrll false, false, true); 2169 1.1 skrll 2170 1.1 skrll if (h != NULL) 2171 1.1 skrll { 2172 1.1 skrll /* Force all references to this symbol to point to 2173 1.1 skrll the same area in memory. It is possible that 2174 1.1 skrll this routine will be called with a hash table 2175 1.1 skrll other than a generic hash table, so we double 2176 1.1 skrll check that. */ 2177 1.1 skrll if (info->output_bfd->xvec == input_bfd->xvec) 2178 1.1 skrll { 2179 1.1 skrll if (h->sym != NULL) 2180 1.1 skrll *sym_ptr = sym = h->sym; 2181 1.1 skrll } 2182 1.1 skrll 2183 1.1 skrll switch (h->root.type) 2184 1.1 skrll { 2185 1.1 skrll default: 2186 1.1 skrll case bfd_link_hash_new: 2187 1.1 skrll abort (); 2188 1.1 skrll case bfd_link_hash_undefined: 2189 1.1 skrll break; 2190 1.1 skrll case bfd_link_hash_undefweak: 2191 1.1 skrll sym->flags |= BSF_WEAK; 2192 1.1 skrll break; 2193 1.5 christos case bfd_link_hash_indirect: 2194 1.1 skrll h = (struct generic_link_hash_entry *) h->root.u.i.link; 2195 1.1 skrll /* fall through */ 2196 1.1 skrll case bfd_link_hash_defined: 2197 1.1 skrll sym->flags |= BSF_GLOBAL; 2198 1.1 skrll sym->flags &=~ (BSF_WEAK | BSF_CONSTRUCTOR); 2199 1.1 skrll sym->value = h->root.u.def.value; 2200 1.1 skrll sym->section = h->root.u.def.section; 2201 1.1 skrll break; 2202 1.1 skrll case bfd_link_hash_defweak: 2203 1.1 skrll sym->flags |= BSF_WEAK; 2204 1.1 skrll sym->flags &=~ BSF_CONSTRUCTOR; 2205 1.1 skrll sym->value = h->root.u.def.value; 2206 1.1 skrll sym->section = h->root.u.def.section; 2207 1.1 skrll break; 2208 1.1 skrll case bfd_link_hash_common: 2209 1.1 skrll sym->value = h->root.u.c.size; 2210 1.1 skrll sym->flags |= BSF_GLOBAL; 2211 1.1 skrll if (! bfd_is_com_section (sym->section)) 2212 1.1 skrll { 2213 1.1 skrll BFD_ASSERT (bfd_is_und_section (sym->section)); 2214 1.1 skrll sym->section = bfd_com_section_ptr; 2215 1.1 skrll } 2216 1.1 skrll /* We do not set the section of the symbol to 2217 1.1 skrll h->root.u.c.p->section. That value was saved so 2218 1.1 skrll that we would know where to allocate the symbol 2219 1.1 skrll if it was defined. In this case the type is 2220 1.1 skrll still bfd_link_hash_common, so we did not define 2221 1.1 skrll it, so we do not want to use that section. */ 2222 1.12 christos break; 2223 1.9 christos } 2224 1.9 christos } 2225 1.9 christos } 2226 1.9 christos 2227 1.10 christos bool output = false; 2228 1.12 christos if ((sym->flags & BSF_KEEP) == 0 2229 1.12 christos && (info->strip == strip_all 2230 1.12 christos || (info->strip == strip_some 2231 1.12 christos && bfd_hash_lookup (info->keep_hash, bfd_asymbol_name (sym), 2232 1.12 christos false, false) == NULL))) 2233 1.12 christos ; 2234 1.12 christos /* If this symbol is in a section which is not being included 2235 1.12 christos in the output file, then we don't want to output the 2236 1.7 christos symbol. */ 2237 1.1 skrll else if (!bfd_is_abs_section (sym->section) 2238 1.1 skrll && bfd_section_removed_from_list (output_bfd, 2239 1.1 skrll sym->section->output_section)) 2240 1.1 skrll ; 2241 1.1 skrll else if ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0) 2242 1.1 skrll { 2243 1.1 skrll /* If this symbol is marked as occurring now, rather 2244 1.10 christos than at the end, output it now. This is used for 2245 1.1 skrll COFF C_EXT FCN symbols. FIXME: There must be a 2246 1.9 christos better way. */ 2247 1.10 christos if (bfd_asymbol_bfd (sym) == input_bfd 2248 1.1 skrll && (sym->flags & BSF_NOT_AT_END) != 0) 2249 1.12 christos output = true; 2250 1.1 skrll } 2251 1.1 skrll else if ((sym->flags & BSF_KEEP) != 0) 2252 1.1 skrll output = true; 2253 1.10 christos else if (bfd_is_ind_section (sym->section)) 2254 1.1 skrll ; 2255 1.1 skrll else if ((sym->flags & BSF_DEBUGGING) != 0) 2256 1.1 skrll { 2257 1.12 christos if (info->strip == strip_none) 2258 1.1 skrll output = true; 2259 1.1 skrll } 2260 1.12 christos else if (bfd_is_und_section (sym->section) 2261 1.1 skrll || bfd_is_com_section (sym->section)) 2262 1.1 skrll ; 2263 1.1 skrll else if ((sym->flags & BSF_LOCAL) != 0) 2264 1.1 skrll { 2265 1.1 skrll if ((sym->flags & BSF_WARNING) == 0) 2266 1.1 skrll { 2267 1.1 skrll switch (info->discard) 2268 1.10 christos { 2269 1.5 christos default: 2270 1.1 skrll case discard_all: 2271 1.1 skrll break; 2272 1.1 skrll case discard_sec_merge: 2273 1.1 skrll output = true; 2274 1.12 christos if (bfd_link_relocatable (info) 2275 1.10 christos || ! (sym->section->flags & SEC_MERGE)) 2276 1.1 skrll break; 2277 1.1 skrll /* FALLTHROUGH */ 2278 1.10 christos case discard_l: 2279 1.1 skrll if (!bfd_is_local_label (input_bfd, sym)) 2280 1.1 skrll output = true; 2281 1.1 skrll break; 2282 1.1 skrll case discard_none: 2283 1.1 skrll output = true; 2284 1.1 skrll break; 2285 1.1 skrll } 2286 1.10 christos } 2287 1.1 skrll } 2288 1.12 christos else if ((sym->flags & BSF_CONSTRUCTOR)) 2289 1.4 christos { 2290 1.4 christos if (info->strip != strip_all) 2291 1.12 christos output = true; 2292 1.12 christos } 2293 1.12 christos else if (sym->flags == 0) 2294 1.1 skrll /* LTO doesn't set symbol information. We get here with the 2295 1.12 christos generic linker for a symbol that was "common" but no longer 2296 1.1 skrll needs to be global. We also get here on fuzzed ELF objects 2297 1.1 skrll with bogus symbol type and binding. */ 2298 1.1 skrll ; 2299 1.1 skrll else 2300 1.10 christos BFD_FAIL (); 2301 1.1 skrll 2302 1.10 christos if (output) 2303 1.1 skrll { 2304 1.1 skrll if (! generic_add_output_symbol (output_bfd, psymalloc, sym)) 2305 1.1 skrll return false; 2306 1.10 christos if (h != NULL) 2307 1.1 skrll h->written = true; 2308 1.1 skrll } 2309 1.1 skrll } 2310 1.1 skrll 2311 1.1 skrll return true; 2312 1.1 skrll } 2313 1.13 christos 2314 1.13 christos /* Set the section and value of a generic BFD symbol based on a linker 2315 1.13 christos hash table entry. */ 2316 1.1 skrll 2317 1.1 skrll static void 2318 1.1 skrll set_symbol_from_hash (bfd *output_bfd, 2319 1.1 skrll asymbol *sym, 2320 1.1 skrll struct bfd_link_hash_entry *h) 2321 1.1 skrll { 2322 1.1 skrll switch (h->type) 2323 1.1 skrll { 2324 1.7 christos default: 2325 1.1 skrll abort (); 2326 1.1 skrll break; 2327 1.1 skrll case bfd_link_hash_new: 2328 1.1 skrll /* This can happen when a constructor symbol is seen but we are 2329 1.1 skrll not building constructors. */ 2330 1.1 skrll if (sym->section != NULL) 2331 1.1 skrll { 2332 1.1 skrll BFD_ASSERT ((sym->flags & BSF_CONSTRUCTOR) != 0); 2333 1.1 skrll } 2334 1.1 skrll else 2335 1.1 skrll { 2336 1.1 skrll sym->flags |= BSF_CONSTRUCTOR; 2337 1.1 skrll sym->section = bfd_abs_section_ptr; 2338 1.1 skrll sym->value = 0; 2339 1.1 skrll } 2340 1.1 skrll break; 2341 1.1 skrll case bfd_link_hash_undefined: 2342 1.1 skrll sym->section = bfd_und_section_ptr; 2343 1.1 skrll sym->value = 0; 2344 1.1 skrll break; 2345 1.1 skrll case bfd_link_hash_undefweak: 2346 1.13 christos sym->section = bfd_und_section_ptr; 2347 1.1 skrll sym->value = 0; 2348 1.1 skrll sym->flags |= BSF_WEAK; 2349 1.13 christos break; 2350 1.13 christos case bfd_link_hash_defined: 2351 1.13 christos sym->flags |= BSF_GLOBAL; 2352 1.13 christos sym->section = h->u.def.section; 2353 1.13 christos sym->value = h->u.def.value; 2354 1.13 christos if (sym->section->sec_info_type == SEC_INFO_TYPE_MERGE) 2355 1.1 skrll { 2356 1.1 skrll sym->value = 2357 1.1 skrll _bfd_merged_section_offset (output_bfd, &sym->section, sym->value); 2358 1.1 skrll sym->flags |= BSF_MERGE_RESOLVED; 2359 1.1 skrll } 2360 1.13 christos break; 2361 1.13 christos case bfd_link_hash_defweak: 2362 1.13 christos sym->flags |= BSF_WEAK; 2363 1.13 christos sym->section = h->u.def.section; 2364 1.13 christos sym->value = h->u.def.value; 2365 1.13 christos if (sym->section->sec_info_type == SEC_INFO_TYPE_MERGE) 2366 1.1 skrll { 2367 1.1 skrll sym->value = 2368 1.1 skrll _bfd_merged_section_offset (output_bfd, &sym->section, sym->value); 2369 1.1 skrll sym->flags |= BSF_MERGE_RESOLVED; 2370 1.1 skrll } 2371 1.1 skrll break; 2372 1.1 skrll case bfd_link_hash_common: 2373 1.1 skrll sym->value = h->u.c.size; 2374 1.1 skrll if (sym->section == NULL) 2375 1.1 skrll sym->section = bfd_com_section_ptr; 2376 1.1 skrll else if (! bfd_is_com_section (sym->section)) 2377 1.1 skrll { 2378 1.1 skrll BFD_ASSERT (bfd_is_und_section (sym->section)); 2379 1.1 skrll sym->section = bfd_com_section_ptr; 2380 1.1 skrll } 2381 1.1 skrll /* Do not set the section; see _bfd_generic_link_output_symbols. */ 2382 1.1 skrll break; 2383 1.1 skrll case bfd_link_hash_indirect: 2384 1.1 skrll case bfd_link_hash_warning: 2385 1.1 skrll /* FIXME: What should we do here? */ 2386 1.1 skrll break; 2387 1.1 skrll } 2388 1.12 christos } 2389 1.1 skrll 2390 1.1 skrll /* Write out a global symbol, if it hasn't already been written out. 2391 1.1 skrll This is called for each symbol in the hash table. */ 2392 1.12 christos 2393 1.1 skrll static bool 2394 1.1 skrll _bfd_generic_link_write_global_symbol (struct generic_link_hash_entry *h, 2395 1.1 skrll void *data) 2396 1.10 christos { 2397 1.1 skrll struct generic_write_global_symbol_info *wginfo = data; 2398 1.10 christos asymbol *sym; 2399 1.1 skrll 2400 1.1 skrll if (h->written) 2401 1.1 skrll return true; 2402 1.1 skrll 2403 1.10 christos h->written = true; 2404 1.10 christos 2405 1.1 skrll if (wginfo->info->strip == strip_all 2406 1.1 skrll || (wginfo->info->strip == strip_some 2407 1.1 skrll && bfd_hash_lookup (wginfo->info->keep_hash, h->root.root.string, 2408 1.1 skrll false, false) == NULL)) 2409 1.1 skrll return true; 2410 1.1 skrll 2411 1.1 skrll if (h->sym != NULL) 2412 1.12 christos sym = h->sym; 2413 1.12 christos else 2414 1.12 christos { 2415 1.12 christos sym = bfd_make_empty_symbol (wginfo->output_bfd); 2416 1.1 skrll if (!sym) 2417 1.1 skrll { 2418 1.1 skrll wginfo->failed = true; 2419 1.1 skrll return false; 2420 1.13 christos } 2421 1.1 skrll sym->name = h->root.root.string; 2422 1.1 skrll sym->flags = 0; 2423 1.1 skrll } 2424 1.1 skrll 2425 1.1 skrll set_symbol_from_hash (wginfo->output_bfd, sym, &h->root); 2426 1.1 skrll 2427 1.12 christos sym->flags |= BSF_GLOBAL; 2428 1.12 christos 2429 1.1 skrll if (! generic_add_output_symbol (wginfo->output_bfd, wginfo->psymalloc, 2430 1.1 skrll sym)) 2431 1.10 christos { 2432 1.1 skrll wginfo->failed = true; 2433 1.1 skrll return false; 2434 1.1 skrll } 2435 1.1 skrll 2436 1.10 christos return true; 2437 1.1 skrll } 2438 1.1 skrll 2439 1.1 skrll /* Create a relocation. */ 2440 1.1 skrll 2441 1.1 skrll bool 2442 1.1 skrll _bfd_generic_reloc_link_order (bfd *abfd, 2443 1.1 skrll struct bfd_link_info *info, 2444 1.5 christos asection *sec, 2445 1.1 skrll struct bfd_link_order *link_order) 2446 1.1 skrll { 2447 1.1 skrll arelent *r; 2448 1.1 skrll 2449 1.3 christos if (! bfd_link_relocatable (info)) 2450 1.1 skrll abort (); 2451 1.10 christos if (sec->orelocation == NULL) 2452 1.1 skrll abort (); 2453 1.1 skrll 2454 1.1 skrll r = (arelent *) bfd_alloc (abfd, sizeof (arelent)); 2455 1.1 skrll if (r == NULL) 2456 1.1 skrll return false; 2457 1.1 skrll 2458 1.10 christos r->address = link_order->offset; 2459 1.1 skrll r->howto = bfd_reloc_type_lookup (abfd, link_order->u.reloc.p->reloc); 2460 1.1 skrll if (r->howto == 0) 2461 1.1 skrll { 2462 1.1 skrll bfd_set_error (bfd_error_bad_value); 2463 1.12 christos return false; 2464 1.1 skrll } 2465 1.1 skrll 2466 1.1 skrll /* Get the symbol to use for the relocation. */ 2467 1.1 skrll if (link_order->type == bfd_section_reloc_link_order) 2468 1.1 skrll r->sym_ptr_ptr = &link_order->u.reloc.p->u.section->symbol; 2469 1.1 skrll else 2470 1.1 skrll { 2471 1.10 christos struct generic_link_hash_entry *h; 2472 1.1 skrll 2473 1.1 skrll h = ((struct generic_link_hash_entry *) 2474 1.1 skrll bfd_wrapped_link_hash_lookup (abfd, info, 2475 1.6 christos link_order->u.reloc.p->u.name, 2476 1.6 christos false, false, true)); 2477 1.1 skrll if (h == NULL 2478 1.10 christos || ! h->written) 2479 1.1 skrll { 2480 1.1 skrll (*info->callbacks->unattached_reloc) 2481 1.1 skrll (info, link_order->u.reloc.p->u.name, NULL, NULL, 0); 2482 1.1 skrll bfd_set_error (bfd_error_bad_value); 2483 1.1 skrll return false; 2484 1.1 skrll } 2485 1.1 skrll r->sym_ptr_ptr = &h->sym; 2486 1.1 skrll } 2487 1.1 skrll 2488 1.1 skrll /* If this is an inplace reloc, write the addend to the object file. 2489 1.1 skrll Otherwise, store it in the reloc addend. */ 2490 1.1 skrll if (! r->howto->partial_inplace) 2491 1.1 skrll r->addend = link_order->u.reloc.p->addend; 2492 1.10 christos else 2493 1.1 skrll { 2494 1.1 skrll bfd_size_type size; 2495 1.1 skrll bfd_reloc_status_type rstat; 2496 1.3 christos bfd_byte *buf; 2497 1.5 christos bool ok; 2498 1.10 christos file_ptr loc; 2499 1.1 skrll 2500 1.1 skrll size = bfd_get_reloc_size (r->howto); 2501 1.1 skrll buf = (bfd_byte *) bfd_zmalloc (size); 2502 1.1 skrll if (buf == NULL && size != 0) 2503 1.1 skrll return false; 2504 1.1 skrll rstat = _bfd_relocate_contents (r->howto, abfd, 2505 1.1 skrll (bfd_vma) link_order->u.reloc.p->addend, 2506 1.1 skrll buf); 2507 1.1 skrll switch (rstat) 2508 1.1 skrll { 2509 1.1 skrll case bfd_reloc_ok: 2510 1.6 christos break; 2511 1.6 christos default: 2512 1.6 christos case bfd_reloc_outofrange: 2513 1.9 christos abort (); 2514 1.6 christos case bfd_reloc_overflow: 2515 1.6 christos (*info->callbacks->reloc_overflow) 2516 1.6 christos (info, NULL, 2517 1.1 skrll (link_order->type == bfd_section_reloc_link_order 2518 1.1 skrll ? bfd_section_name (link_order->u.reloc.p->u.section) 2519 1.9 christos : link_order->u.reloc.p->u.name), 2520 1.1 skrll r->howto->name, link_order->u.reloc.p->addend, 2521 1.1 skrll NULL, NULL, 0); 2522 1.1 skrll break; 2523 1.10 christos } 2524 1.1 skrll loc = link_order->offset * bfd_octets_per_byte (abfd, sec); 2525 1.1 skrll ok = bfd_set_section_contents (abfd, sec, buf, loc, size); 2526 1.1 skrll free (buf); 2527 1.1 skrll if (! ok) 2528 1.1 skrll return false; 2529 1.1 skrll 2530 1.1 skrll r->addend = 0; 2531 1.10 christos } 2532 1.1 skrll 2533 1.1 skrll sec->orelocation[sec->reloc_count] = r; 2534 1.1 skrll ++sec->reloc_count; 2535 1.1 skrll 2536 1.1 skrll return true; 2537 1.1 skrll } 2538 1.1 skrll 2539 1.10 christos /* Allocate a new link_order for a section. */ 2541 1.1 skrll 2542 1.3 christos struct bfd_link_order * 2543 1.3 christos bfd_new_link_order (bfd *abfd, asection *section) 2544 1.1 skrll { 2545 1.1 skrll size_t amt = sizeof (struct bfd_link_order); 2546 1.3 christos struct bfd_link_order *new_lo; 2547 1.1 skrll 2548 1.1 skrll new_lo = (struct bfd_link_order *) bfd_zalloc (abfd, amt); 2549 1.3 christos if (!new_lo) 2550 1.1 skrll return NULL; 2551 1.3 christos 2552 1.3 christos new_lo->type = bfd_undefined_link_order; 2553 1.1 skrll 2554 1.3 christos if (section->map_tail.link_order != NULL) 2555 1.1 skrll section->map_tail.link_order->next = new_lo; 2556 1.1 skrll else 2557 1.1 skrll section->map_head.link_order = new_lo; 2558 1.1 skrll section->map_tail.link_order = new_lo; 2559 1.1 skrll 2560 1.1 skrll return new_lo; 2561 1.10 christos } 2562 1.1 skrll 2563 1.1 skrll /* Default link order processing routine. Note that we can not handle 2564 1.1 skrll the reloc_link_order types here, since they depend upon the details 2565 1.1 skrll of how the particular backends generates relocs. */ 2566 1.1 skrll 2567 1.1 skrll bool 2568 1.1 skrll _bfd_default_link_order (bfd *abfd, 2569 1.1 skrll struct bfd_link_info *info, 2570 1.1 skrll asection *sec, 2571 1.1 skrll struct bfd_link_order *link_order) 2572 1.1 skrll { 2573 1.1 skrll switch (link_order->type) 2574 1.1 skrll { 2575 1.1 skrll case bfd_undefined_link_order: 2576 1.10 christos case bfd_section_reloc_link_order: 2577 1.1 skrll case bfd_symbol_reloc_link_order: 2578 1.1 skrll default: 2579 1.1 skrll abort (); 2580 1.1 skrll case bfd_indirect_link_order: 2581 1.1 skrll return default_indirect_link_order (abfd, info, sec, link_order, 2582 1.1 skrll false); 2583 1.1 skrll case bfd_data_link_order: 2584 1.10 christos return default_data_link_order (abfd, info, sec, link_order); 2585 1.1 skrll } 2586 1.9 christos } 2587 1.1 skrll 2588 1.1 skrll /* Default routine to handle a bfd_data_link_order. */ 2589 1.1 skrll 2590 1.1 skrll static bool 2591 1.1 skrll default_data_link_order (bfd *abfd, 2592 1.1 skrll struct bfd_link_info *info, 2593 1.1 skrll asection *sec, 2594 1.10 christos struct bfd_link_order *link_order) 2595 1.1 skrll { 2596 1.1 skrll bfd_size_type size; 2597 1.1 skrll size_t fill_size; 2598 1.1 skrll bfd_byte *fill; 2599 1.1 skrll file_ptr loc; 2600 1.10 christos bool result; 2601 1.1 skrll 2602 1.1 skrll BFD_ASSERT ((sec->flags & SEC_HAS_CONTENTS) != 0); 2603 1.1 skrll 2604 1.4 christos size = link_order->size; 2605 1.4 christos if (size == 0) 2606 1.9 christos return true; 2607 1.4 christos 2608 1.4 christos fill = link_order->u.data.contents; 2609 1.10 christos fill_size = link_order->u.data.size; 2610 1.4 christos if (fill_size == 0) 2611 1.4 christos { 2612 1.1 skrll fill = abfd->arch_info->fill (size, info->big_endian, 2613 1.1 skrll (sec->flags & SEC_CODE) != 0); 2614 1.3 christos if (fill == NULL) 2615 1.1 skrll return false; 2616 1.10 christos } 2617 1.1 skrll else if (fill_size < size) 2618 1.1 skrll { 2619 1.1 skrll bfd_byte *p; 2620 1.1 skrll fill = (bfd_byte *) bfd_malloc (size); 2621 1.1 skrll if (fill == NULL) 2622 1.1 skrll return false; 2623 1.1 skrll p = fill; 2624 1.1 skrll if (fill_size == 1) 2625 1.1 skrll memset (p, (int) link_order->u.data.contents[0], (size_t) size); 2626 1.1 skrll else 2627 1.1 skrll { 2628 1.1 skrll do 2629 1.1 skrll { 2630 1.1 skrll memcpy (p, link_order->u.data.contents, fill_size); 2631 1.1 skrll p += fill_size; 2632 1.1 skrll size -= fill_size; 2633 1.1 skrll } 2634 1.1 skrll while (size >= fill_size); 2635 1.9 christos if (size != 0) 2636 1.1 skrll memcpy (p, link_order->u.data.contents, (size_t) size); 2637 1.1 skrll size = link_order->size; 2638 1.1 skrll } 2639 1.1 skrll } 2640 1.1 skrll 2641 1.1 skrll loc = link_order->offset * bfd_octets_per_byte (abfd, sec); 2642 1.1 skrll result = bfd_set_section_contents (abfd, sec, fill, loc, size); 2643 1.1 skrll 2644 1.1 skrll if (fill != link_order->u.data.contents) 2645 1.10 christos free (fill); 2646 1.1 skrll return result; 2647 1.1 skrll } 2648 1.1 skrll 2649 1.1 skrll /* Default routine to handle a bfd_indirect_link_order. */ 2650 1.10 christos 2651 1.1 skrll static bool 2652 1.1 skrll default_indirect_link_order (bfd *output_bfd, 2653 1.1 skrll struct bfd_link_info *info, 2654 1.11 christos asection *output_section, 2655 1.1 skrll struct bfd_link_order *link_order, 2656 1.1 skrll bool generic_linker) 2657 1.1 skrll { 2658 1.1 skrll asection *input_section; 2659 1.1 skrll bfd *input_bfd; 2660 1.1 skrll bfd_byte *alloced = NULL; 2661 1.1 skrll bfd_byte *new_contents; 2662 1.1 skrll file_ptr loc; 2663 1.10 christos 2664 1.1 skrll BFD_ASSERT ((output_section->flags & SEC_HAS_CONTENTS) != 0); 2665 1.1 skrll 2666 1.1 skrll input_section = link_order->u.indirect.section; 2667 1.1 skrll input_bfd = input_section->owner; 2668 1.1 skrll if (input_section->size == 0) 2669 1.5 christos return true; 2670 1.1 skrll 2671 1.1 skrll BFD_ASSERT (input_section->output_section == output_section); 2672 1.1 skrll BFD_ASSERT (input_section->output_offset == link_order->offset); 2673 1.1 skrll BFD_ASSERT (input_section->size == link_order->size); 2674 1.1 skrll 2675 1.1 skrll if (bfd_link_relocatable (info) 2676 1.1 skrll && input_section->reloc_count > 0 2677 1.1 skrll && output_section->orelocation == NULL) 2678 1.7 christos { 2679 1.7 christos /* Space has not been allocated for the output relocations. 2680 1.8 christos This can happen when we are called by a specific backend 2681 1.1 skrll because somebody is attempting to link together different 2682 1.1 skrll types of object files. Handling this case correctly is 2683 1.10 christos difficult, and sometimes impossible. */ 2684 1.1 skrll _bfd_error_handler 2685 1.1 skrll /* xgettext:c-format */ 2686 1.1 skrll (_("attempt to do relocatable link with %s input and %s output"), 2687 1.1 skrll bfd_get_target (input_bfd), bfd_get_target (output_bfd)); 2688 1.1 skrll bfd_set_error (bfd_error_wrong_format); 2689 1.1 skrll return false; 2690 1.1 skrll } 2691 1.1 skrll 2692 1.1 skrll if (! generic_linker) 2693 1.1 skrll { 2694 1.1 skrll asymbol **sympp; 2695 1.1 skrll asymbol **symppend; 2696 1.10 christos 2697 1.1 skrll /* Get the canonical symbols. The generic linker will always 2698 1.1 skrll have retrieved them by this point, but we are being called by 2699 1.1 skrll a specific linker, presumably because we are linking 2700 1.1 skrll different types of object files together. */ 2701 1.1 skrll if (!bfd_generic_link_read_symbols (input_bfd)) 2702 1.1 skrll return false; 2703 1.1 skrll 2704 1.1 skrll /* Since we have been called by a specific linker, rather than 2705 1.1 skrll the generic linker, the values of the symbols will not be 2706 1.1 skrll right. They will be the values as seen in the input file, 2707 1.1 skrll not the values of the final link. We need to fix them up 2708 1.13 christos before we can relocate the section. */ 2709 1.1 skrll sympp = _bfd_generic_link_get_symbols (input_bfd); 2710 1.1 skrll symppend = sympp + _bfd_generic_link_get_symcount (input_bfd); 2711 1.1 skrll for (; sympp < symppend; sympp++) 2712 1.1 skrll { 2713 1.1 skrll asymbol *sym; 2714 1.1 skrll struct bfd_link_hash_entry *h = NULL; 2715 1.1 skrll 2716 1.1 skrll sym = *sympp; 2717 1.9 christos 2718 1.9 christos if ((sym->flags & (BSF_INDIRECT 2719 1.9 christos | BSF_WARNING 2720 1.1 skrll | BSF_GLOBAL 2721 1.1 skrll | BSF_CONSTRUCTOR 2722 1.1 skrll | BSF_WEAK)) != 0 2723 1.1 skrll || bfd_is_und_section (bfd_asymbol_section (sym)) 2724 1.3 christos || bfd_is_com_section (bfd_asymbol_section (sym)) 2725 1.9 christos || bfd_is_ind_section (bfd_asymbol_section (sym))) 2726 1.1 skrll { 2727 1.1 skrll /* sym->udata may have been set by 2728 1.10 christos generic_link_add_symbol_list. */ 2729 1.1 skrll if (sym->udata.p != NULL) 2730 1.1 skrll h = (struct bfd_link_hash_entry *) sym->udata.p; 2731 1.1 skrll else if (bfd_is_und_section (bfd_asymbol_section (sym))) 2732 1.10 christos h = bfd_wrapped_link_hash_lookup (output_bfd, info, 2733 1.1 skrll bfd_asymbol_name (sym), 2734 1.13 christos false, false, true); 2735 1.13 christos else 2736 1.13 christos h = bfd_link_hash_lookup (info->hash, 2737 1.13 christos bfd_asymbol_name (sym), 2738 1.13 christos false, false, true); 2739 1.13 christos if (h != NULL) 2740 1.13 christos set_symbol_from_hash (output_bfd, sym, h); 2741 1.13 christos } 2742 1.13 christos 2743 1.13 christos if (h == NULL 2744 1.13 christos && sym->section->sec_info_type == SEC_INFO_TYPE_MERGE 2745 1.1 skrll && !(sym->flags & (BSF_SECTION_SYM | BSF_MERGE_RESOLVED))) 2746 1.1 skrll { 2747 1.13 christos sym->value = _bfd_merged_section_offset (output_bfd, 2748 1.13 christos &sym->section, 2749 1.13 christos sym->value); 2750 1.1 skrll sym->flags |= BSF_MERGE_RESOLVED; 2751 1.1 skrll } 2752 1.2 skrll } 2753 1.2 skrll 2754 1.2 skrll if (input_section->sec_info_type == SEC_INFO_TYPE_MERGE) 2755 1.2 skrll return _bfd_write_merged_section (output_bfd, input_section); 2756 1.2 skrll } 2757 1.2 skrll 2758 1.2 skrll if ((output_section->flags & (SEC_GROUP | SEC_LINKER_CREATED)) == SEC_GROUP 2759 1.2 skrll && input_section->size != 0) 2760 1.2 skrll { 2761 1.2 skrll /* Group section contents are set by bfd_elf_set_group_contents. */ 2762 1.2 skrll if (!output_bfd->output_has_begun) 2763 1.2 skrll { 2764 1.2 skrll /* FIXME: This hack ensures bfd_elf_set_group_contents is called. */ 2765 1.2 skrll if (!bfd_set_section_contents (output_bfd, output_section, "", 0, 1)) 2766 1.2 skrll goto error_return; 2767 1.2 skrll } 2768 1.2 skrll new_contents = output_section->contents; 2769 1.2 skrll BFD_ASSERT (new_contents != NULL); 2770 1.11 christos BFD_ASSERT (input_section->output_offset == 0); 2771 1.5 christos } 2772 1.2 skrll else 2773 1.11 christos { 2774 1.2 skrll /* Get and relocate the section contents. */ 2775 1.2 skrll new_contents = (bfd_get_relocated_section_contents 2776 1.2 skrll (output_bfd, info, link_order, NULL, 2777 1.1 skrll bfd_link_relocatable (info), 2778 1.1 skrll _bfd_generic_link_get_symbols (input_bfd))); 2779 1.9 christos alloced = new_contents; 2780 1.9 christos if (!new_contents) 2781 1.1 skrll goto error_return; 2782 1.1 skrll } 2783 1.1 skrll 2784 1.1 skrll /* Output the section contents. */ 2785 1.11 christos loc = (input_section->output_offset 2786 1.10 christos * bfd_octets_per_byte (output_bfd, output_section)); 2787 1.1 skrll if (! bfd_set_section_contents (output_bfd, output_section, 2788 1.1 skrll new_contents, loc, input_section->size)) 2789 1.11 christos goto error_return; 2790 1.10 christos 2791 1.1 skrll free (alloced); 2792 1.1 skrll return true; 2793 1.1 skrll 2794 1.1 skrll error_return: 2795 1.1 skrll free (alloced); 2796 1.1 skrll return false; 2797 1.1 skrll } 2798 1.1 skrll 2799 1.1 skrll /* A little routine to count the number of relocs in a link_order 2800 1.1 skrll list. */ 2801 1.1 skrll 2802 1.1 skrll unsigned int 2803 1.1 skrll _bfd_count_link_order_relocs (struct bfd_link_order *link_order) 2804 1.1 skrll { 2805 1.1 skrll register unsigned int c; 2806 1.1 skrll register struct bfd_link_order *l; 2807 1.1 skrll 2808 1.1 skrll c = 0; 2809 1.1 skrll for (l = link_order; l != NULL; l = l->next) 2810 1.1 skrll { 2811 1.1 skrll if (l->type == bfd_section_reloc_link_order 2812 1.1 skrll || l->type == bfd_symbol_reloc_link_order) 2813 1.1 skrll ++c; 2814 1.1 skrll } 2815 1.1 skrll 2816 1.1 skrll return c; 2817 1.1 skrll } 2818 1.10 christos 2819 1.1 skrll /* 2820 1.1 skrll FUNCTION 2821 1.1 skrll bfd_link_split_section 2822 1.1 skrll 2823 1.1 skrll SYNOPSIS 2824 1.1 skrll bool bfd_link_split_section (bfd *abfd, asection *sec); 2825 1.7 christos 2826 1.1 skrll DESCRIPTION 2827 1.1 skrll Return nonzero if @var{sec} should be split during a 2828 1.1 skrll reloceatable or final link. 2829 1.1 skrll 2830 1.10 christos .#define bfd_link_split_section(abfd, sec) \ 2831 1.1 skrll . BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec)) 2832 1.1 skrll . 2833 1.1 skrll 2834 1.10 christos */ 2835 1.1 skrll 2836 1.1 skrll bool 2837 1.1 skrll _bfd_generic_link_split_section (bfd *abfd ATTRIBUTE_UNUSED, 2838 1.1 skrll asection *sec ATTRIBUTE_UNUSED) 2839 1.1 skrll { 2840 1.1 skrll return false; 2841 1.1 skrll } 2842 1.10 christos 2843 1.10 christos /* 2844 1.10 christos FUNCTION 2845 1.1 skrll bfd_section_already_linked 2846 1.1 skrll 2847 1.4 christos SYNOPSIS 2848 1.4 christos bool bfd_section_already_linked (bfd *abfd, 2849 1.1 skrll asection *sec, 2850 1.1 skrll struct bfd_link_info *info); 2851 1.7 christos 2852 1.1 skrll DESCRIPTION 2853 1.1 skrll Check if @var{data} has been already linked during a reloceatable 2854 1.1 skrll or final link. Return TRUE if it has. 2855 1.1 skrll 2856 1.1 skrll .#define bfd_section_already_linked(abfd, sec, info) \ 2857 1.1 skrll . BFD_SEND (abfd, _section_already_linked, (abfd, sec, info)) 2858 1.1 skrll . 2859 1.5 christos 2860 1.1 skrll */ 2861 1.1 skrll 2862 1.1 skrll /* Sections marked with the SEC_LINK_ONCE flag should only be linked 2863 1.1 skrll once into the output. This routine checks each section, and 2864 1.1 skrll arrange to discard it if a section of the same name has already 2865 1.1 skrll been linked. This code assumes that all relevant sections have the 2866 1.1 skrll SEC_LINK_ONCE flag set; that is, it does not depend solely upon the 2867 1.1 skrll section name. bfd_section_already_linked is called via 2868 1.1 skrll bfd_map_over_sections. */ 2869 1.1 skrll 2870 1.1 skrll /* The hash table. */ 2871 1.1 skrll 2872 1.1 skrll static struct bfd_hash_table _bfd_section_already_linked_table; 2873 1.1 skrll 2874 1.10 christos /* Support routines for the hash table used by section_already_linked, 2875 1.10 christos initialize the table, traverse, lookup, fill in an entry and remove 2876 1.1 skrll the table. */ 2877 1.1 skrll 2878 1.10 christos void 2879 1.1 skrll bfd_section_already_linked_table_traverse 2880 1.1 skrll (bool (*func) (struct bfd_section_already_linked_hash_entry *, void *), 2881 1.1 skrll void *info) 2882 1.1 skrll { 2883 1.1 skrll bfd_hash_traverse (&_bfd_section_already_linked_table, 2884 1.1 skrll (bool (*) (struct bfd_hash_entry *, void *)) func, 2885 1.1 skrll info); 2886 1.1 skrll } 2887 1.10 christos 2888 1.1 skrll struct bfd_section_already_linked_hash_entry * 2889 1.1 skrll bfd_section_already_linked_table_lookup (const char *name) 2890 1.10 christos { 2891 1.1 skrll return ((struct bfd_section_already_linked_hash_entry *) 2892 1.1 skrll bfd_hash_lookup (&_bfd_section_already_linked_table, name, 2893 1.1 skrll true, false)); 2894 1.1 skrll } 2895 1.1 skrll 2896 1.1 skrll bool 2897 1.1 skrll bfd_section_already_linked_table_insert 2898 1.1 skrll (struct bfd_section_already_linked_hash_entry *already_linked_list, 2899 1.3 christos asection *sec) 2900 1.3 christos { 2901 1.1 skrll struct bfd_section_already_linked *l; 2902 1.10 christos 2903 1.1 skrll /* Allocate the memory from the same obstack as the hash table is 2904 1.1 skrll kept in. */ 2905 1.1 skrll l = (struct bfd_section_already_linked *) 2906 1.10 christos bfd_hash_allocate (&_bfd_section_already_linked_table, sizeof *l); 2907 1.1 skrll if (l == NULL) 2908 1.1 skrll return false; 2909 1.1 skrll l->sec = sec; 2910 1.1 skrll l->next = already_linked_list->entry; 2911 1.1 skrll already_linked_list->entry = l; 2912 1.1 skrll return true; 2913 1.1 skrll } 2914 1.1 skrll 2915 1.3 christos static struct bfd_hash_entry * 2916 1.3 christos already_linked_newfunc (struct bfd_hash_entry *entry ATTRIBUTE_UNUSED, 2917 1.1 skrll struct bfd_hash_table *table, 2918 1.1 skrll const char *string ATTRIBUTE_UNUSED) 2919 1.1 skrll { 2920 1.1 skrll struct bfd_section_already_linked_hash_entry *ret = 2921 1.1 skrll (struct bfd_section_already_linked_hash_entry *) 2922 1.1 skrll bfd_hash_allocate (table, sizeof *ret); 2923 1.1 skrll 2924 1.1 skrll if (ret == NULL) 2925 1.1 skrll return NULL; 2926 1.10 christos 2927 1.1 skrll ret->entry = NULL; 2928 1.1 skrll 2929 1.1 skrll return &ret->root; 2930 1.1 skrll } 2931 1.1 skrll 2932 1.1 skrll bool 2933 1.1 skrll bfd_section_already_linked_table_init (void) 2934 1.1 skrll { 2935 1.1 skrll return bfd_hash_table_init_n (&_bfd_section_already_linked_table, 2936 1.1 skrll already_linked_newfunc, 2937 1.1 skrll sizeof (struct bfd_section_already_linked_hash_entry), 2938 1.1 skrll 42); 2939 1.1 skrll } 2940 1.1 skrll 2941 1.4 christos void 2942 1.4 christos bfd_section_already_linked_table_free (void) 2943 1.4 christos { 2944 1.10 christos bfd_hash_table_free (&_bfd_section_already_linked_table); 2945 1.4 christos } 2946 1.4 christos 2947 1.4 christos /* Report warnings as appropriate for duplicate section SEC. 2948 1.4 christos Return FALSE if we decide to keep SEC after all. */ 2949 1.4 christos 2950 1.4 christos bool 2951 1.4 christos _bfd_handle_already_linked (asection *sec, 2952 1.4 christos struct bfd_section_already_linked *l, 2953 1.4 christos struct bfd_link_info *info) 2954 1.4 christos { 2955 1.4 christos switch (sec->flags & SEC_LINK_DUPLICATES) 2956 1.4 christos { 2957 1.4 christos default: 2958 1.4 christos abort (); 2959 1.4 christos 2960 1.4 christos case SEC_LINK_DUPLICATES_DISCARD: 2961 1.5 christos /* If we found an LTO IR match for this comdat group on 2962 1.4 christos the first pass, replace it with the LTO output on the 2963 1.4 christos second pass. We can't simply choose real object 2964 1.4 christos files over IR because the first pass may contain a 2965 1.10 christos mix of LTO and normal objects and we must keep the 2966 1.4 christos first match, be it IR or real. */ 2967 1.4 christos if (sec->owner->lto_output 2968 1.4 christos && (l->sec->owner->flags & BFD_PLUGIN) != 0) 2969 1.4 christos { 2970 1.4 christos l->sec = sec; 2971 1.7 christos return false; 2972 1.8 christos } 2973 1.4 christos break; 2974 1.4 christos 2975 1.4 christos case SEC_LINK_DUPLICATES_ONE_ONLY: 2976 1.4 christos info->callbacks->einfo 2977 1.4 christos /* xgettext:c-format */ 2978 1.4 christos (_("%pB: ignoring duplicate section `%pA'\n"), 2979 1.4 christos sec->owner, sec); 2980 1.4 christos break; 2981 1.7 christos 2982 1.8 christos case SEC_LINK_DUPLICATES_SAME_SIZE: 2983 1.4 christos if ((l->sec->owner->flags & BFD_PLUGIN) != 0) 2984 1.4 christos ; 2985 1.4 christos else if (sec->size != l->sec->size) 2986 1.4 christos info->callbacks->einfo 2987 1.4 christos /* xgettext:c-format */ 2988 1.4 christos (_("%pB: duplicate section `%pA' has different size\n"), 2989 1.4 christos sec->owner, sec); 2990 1.4 christos break; 2991 1.7 christos 2992 1.8 christos case SEC_LINK_DUPLICATES_SAME_CONTENTS: 2993 1.4 christos if ((l->sec->owner->flags & BFD_PLUGIN) != 0) 2994 1.4 christos ; 2995 1.4 christos else if (sec->size != l->sec->size) 2996 1.11 christos info->callbacks->einfo 2997 1.4 christos /* xgettext:c-format */ 2998 1.11 christos (_("%pB: duplicate section `%pA' has different size\n"), 2999 1.11 christos sec->owner, sec); 3000 1.11 christos else if (sec->size != 0) 3001 1.11 christos { 3002 1.11 christos bfd_byte *sec_contents, *l_sec_contents; 3003 1.11 christos 3004 1.4 christos if ((sec->flags & SEC_HAS_CONTENTS) == 0 3005 1.7 christos && (l->sec->flags & SEC_HAS_CONTENTS) == 0) 3006 1.8 christos ; 3007 1.4 christos else if ((sec->flags & SEC_HAS_CONTENTS) == 0 3008 1.11 christos || !bfd_malloc_and_get_section (sec->owner, sec, 3009 1.11 christos &sec_contents)) 3010 1.11 christos info->callbacks->einfo 3011 1.11 christos /* xgettext:c-format */ 3012 1.11 christos (_("%pB: could not read contents of section `%pA'\n"), 3013 1.11 christos sec->owner, sec); 3014 1.11 christos else if ((l->sec->flags & SEC_HAS_CONTENTS) == 0 3015 1.11 christos || !bfd_malloc_and_get_section (l->sec->owner, l->sec, 3016 1.11 christos &l_sec_contents)) 3017 1.11 christos { 3018 1.11 christos info->callbacks->einfo 3019 1.11 christos /* xgettext:c-format */ 3020 1.11 christos (_("%pB: could not read contents of section `%pA'\n"), 3021 1.11 christos l->sec->owner, l->sec); 3022 1.11 christos free (sec_contents); 3023 1.11 christos } 3024 1.11 christos else 3025 1.11 christos { 3026 1.11 christos if (memcmp (sec_contents, l_sec_contents, sec->size) != 0) 3027 1.11 christos info->callbacks->einfo 3028 1.4 christos /* xgettext:c-format */ 3029 1.4 christos (_("%pB: duplicate section `%pA' has different contents\n"), 3030 1.4 christos sec->owner, sec); 3031 1.4 christos free (l_sec_contents); 3032 1.4 christos free (sec_contents); 3033 1.4 christos } 3034 1.4 christos } 3035 1.4 christos break; 3036 1.4 christos } 3037 1.4 christos 3038 1.4 christos /* Set the output_section field so that lang_add_section 3039 1.10 christos does not create a lang_input_section structure for this 3040 1.4 christos section. Since there might be a symbol in the section 3041 1.4 christos being discarded, we must retain a pointer to the section 3042 1.1 skrll which we are really going to use. */ 3043 1.1 skrll sec->output_section = bfd_abs_section_ptr; 3044 1.10 christos sec->kept_section = l->sec; 3045 1.4 christos return true; 3046 1.4 christos } 3047 1.1 skrll 3048 1.1 skrll /* This is used on non-ELF inputs. */ 3049 1.1 skrll 3050 1.1 skrll bool 3051 1.1 skrll _bfd_generic_section_already_linked (bfd *abfd ATTRIBUTE_UNUSED, 3052 1.1 skrll asection *sec, 3053 1.4 christos struct bfd_link_info *info) 3054 1.10 christos { 3055 1.4 christos const char *name; 3056 1.4 christos struct bfd_section_already_linked *l; 3057 1.4 christos struct bfd_section_already_linked_hash_entry *already_linked_list; 3058 1.10 christos 3059 1.1 skrll if ((sec->flags & SEC_LINK_ONCE) == 0) 3060 1.1 skrll return false; 3061 1.1 skrll 3062 1.1 skrll /* The generic linker doesn't handle section groups. */ 3063 1.1 skrll if ((sec->flags & SEC_GROUP) != 0) 3064 1.1 skrll return false; 3065 1.1 skrll 3066 1.1 skrll /* FIXME: When doing a relocatable link, we may have trouble 3067 1.1 skrll copying relocations in other sections that refer to local symbols 3068 1.1 skrll in the section being discarded. Those relocations will have to 3069 1.1 skrll be converted somehow; as of this writing I'm not sure that any of 3070 1.1 skrll the backends handle that correctly. 3071 1.1 skrll 3072 1.1 skrll It is tempting to instead not discard link once sections when 3073 1.9 christos doing a relocatable link (technically, they should be discarded 3074 1.1 skrll whenever we are building constructors). However, that fails, 3075 1.1 skrll because the linker winds up combining all the link once sections 3076 1.12 christos into a single large link once section, which defeats the purpose 3077 1.12 christos of having link once sections in the first place. */ 3078 1.1 skrll 3079 1.4 christos name = bfd_section_name (sec); 3080 1.4 christos 3081 1.1 skrll already_linked_list = bfd_section_already_linked_table_lookup (name); 3082 1.4 christos if (!already_linked_list) 3083 1.4 christos goto bad; 3084 1.4 christos 3085 1.4 christos l = already_linked_list->entry; 3086 1.4 christos if (l != NULL) 3087 1.4 christos { 3088 1.4 christos /* The section has already been linked. See if we should 3089 1.12 christos issue a warning. */ 3090 1.12 christos return _bfd_handle_already_linked (sec, l, info); 3091 1.12 christos } 3092 1.12 christos 3093 1.10 christos /* This is the first section with this name. Record it. */ 3094 1.4 christos if (!bfd_section_already_linked_table_insert (already_linked_list, sec)) 3095 1.1 skrll { 3096 1.1 skrll bad: 3097 1.1 skrll info->callbacks->fatal (_("%P: already_linked_table: %E\n")); 3098 1.10 christos } 3099 1.1 skrll return false; 3100 1.1 skrll } 3101 1.13 christos 3102 1.13 christos /* Convert symbols in excluded output sections to use a kept section. */ 3103 1.1 skrll 3104 1.1 skrll static bool 3105 1.1 skrll fix_syms (struct bfd_link_hash_entry *h, void *data) 3106 1.1 skrll { 3107 1.1 skrll struct bfd_link_info *info = data; 3108 1.1 skrll bfd *obfd = info->output_bfd; 3109 1.1 skrll 3110 1.1 skrll if (h->type == bfd_link_hash_defined 3111 1.1 skrll || h->type == bfd_link_hash_defweak) 3112 1.1 skrll { 3113 1.4 christos asection *s = h->u.def.section; 3114 1.1 skrll if (s != NULL 3115 1.1 skrll && s->output_section != NULL 3116 1.13 christos && (s->output_section->flags & SEC_EXCLUDE) != 0 3117 1.13 christos && bfd_section_removed_from_list (obfd, s->output_section)) 3118 1.1 skrll { 3119 1.1 skrll asection *op; 3120 1.1 skrll 3121 1.1 skrll h->u.def.value += s->output_offset + s->output_section->vma; 3122 1.1 skrll op = info->callbacks->nearby_section (obfd, s->output_section, 3123 1.10 christos h->u.def.value); 3124 1.1 skrll h->u.def.value -= op->vma; 3125 1.1 skrll h->u.def.section = op; 3126 1.1 skrll } 3127 1.13 christos } 3128 1.1 skrll 3129 1.13 christos return true; 3130 1.1 skrll } 3131 1.3 christos 3132 1.3 christos void 3133 1.3 christos bfd_fix_excluded_sec_syms (struct bfd_link_info *info) 3134 1.3 christos { 3135 1.3 christos bfd_link_hash_traverse (info->hash, fix_syms, info); 3136 1.3 christos } 3137 1.10 christos 3138 1.3 christos /* 3139 1.3 christos FUNCTION 3140 1.3 christos bfd_generic_define_common_symbol 3141 1.3 christos 3142 1.3 christos SYNOPSIS 3143 1.3 christos bool bfd_generic_define_common_symbol 3144 1.3 christos (bfd *output_bfd, struct bfd_link_info *info, 3145 1.3 christos struct bfd_link_hash_entry *h); 3146 1.7 christos 3147 1.3 christos DESCRIPTION 3148 1.3 christos Convert common symbol @var{h} into a defined symbol. 3149 1.3 christos Return TRUE on success and FALSE on failure. 3150 1.10 christos 3151 1.3 christos .#define bfd_define_common_symbol(output_bfd, info, h) \ 3152 1.3 christos . BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h)) 3153 1.3 christos . 3154 1.3 christos */ 3155 1.3 christos 3156 1.3 christos bool 3157 1.3 christos bfd_generic_define_common_symbol (bfd *output_bfd, 3158 1.3 christos struct bfd_link_info *info ATTRIBUTE_UNUSED, 3159 1.3 christos struct bfd_link_hash_entry *h) 3160 1.3 christos { 3161 1.3 christos unsigned int power_of_two; 3162 1.3 christos bfd_vma alignment, size; 3163 1.3 christos asection *section; 3164 1.3 christos 3165 1.3 christos BFD_ASSERT (h != NULL && h->type == bfd_link_hash_common); 3166 1.10 christos 3167 1.10 christos size = h->u.c.size; 3168 1.10 christos power_of_two = h->u.c.p->alignment_power; 3169 1.10 christos section = h->u.c.p->section; 3170 1.10 christos 3171 1.10 christos /* Increase the size of the section to align the common symbol. 3172 1.10 christos The alignment must be a power of two. But if the section does 3173 1.3 christos not have any alignment requirement then do not increase the 3174 1.3 christos alignment unnecessarily. */ 3175 1.3 christos if (power_of_two) 3176 1.3 christos alignment = bfd_octets_per_byte (output_bfd, section) << power_of_two; 3177 1.3 christos else 3178 1.3 christos alignment = 1; 3179 1.3 christos BFD_ASSERT (alignment != 0 && (alignment & -alignment) == alignment); 3180 1.3 christos section->size += alignment - 1; 3181 1.3 christos section->size &= -alignment; 3182 1.3 christos 3183 1.3 christos /* Adjust the section's overall alignment if necessary. */ 3184 1.3 christos if (power_of_two > section->alignment_power) 3185 1.3 christos section->alignment_power = power_of_two; 3186 1.3 christos 3187 1.3 christos /* Change the symbol from common to defined. */ 3188 1.3 christos h->type = bfd_link_hash_defined; 3189 1.3 christos h->u.def.section = section; 3190 1.3 christos h->u.def.value = section->size; 3191 1.3 christos 3192 1.9 christos /* Increase the size of the section. */ 3193 1.10 christos section->size += size; 3194 1.3 christos 3195 1.3 christos /* Make sure the section is allocated in memory, and make sure that 3196 1.3 christos it is no longer a common section. */ 3197 1.3 christos section->flags |= SEC_ALLOC; 3198 1.8 christos section->flags &= ~(SEC_IS_COMMON | SEC_HAS_CONTENTS); 3199 1.8 christos return true; 3200 1.8 christos } 3201 1.8 christos 3202 1.8 christos /* 3203 1.8 christos FUNCTION 3204 1.8 christos _bfd_generic_link_hide_symbol 3205 1.8 christos 3206 1.8 christos SYNOPSIS 3207 1.8 christos void _bfd_generic_link_hide_symbol 3208 1.8 christos (bfd *output_bfd, struct bfd_link_info *info, 3209 1.8 christos struct bfd_link_hash_entry *h); 3210 1.8 christos 3211 1.8 christos DESCRIPTION 3212 1.8 christos Hide symbol @var{h}. 3213 1.8 christos This is an internal function. It should not be called from 3214 1.8 christos outside the BFD library. 3215 1.8 christos 3216 1.8 christos .#define bfd_link_hide_symbol(output_bfd, info, h) \ 3217 1.8 christos . BFD_SEND (output_bfd, _bfd_link_hide_symbol, (output_bfd, info, h)) 3218 1.8 christos . 3219 1.8 christos */ 3220 1.8 christos 3221 1.8 christos void 3222 1.8 christos _bfd_generic_link_hide_symbol (bfd *output_bfd ATTRIBUTE_UNUSED, 3223 1.8 christos struct bfd_link_info *info ATTRIBUTE_UNUSED, 3224 1.7 christos struct bfd_link_hash_entry *h ATTRIBUTE_UNUSED) 3225 1.7 christos { 3226 1.7 christos } 3227 1.7 christos 3228 1.7 christos /* 3229 1.7 christos FUNCTION 3230 1.7 christos bfd_generic_define_start_stop 3231 1.7 christos 3232 1.7 christos SYNOPSIS 3233 1.7 christos struct bfd_link_hash_entry *bfd_generic_define_start_stop 3234 1.7 christos (struct bfd_link_info *info, 3235 1.7 christos const char *symbol, asection *sec); 3236 1.7 christos 3237 1.7 christos DESCRIPTION 3238 1.7 christos Define a __start, __stop, .startof. or .sizeof. symbol. 3239 1.7 christos Return the symbol or NULL if no such undefined symbol exists. 3240 1.7 christos 3241 1.7 christos .#define bfd_define_start_stop(output_bfd, info, symbol, sec) \ 3242 1.7 christos . BFD_SEND (output_bfd, _bfd_define_start_stop, (info, symbol, sec)) 3243 1.7 christos . 3244 1.7 christos */ 3245 1.7 christos 3246 1.10 christos struct bfd_link_hash_entry * 3247 1.7 christos bfd_generic_define_start_stop (struct bfd_link_info *info, 3248 1.10 christos const char *symbol, asection *sec) 3249 1.7 christos { 3250 1.7 christos struct bfd_link_hash_entry *h; 3251 1.7 christos 3252 1.7 christos h = bfd_link_hash_lookup (info->hash, symbol, false, false, true); 3253 1.7 christos if (h != NULL 3254 1.7 christos && !h->ldscript_def 3255 1.7 christos && (h->type == bfd_link_hash_undefined 3256 1.7 christos || h->type == bfd_link_hash_undefweak)) 3257 1.7 christos { 3258 1.7 christos h->type = bfd_link_hash_defined; 3259 1.7 christos h->u.def.section = sec; 3260 1.7 christos h->u.def.value = 0; 3261 1.7 christos return h; 3262 1.5 christos } 3263 1.3 christos return NULL; 3264 1.3 christos } 3265 1.3 christos 3266 1.3 christos /* 3267 1.10 christos FUNCTION 3268 1.3 christos bfd_find_version_for_sym 3269 1.3 christos 3270 1.3 christos SYNOPSIS 3271 1.3 christos struct bfd_elf_version_tree * bfd_find_version_for_sym 3272 1.3 christos (struct bfd_elf_version_tree *verdefs, 3273 1.3 christos const char *sym_name, bool *hide); 3274 1.3 christos 3275 1.3 christos DESCRIPTION 3276 1.3 christos Search an elf version script tree for symbol versioning 3277 1.3 christos info and export / don't-export status for a given symbol. 3278 1.3 christos Return non-NULL on success and NULL on failure; also sets 3279 1.3 christos the output @samp{hide} boolean parameter. 3280 1.10 christos 3281 1.3 christos */ 3282 1.3 christos 3283 1.3 christos struct bfd_elf_version_tree * 3284 1.3 christos bfd_find_version_for_sym (struct bfd_elf_version_tree *verdefs, 3285 1.3 christos const char *sym_name, 3286 1.3 christos bool *hide) 3287 1.3 christos { 3288 1.3 christos struct bfd_elf_version_tree *t; 3289 1.3 christos struct bfd_elf_version_tree *local_ver, *global_ver, *exist_ver; 3290 1.3 christos struct bfd_elf_version_tree *star_local_ver, *star_global_ver; 3291 1.3 christos 3292 1.3 christos local_ver = NULL; 3293 1.3 christos global_ver = NULL; 3294 1.3 christos star_local_ver = NULL; 3295 1.3 christos star_global_ver = NULL; 3296 1.3 christos exist_ver = NULL; 3297 1.3 christos for (t = verdefs; t != NULL; t = t->next) 3298 1.3 christos { 3299 1.3 christos if (t->globals.list != NULL) 3300 1.3 christos { 3301 1.3 christos struct bfd_elf_version_expr *d = NULL; 3302 1.3 christos 3303 1.3 christos while ((d = (*t->match) (&t->globals, d, sym_name)) != NULL) 3304 1.3 christos { 3305 1.3 christos if (d->literal || strcmp (d->pattern, "*") != 0) 3306 1.3 christos global_ver = t; 3307 1.3 christos else 3308 1.3 christos star_global_ver = t; 3309 1.3 christos if (d->symver) 3310 1.3 christos exist_ver = t; 3311 1.3 christos d->script = 1; 3312 1.3 christos /* If the match is a wildcard pattern, keep looking for 3313 1.3 christos a more explicit, perhaps even local, match. */ 3314 1.3 christos if (d->literal) 3315 1.3 christos break; 3316 1.3 christos } 3317 1.3 christos 3318 1.3 christos if (d != NULL) 3319 1.3 christos break; 3320 1.3 christos } 3321 1.3 christos 3322 1.3 christos if (t->locals.list != NULL) 3323 1.3 christos { 3324 1.3 christos struct bfd_elf_version_expr *d = NULL; 3325 1.3 christos 3326 1.3 christos while ((d = (*t->match) (&t->locals, d, sym_name)) != NULL) 3327 1.3 christos { 3328 1.3 christos if (d->literal || strcmp (d->pattern, "*") != 0) 3329 1.3 christos local_ver = t; 3330 1.3 christos else 3331 1.3 christos star_local_ver = t; 3332 1.3 christos /* If the match is a wildcard pattern, keep looking for 3333 1.3 christos a more explicit, perhaps even global, match. */ 3334 1.3 christos if (d->literal) 3335 1.3 christos { 3336 1.3 christos /* An exact match overrides a global wildcard. */ 3337 1.3 christos global_ver = NULL; 3338 1.3 christos star_global_ver = NULL; 3339 1.3 christos break; 3340 1.3 christos } 3341 1.3 christos } 3342 1.3 christos 3343 1.3 christos if (d != NULL) 3344 1.3 christos break; 3345 1.3 christos } 3346 1.3 christos } 3347 1.3 christos 3348 1.3 christos if (global_ver == NULL && local_ver == NULL) 3349 1.3 christos global_ver = star_global_ver; 3350 1.3 christos 3351 1.3 christos if (global_ver != NULL) 3352 1.3 christos { 3353 1.3 christos /* If we already have a versioned symbol that matches the 3354 1.3 christos node for this symbol, then we don't want to create a 3355 1.3 christos duplicate from the unversioned symbol. Instead hide the 3356 1.3 christos unversioned symbol. */ 3357 1.3 christos *hide = exist_ver == global_ver; 3358 1.3 christos return global_ver; 3359 1.3 christos } 3360 1.10 christos 3361 1.3 christos if (local_ver == NULL) 3362 1.3 christos local_ver = star_local_ver; 3363 1.3 christos 3364 1.3 christos if (local_ver != NULL) 3365 1.3 christos { 3366 1.4 christos *hide = true; 3367 1.4 christos return local_ver; 3368 1.4 christos } 3369 1.4 christos 3370 1.4 christos return NULL; 3371 1.4 christos } 3372 1.10 christos 3373 1.4 christos /* 3374 1.4 christos FUNCTION 3375 1.4 christos bfd_hide_sym_by_version 3376 1.4 christos 3377 1.4 christos SYNOPSIS 3378 1.4 christos bool bfd_hide_sym_by_version 3379 1.4 christos (struct bfd_elf_version_tree *verdefs, const char *sym_name); 3380 1.4 christos 3381 1.10 christos DESCRIPTION 3382 1.4 christos Search an elf version script tree for symbol versioning 3383 1.4 christos info for a given symbol. Return TRUE if the symbol is hidden. 3384 1.4 christos 3385 1.10 christos */ 3386 1.4 christos 3387 1.4 christos bool 3388 1.4 christos bfd_hide_sym_by_version (struct bfd_elf_version_tree *verdefs, 3389 1.6 christos const char *sym_name) 3390 1.6 christos { 3391 1.6 christos bool hidden = false; 3392 1.6 christos bfd_find_version_for_sym (verdefs, sym_name, &hidden); 3393 1.6 christos return hidden; 3394 1.6 christos } 3395 1.10 christos 3396 1.6 christos /* 3397 1.6 christos FUNCTION 3398 1.6 christos bfd_link_check_relocs 3399 1.6 christos 3400 1.6 christos SYNOPSIS 3401 1.6 christos bool bfd_link_check_relocs 3402 1.6 christos (bfd *abfd, struct bfd_link_info *info); 3403 1.6 christos 3404 1.6 christos DESCRIPTION 3405 1.10 christos Checks the relocs in ABFD for validity. 3406 1.6 christos Does not execute the relocs. 3407 1.6 christos Return TRUE if everything is OK, FALSE otherwise. 3408 1.6 christos This is the external entry point to this code. 3409 1.6 christos */ 3410 1.6 christos 3411 1.6 christos bool 3412 1.6 christos bfd_link_check_relocs (bfd *abfd, struct bfd_link_info *info) 3413 1.6 christos { 3414 1.6 christos return BFD_SEND (abfd, _bfd_link_check_relocs, (abfd, info)); 3415 1.6 christos } 3416 1.10 christos 3417 1.6 christos /* 3418 1.6 christos FUNCTION 3419 1.6 christos _bfd_generic_link_check_relocs 3420 1.7 christos 3421 1.6 christos SYNOPSIS 3422 1.6 christos bool _bfd_generic_link_check_relocs 3423 1.6 christos (bfd *abfd, struct bfd_link_info *info); 3424 1.6 christos 3425 1.6 christos DESCRIPTION 3426 1.10 christos Stub function for targets that do not implement reloc checking. 3427 1.6 christos Return TRUE. 3428 1.6 christos This is an internal function. It should not be called from 3429 1.6 christos outside the BFD library. 3430 1.10 christos */ 3431 1.6 christos 3432 1.7 christos bool 3433 1.7 christos _bfd_generic_link_check_relocs (bfd *abfd ATTRIBUTE_UNUSED, 3434 1.7 christos struct bfd_link_info *info ATTRIBUTE_UNUSED) 3435 1.7 christos { 3436 1.7 christos return true; 3437 1.7 christos } 3438 1.7 christos 3439 1.7 christos /* 3440 1.7 christos FUNCTION 3441 1.7 christos bfd_merge_private_bfd_data 3442 1.7 christos 3443 1.7 christos DESCRIPTION 3444 1.7 christos Merge private BFD information from the BFD @var{ibfd} to the 3445 1.7 christos the output file BFD when linking. Return <<TRUE>> on success, 3446 1.7 christos <<FALSE>> on error. Possible error returns are: 3447 1.7 christos 3448 1.11 christos o <<bfd_error_no_memory>> - 3449 1.7 christos Not enough memory exists to create private data for @var{obfd}. 3450 1.7 christos 3451 1.7 christos .#define bfd_merge_private_bfd_data(ibfd, info) \ 3452 1.7 christos . BFD_SEND ((info)->output_bfd, _bfd_merge_private_bfd_data, \ 3453 1.7 christos . (ibfd, info)) 3454 1.7 christos . 3455 1.7 christos */ 3456 1.10 christos 3457 1.7 christos /* 3458 1.7 christos INTERNAL_FUNCTION 3459 1.7 christos _bfd_generic_verify_endian_match 3460 1.7 christos 3461 1.7 christos SYNOPSIS 3462 1.7 christos bool _bfd_generic_verify_endian_match 3463 1.7 christos (bfd *ibfd, struct bfd_link_info *info); 3464 1.7 christos 3465 1.10 christos DESCRIPTION 3466 1.7 christos Can be used from / for bfd_merge_private_bfd_data to check that 3467 1.7 christos endianness matches between input and output file. Returns 3468 1.7 christos TRUE for a match, otherwise returns FALSE and emits an error. 3469 1.7 christos */ 3470 1.7 christos 3471 1.7 christos bool 3472 1.7 christos _bfd_generic_verify_endian_match (bfd *ibfd, struct bfd_link_info *info) 3473 1.7 christos { 3474 1.7 christos bfd *obfd = info->output_bfd; 3475 1.8 christos 3476 1.7 christos if (ibfd->xvec->byteorder != obfd->xvec->byteorder 3477 1.7 christos && ibfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN 3478 1.8 christos && obfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN) 3479 1.7 christos { 3480 1.7 christos if (bfd_big_endian (ibfd)) 3481 1.10 christos _bfd_error_handler (_("%pB: compiled for a big endian system " 3482 1.7 christos "and target is little endian"), ibfd); 3483 1.7 christos else 3484 1.10 christos _bfd_error_handler (_("%pB: compiled for a little endian system " 3485 1.7 christos "and target is big endian"), ibfd); 3486 1.8 christos bfd_set_error (bfd_error_wrong_format); 3487 1.8 christos return false; 3488 1.8 christos } 3489 1.8 christos 3490 1.8 christos return true; 3491 1.8 christos } 3492 1.8 christos 3493 1.8 christos int 3494 1.10 christos _bfd_nolink_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, 3495 1.8 christos struct bfd_link_info *info ATTRIBUTE_UNUSED) 3496 1.8 christos { 3497 1.8 christos return 0; 3498 1.10 christos } 3499 1.8 christos 3500 1.8 christos bool 3501 1.8 christos _bfd_nolink_bfd_relax_section (bfd *abfd, 3502 1.8 christos asection *section ATTRIBUTE_UNUSED, 3503 1.8 christos struct bfd_link_info *link_info ATTRIBUTE_UNUSED, 3504 1.8 christos bool *again ATTRIBUTE_UNUSED) 3505 1.8 christos { 3506 1.8 christos return _bfd_bool_bfd_false_error (abfd); 3507 1.8 christos } 3508 1.8 christos 3509 1.10 christos bfd_byte * 3510 1.8 christos _bfd_nolink_bfd_get_relocated_section_contents 3511 1.8 christos (bfd *abfd, 3512 1.8 christos struct bfd_link_info *link_info ATTRIBUTE_UNUSED, 3513 1.8 christos struct bfd_link_order *link_order ATTRIBUTE_UNUSED, 3514 1.8 christos bfd_byte *data ATTRIBUTE_UNUSED, 3515 1.10 christos bool relocatable ATTRIBUTE_UNUSED, 3516 1.8 christos asymbol **symbols ATTRIBUTE_UNUSED) 3517 1.8 christos { 3518 1.8 christos return (bfd_byte *) _bfd_ptr_bfd_null_error (abfd); 3519 1.8 christos } 3520 1.8 christos 3521 1.8 christos bool 3522 1.8 christos _bfd_nolink_bfd_lookup_section_flags 3523 1.8 christos (struct bfd_link_info *info ATTRIBUTE_UNUSED, 3524 1.10 christos struct flag_info *flaginfo ATTRIBUTE_UNUSED, 3525 1.8 christos asection *section) 3526 1.8 christos { 3527 1.8 christos return _bfd_bool_bfd_false_error (section->owner); 3528 1.8 christos } 3529 1.8 christos 3530 1.8 christos bool 3531 1.9 christos _bfd_nolink_bfd_is_group_section (bfd *abfd, 3532 1.9 christos const asection *sec ATTRIBUTE_UNUSED) 3533 1.9 christos { 3534 1.9 christos return _bfd_bool_bfd_false_error (abfd); 3535 1.9 christos } 3536 1.9 christos 3537 1.9 christos const char * 3538 1.10 christos _bfd_nolink_bfd_group_name (bfd *abfd, 3539 1.8 christos const asection *sec ATTRIBUTE_UNUSED) 3540 1.8 christos { 3541 1.8 christos return _bfd_ptr_bfd_null_error (abfd); 3542 1.8 christos } 3543 1.8 christos 3544 1.8 christos bool 3545 1.8 christos _bfd_nolink_bfd_discard_group (bfd *abfd, asection *sec ATTRIBUTE_UNUSED) 3546 1.8 christos { 3547 1.8 christos return _bfd_bool_bfd_false_error (abfd); 3548 1.8 christos } 3549 1.8 christos 3550 1.8 christos struct bfd_link_hash_table * 3551 1.8 christos _bfd_nolink_bfd_link_hash_table_create (bfd *abfd) 3552 1.8 christos { 3553 1.8 christos return (struct bfd_link_hash_table *) _bfd_ptr_bfd_null_error (abfd); 3554 1.8 christos } 3555 1.8 christos 3556 1.8 christos void 3557 1.8 christos _bfd_nolink_bfd_link_just_syms (asection *sec ATTRIBUTE_UNUSED, 3558 1.8 christos struct bfd_link_info *info ATTRIBUTE_UNUSED) 3559 1.8 christos { 3560 1.8 christos } 3561 1.8 christos 3562 1.8 christos void 3563 1.8 christos _bfd_nolink_bfd_copy_link_hash_symbol_type 3564 1.10 christos (bfd *abfd ATTRIBUTE_UNUSED, 3565 1.8 christos struct bfd_link_hash_entry *from ATTRIBUTE_UNUSED, 3566 1.8 christos struct bfd_link_hash_entry *to ATTRIBUTE_UNUSED) 3567 1.8 christos { 3568 1.8 christos } 3569 1.8 christos 3570 1.10 christos bool 3571 1.8 christos _bfd_nolink_bfd_link_split_section (bfd *abfd, asection *sec ATTRIBUTE_UNUSED) 3572 1.8 christos { 3573 1.8 christos return _bfd_bool_bfd_false_error (abfd); 3574 1.8 christos } 3575 1.8 christos 3576 1.8 christos bool 3577 1.8 christos _bfd_nolink_section_already_linked (bfd *abfd, 3578 1.10 christos asection *sec ATTRIBUTE_UNUSED, 3579 1.8 christos struct bfd_link_info *info ATTRIBUTE_UNUSED) 3580 1.8 christos { 3581 1.8 christos return _bfd_bool_bfd_false_error (abfd); 3582 1.8 christos } 3583 1.8 christos 3584 1.8 christos bool 3585 1.8 christos _bfd_nolink_bfd_define_common_symbol 3586 1.8 christos (bfd *abfd, 3587 1.8 christos struct bfd_link_info *info ATTRIBUTE_UNUSED, 3588 1.8 christos struct bfd_link_hash_entry *h ATTRIBUTE_UNUSED) 3589 1.8 christos { 3590 1.8 christos return _bfd_bool_bfd_false_error (abfd); 3591 1.8 christos } 3592 1.8 christos 3593 1.8 christos struct bfd_link_hash_entry * 3594 _bfd_nolink_bfd_define_start_stop (struct bfd_link_info *info ATTRIBUTE_UNUSED, 3595 const char *name ATTRIBUTE_UNUSED, 3596 asection *sec) 3597 { 3598 return (struct bfd_link_hash_entry *) _bfd_ptr_bfd_null_error (sec->owner); 3599 } 3600