1 /* ELF executable support for BFD. 2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 3 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 4 5 Written by Fred Fish @ Cygnus Support, from information published 6 in "UNIX System V Release 4, Programmers Guide: ANSI C and 7 Programming Support Tools". Sufficient support for gdb. 8 9 Rewritten by Mark Eichin @ Cygnus Support, from information 10 published in "System V Application Binary Interface", chapters 4 11 and 5, as well as the various "Processor Supplement" documents 12 derived from it. Added support for assembler and other object file 13 utilities. Further work done by Ken Raeburn (Cygnus Support), Michael 14 Meissner (Open Software Foundation), and Peter Hoogenboom (University 15 of Utah) to finish and extend this. 16 17 This file is part of BFD, the Binary File Descriptor library. 18 19 This program is free software; you can redistribute it and/or modify 20 it under the terms of the GNU General Public License as published by 21 the Free Software Foundation; either version 2 of the License, or 22 (at your option) any later version. 23 24 This program is distributed in the hope that it will be useful, 25 but WITHOUT ANY WARRANTY; without even the implied warranty of 26 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 27 GNU General Public License for more details. 28 29 You should have received a copy of the GNU General Public License 30 along with this program; if not, write to the Free Software 31 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ 32 33 /* Problems and other issues to resolve. 34 35 (1) BFD expects there to be some fixed number of "sections" in 36 the object file. I.E. there is a "section_count" variable in the 37 bfd structure which contains the number of sections. However, ELF 38 supports multiple "views" of a file. In particular, with current 39 implementations, executable files typically have two tables, a 40 program header table and a section header table, both of which 41 partition the executable. 42 43 In ELF-speak, the "linking view" of the file uses the section header 44 table to access "sections" within the file, and the "execution view" 45 uses the program header table to access "segments" within the file. 46 "Segments" typically may contain all the data from one or more 47 "sections". 48 49 Note that the section header table is optional in ELF executables, 50 but it is this information that is most useful to gdb. If the 51 section header table is missing, then gdb should probably try 52 to make do with the program header table. (FIXME) 53 54 (2) The code in this file is compiled twice, once in 32-bit mode and 55 once in 64-bit mode. More of it should be made size-independent 56 and moved into elf.c. 57 58 (3) ELF section symbols are handled rather sloppily now. This should 59 be cleaned up, and ELF section symbols reconciled with BFD section 60 symbols. 61 62 (4) We need a published spec for 64-bit ELF. We've got some stuff here 63 that we're using for SPARC V9 64-bit chips, but don't assume that 64 it's cast in stone. 65 */ 66 67 #include "bfd.h" 68 #include "sysdep.h" 69 #include "libiberty.h" 70 #include "bfdlink.h" 71 #include "libbfd.h" 72 #include "elf-bfd.h" 73 74 /* Renaming structures, typedefs, macros and functions to be size-specific. */ 75 #define Elf_External_Ehdr NAME(Elf,External_Ehdr) 76 #define Elf_External_Sym NAME(Elf,External_Sym) 77 #define Elf_External_Shdr NAME(Elf,External_Shdr) 78 #define Elf_External_Phdr NAME(Elf,External_Phdr) 79 #define Elf_External_Rel NAME(Elf,External_Rel) 80 #define Elf_External_Rela NAME(Elf,External_Rela) 81 #define Elf_External_Dyn NAME(Elf,External_Dyn) 82 83 #define elf_core_file_failing_command NAME(bfd_elf,core_file_failing_command) 84 #define elf_core_file_failing_signal NAME(bfd_elf,core_file_failing_signal) 85 #define elf_core_file_matches_executable_p \ 86 NAME(bfd_elf,core_file_matches_executable_p) 87 #define elf_object_p NAME(bfd_elf,object_p) 88 #define elf_core_file_p NAME(bfd_elf,core_file_p) 89 #define elf_get_symtab_upper_bound NAME(bfd_elf,get_symtab_upper_bound) 90 #define elf_get_dynamic_symtab_upper_bound \ 91 NAME(bfd_elf,get_dynamic_symtab_upper_bound) 92 #define elf_swap_reloc_in NAME(bfd_elf,swap_reloc_in) 93 #define elf_swap_reloca_in NAME(bfd_elf,swap_reloca_in) 94 #define elf_swap_reloc_out NAME(bfd_elf,swap_reloc_out) 95 #define elf_swap_reloca_out NAME(bfd_elf,swap_reloca_out) 96 #define elf_swap_symbol_in NAME(bfd_elf,swap_symbol_in) 97 #define elf_swap_symbol_out NAME(bfd_elf,swap_symbol_out) 98 #define elf_swap_phdr_in NAME(bfd_elf,swap_phdr_in) 99 #define elf_swap_phdr_out NAME(bfd_elf,swap_phdr_out) 100 #define elf_swap_dyn_in NAME(bfd_elf,swap_dyn_in) 101 #define elf_swap_dyn_out NAME(bfd_elf,swap_dyn_out) 102 #define elf_get_reloc_upper_bound NAME(bfd_elf,get_reloc_upper_bound) 103 #define elf_canonicalize_reloc NAME(bfd_elf,canonicalize_reloc) 104 #define elf_slurp_symbol_table NAME(bfd_elf,slurp_symbol_table) 105 #define elf_canonicalize_symtab NAME(bfd_elf,canonicalize_symtab) 106 #define elf_canonicalize_dynamic_symtab \ 107 NAME(bfd_elf,canonicalize_dynamic_symtab) 108 #define elf_get_synthetic_symtab \ 109 NAME(bfd_elf,get_synthetic_symtab) 110 #define elf_make_empty_symbol NAME(bfd_elf,make_empty_symbol) 111 #define elf_get_symbol_info NAME(bfd_elf,get_symbol_info) 112 #define elf_get_lineno NAME(bfd_elf,get_lineno) 113 #define elf_set_arch_mach NAME(bfd_elf,set_arch_mach) 114 #define elf_find_nearest_line NAME(bfd_elf,find_nearest_line) 115 #define elf_sizeof_headers NAME(bfd_elf,sizeof_headers) 116 #define elf_set_section_contents NAME(bfd_elf,set_section_contents) 117 #define elf_no_info_to_howto NAME(bfd_elf,no_info_to_howto) 118 #define elf_no_info_to_howto_rel NAME(bfd_elf,no_info_to_howto_rel) 119 #define elf_find_section NAME(bfd_elf,find_section) 120 #define elf_write_shdrs_and_ehdr NAME(bfd_elf,write_shdrs_and_ehdr) 121 #define elf_write_out_phdrs NAME(bfd_elf,write_out_phdrs) 122 #define elf_write_relocs NAME(bfd_elf,write_relocs) 123 #define elf_slurp_reloc_table NAME(bfd_elf,slurp_reloc_table) 124 125 #if ARCH_SIZE == 64 126 #define ELF_R_INFO(X,Y) ELF64_R_INFO(X,Y) 127 #define ELF_R_SYM(X) ELF64_R_SYM(X) 128 #define ELF_R_TYPE(X) ELF64_R_TYPE(X) 129 #define ELFCLASS ELFCLASS64 130 #define FILE_ALIGN 8 131 #define LOG_FILE_ALIGN 3 132 #endif 133 #if ARCH_SIZE == 32 134 #define ELF_R_INFO(X,Y) ELF32_R_INFO(X,Y) 135 #define ELF_R_SYM(X) ELF32_R_SYM(X) 136 #define ELF_R_TYPE(X) ELF32_R_TYPE(X) 137 #define ELFCLASS ELFCLASS32 138 #define FILE_ALIGN 4 139 #define LOG_FILE_ALIGN 2 140 #endif 141 142 #ifdef DEBUG 143 static void elf_debug_section (int, Elf_Internal_Shdr *); 144 static void elf_debug_file (Elf_Internal_Ehdr *); 145 static char *elf_symbol_flags (flagword); 146 #endif 147 148 /* Structure swapping routines */ 149 150 /* Should perhaps use put_offset, put_word, etc. For now, the two versions 151 can be handled by explicitly specifying 32 bits or "the long type". */ 152 #if ARCH_SIZE == 64 153 #define H_PUT_WORD H_PUT_64 154 #define H_PUT_SIGNED_WORD H_PUT_S64 155 #define H_GET_WORD H_GET_64 156 #define H_GET_SIGNED_WORD H_GET_S64 157 #endif 158 #if ARCH_SIZE == 32 159 #define H_PUT_WORD H_PUT_32 160 #define H_PUT_SIGNED_WORD H_PUT_S32 161 #define H_GET_WORD H_GET_32 162 #define H_GET_SIGNED_WORD H_GET_S32 163 #endif 164 165 /* Translate an ELF symbol in external format into an ELF symbol in internal 166 format. */ 167 168 void 169 elf_swap_symbol_in (bfd *abfd, 170 const void *psrc, 171 const void *pshn, 172 Elf_Internal_Sym *dst) 173 { 174 const Elf_External_Sym *src = psrc; 175 const Elf_External_Sym_Shndx *shndx = pshn; 176 int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma; 177 178 dst->st_name = H_GET_32 (abfd, src->st_name); 179 if (signed_vma) 180 dst->st_value = H_GET_SIGNED_WORD (abfd, src->st_value); 181 else 182 dst->st_value = H_GET_WORD (abfd, src->st_value); 183 dst->st_size = H_GET_WORD (abfd, src->st_size); 184 dst->st_info = H_GET_8 (abfd, src->st_info); 185 dst->st_other = H_GET_8 (abfd, src->st_other); 186 dst->st_shndx = H_GET_16 (abfd, src->st_shndx); 187 if (dst->st_shndx == SHN_XINDEX) 188 { 189 if (shndx == NULL) 190 abort (); 191 dst->st_shndx = H_GET_32 (abfd, shndx->est_shndx); 192 } 193 } 194 195 /* Translate an ELF symbol in internal format into an ELF symbol in external 196 format. */ 197 198 void 199 elf_swap_symbol_out (bfd *abfd, 200 const Elf_Internal_Sym *src, 201 void *cdst, 202 void *shndx) 203 { 204 unsigned int tmp; 205 Elf_External_Sym *dst = cdst; 206 H_PUT_32 (abfd, src->st_name, dst->st_name); 207 H_PUT_WORD (abfd, src->st_value, dst->st_value); 208 H_PUT_WORD (abfd, src->st_size, dst->st_size); 209 H_PUT_8 (abfd, src->st_info, dst->st_info); 210 H_PUT_8 (abfd, src->st_other, dst->st_other); 211 tmp = src->st_shndx; 212 if (tmp > SHN_HIRESERVE) 213 { 214 if (shndx == NULL) 215 abort (); 216 H_PUT_32 (abfd, tmp, shndx); 217 tmp = SHN_XINDEX; 218 } 219 H_PUT_16 (abfd, tmp, dst->st_shndx); 220 } 221 222 /* Translate an ELF file header in external format into an ELF file header in 223 internal format. */ 224 225 static void 226 elf_swap_ehdr_in (bfd *abfd, 227 const Elf_External_Ehdr *src, 228 Elf_Internal_Ehdr *dst) 229 { 230 int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma; 231 memcpy (dst->e_ident, src->e_ident, EI_NIDENT); 232 dst->e_type = H_GET_16 (abfd, src->e_type); 233 dst->e_machine = H_GET_16 (abfd, src->e_machine); 234 dst->e_version = H_GET_32 (abfd, src->e_version); 235 if (signed_vma) 236 dst->e_entry = H_GET_SIGNED_WORD (abfd, src->e_entry); 237 else 238 dst->e_entry = H_GET_WORD (abfd, src->e_entry); 239 dst->e_phoff = H_GET_WORD (abfd, src->e_phoff); 240 dst->e_shoff = H_GET_WORD (abfd, src->e_shoff); 241 dst->e_flags = H_GET_32 (abfd, src->e_flags); 242 dst->e_ehsize = H_GET_16 (abfd, src->e_ehsize); 243 dst->e_phentsize = H_GET_16 (abfd, src->e_phentsize); 244 dst->e_phnum = H_GET_16 (abfd, src->e_phnum); 245 dst->e_shentsize = H_GET_16 (abfd, src->e_shentsize); 246 dst->e_shnum = H_GET_16 (abfd, src->e_shnum); 247 dst->e_shstrndx = H_GET_16 (abfd, src->e_shstrndx); 248 } 249 250 /* Translate an ELF file header in internal format into an ELF file header in 251 external format. */ 252 253 static void 254 elf_swap_ehdr_out (bfd *abfd, 255 const Elf_Internal_Ehdr *src, 256 Elf_External_Ehdr *dst) 257 { 258 unsigned int tmp; 259 int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma; 260 memcpy (dst->e_ident, src->e_ident, EI_NIDENT); 261 /* note that all elements of dst are *arrays of unsigned char* already... */ 262 H_PUT_16 (abfd, src->e_type, dst->e_type); 263 H_PUT_16 (abfd, src->e_machine, dst->e_machine); 264 H_PUT_32 (abfd, src->e_version, dst->e_version); 265 if (signed_vma) 266 H_PUT_SIGNED_WORD (abfd, src->e_entry, dst->e_entry); 267 else 268 H_PUT_WORD (abfd, src->e_entry, dst->e_entry); 269 H_PUT_WORD (abfd, src->e_phoff, dst->e_phoff); 270 H_PUT_WORD (abfd, src->e_shoff, dst->e_shoff); 271 H_PUT_32 (abfd, src->e_flags, dst->e_flags); 272 H_PUT_16 (abfd, src->e_ehsize, dst->e_ehsize); 273 H_PUT_16 (abfd, src->e_phentsize, dst->e_phentsize); 274 tmp = src->e_phnum; 275 if (tmp >= PN_XNUM) 276 tmp = PN_XNUM; 277 H_PUT_16 (abfd, tmp, dst->e_phnum); 278 H_PUT_16 (abfd, src->e_shentsize, dst->e_shentsize); 279 tmp = src->e_shnum; 280 if (tmp >= SHN_LORESERVE) 281 tmp = SHN_UNDEF; 282 H_PUT_16 (abfd, tmp, dst->e_shnum); 283 tmp = src->e_shstrndx; 284 if (tmp >= SHN_LORESERVE) 285 tmp = SHN_XINDEX; 286 H_PUT_16 (abfd, tmp, dst->e_shstrndx); 287 } 288 289 /* Translate an ELF section header table entry in external format into an 290 ELF section header table entry in internal format. */ 291 292 static void 293 elf_swap_shdr_in (bfd *abfd, 294 const Elf_External_Shdr *src, 295 Elf_Internal_Shdr *dst) 296 { 297 int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma; 298 299 dst->sh_name = H_GET_32 (abfd, src->sh_name); 300 dst->sh_type = H_GET_32 (abfd, src->sh_type); 301 dst->sh_flags = H_GET_WORD (abfd, src->sh_flags); 302 if (signed_vma) 303 dst->sh_addr = H_GET_SIGNED_WORD (abfd, src->sh_addr); 304 else 305 dst->sh_addr = H_GET_WORD (abfd, src->sh_addr); 306 dst->sh_offset = H_GET_WORD (abfd, src->sh_offset); 307 dst->sh_size = H_GET_WORD (abfd, src->sh_size); 308 dst->sh_link = H_GET_32 (abfd, src->sh_link); 309 dst->sh_info = H_GET_32 (abfd, src->sh_info); 310 dst->sh_addralign = H_GET_WORD (abfd, src->sh_addralign); 311 dst->sh_entsize = H_GET_WORD (abfd, src->sh_entsize); 312 dst->bfd_section = NULL; 313 dst->contents = NULL; 314 } 315 316 /* Translate an ELF section header table entry in internal format into an 317 ELF section header table entry in external format. */ 318 319 static void 320 elf_swap_shdr_out (bfd *abfd, 321 const Elf_Internal_Shdr *src, 322 Elf_External_Shdr *dst) 323 { 324 /* note that all elements of dst are *arrays of unsigned char* already... */ 325 H_PUT_32 (abfd, src->sh_name, dst->sh_name); 326 H_PUT_32 (abfd, src->sh_type, dst->sh_type); 327 H_PUT_WORD (abfd, src->sh_flags, dst->sh_flags); 328 H_PUT_WORD (abfd, src->sh_addr, dst->sh_addr); 329 H_PUT_WORD (abfd, src->sh_offset, dst->sh_offset); 330 H_PUT_WORD (abfd, src->sh_size, dst->sh_size); 331 H_PUT_32 (abfd, src->sh_link, dst->sh_link); 332 H_PUT_32 (abfd, src->sh_info, dst->sh_info); 333 H_PUT_WORD (abfd, src->sh_addralign, dst->sh_addralign); 334 H_PUT_WORD (abfd, src->sh_entsize, dst->sh_entsize); 335 } 336 337 /* Translate an ELF program header table entry in external format into an 338 ELF program header table entry in internal format. */ 339 340 void 341 elf_swap_phdr_in (bfd *abfd, 342 const Elf_External_Phdr *src, 343 Elf_Internal_Phdr *dst) 344 { 345 int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma; 346 347 dst->p_type = H_GET_32 (abfd, src->p_type); 348 dst->p_flags = H_GET_32 (abfd, src->p_flags); 349 dst->p_offset = H_GET_WORD (abfd, src->p_offset); 350 if (signed_vma) 351 { 352 dst->p_vaddr = H_GET_SIGNED_WORD (abfd, src->p_vaddr); 353 dst->p_paddr = H_GET_SIGNED_WORD (abfd, src->p_paddr); 354 } 355 else 356 { 357 dst->p_vaddr = H_GET_WORD (abfd, src->p_vaddr); 358 dst->p_paddr = H_GET_WORD (abfd, src->p_paddr); 359 } 360 dst->p_filesz = H_GET_WORD (abfd, src->p_filesz); 361 dst->p_memsz = H_GET_WORD (abfd, src->p_memsz); 362 dst->p_align = H_GET_WORD (abfd, src->p_align); 363 } 364 365 void 366 elf_swap_phdr_out (bfd *abfd, 367 const Elf_Internal_Phdr *src, 368 Elf_External_Phdr *dst) 369 { 370 /* note that all elements of dst are *arrays of unsigned char* already... */ 371 H_PUT_32 (abfd, src->p_type, dst->p_type); 372 H_PUT_WORD (abfd, src->p_offset, dst->p_offset); 373 H_PUT_WORD (abfd, src->p_vaddr, dst->p_vaddr); 374 H_PUT_WORD (abfd, src->p_paddr, dst->p_paddr); 375 H_PUT_WORD (abfd, src->p_filesz, dst->p_filesz); 376 H_PUT_WORD (abfd, src->p_memsz, dst->p_memsz); 377 H_PUT_32 (abfd, src->p_flags, dst->p_flags); 378 H_PUT_WORD (abfd, src->p_align, dst->p_align); 379 } 380 381 /* Translate an ELF reloc from external format to internal format. */ 382 void 383 elf_swap_reloc_in (bfd *abfd, 384 const bfd_byte *s, 385 Elf_Internal_Rela *dst) 386 { 387 const Elf_External_Rel *src = (const Elf_External_Rel *) s; 388 dst->r_offset = H_GET_WORD (abfd, src->r_offset); 389 dst->r_info = H_GET_WORD (abfd, src->r_info); 390 dst->r_addend = 0; 391 } 392 393 void 394 elf_swap_reloca_in (bfd *abfd, 395 const bfd_byte *s, 396 Elf_Internal_Rela *dst) 397 { 398 const Elf_External_Rela *src = (const Elf_External_Rela *) s; 399 dst->r_offset = H_GET_WORD (abfd, src->r_offset); 400 dst->r_info = H_GET_WORD (abfd, src->r_info); 401 dst->r_addend = H_GET_SIGNED_WORD (abfd, src->r_addend); 402 } 403 404 /* Translate an ELF reloc from internal format to external format. */ 405 void 406 elf_swap_reloc_out (bfd *abfd, 407 const Elf_Internal_Rela *src, 408 bfd_byte *d) 409 { 410 Elf_External_Rel *dst = (Elf_External_Rel *) d; 411 H_PUT_WORD (abfd, src->r_offset, dst->r_offset); 412 H_PUT_WORD (abfd, src->r_info, dst->r_info); 413 } 414 415 void 416 elf_swap_reloca_out (bfd *abfd, 417 const Elf_Internal_Rela *src, 418 bfd_byte *d) 419 { 420 Elf_External_Rela *dst = (Elf_External_Rela *) d; 421 H_PUT_WORD (abfd, src->r_offset, dst->r_offset); 422 H_PUT_WORD (abfd, src->r_info, dst->r_info); 423 H_PUT_SIGNED_WORD (abfd, src->r_addend, dst->r_addend); 424 } 425 426 void 427 elf_swap_dyn_in (bfd *abfd, 428 const void *p, 429 Elf_Internal_Dyn *dst) 430 { 431 const Elf_External_Dyn *src = p; 432 433 dst->d_tag = H_GET_WORD (abfd, src->d_tag); 434 dst->d_un.d_val = H_GET_WORD (abfd, src->d_un.d_val); 435 } 436 437 void 438 elf_swap_dyn_out (bfd *abfd, 439 const Elf_Internal_Dyn *src, 440 void *p) 441 { 442 Elf_External_Dyn *dst = p; 443 444 H_PUT_WORD (abfd, src->d_tag, dst->d_tag); 445 H_PUT_WORD (abfd, src->d_un.d_val, dst->d_un.d_val); 446 } 447 448 /* ELF .o/exec file reading */ 449 450 /* Begin processing a given object. 451 452 First we validate the file by reading in the ELF header and checking 453 the magic number. */ 454 455 static inline bfd_boolean 456 elf_file_p (Elf_External_Ehdr *x_ehdrp) 457 { 458 return ((x_ehdrp->e_ident[EI_MAG0] == ELFMAG0) 459 && (x_ehdrp->e_ident[EI_MAG1] == ELFMAG1) 460 && (x_ehdrp->e_ident[EI_MAG2] == ELFMAG2) 461 && (x_ehdrp->e_ident[EI_MAG3] == ELFMAG3)); 462 } 463 464 /* Determines if a given section index is valid. */ 465 466 static inline bfd_boolean 467 valid_section_index_p (unsigned index, unsigned num_sections) 468 { 469 /* Note: We allow SHN_UNDEF as a valid section index. */ 470 if (index < SHN_LORESERVE || index > SHN_HIRESERVE) 471 return index < num_sections; 472 473 /* We disallow the use of reserved indcies, except for those 474 with OS or Application specific meaning. The test make use 475 of the knowledge that: 476 SHN_LORESERVE == SHN_LOPROC 477 and 478 SHN_HIPROC == SHN_LOOS - 1 */ 479 /* XXX - Should we allow SHN_XINDEX as a valid index here ? */ 480 return (index >= SHN_LOPROC && index <= SHN_HIOS); 481 } 482 483 /* Check to see if the file associated with ABFD matches the target vector 484 that ABFD points to. 485 486 Note that we may be called several times with the same ABFD, but different 487 target vectors, most of which will not match. We have to avoid leaving 488 any side effects in ABFD, or any data it points to (like tdata), if the 489 file does not match the target vector. */ 490 491 const bfd_target * 492 elf_object_p (bfd *abfd) 493 { 494 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */ 495 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */ 496 Elf_External_Shdr x_shdr; /* Section header table entry, external form */ 497 Elf_Internal_Shdr i_shdr; 498 Elf_Internal_Shdr *i_shdrp; /* Section header table, internal form */ 499 unsigned int shindex; 500 const struct elf_backend_data *ebd; 501 struct bfd_preserve preserve; 502 asection *s; 503 bfd_size_type amt; 504 505 preserve.marker = NULL; 506 507 /* Read in the ELF header in external format. */ 508 509 if (bfd_bread (&x_ehdr, sizeof (x_ehdr), abfd) != sizeof (x_ehdr)) 510 { 511 if (bfd_get_error () != bfd_error_system_call) 512 goto got_wrong_format_error; 513 else 514 goto got_no_match; 515 } 516 517 /* Now check to see if we have a valid ELF file, and one that BFD can 518 make use of. The magic number must match, the address size ('class') 519 and byte-swapping must match our XVEC entry, and it must have a 520 section header table (FIXME: See comments re sections at top of this 521 file). */ 522 523 if (! elf_file_p (&x_ehdr) 524 || x_ehdr.e_ident[EI_VERSION] != EV_CURRENT 525 || x_ehdr.e_ident[EI_CLASS] != ELFCLASS) 526 goto got_wrong_format_error; 527 528 /* Check that file's byte order matches xvec's */ 529 switch (x_ehdr.e_ident[EI_DATA]) 530 { 531 case ELFDATA2MSB: /* Big-endian */ 532 if (! bfd_header_big_endian (abfd)) 533 goto got_wrong_format_error; 534 break; 535 case ELFDATA2LSB: /* Little-endian */ 536 if (! bfd_header_little_endian (abfd)) 537 goto got_wrong_format_error; 538 break; 539 case ELFDATANONE: /* No data encoding specified */ 540 default: /* Unknown data encoding specified */ 541 goto got_wrong_format_error; 542 } 543 544 if (!bfd_preserve_save (abfd, &preserve)) 545 goto got_no_match; 546 547 /* Allocate an instance of the elf_obj_tdata structure and hook it up to 548 the tdata pointer in the bfd. */ 549 550 if (! (*abfd->xvec->_bfd_set_format[bfd_object]) (abfd)) 551 goto got_no_match; 552 preserve.marker = elf_tdata (abfd); 553 554 /* Now that we know the byte order, swap in the rest of the header */ 555 i_ehdrp = elf_elfheader (abfd); 556 elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp); 557 #if DEBUG & 1 558 elf_debug_file (i_ehdrp); 559 #endif 560 561 /* Reject ET_CORE (header indicates core file, not object file) */ 562 if (i_ehdrp->e_type == ET_CORE) 563 goto got_wrong_format_error; 564 565 /* If this is a relocatable file and there is no section header 566 table, then we're hosed. */ 567 if (i_ehdrp->e_shoff == 0 && i_ehdrp->e_type == ET_REL) 568 goto got_wrong_format_error; 569 570 /* As a simple sanity check, verify that what BFD thinks is the 571 size of each section header table entry actually matches the size 572 recorded in the file, but only if there are any sections. */ 573 if (i_ehdrp->e_shentsize != sizeof (x_shdr) && i_ehdrp->e_shnum != 0) 574 goto got_wrong_format_error; 575 576 /* Further sanity check. */ 577 if (i_ehdrp->e_shoff == 0 && i_ehdrp->e_shnum != 0) 578 goto got_wrong_format_error; 579 580 ebd = get_elf_backend_data (abfd); 581 582 /* Check that the ELF e_machine field matches what this particular 583 BFD format expects. */ 584 if (ebd->elf_machine_code != i_ehdrp->e_machine 585 && (ebd->elf_machine_alt1 == 0 586 || i_ehdrp->e_machine != ebd->elf_machine_alt1) 587 && (ebd->elf_machine_alt2 == 0 588 || i_ehdrp->e_machine != ebd->elf_machine_alt2)) 589 { 590 const bfd_target * const *target_ptr; 591 592 if (ebd->elf_machine_code != EM_NONE) 593 goto got_wrong_format_error; 594 595 /* This is the generic ELF target. Let it match any ELF target 596 for which we do not have a specific backend. */ 597 for (target_ptr = bfd_target_vector; *target_ptr != NULL; target_ptr++) 598 { 599 const struct elf_backend_data *back; 600 601 if ((*target_ptr)->flavour != bfd_target_elf_flavour) 602 continue; 603 back = (const struct elf_backend_data *) (*target_ptr)->backend_data; 604 if (back->elf_machine_code == i_ehdrp->e_machine 605 || (back->elf_machine_alt1 != 0 606 && back->elf_machine_alt1 == i_ehdrp->e_machine) 607 || (back->elf_machine_alt2 != 0 608 && back->elf_machine_alt2 == i_ehdrp->e_machine)) 609 { 610 /* target_ptr is an ELF backend which matches this 611 object file, so reject the generic ELF target. */ 612 goto got_wrong_format_error; 613 } 614 } 615 } 616 617 if (i_ehdrp->e_type == ET_EXEC) 618 abfd->flags |= EXEC_P; 619 else if (i_ehdrp->e_type == ET_DYN) 620 abfd->flags |= DYNAMIC; 621 622 if (i_ehdrp->e_phnum > 0) 623 abfd->flags |= D_PAGED; 624 625 if (! bfd_default_set_arch_mach (abfd, ebd->arch, 0)) 626 { 627 /* It's OK if this fails for the generic target. */ 628 if (ebd->elf_machine_code != EM_NONE) 629 goto got_no_match; 630 } 631 632 if (i_ehdrp->e_shoff != 0) 633 { 634 bfd_signed_vma where = i_ehdrp->e_shoff; 635 636 if (where != (file_ptr) where) 637 goto got_wrong_format_error; 638 639 /* Seek to the section header table in the file. */ 640 if (bfd_seek (abfd, (file_ptr) where, SEEK_SET) != 0) 641 goto got_no_match; 642 643 /* Read the first section header at index 0, and convert to internal 644 form. */ 645 if (bfd_bread (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr)) 646 goto got_no_match; 647 elf_swap_shdr_in (abfd, &x_shdr, &i_shdr); 648 649 /* If the section count is zero, the actual count is in the first 650 section header. */ 651 if (i_ehdrp->e_shnum == SHN_UNDEF) 652 { 653 i_ehdrp->e_shnum = i_shdr.sh_size; 654 if (i_ehdrp->e_shnum != i_shdr.sh_size 655 || i_ehdrp->e_shnum == 0) 656 goto got_wrong_format_error; 657 } 658 659 /* And similarly for the string table index. */ 660 if (i_ehdrp->e_shstrndx == SHN_XINDEX) 661 { 662 i_ehdrp->e_shstrndx = i_shdr.sh_link; 663 if (i_ehdrp->e_shstrndx != i_shdr.sh_link) 664 goto got_wrong_format_error; 665 } 666 667 /* And similarly for the program header count. */ 668 if (i_ehdrp->e_phnum == PN_XNUM) 669 { 670 i_ehdrp->e_phnum = i_shdr.sh_info; 671 if (i_ehdrp->e_phnum != i_shdr.sh_info) 672 goto got_wrong_format_error; 673 } 674 675 /* Sanity check that we can read all of the section headers. 676 It ought to be good enough to just read the last one. */ 677 if (i_ehdrp->e_shnum != 1) 678 { 679 /* Check that we don't have a totally silly number of sections. */ 680 if (i_ehdrp->e_shnum > (unsigned int) -1 / sizeof (x_shdr) 681 || i_ehdrp->e_shnum > (unsigned int) -1 / sizeof (i_shdr)) 682 goto got_wrong_format_error; 683 684 where += (i_ehdrp->e_shnum - 1) * sizeof (x_shdr); 685 if (where != (file_ptr) where) 686 goto got_wrong_format_error; 687 if ((bfd_size_type) where <= i_ehdrp->e_shoff) 688 goto got_wrong_format_error; 689 690 if (bfd_seek (abfd, (file_ptr) where, SEEK_SET) != 0) 691 goto got_no_match; 692 if (bfd_bread (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr)) 693 goto got_no_match; 694 695 /* Back to where we were. */ 696 where = i_ehdrp->e_shoff + sizeof (x_shdr); 697 if (bfd_seek (abfd, (file_ptr) where, SEEK_SET) != 0) 698 goto got_no_match; 699 } 700 } 701 702 /* Allocate space for a copy of the section header table in 703 internal form. */ 704 if (i_ehdrp->e_shnum != 0) 705 { 706 Elf_Internal_Shdr *shdrp; 707 unsigned int num_sec; 708 709 amt = sizeof (*i_shdrp) * i_ehdrp->e_shnum; 710 i_shdrp = bfd_alloc (abfd, amt); 711 if (!i_shdrp) 712 goto got_no_match; 713 num_sec = i_ehdrp->e_shnum; 714 if (num_sec > SHN_LORESERVE) 715 num_sec += SHN_HIRESERVE + 1 - SHN_LORESERVE; 716 elf_numsections (abfd) = num_sec; 717 amt = sizeof (i_shdrp) * num_sec; 718 elf_elfsections (abfd) = bfd_alloc (abfd, amt); 719 if (!elf_elfsections (abfd)) 720 goto got_no_match; 721 722 memcpy (i_shdrp, &i_shdr, sizeof (*i_shdrp)); 723 shdrp = i_shdrp; 724 shindex = 0; 725 if (num_sec > SHN_LORESERVE) 726 { 727 for ( ; shindex < SHN_LORESERVE; shindex++) 728 elf_elfsections (abfd)[shindex] = shdrp++; 729 for ( ; shindex < SHN_HIRESERVE + 1; shindex++) 730 elf_elfsections (abfd)[shindex] = i_shdrp; 731 } 732 for ( ; shindex < num_sec; shindex++) 733 elf_elfsections (abfd)[shindex] = shdrp++; 734 735 /* Read in the rest of the section header table and convert it 736 to internal form. */ 737 for (shindex = 1; shindex < i_ehdrp->e_shnum; shindex++) 738 { 739 if (bfd_bread (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr)) 740 goto got_no_match; 741 elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex); 742 743 /* Sanity check sh_link and sh_info. */ 744 if (! valid_section_index_p (i_shdrp[shindex].sh_link, num_sec)) 745 goto got_wrong_format_error; 746 747 if (((i_shdrp[shindex].sh_flags & SHF_INFO_LINK) 748 || i_shdrp[shindex].sh_type == SHT_RELA 749 || i_shdrp[shindex].sh_type == SHT_REL) 750 && ! valid_section_index_p (i_shdrp[shindex].sh_info, num_sec)) 751 goto got_wrong_format_error; 752 753 /* If the section is loaded, but not page aligned, clear 754 D_PAGED. */ 755 if (i_shdrp[shindex].sh_size != 0 756 && (i_shdrp[shindex].sh_flags & SHF_ALLOC) != 0 757 && i_shdrp[shindex].sh_type != SHT_NOBITS 758 && (((i_shdrp[shindex].sh_addr - i_shdrp[shindex].sh_offset) 759 % ebd->minpagesize) 760 != 0)) 761 abfd->flags &= ~D_PAGED; 762 } 763 } 764 765 /* A further sanity check. */ 766 if (i_ehdrp->e_shnum != 0) 767 { 768 if (! valid_section_index_p (i_ehdrp->e_shstrndx, elf_numsections (abfd))) 769 { 770 /* PR 2257: 771 We used to just goto got_wrong_format_error here 772 but there are binaries in existance for which this test 773 will prevent the binutils from working with them at all. 774 So we are kind, and reset the string index value to 0 775 so that at least some processing can be done. */ 776 i_ehdrp->e_shstrndx = SHN_UNDEF; 777 _bfd_error_handler (_("warning: %s has a corrupt string table index - ignoring"), abfd->filename); 778 } 779 } 780 else if (i_ehdrp->e_shstrndx != SHN_UNDEF) 781 goto got_wrong_format_error; 782 783 /* Read in the program headers. */ 784 if (i_ehdrp->e_phnum == 0) 785 elf_tdata (abfd)->phdr = NULL; 786 else 787 { 788 Elf_Internal_Phdr *i_phdr; 789 unsigned int i; 790 791 amt = i_ehdrp->e_phnum * sizeof (Elf_Internal_Phdr); 792 elf_tdata (abfd)->phdr = bfd_alloc (abfd, amt); 793 if (elf_tdata (abfd)->phdr == NULL) 794 goto got_no_match; 795 if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_phoff, SEEK_SET) != 0) 796 goto got_no_match; 797 i_phdr = elf_tdata (abfd)->phdr; 798 for (i = 0; i < i_ehdrp->e_phnum; i++, i_phdr++) 799 { 800 Elf_External_Phdr x_phdr; 801 802 if (bfd_bread (&x_phdr, sizeof x_phdr, abfd) != sizeof x_phdr) 803 goto got_no_match; 804 elf_swap_phdr_in (abfd, &x_phdr, i_phdr); 805 } 806 } 807 808 if (i_ehdrp->e_shstrndx != 0 && i_ehdrp->e_shoff != 0) 809 { 810 unsigned int num_sec; 811 812 /* Once all of the section headers have been read and converted, we 813 can start processing them. Note that the first section header is 814 a dummy placeholder entry, so we ignore it. */ 815 num_sec = elf_numsections (abfd); 816 for (shindex = 1; shindex < num_sec; shindex++) 817 { 818 if (! bfd_section_from_shdr (abfd, shindex)) 819 goto got_no_match; 820 if (shindex == SHN_LORESERVE - 1) 821 shindex += SHN_HIRESERVE + 1 - SHN_LORESERVE; 822 } 823 824 /* Set up ELF sections for SHF_GROUP and SHF_LINK_ORDER. */ 825 if (! _bfd_elf_setup_sections (abfd)) 826 goto got_wrong_format_error; 827 } 828 829 /* Let the backend double check the format and override global 830 information. */ 831 if (ebd->elf_backend_object_p) 832 { 833 if (! (*ebd->elf_backend_object_p) (abfd)) 834 goto got_wrong_format_error; 835 } 836 837 /* Remember the entry point specified in the ELF file header. */ 838 bfd_set_start_address (abfd, i_ehdrp->e_entry); 839 840 /* If we have created any reloc sections that are associated with 841 debugging sections, mark the reloc sections as debugging as well. */ 842 for (s = abfd->sections; s != NULL; s = s->next) 843 { 844 if ((elf_section_data (s)->this_hdr.sh_type == SHT_REL 845 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA) 846 && elf_section_data (s)->this_hdr.sh_info > 0) 847 { 848 unsigned long targ_index; 849 asection *targ_sec; 850 851 targ_index = elf_section_data (s)->this_hdr.sh_info; 852 targ_sec = bfd_section_from_elf_index (abfd, targ_index); 853 if (targ_sec != NULL 854 && (targ_sec->flags & SEC_DEBUGGING) != 0) 855 s->flags |= SEC_DEBUGGING; 856 } 857 } 858 859 bfd_preserve_finish (abfd, &preserve); 860 return abfd->xvec; 861 862 got_wrong_format_error: 863 /* There is way too much undoing of half-known state here. The caller, 864 bfd_check_format_matches, really shouldn't iterate on live bfd's to 865 check match/no-match like it does. We have to rely on that a call to 866 bfd_default_set_arch_mach with the previously known mach, undoes what 867 was done by the first bfd_default_set_arch_mach (with mach 0) here. 868 For this to work, only elf-data and the mach may be changed by the 869 target-specific elf_backend_object_p function. Note that saving the 870 whole bfd here and restoring it would be even worse; the first thing 871 you notice is that the cached bfd file position gets out of sync. */ 872 bfd_set_error (bfd_error_wrong_format); 873 874 got_no_match: 875 if (preserve.marker != NULL) 876 bfd_preserve_restore (abfd, &preserve); 877 return NULL; 878 } 879 880 /* ELF .o/exec file writing */ 881 882 /* Write out the relocs. */ 883 884 void 885 elf_write_relocs (bfd *abfd, asection *sec, void *data) 886 { 887 bfd_boolean *failedp = data; 888 Elf_Internal_Shdr *rela_hdr; 889 bfd_vma addr_offset; 890 void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *); 891 size_t extsize; 892 bfd_byte *dst_rela; 893 unsigned int idx; 894 asymbol *last_sym; 895 int last_sym_idx; 896 897 /* If we have already failed, don't do anything. */ 898 if (*failedp) 899 return; 900 901 if ((sec->flags & SEC_RELOC) == 0) 902 return; 903 904 /* The linker backend writes the relocs out itself, and sets the 905 reloc_count field to zero to inhibit writing them here. Also, 906 sometimes the SEC_RELOC flag gets set even when there aren't any 907 relocs. */ 908 if (sec->reloc_count == 0) 909 return; 910 911 /* If we have opened an existing file for update, reloc_count may be 912 set even though we are not linking. In that case we have nothing 913 to do. */ 914 if (sec->orelocation == NULL) 915 return; 916 917 rela_hdr = &elf_section_data (sec)->rel_hdr; 918 919 rela_hdr->sh_size = rela_hdr->sh_entsize * sec->reloc_count; 920 rela_hdr->contents = bfd_alloc (abfd, rela_hdr->sh_size); 921 if (rela_hdr->contents == NULL) 922 { 923 *failedp = TRUE; 924 return; 925 } 926 927 /* Figure out whether the relocations are RELA or REL relocations. */ 928 if (rela_hdr->sh_type == SHT_RELA) 929 { 930 swap_out = elf_swap_reloca_out; 931 extsize = sizeof (Elf_External_Rela); 932 } 933 else if (rela_hdr->sh_type == SHT_REL) 934 { 935 swap_out = elf_swap_reloc_out; 936 extsize = sizeof (Elf_External_Rel); 937 } 938 else 939 /* Every relocation section should be either an SHT_RELA or an 940 SHT_REL section. */ 941 abort (); 942 943 /* The address of an ELF reloc is section relative for an object 944 file, and absolute for an executable file or shared library. 945 The address of a BFD reloc is always section relative. */ 946 addr_offset = 0; 947 if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0) 948 addr_offset = sec->vma; 949 950 /* orelocation has the data, reloc_count has the count... */ 951 last_sym = 0; 952 last_sym_idx = 0; 953 dst_rela = rela_hdr->contents; 954 955 for (idx = 0; idx < sec->reloc_count; idx++, dst_rela += extsize) 956 { 957 Elf_Internal_Rela src_rela; 958 arelent *ptr; 959 asymbol *sym; 960 int n; 961 962 ptr = sec->orelocation[idx]; 963 sym = *ptr->sym_ptr_ptr; 964 if (sym == last_sym) 965 n = last_sym_idx; 966 else if (bfd_is_abs_section (sym->section) && sym->value == 0) 967 n = STN_UNDEF; 968 else 969 { 970 last_sym = sym; 971 n = _bfd_elf_symbol_from_bfd_symbol (abfd, &sym); 972 if (n < 0) 973 { 974 *failedp = TRUE; 975 return; 976 } 977 last_sym_idx = n; 978 } 979 980 if ((*ptr->sym_ptr_ptr)->the_bfd != NULL 981 && (*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec 982 && ! _bfd_elf_validate_reloc (abfd, ptr)) 983 { 984 *failedp = TRUE; 985 return; 986 } 987 988 src_rela.r_offset = ptr->address + addr_offset; 989 src_rela.r_info = ELF_R_INFO (n, ptr->howto->type); 990 src_rela.r_addend = ptr->addend; 991 (*swap_out) (abfd, &src_rela, dst_rela); 992 } 993 } 994 995 /* Write out the program headers. */ 996 997 int 998 elf_write_out_phdrs (bfd *abfd, 999 const Elf_Internal_Phdr *phdr, 1000 unsigned int count) 1001 { 1002 while (count--) 1003 { 1004 Elf_External_Phdr extphdr; 1005 elf_swap_phdr_out (abfd, phdr, &extphdr); 1006 if (bfd_bwrite (&extphdr, sizeof (Elf_External_Phdr), abfd) 1007 != sizeof (Elf_External_Phdr)) 1008 return -1; 1009 phdr++; 1010 } 1011 return 0; 1012 } 1013 1014 /* Write out the section headers and the ELF file header. */ 1015 1016 bfd_boolean 1017 elf_write_shdrs_and_ehdr (bfd *abfd) 1018 { 1019 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */ 1020 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */ 1021 Elf_External_Shdr *x_shdrp; /* Section header table, external form */ 1022 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */ 1023 unsigned int count; 1024 bfd_size_type amt; 1025 1026 i_ehdrp = elf_elfheader (abfd); 1027 i_shdrp = elf_elfsections (abfd); 1028 1029 /* swap the header before spitting it out... */ 1030 1031 #if DEBUG & 1 1032 elf_debug_file (i_ehdrp); 1033 #endif 1034 elf_swap_ehdr_out (abfd, i_ehdrp, &x_ehdr); 1035 amt = sizeof (x_ehdr); 1036 if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0 1037 || bfd_bwrite (&x_ehdr, amt, abfd) != amt) 1038 return FALSE; 1039 1040 /* Some fields in the first section header handle overflow of ehdr 1041 fields. */ 1042 if (i_ehdrp->e_shnum >= SHN_LORESERVE) 1043 i_shdrp[0]->sh_size = i_ehdrp->e_shnum; 1044 if (i_ehdrp->e_shstrndx >= SHN_LORESERVE) 1045 i_shdrp[0]->sh_link = i_ehdrp->e_shstrndx; 1046 if (i_ehdrp->e_phnum >= PN_XNUM) 1047 i_shdrp[0]->sh_info = i_ehdrp->e_phnum; 1048 1049 /* at this point we've concocted all the ELF sections... */ 1050 amt = i_ehdrp->e_shnum; 1051 amt *= sizeof (*x_shdrp); 1052 x_shdrp = bfd_alloc (abfd, amt); 1053 if (!x_shdrp) 1054 return FALSE; 1055 1056 for (count = 0; count < i_ehdrp->e_shnum; i_shdrp++, count++) 1057 { 1058 #if DEBUG & 2 1059 elf_debug_section (count, *i_shdrp); 1060 #endif 1061 elf_swap_shdr_out (abfd, *i_shdrp, x_shdrp + count); 1062 1063 if (count == SHN_LORESERVE - 1) 1064 i_shdrp += SHN_HIRESERVE + 1 - SHN_LORESERVE; 1065 } 1066 if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_shoff, SEEK_SET) != 0 1067 || bfd_bwrite (x_shdrp, amt, abfd) != amt) 1068 return FALSE; 1069 1070 /* need to dump the string table too... */ 1071 1072 return TRUE; 1073 } 1074 1075 long 1076 elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic) 1077 { 1078 Elf_Internal_Shdr *hdr; 1079 Elf_Internal_Shdr *verhdr; 1080 unsigned long symcount; /* Number of external ELF symbols */ 1081 elf_symbol_type *sym; /* Pointer to current bfd symbol */ 1082 elf_symbol_type *symbase; /* Buffer for generated bfd symbols */ 1083 Elf_Internal_Sym *isym; 1084 Elf_Internal_Sym *isymend; 1085 Elf_Internal_Sym *isymbuf = NULL; 1086 Elf_External_Versym *xver; 1087 Elf_External_Versym *xverbuf = NULL; 1088 const struct elf_backend_data *ebd; 1089 bfd_size_type amt; 1090 1091 /* Read each raw ELF symbol, converting from external ELF form to 1092 internal ELF form, and then using the information to create a 1093 canonical bfd symbol table entry. 1094 1095 Note that we allocate the initial bfd canonical symbol buffer 1096 based on a one-to-one mapping of the ELF symbols to canonical 1097 symbols. We actually use all the ELF symbols, so there will be no 1098 space left over at the end. When we have all the symbols, we 1099 build the caller's pointer vector. */ 1100 1101 if (! dynamic) 1102 { 1103 hdr = &elf_tdata (abfd)->symtab_hdr; 1104 verhdr = NULL; 1105 } 1106 else 1107 { 1108 hdr = &elf_tdata (abfd)->dynsymtab_hdr; 1109 if (elf_dynversym (abfd) == 0) 1110 verhdr = NULL; 1111 else 1112 verhdr = &elf_tdata (abfd)->dynversym_hdr; 1113 if ((elf_tdata (abfd)->dynverdef_section != 0 1114 && elf_tdata (abfd)->verdef == NULL) 1115 || (elf_tdata (abfd)->dynverref_section != 0 1116 && elf_tdata (abfd)->verref == NULL)) 1117 { 1118 if (!_bfd_elf_slurp_version_tables (abfd, FALSE)) 1119 return -1; 1120 } 1121 } 1122 1123 ebd = get_elf_backend_data (abfd); 1124 symcount = hdr->sh_size / sizeof (Elf_External_Sym); 1125 if (symcount == 0) 1126 sym = symbase = NULL; 1127 else 1128 { 1129 isymbuf = bfd_elf_get_elf_syms (abfd, hdr, symcount, 0, 1130 NULL, NULL, NULL); 1131 if (isymbuf == NULL) 1132 return -1; 1133 1134 amt = symcount; 1135 amt *= sizeof (elf_symbol_type); 1136 symbase = bfd_zalloc (abfd, amt); 1137 if (symbase == (elf_symbol_type *) NULL) 1138 goto error_return; 1139 1140 /* Read the raw ELF version symbol information. */ 1141 if (verhdr != NULL 1142 && verhdr->sh_size / sizeof (Elf_External_Versym) != symcount) 1143 { 1144 (*_bfd_error_handler) 1145 (_("%s: version count (%ld) does not match symbol count (%ld)"), 1146 abfd->filename, 1147 (long) (verhdr->sh_size / sizeof (Elf_External_Versym)), 1148 symcount); 1149 1150 /* Slurp in the symbols without the version information, 1151 since that is more helpful than just quitting. */ 1152 verhdr = NULL; 1153 } 1154 1155 if (verhdr != NULL) 1156 { 1157 if (bfd_seek (abfd, verhdr->sh_offset, SEEK_SET) != 0) 1158 goto error_return; 1159 1160 xverbuf = bfd_malloc (verhdr->sh_size); 1161 if (xverbuf == NULL && verhdr->sh_size != 0) 1162 goto error_return; 1163 1164 if (bfd_bread (xverbuf, verhdr->sh_size, abfd) != verhdr->sh_size) 1165 goto error_return; 1166 } 1167 1168 /* Skip first symbol, which is a null dummy. */ 1169 xver = xverbuf; 1170 if (xver != NULL) 1171 ++xver; 1172 isymend = isymbuf + symcount; 1173 for (isym = isymbuf + 1, sym = symbase; isym < isymend; isym++, sym++) 1174 { 1175 memcpy (&sym->internal_elf_sym, isym, sizeof (Elf_Internal_Sym)); 1176 sym->symbol.the_bfd = abfd; 1177 1178 sym->symbol.name = bfd_elf_sym_name (abfd, hdr, isym, NULL); 1179 1180 sym->symbol.value = isym->st_value; 1181 1182 if (isym->st_shndx == SHN_UNDEF) 1183 { 1184 sym->symbol.section = bfd_und_section_ptr; 1185 } 1186 else if (isym->st_shndx < SHN_LORESERVE 1187 || isym->st_shndx > SHN_HIRESERVE) 1188 { 1189 sym->symbol.section = bfd_section_from_elf_index (abfd, 1190 isym->st_shndx); 1191 if (sym->symbol.section == NULL) 1192 { 1193 /* This symbol is in a section for which we did not 1194 create a BFD section. Just use bfd_abs_section, 1195 although it is wrong. FIXME. */ 1196 sym->symbol.section = bfd_abs_section_ptr; 1197 } 1198 } 1199 else if (isym->st_shndx == SHN_ABS) 1200 { 1201 sym->symbol.section = bfd_abs_section_ptr; 1202 } 1203 else if (isym->st_shndx == SHN_COMMON) 1204 { 1205 sym->symbol.section = bfd_com_section_ptr; 1206 /* Elf puts the alignment into the `value' field, and 1207 the size into the `size' field. BFD wants to see the 1208 size in the value field, and doesn't care (at the 1209 moment) about the alignment. */ 1210 sym->symbol.value = isym->st_size; 1211 } 1212 else 1213 sym->symbol.section = bfd_abs_section_ptr; 1214 1215 /* If this is a relocatable file, then the symbol value is 1216 already section relative. */ 1217 if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0) 1218 sym->symbol.value -= sym->symbol.section->vma; 1219 1220 switch (ELF_ST_BIND (isym->st_info)) 1221 { 1222 case STB_LOCAL: 1223 sym->symbol.flags |= BSF_LOCAL; 1224 break; 1225 case STB_GLOBAL: 1226 if (isym->st_shndx != SHN_UNDEF && isym->st_shndx != SHN_COMMON) 1227 sym->symbol.flags |= BSF_GLOBAL; 1228 break; 1229 case STB_WEAK: 1230 sym->symbol.flags |= BSF_WEAK; 1231 break; 1232 } 1233 1234 switch (ELF_ST_TYPE (isym->st_info)) 1235 { 1236 case STT_SECTION: 1237 sym->symbol.flags |= BSF_SECTION_SYM | BSF_DEBUGGING; 1238 break; 1239 case STT_FILE: 1240 sym->symbol.flags |= BSF_FILE | BSF_DEBUGGING; 1241 break; 1242 case STT_FUNC: 1243 sym->symbol.flags |= BSF_FUNCTION; 1244 break; 1245 case STT_OBJECT: 1246 sym->symbol.flags |= BSF_OBJECT; 1247 break; 1248 case STT_TLS: 1249 sym->symbol.flags |= BSF_THREAD_LOCAL; 1250 break; 1251 } 1252 1253 if (dynamic) 1254 sym->symbol.flags |= BSF_DYNAMIC; 1255 1256 if (xver != NULL) 1257 { 1258 Elf_Internal_Versym iversym; 1259 1260 _bfd_elf_swap_versym_in (abfd, xver, &iversym); 1261 sym->version = iversym.vs_vers; 1262 xver++; 1263 } 1264 1265 /* Do some backend-specific processing on this symbol. */ 1266 if (ebd->elf_backend_symbol_processing) 1267 (*ebd->elf_backend_symbol_processing) (abfd, &sym->symbol); 1268 } 1269 } 1270 1271 /* Do some backend-specific processing on this symbol table. */ 1272 if (ebd->elf_backend_symbol_table_processing) 1273 (*ebd->elf_backend_symbol_table_processing) (abfd, symbase, symcount); 1274 1275 /* We rely on the zalloc to clear out the final symbol entry. */ 1276 1277 symcount = sym - symbase; 1278 1279 /* Fill in the user's symbol pointer vector if needed. */ 1280 if (symptrs) 1281 { 1282 long l = symcount; 1283 1284 sym = symbase; 1285 while (l-- > 0) 1286 { 1287 *symptrs++ = &sym->symbol; 1288 sym++; 1289 } 1290 *symptrs = 0; /* Final null pointer */ 1291 } 1292 1293 if (xverbuf != NULL) 1294 free (xverbuf); 1295 if (isymbuf != NULL && hdr->contents != (unsigned char *) isymbuf) 1296 free (isymbuf); 1297 return symcount; 1298 1299 error_return: 1300 if (xverbuf != NULL) 1301 free (xverbuf); 1302 if (isymbuf != NULL && hdr->contents != (unsigned char *) isymbuf) 1303 free (isymbuf); 1304 return -1; 1305 } 1306 1307 /* Read relocations for ASECT from REL_HDR. There are RELOC_COUNT of 1308 them. */ 1309 1310 static bfd_boolean 1311 elf_slurp_reloc_table_from_section (bfd *abfd, 1312 asection *asect, 1313 Elf_Internal_Shdr *rel_hdr, 1314 bfd_size_type reloc_count, 1315 arelent *relents, 1316 asymbol **symbols, 1317 bfd_boolean dynamic) 1318 { 1319 const struct elf_backend_data * const ebd = get_elf_backend_data (abfd); 1320 void *allocated = NULL; 1321 bfd_byte *native_relocs; 1322 arelent *relent; 1323 unsigned int i; 1324 int entsize; 1325 unsigned int symcount; 1326 1327 allocated = bfd_malloc (rel_hdr->sh_size); 1328 if (allocated == NULL) 1329 goto error_return; 1330 1331 if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0 1332 || (bfd_bread (allocated, rel_hdr->sh_size, abfd) 1333 != rel_hdr->sh_size)) 1334 goto error_return; 1335 1336 native_relocs = allocated; 1337 1338 entsize = rel_hdr->sh_entsize; 1339 BFD_ASSERT (entsize == sizeof (Elf_External_Rel) 1340 || entsize == sizeof (Elf_External_Rela)); 1341 1342 if (dynamic) 1343 symcount = bfd_get_dynamic_symcount (abfd); 1344 else 1345 symcount = bfd_get_symcount (abfd); 1346 1347 for (i = 0, relent = relents; 1348 i < reloc_count; 1349 i++, relent++, native_relocs += entsize) 1350 { 1351 Elf_Internal_Rela rela; 1352 1353 if (entsize == sizeof (Elf_External_Rela)) 1354 elf_swap_reloca_in (abfd, native_relocs, &rela); 1355 else 1356 elf_swap_reloc_in (abfd, native_relocs, &rela); 1357 1358 /* The address of an ELF reloc is section relative for an object 1359 file, and absolute for an executable file or shared library. 1360 The address of a normal BFD reloc is always section relative, 1361 and the address of a dynamic reloc is absolute.. */ 1362 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0 || dynamic) 1363 relent->address = rela.r_offset; 1364 else 1365 relent->address = rela.r_offset - asect->vma; 1366 1367 if (ELF_R_SYM (rela.r_info) == 0) 1368 relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr; 1369 else if (ELF_R_SYM (rela.r_info) > symcount) 1370 { 1371 (*_bfd_error_handler) 1372 (_("%s(%s): relocation %d has invalid symbol index %ld"), 1373 abfd->filename, asect->name, i, ELF_R_SYM (rela.r_info)); 1374 relent->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr; 1375 } 1376 else 1377 { 1378 asymbol **ps; 1379 1380 ps = symbols + ELF_R_SYM (rela.r_info) - 1; 1381 1382 relent->sym_ptr_ptr = ps; 1383 } 1384 1385 relent->addend = rela.r_addend; 1386 1387 if ((entsize == sizeof (Elf_External_Rela) 1388 && ebd->elf_info_to_howto != NULL) 1389 || ebd->elf_info_to_howto_rel == NULL) 1390 (*ebd->elf_info_to_howto) (abfd, relent, &rela); 1391 else 1392 (*ebd->elf_info_to_howto_rel) (abfd, relent, &rela); 1393 } 1394 1395 if (allocated != NULL) 1396 free (allocated); 1397 1398 return TRUE; 1399 1400 error_return: 1401 if (allocated != NULL) 1402 free (allocated); 1403 return FALSE; 1404 } 1405 1406 /* Read in and swap the external relocs. */ 1407 1408 bfd_boolean 1409 elf_slurp_reloc_table (bfd *abfd, 1410 asection *asect, 1411 asymbol **symbols, 1412 bfd_boolean dynamic) 1413 { 1414 struct bfd_elf_section_data * const d = elf_section_data (asect); 1415 Elf_Internal_Shdr *rel_hdr; 1416 Elf_Internal_Shdr *rel_hdr2; 1417 bfd_size_type reloc_count; 1418 bfd_size_type reloc_count2; 1419 arelent *relents; 1420 bfd_size_type amt; 1421 1422 if (asect->relocation != NULL) 1423 return TRUE; 1424 1425 if (! dynamic) 1426 { 1427 if ((asect->flags & SEC_RELOC) == 0 1428 || asect->reloc_count == 0) 1429 return TRUE; 1430 1431 rel_hdr = &d->rel_hdr; 1432 reloc_count = NUM_SHDR_ENTRIES (rel_hdr); 1433 rel_hdr2 = d->rel_hdr2; 1434 reloc_count2 = (rel_hdr2 ? NUM_SHDR_ENTRIES (rel_hdr2) : 0); 1435 1436 BFD_ASSERT (asect->reloc_count == reloc_count + reloc_count2); 1437 BFD_ASSERT (asect->rel_filepos == rel_hdr->sh_offset 1438 || (rel_hdr2 && asect->rel_filepos == rel_hdr2->sh_offset)); 1439 1440 } 1441 else 1442 { 1443 /* Note that ASECT->RELOC_COUNT tends not to be accurate in this 1444 case because relocations against this section may use the 1445 dynamic symbol table, and in that case bfd_section_from_shdr 1446 in elf.c does not update the RELOC_COUNT. */ 1447 if (asect->size == 0) 1448 return TRUE; 1449 1450 rel_hdr = &d->this_hdr; 1451 reloc_count = NUM_SHDR_ENTRIES (rel_hdr); 1452 rel_hdr2 = NULL; 1453 reloc_count2 = 0; 1454 } 1455 1456 amt = (reloc_count + reloc_count2) * sizeof (arelent); 1457 relents = bfd_alloc (abfd, amt); 1458 if (relents == NULL) 1459 return FALSE; 1460 1461 if (!elf_slurp_reloc_table_from_section (abfd, asect, 1462 rel_hdr, reloc_count, 1463 relents, 1464 symbols, dynamic)) 1465 return FALSE; 1466 1467 if (rel_hdr2 1468 && !elf_slurp_reloc_table_from_section (abfd, asect, 1469 rel_hdr2, reloc_count2, 1470 relents + reloc_count, 1471 symbols, dynamic)) 1472 return FALSE; 1473 1474 asect->relocation = relents; 1475 return TRUE; 1476 } 1477 1478 #ifdef DEBUG 1479 static void 1480 elf_debug_section (int num, Elf_Internal_Shdr *hdr) 1481 { 1482 fprintf (stderr, "\nSection#%d '%s' 0x%.8lx\n", num, 1483 hdr->bfd_section != NULL ? hdr->bfd_section->name : "", 1484 (long) hdr); 1485 fprintf (stderr, 1486 "sh_name = %ld\tsh_type = %ld\tsh_flags = %ld\n", 1487 (long) hdr->sh_name, 1488 (long) hdr->sh_type, 1489 (long) hdr->sh_flags); 1490 fprintf (stderr, 1491 "sh_addr = %ld\tsh_offset = %ld\tsh_size = %ld\n", 1492 (long) hdr->sh_addr, 1493 (long) hdr->sh_offset, 1494 (long) hdr->sh_size); 1495 fprintf (stderr, 1496 "sh_link = %ld\tsh_info = %ld\tsh_addralign = %ld\n", 1497 (long) hdr->sh_link, 1498 (long) hdr->sh_info, 1499 (long) hdr->sh_addralign); 1500 fprintf (stderr, "sh_entsize = %ld\n", 1501 (long) hdr->sh_entsize); 1502 fflush (stderr); 1503 } 1504 1505 static void 1506 elf_debug_file (Elf_Internal_Ehdr *ehdrp) 1507 { 1508 fprintf (stderr, "e_entry = 0x%.8lx\n", (long) ehdrp->e_entry); 1509 fprintf (stderr, "e_phoff = %ld\n", (long) ehdrp->e_phoff); 1510 fprintf (stderr, "e_phnum = %ld\n", (long) ehdrp->e_phnum); 1511 fprintf (stderr, "e_phentsize = %ld\n", (long) ehdrp->e_phentsize); 1512 fprintf (stderr, "e_shoff = %ld\n", (long) ehdrp->e_shoff); 1513 fprintf (stderr, "e_shnum = %ld\n", (long) ehdrp->e_shnum); 1514 fprintf (stderr, "e_shentsize = %ld\n", (long) ehdrp->e_shentsize); 1515 } 1516 1517 static char * 1518 elf_symbol_flags (flagword flags) 1519 { 1520 static char buffer[1024]; 1521 1522 buffer[0] = '\0'; 1523 if (flags & BSF_LOCAL) 1524 strcat (buffer, " local"); 1525 1526 if (flags & BSF_GLOBAL) 1527 strcat (buffer, " global"); 1528 1529 if (flags & BSF_DEBUGGING) 1530 strcat (buffer, " debug"); 1531 1532 if (flags & BSF_FUNCTION) 1533 strcat (buffer, " function"); 1534 1535 if (flags & BSF_KEEP) 1536 strcat (buffer, " keep"); 1537 1538 if (flags & BSF_KEEP_G) 1539 strcat (buffer, " keep_g"); 1540 1541 if (flags & BSF_WEAK) 1542 strcat (buffer, " weak"); 1543 1544 if (flags & BSF_SECTION_SYM) 1545 strcat (buffer, " section-sym"); 1546 1547 if (flags & BSF_OLD_COMMON) 1548 strcat (buffer, " old-common"); 1549 1550 if (flags & BSF_NOT_AT_END) 1551 strcat (buffer, " not-at-end"); 1552 1553 if (flags & BSF_CONSTRUCTOR) 1554 strcat (buffer, " constructor"); 1555 1556 if (flags & BSF_WARNING) 1557 strcat (buffer, " warning"); 1558 1559 if (flags & BSF_INDIRECT) 1560 strcat (buffer, " indirect"); 1561 1562 if (flags & BSF_FILE) 1563 strcat (buffer, " file"); 1564 1565 if (flags & DYNAMIC) 1566 strcat (buffer, " dynamic"); 1567 1568 if (flags & ~(BSF_LOCAL 1569 | BSF_GLOBAL 1570 | BSF_DEBUGGING 1571 | BSF_FUNCTION 1572 | BSF_KEEP 1573 | BSF_KEEP_G 1574 | BSF_WEAK 1575 | BSF_SECTION_SYM 1576 | BSF_OLD_COMMON 1577 | BSF_NOT_AT_END 1578 | BSF_CONSTRUCTOR 1579 | BSF_WARNING 1580 | BSF_INDIRECT 1581 | BSF_FILE 1582 | BSF_DYNAMIC)) 1583 strcat (buffer, " unknown-bits"); 1584 1585 return buffer; 1586 } 1587 #endif 1588 1589 /* Create a new BFD as if by bfd_openr. Rather than opening a file, 1590 reconstruct an ELF file by reading the segments out of remote memory 1591 based on the ELF file header at EHDR_VMA and the ELF program headers it 1592 points to. If not null, *LOADBASEP is filled in with the difference 1593 between the VMAs from which the segments were read, and the VMAs the 1594 file headers (and hence BFD's idea of each section's VMA) put them at. 1595 1596 The function TARGET_READ_MEMORY is called to copy LEN bytes from the 1597 remote memory at target address VMA into the local buffer at MYADDR; it 1598 should return zero on success or an `errno' code on failure. TEMPL must 1599 be a BFD for a target with the word size and byte order found in the 1600 remote memory. */ 1601 1602 bfd * 1603 NAME(_bfd_elf,bfd_from_remote_memory) 1604 (bfd *templ, 1605 bfd_vma ehdr_vma, 1606 bfd_vma *loadbasep, 1607 int (*target_read_memory) (bfd_vma, bfd_byte *, int)) 1608 { 1609 Elf_External_Ehdr x_ehdr; /* Elf file header, external form */ 1610 Elf_Internal_Ehdr i_ehdr; /* Elf file header, internal form */ 1611 Elf_External_Phdr *x_phdrs; 1612 Elf_Internal_Phdr *i_phdrs, *last_phdr; 1613 bfd *nbfd; 1614 struct bfd_in_memory *bim; 1615 int contents_size; 1616 bfd_byte *contents; 1617 int err; 1618 unsigned int i; 1619 bfd_vma loadbase; 1620 1621 /* Read in the ELF header in external format. */ 1622 err = target_read_memory (ehdr_vma, (bfd_byte *) &x_ehdr, sizeof x_ehdr); 1623 if (err) 1624 { 1625 bfd_set_error (bfd_error_system_call); 1626 errno = err; 1627 return NULL; 1628 } 1629 1630 /* Now check to see if we have a valid ELF file, and one that BFD can 1631 make use of. The magic number must match, the address size ('class') 1632 and byte-swapping must match our XVEC entry. */ 1633 1634 if (! elf_file_p (&x_ehdr) 1635 || x_ehdr.e_ident[EI_VERSION] != EV_CURRENT 1636 || x_ehdr.e_ident[EI_CLASS] != ELFCLASS) 1637 { 1638 bfd_set_error (bfd_error_wrong_format); 1639 return NULL; 1640 } 1641 1642 /* Check that file's byte order matches xvec's */ 1643 switch (x_ehdr.e_ident[EI_DATA]) 1644 { 1645 case ELFDATA2MSB: /* Big-endian */ 1646 if (! bfd_header_big_endian (templ)) 1647 { 1648 bfd_set_error (bfd_error_wrong_format); 1649 return NULL; 1650 } 1651 break; 1652 case ELFDATA2LSB: /* Little-endian */ 1653 if (! bfd_header_little_endian (templ)) 1654 { 1655 bfd_set_error (bfd_error_wrong_format); 1656 return NULL; 1657 } 1658 break; 1659 case ELFDATANONE: /* No data encoding specified */ 1660 default: /* Unknown data encoding specified */ 1661 bfd_set_error (bfd_error_wrong_format); 1662 return NULL; 1663 } 1664 1665 elf_swap_ehdr_in (templ, &x_ehdr, &i_ehdr); 1666 1667 /* The file header tells where to find the program headers. 1668 These are what we use to actually choose what to read. */ 1669 1670 if (i_ehdr.e_phentsize != sizeof (Elf_External_Phdr) || i_ehdr.e_phnum == 0) 1671 { 1672 bfd_set_error (bfd_error_wrong_format); 1673 return NULL; 1674 } 1675 1676 x_phdrs = bfd_malloc (i_ehdr.e_phnum * (sizeof *x_phdrs + sizeof *i_phdrs)); 1677 if (x_phdrs == NULL) 1678 { 1679 bfd_set_error (bfd_error_no_memory); 1680 return NULL; 1681 } 1682 err = target_read_memory (ehdr_vma + i_ehdr.e_phoff, (bfd_byte *) x_phdrs, 1683 i_ehdr.e_phnum * sizeof x_phdrs[0]); 1684 if (err) 1685 { 1686 free (x_phdrs); 1687 bfd_set_error (bfd_error_system_call); 1688 errno = err; 1689 return NULL; 1690 } 1691 i_phdrs = (Elf_Internal_Phdr *) &x_phdrs[i_ehdr.e_phnum]; 1692 1693 contents_size = 0; 1694 last_phdr = NULL; 1695 loadbase = ehdr_vma; 1696 for (i = 0; i < i_ehdr.e_phnum; ++i) 1697 { 1698 elf_swap_phdr_in (templ, &x_phdrs[i], &i_phdrs[i]); 1699 /* IA-64 vDSO may have two mappings for one segment, where one mapping 1700 is executable only, and one is read only. We must not use the 1701 executable one. */ 1702 if (i_phdrs[i].p_type == PT_LOAD && (i_phdrs[i].p_flags & PF_R)) 1703 { 1704 bfd_vma segment_end; 1705 segment_end = (i_phdrs[i].p_offset + i_phdrs[i].p_filesz 1706 + i_phdrs[i].p_align - 1) & -i_phdrs[i].p_align; 1707 if (segment_end > (bfd_vma) contents_size) 1708 contents_size = segment_end; 1709 1710 if ((i_phdrs[i].p_offset & -i_phdrs[i].p_align) == 0) 1711 loadbase = ehdr_vma - (i_phdrs[i].p_vaddr & -i_phdrs[i].p_align); 1712 1713 last_phdr = &i_phdrs[i]; 1714 } 1715 } 1716 if (last_phdr == NULL) 1717 { 1718 /* There were no PT_LOAD segments, so we don't have anything to read. */ 1719 free (x_phdrs); 1720 bfd_set_error (bfd_error_wrong_format); 1721 return NULL; 1722 } 1723 1724 /* Trim the last segment so we don't bother with zeros in the last page 1725 that are off the end of the file. However, if the extra bit in that 1726 page includes the section headers, keep them. */ 1727 if ((bfd_vma) contents_size > last_phdr->p_offset + last_phdr->p_filesz 1728 && (bfd_vma) contents_size >= (i_ehdr.e_shoff 1729 + i_ehdr.e_shnum * i_ehdr.e_shentsize)) 1730 { 1731 contents_size = last_phdr->p_offset + last_phdr->p_filesz; 1732 if ((bfd_vma) contents_size < (i_ehdr.e_shoff 1733 + i_ehdr.e_shnum * i_ehdr.e_shentsize)) 1734 contents_size = i_ehdr.e_shoff + i_ehdr.e_shnum * i_ehdr.e_shentsize; 1735 } 1736 else 1737 contents_size = last_phdr->p_offset + last_phdr->p_filesz; 1738 1739 /* Now we know the size of the whole image we want read in. */ 1740 contents = bfd_zmalloc (contents_size); 1741 if (contents == NULL) 1742 { 1743 free (x_phdrs); 1744 bfd_set_error (bfd_error_no_memory); 1745 return NULL; 1746 } 1747 1748 for (i = 0; i < i_ehdr.e_phnum; ++i) 1749 /* IA-64 vDSO may have two mappings for one segment, where one mapping 1750 is executable only, and one is read only. We must not use the 1751 executable one. */ 1752 if (i_phdrs[i].p_type == PT_LOAD && (i_phdrs[i].p_flags & PF_R)) 1753 { 1754 bfd_vma start = i_phdrs[i].p_offset & -i_phdrs[i].p_align; 1755 bfd_vma end = (i_phdrs[i].p_offset + i_phdrs[i].p_filesz 1756 + i_phdrs[i].p_align - 1) & -i_phdrs[i].p_align; 1757 if (end > (bfd_vma) contents_size) 1758 end = contents_size; 1759 err = target_read_memory ((loadbase + i_phdrs[i].p_vaddr) 1760 & -i_phdrs[i].p_align, 1761 contents + start, end - start); 1762 if (err) 1763 { 1764 free (x_phdrs); 1765 free (contents); 1766 bfd_set_error (bfd_error_system_call); 1767 errno = err; 1768 return NULL; 1769 } 1770 } 1771 free (x_phdrs); 1772 1773 /* If the segments visible in memory didn't include the section headers, 1774 then clear them from the file header. */ 1775 if ((bfd_vma) contents_size < (i_ehdr.e_shoff 1776 + i_ehdr.e_shnum * i_ehdr.e_shentsize)) 1777 { 1778 memset (&x_ehdr.e_shoff, 0, sizeof x_ehdr.e_shoff); 1779 memset (&x_ehdr.e_shnum, 0, sizeof x_ehdr.e_shnum); 1780 memset (&x_ehdr.e_shstrndx, 0, sizeof x_ehdr.e_shstrndx); 1781 } 1782 1783 /* This will normally have been in the first PT_LOAD segment. But it 1784 conceivably could be missing, and we might have just changed it. */ 1785 memcpy (contents, &x_ehdr, sizeof x_ehdr); 1786 1787 /* Now we have a memory image of the ELF file contents. Make a BFD. */ 1788 bim = bfd_malloc (sizeof (struct bfd_in_memory)); 1789 if (bim == NULL) 1790 { 1791 free (contents); 1792 bfd_set_error (bfd_error_no_memory); 1793 return NULL; 1794 } 1795 nbfd = _bfd_new_bfd (); 1796 if (nbfd == NULL) 1797 { 1798 free (bim); 1799 free (contents); 1800 bfd_set_error (bfd_error_no_memory); 1801 return NULL; 1802 } 1803 nbfd->filename = "<in-memory>"; 1804 nbfd->xvec = templ->xvec; 1805 bim->size = contents_size; 1806 bim->buffer = contents; 1807 nbfd->iostream = bim; 1808 nbfd->flags = BFD_IN_MEMORY; 1809 nbfd->direction = read_direction; 1810 nbfd->mtime = time (NULL); 1811 nbfd->mtime_set = TRUE; 1812 1813 if (loadbasep) 1814 *loadbasep = loadbase; 1815 return nbfd; 1816 } 1817 1818 #include "elfcore.h" 1819 1820 /* Size-dependent data and functions. */ 1821 const struct elf_size_info NAME(_bfd_elf,size_info) = { 1822 sizeof (Elf_External_Ehdr), 1823 sizeof (Elf_External_Phdr), 1824 sizeof (Elf_External_Shdr), 1825 sizeof (Elf_External_Rel), 1826 sizeof (Elf_External_Rela), 1827 sizeof (Elf_External_Sym), 1828 sizeof (Elf_External_Dyn), 1829 sizeof (Elf_External_Note), 1830 4, 1831 1, 1832 ARCH_SIZE, LOG_FILE_ALIGN, 1833 ELFCLASS, EV_CURRENT, 1834 elf_write_out_phdrs, 1835 elf_write_shdrs_and_ehdr, 1836 elf_write_relocs, 1837 elf_swap_symbol_in, 1838 elf_swap_symbol_out, 1839 elf_slurp_reloc_table, 1840 elf_slurp_symbol_table, 1841 elf_swap_dyn_in, 1842 elf_swap_dyn_out, 1843 elf_swap_reloc_in, 1844 elf_swap_reloc_out, 1845 elf_swap_reloca_in, 1846 elf_swap_reloca_out 1847 }; 1848