OLD | NEW |
1 /* Mach-O support for BFD. | 1 /* Mach-O support for BFD. |
2 Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2009 | 2 Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2009, 2011, |
| 3 2012 |
3 Free Software Foundation, Inc. | 4 Free Software Foundation, Inc. |
4 | 5 |
5 This file is part of BFD, the Binary File Descriptor library. | 6 This file is part of BFD, the Binary File Descriptor library. |
6 | 7 |
7 This program is free software; you can redistribute it and/or modify | 8 This program is free software; you can redistribute it and/or modify |
8 it under the terms of the GNU General Public License as published by | 9 it under the terms of the GNU General Public License as published by |
9 the Free Software Foundation; either version 3 of the License, or | 10 the Free Software Foundation; either version 3 of the License, or |
10 (at your option) any later version. | 11 (at your option) any later version. |
11 | 12 |
12 This program is distributed in the hope that it will be useful, | 13 This program is distributed in the hope that it will be useful, |
(...skipping 21 matching lines...) Expand all Loading... |
34 unsigned long ncmds; | 35 unsigned long ncmds; |
35 unsigned long sizeofcmds; | 36 unsigned long sizeofcmds; |
36 unsigned long flags; | 37 unsigned long flags; |
37 unsigned int reserved; | 38 unsigned int reserved; |
38 /* Version 1: 32 bits, version 2: 64 bits. */ | 39 /* Version 1: 32 bits, version 2: 64 bits. */ |
39 unsigned int version; | 40 unsigned int version; |
40 enum bfd_endian byteorder; | 41 enum bfd_endian byteorder; |
41 } | 42 } |
42 bfd_mach_o_header; | 43 bfd_mach_o_header; |
43 | 44 |
| 45 typedef struct bfd_mach_o_asymbol |
| 46 { |
| 47 /* The actual symbol which the rest of BFD works with. */ |
| 48 asymbol symbol; |
| 49 |
| 50 /* Mach-O symbol fields. */ |
| 51 unsigned char n_type; |
| 52 unsigned char n_sect; |
| 53 unsigned short n_desc; |
| 54 } |
| 55 bfd_mach_o_asymbol; |
| 56 |
44 #define BFD_MACH_O_SEGNAME_SIZE 16 | 57 #define BFD_MACH_O_SEGNAME_SIZE 16 |
45 #define BFD_MACH_O_SECTNAME_SIZE 16 | 58 #define BFD_MACH_O_SECTNAME_SIZE 16 |
46 | 59 |
47 typedef struct bfd_mach_o_section | 60 typedef struct bfd_mach_o_section |
48 { | 61 { |
49 /* Fields present in the file. */ | 62 /* Fields present in the file. */ |
50 char sectname[BFD_MACH_O_SECTNAME_SIZE + 1]; /* Always NUL padded. */ | 63 char sectname[BFD_MACH_O_SECTNAME_SIZE + 1]; /* Always NUL padded. */ |
51 char segname[BFD_MACH_O_SEGNAME_SIZE + 1]; | 64 char segname[BFD_MACH_O_SEGNAME_SIZE + 1]; |
52 bfd_vma addr; | 65 bfd_vma addr; |
53 bfd_vma size; | 66 bfd_vma size; |
54 bfd_vma offset; | 67 bfd_vma offset; |
55 unsigned long align; | 68 unsigned long align; |
56 bfd_vma reloff; | 69 bfd_vma reloff; |
57 unsigned long nreloc; | 70 unsigned long nreloc; |
58 unsigned long flags; | 71 unsigned long flags; |
59 unsigned long reserved1; | 72 unsigned long reserved1; |
60 unsigned long reserved2; | 73 unsigned long reserved2; |
61 unsigned long reserved3; | 74 unsigned long reserved3; |
62 | 75 |
63 /* Corresponding bfd section. */ | 76 /* Corresponding bfd section. */ |
64 asection *bfdsection; | 77 asection *bfdsection; |
65 | 78 |
| 79 /* An array holding the indirect symbols for this section. |
| 80 NULL values indicate local symbols. |
| 81 The number of symbols is determined from the section size and type. */ |
| 82 |
| 83 bfd_mach_o_asymbol **indirect_syms; |
| 84 |
66 /* Simply linked list. */ | 85 /* Simply linked list. */ |
67 struct bfd_mach_o_section *next; | 86 struct bfd_mach_o_section *next; |
68 } | 87 } |
69 bfd_mach_o_section; | 88 bfd_mach_o_section; |
70 | 89 |
71 typedef struct bfd_mach_o_segment_command | 90 typedef struct bfd_mach_o_segment_command |
72 { | 91 { |
73 char segname[16 + 1]; | 92 char segname[BFD_MACH_O_SEGNAME_SIZE + 1]; |
74 bfd_vma vmaddr; | 93 bfd_vma vmaddr; |
75 bfd_vma vmsize; | 94 bfd_vma vmsize; |
76 bfd_vma fileoff; | 95 bfd_vma fileoff; |
77 unsigned long filesize; | 96 unsigned long filesize; |
78 unsigned long maxprot; /* Maximum permitted protection. */ | 97 unsigned long maxprot; /* Maximum permitted protection. */ |
79 unsigned long initprot; /* Initial protection. */ | 98 unsigned long initprot; /* Initial protection. */ |
80 unsigned long nsects; | 99 unsigned long nsects; |
81 unsigned long flags; | 100 unsigned long flags; |
82 | 101 |
83 /* Linked list of sections. */ | 102 /* Linked list of sections. */ |
(...skipping 13 matching lines...) Expand all Loading... |
97 bfd_vma r_address; | 116 bfd_vma r_address; |
98 bfd_vma r_value; | 117 bfd_vma r_value; |
99 unsigned int r_scattered : 1; | 118 unsigned int r_scattered : 1; |
100 unsigned int r_type : 4; | 119 unsigned int r_type : 4; |
101 unsigned int r_pcrel : 1; | 120 unsigned int r_pcrel : 1; |
102 unsigned int r_length : 2; | 121 unsigned int r_length : 2; |
103 unsigned int r_extern : 1; | 122 unsigned int r_extern : 1; |
104 } | 123 } |
105 bfd_mach_o_reloc_info; | 124 bfd_mach_o_reloc_info; |
106 | 125 |
107 typedef struct bfd_mach_o_asymbol | 126 /* The symbol table is sorted like this: |
108 { | 127 (1) local. |
109 /* The actual symbol which the rest of BFD works with. */ | 128 » (otherwise in order of generation) |
110 asymbol symbol; | 129 (2) external defined |
111 | 130 » (sorted by name) |
112 /* Fields from Mach-O symbol. */ | 131 (3) external undefined / common |
113 unsigned char n_type; | 132 » (sorted by name) |
114 unsigned char n_sect; | 133 */ |
115 unsigned short n_desc; | |
116 } | |
117 bfd_mach_o_asymbol; | |
118 | 134 |
119 typedef struct bfd_mach_o_symtab_command | 135 typedef struct bfd_mach_o_symtab_command |
120 { | 136 { |
121 unsigned int symoff; | 137 unsigned int symoff; |
122 unsigned int nsyms; | 138 unsigned int nsyms; |
123 unsigned int stroff; | 139 unsigned int stroff; |
124 unsigned int strsize; | 140 unsigned int strsize; |
125 bfd_mach_o_asymbol *symbols; | 141 bfd_mach_o_asymbol *symbols; |
126 char *strtab; | 142 char *strtab; |
127 } | 143 } |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 bfd_mach_o_linkedit_command; | 447 bfd_mach_o_linkedit_command; |
432 | 448 |
433 typedef struct bfd_mach_o_str_command | 449 typedef struct bfd_mach_o_str_command |
434 { | 450 { |
435 unsigned long stroff; | 451 unsigned long stroff; |
436 unsigned long str_len; | 452 unsigned long str_len; |
437 char *str; | 453 char *str; |
438 } | 454 } |
439 bfd_mach_o_str_command; | 455 bfd_mach_o_str_command; |
440 | 456 |
| 457 typedef struct bfd_mach_o_fvmlib_command |
| 458 { |
| 459 unsigned int name_offset; |
| 460 unsigned int name_len; |
| 461 char *name_str; |
| 462 unsigned int minor_version; |
| 463 unsigned int header_addr; |
| 464 } |
| 465 bfd_mach_o_fvmlib_command; |
| 466 |
441 typedef struct bfd_mach_o_dyld_info_command | 467 typedef struct bfd_mach_o_dyld_info_command |
442 { | 468 { |
443 /* File offset and size to rebase info. */ | 469 /* File offset and size to rebase info. */ |
444 unsigned int rebase_off; | 470 unsigned int rebase_off; |
445 unsigned int rebase_size; | 471 unsigned int rebase_size; |
446 | 472 |
447 /* File offset and size of binding info. */ | 473 /* File offset and size of binding info. */ |
448 unsigned int bind_off; | 474 unsigned int bind_off; |
449 unsigned int bind_size; | 475 unsigned int bind_size; |
450 | 476 |
(...skipping 13 matching lines...) Expand all Loading... |
464 | 490 |
465 typedef struct bfd_mach_o_version_min_command | 491 typedef struct bfd_mach_o_version_min_command |
466 { | 492 { |
467 unsigned char rel; | 493 unsigned char rel; |
468 unsigned char maj; | 494 unsigned char maj; |
469 unsigned char min; | 495 unsigned char min; |
470 unsigned int reserved; | 496 unsigned int reserved; |
471 } | 497 } |
472 bfd_mach_o_version_min_command; | 498 bfd_mach_o_version_min_command; |
473 | 499 |
| 500 typedef struct bfd_mach_o_encryption_info_command |
| 501 { |
| 502 unsigned int cryptoff; |
| 503 unsigned int cryptsize; |
| 504 unsigned int cryptid; |
| 505 } |
| 506 bfd_mach_o_encryption_info_command; |
| 507 |
474 typedef struct bfd_mach_o_load_command | 508 typedef struct bfd_mach_o_load_command |
475 { | 509 { |
476 bfd_mach_o_load_command_type type; | 510 bfd_mach_o_load_command_type type; |
477 bfd_boolean type_required; | 511 bfd_boolean type_required; |
478 unsigned int offset; | 512 unsigned int offset; |
479 unsigned int len; | 513 unsigned int len; |
480 union | 514 union |
481 { | 515 { |
482 bfd_mach_o_segment_command segment; | 516 bfd_mach_o_segment_command segment; |
483 bfd_mach_o_symtab_command symtab; | 517 bfd_mach_o_symtab_command symtab; |
484 bfd_mach_o_dysymtab_command dysymtab; | 518 bfd_mach_o_dysymtab_command dysymtab; |
485 bfd_mach_o_thread_command thread; | 519 bfd_mach_o_thread_command thread; |
486 bfd_mach_o_dylib_command dylib; | 520 bfd_mach_o_dylib_command dylib; |
487 bfd_mach_o_dylinker_command dylinker; | 521 bfd_mach_o_dylinker_command dylinker; |
488 bfd_mach_o_prebound_dylib_command prebound_dylib; | 522 bfd_mach_o_prebound_dylib_command prebound_dylib; |
489 bfd_mach_o_uuid_command uuid; | 523 bfd_mach_o_uuid_command uuid; |
490 bfd_mach_o_linkedit_command linkedit; | 524 bfd_mach_o_linkedit_command linkedit; |
491 bfd_mach_o_str_command str; | 525 bfd_mach_o_str_command str; |
492 bfd_mach_o_dyld_info_command dyld_info; | 526 bfd_mach_o_dyld_info_command dyld_info; |
493 bfd_mach_o_version_min_command version_min; | 527 bfd_mach_o_version_min_command version_min; |
| 528 bfd_mach_o_encryption_info_command encryption_info; |
| 529 bfd_mach_o_fvmlib_command fvmlib; |
494 } | 530 } |
495 command; | 531 command; |
496 } | 532 } |
497 bfd_mach_o_load_command; | 533 bfd_mach_o_load_command; |
498 | 534 |
499 typedef struct mach_o_data_struct | 535 typedef struct mach_o_data_struct |
500 { | 536 { |
501 /* Mach-O header. */ | 537 /* Mach-O header. */ |
502 bfd_mach_o_header header; | 538 bfd_mach_o_header header; |
503 /* Array of load commands (length is given by header.ncmds). */ | 539 /* Array of load commands (length is given by header.ncmds). */ |
504 bfd_mach_o_load_command *commands; | 540 bfd_mach_o_load_command *commands; |
505 | 541 |
506 /* Flatten array of sections. The array is 0-based. */ | 542 /* Flatten array of sections. The array is 0-based. */ |
507 unsigned long nsects; | 543 unsigned long nsects; |
508 bfd_mach_o_section **sections; | 544 bfd_mach_o_section **sections; |
509 | 545 |
510 /* Used while writting: current length of the output file. This is used | 546 /* Used while writing: current length of the output file. This is used |
511 to allocate space in the file. */ | 547 to allocate space in the file. */ |
512 ufile_ptr filelen; | 548 ufile_ptr filelen; |
513 | 549 |
514 /* As symtab is referenced by other load command, it is handy to have | 550 /* As symtab is referenced by other load command, it is handy to have |
515 a direct access to it. Although it is not clearly stated, only one symtab | 551 a direct access to it. Although it is not clearly stated, only one symtab |
516 is expected. */ | 552 is expected. */ |
517 bfd_mach_o_symtab_command *symtab; | 553 bfd_mach_o_symtab_command *symtab; |
518 bfd_mach_o_dysymtab_command *dysymtab; | 554 bfd_mach_o_dysymtab_command *dysymtab; |
| 555 |
| 556 /* A place to stash dwarf2 info for this bfd. */ |
| 557 void *dwarf2_find_line_info; |
| 558 |
| 559 /* BFD of .dSYM file. */ |
| 560 bfd *dsym_bfd; |
| 561 |
| 562 /* Cache of dynamic relocs. */ |
| 563 arelent *dyn_reloc_cache; |
519 } | 564 } |
520 bfd_mach_o_data_struct; | 565 bfd_mach_o_data_struct; |
521 | 566 |
522 typedef struct bfd_mach_o_xlat_name | 567 typedef struct bfd_mach_o_xlat_name |
523 { | 568 { |
524 const char *name; | 569 const char *name; |
525 unsigned long val; | 570 unsigned long val; |
526 } | 571 } |
527 bfd_mach_o_xlat_name; | 572 bfd_mach_o_xlat_name; |
528 | 573 |
529 /* Target specific routines. */ | 574 /* Target specific routines. */ |
530 typedef struct bfd_mach_o_backend_data | |
531 { | |
532 enum bfd_architecture arch; | |
533 bfd_boolean (*_bfd_mach_o_swap_reloc_in)(arelent *, bfd_mach_o_reloc_info *); | |
534 bfd_boolean (*_bfd_mach_o_swap_reloc_out)(arelent *, bfd_mach_o_reloc_info *); | |
535 bfd_boolean (*_bfd_mach_o_print_thread)(bfd *, bfd_mach_o_thread_flavour *, | |
536 void *, char *); | |
537 } | |
538 bfd_mach_o_backend_data; | |
539 | 575 |
540 #define bfd_mach_o_get_data(abfd) ((abfd)->tdata.mach_o_data) | 576 #define bfd_mach_o_get_data(abfd) ((abfd)->tdata.mach_o_data) |
541 #define bfd_mach_o_get_backend_data(abfd) \ | 577 #define bfd_mach_o_get_backend_data(abfd) \ |
542 ((bfd_mach_o_backend_data*)(abfd)->xvec->backend_data) | 578 ((bfd_mach_o_backend_data*)(abfd)->xvec->backend_data) |
543 | 579 |
544 /* Get the Mach-O header for section SEC. */ | 580 /* Get the Mach-O header for section SEC. */ |
545 #define bfd_mach_o_get_mach_o_section(sec) \ | 581 #define bfd_mach_o_get_mach_o_section(sec) \ |
546 ((bfd_mach_o_section *)(sec)->used_by_bfd) | 582 ((bfd_mach_o_section *)(sec)->used_by_bfd) |
547 | 583 |
548 bfd_boolean bfd_mach_o_valid (bfd *); | 584 bfd_boolean bfd_mach_o_valid (bfd *); |
549 bfd_boolean bfd_mach_o_mkobject_init (bfd *); | 585 bfd_boolean bfd_mach_o_mkobject_init (bfd *); |
550 const bfd_target *bfd_mach_o_object_p (bfd *); | 586 const bfd_target *bfd_mach_o_object_p (bfd *); |
551 const bfd_target *bfd_mach_o_core_p (bfd *); | 587 const bfd_target *bfd_mach_o_core_p (bfd *); |
552 const bfd_target *bfd_mach_o_archive_p (bfd *); | 588 const bfd_target *bfd_mach_o_archive_p (bfd *); |
553 bfd *bfd_mach_o_openr_next_archived_file (bfd *, bfd *); | 589 bfd *bfd_mach_o_openr_next_archived_file (bfd *, bfd *); |
554 bfd_boolean bfd_mach_o_set_arch_mach (bfd *, enum bfd_architecture, | 590 bfd_boolean bfd_mach_o_set_arch_mach (bfd *, enum bfd_architecture, |
555 unsigned long); | 591 unsigned long); |
556 int bfd_mach_o_lookup_command (bfd *, bfd_mach_o_load_command_type, bfd_mach_o_l
oad_command **); | 592 int bfd_mach_o_lookup_command (bfd *, bfd_mach_o_load_command_type, bfd_mach_o_l
oad_command **); |
557 bfd_boolean bfd_mach_o_new_section_hook (bfd *, asection *); | 593 bfd_boolean bfd_mach_o_new_section_hook (bfd *, asection *); |
558 bfd_boolean bfd_mach_o_write_contents (bfd *); | 594 bfd_boolean bfd_mach_o_write_contents (bfd *); |
559 bfd_boolean bfd_mach_o_bfd_copy_private_symbol_data (bfd *, asymbol *, | 595 bfd_boolean bfd_mach_o_bfd_copy_private_symbol_data (bfd *, asymbol *, |
560 bfd *, asymbol *); | 596 bfd *, asymbol *); |
561 bfd_boolean bfd_mach_o_bfd_copy_private_section_data (bfd *, asection *, | 597 bfd_boolean bfd_mach_o_bfd_copy_private_section_data (bfd *, asection *, |
562 bfd *, asection *); | 598 bfd *, asection *); |
563 bfd_boolean bfd_mach_o_bfd_copy_private_bfd_data (bfd *, bfd *); | 599 bfd_boolean bfd_mach_o_bfd_copy_private_bfd_data (bfd *, bfd *); |
| 600 bfd_boolean bfd_mach_o_bfd_set_private_flags (bfd *, flagword); |
564 long bfd_mach_o_get_symtab_upper_bound (bfd *); | 601 long bfd_mach_o_get_symtab_upper_bound (bfd *); |
565 long bfd_mach_o_canonicalize_symtab (bfd *, asymbol **); | 602 long bfd_mach_o_canonicalize_symtab (bfd *, asymbol **); |
566 long bfd_mach_o_get_synthetic_symtab (bfd *, long, asymbol **, long, | 603 long bfd_mach_o_get_synthetic_symtab (bfd *, long, asymbol **, long, |
567 asymbol **, asymbol **ret); | 604 asymbol **, asymbol **ret); |
568 long bfd_mach_o_get_reloc_upper_bound (bfd *, asection *); | 605 long bfd_mach_o_get_reloc_upper_bound (bfd *, asection *); |
569 long bfd_mach_o_canonicalize_reloc (bfd *, asection *, arelent **, asymbol **); | 606 long bfd_mach_o_canonicalize_reloc (bfd *, asection *, arelent **, asymbol **); |
570 long bfd_mach_o_get_dynamic_reloc_upper_bound (bfd *); | 607 long bfd_mach_o_get_dynamic_reloc_upper_bound (bfd *); |
571 long bfd_mach_o_canonicalize_dynamic_reloc (bfd *, arelent **, asymbol **); | 608 long bfd_mach_o_canonicalize_dynamic_reloc (bfd *, arelent **, asymbol **); |
572 asymbol *bfd_mach_o_make_empty_symbol (bfd *); | 609 asymbol *bfd_mach_o_make_empty_symbol (bfd *); |
573 void bfd_mach_o_get_symbol_info (bfd *, asymbol *, symbol_info *); | 610 void bfd_mach_o_get_symbol_info (bfd *, asymbol *, symbol_info *); |
574 void bfd_mach_o_print_symbol (bfd *, PTR, asymbol *, bfd_print_symbol_type); | 611 void bfd_mach_o_print_symbol (bfd *, void *, asymbol *, bfd_print_symbol_type); |
575 int bfd_mach_o_sizeof_headers (bfd *, struct bfd_link_info *); | 612 int bfd_mach_o_sizeof_headers (bfd *, struct bfd_link_info *); |
576 unsigned long bfd_mach_o_stack_addr (enum bfd_mach_o_cpu_type); | 613 unsigned long bfd_mach_o_stack_addr (enum bfd_mach_o_cpu_type); |
577 int bfd_mach_o_core_fetch_environment (bfd *, unsigned char **, unsigned int *); | 614 int bfd_mach_o_core_fetch_environment (bfd *, unsigned char **, unsigned int *); |
578 char *bfd_mach_o_core_file_failing_command (bfd *); | 615 char *bfd_mach_o_core_file_failing_command (bfd *); |
579 int bfd_mach_o_core_file_failing_signal (bfd *); | 616 int bfd_mach_o_core_file_failing_signal (bfd *); |
580 bfd_boolean bfd_mach_o_core_file_matches_executable_p (bfd *, bfd *); | 617 bfd_boolean bfd_mach_o_core_file_matches_executable_p (bfd *, bfd *); |
581 bfd *bfd_mach_o_fat_extract (bfd *, bfd_format , const bfd_arch_info_type *); | 618 bfd *bfd_mach_o_fat_extract (bfd *, bfd_format , const bfd_arch_info_type *); |
582 const bfd_target *bfd_mach_o_header_p (bfd *, bfd_mach_o_filetype, | 619 const bfd_target *bfd_mach_o_header_p (bfd *, bfd_mach_o_filetype, |
583 bfd_mach_o_cpu_type); | 620 bfd_mach_o_cpu_type); |
584 bfd_boolean bfd_mach_o_build_commands (bfd *); | 621 bfd_boolean bfd_mach_o_build_commands (bfd *); |
585 bfd_boolean bfd_mach_o_set_section_contents (bfd *, asection *, const void *, | 622 bfd_boolean bfd_mach_o_set_section_contents (bfd *, asection *, const void *, |
586 file_ptr, bfd_size_type); | 623 file_ptr, bfd_size_type); |
587 unsigned int bfd_mach_o_version (bfd *); | 624 unsigned int bfd_mach_o_version (bfd *); |
588 | 625 |
589 unsigned int bfd_mach_o_get_section_type_from_name (const char *); | 626 unsigned int bfd_mach_o_get_section_type_from_name (bfd *, const char *); |
590 unsigned int bfd_mach_o_get_section_attribute_from_name (const char *); | 627 unsigned int bfd_mach_o_get_section_attribute_from_name (const char *); |
591 void bfd_mach_o_normalize_section_name (const char *, const char *, | 628 |
592 const char **, flagword *); | 629 void bfd_mach_o_convert_section_name_to_bfd (bfd *, const char *, const char *, |
| 630 » » » » » const char **, flagword *); |
| 631 bfd_boolean bfd_mach_o_find_nearest_line (bfd *, asection *, asymbol **, |
| 632 bfd_vma, const char **, |
| 633 const char **, unsigned int *); |
| 634 bfd_boolean bfd_mach_o_close_and_cleanup (bfd *); |
| 635 bfd_boolean bfd_mach_o_free_cached_info (bfd *); |
593 | 636 |
594 unsigned int bfd_mach_o_section_get_nbr_indirect (bfd *, bfd_mach_o_section *); | 637 unsigned int bfd_mach_o_section_get_nbr_indirect (bfd *, bfd_mach_o_section *); |
595 unsigned int bfd_mach_o_section_get_entry_size (bfd *, bfd_mach_o_section *); | 638 unsigned int bfd_mach_o_section_get_entry_size (bfd *, bfd_mach_o_section *); |
596 bfd_boolean bfd_mach_o_read_symtab_symbols (bfd *); | 639 bfd_boolean bfd_mach_o_read_symtab_symbols (bfd *); |
597 bfd_boolean bfd_mach_o_read_symtab_strtab (bfd *abfd); | 640 bfd_boolean bfd_mach_o_read_symtab_strtab (bfd *abfd); |
598 | 641 |
| 642 /* A placeholder in case we need to suppress emitting the dysymtab for some |
| 643 reason (e.g. compatibility with older system versions). */ |
| 644 #define bfd_mach_o_should_emit_dysymtab(x) TRUE |
| 645 |
599 extern const bfd_mach_o_xlat_name bfd_mach_o_section_attribute_name[]; | 646 extern const bfd_mach_o_xlat_name bfd_mach_o_section_attribute_name[]; |
600 extern const bfd_mach_o_xlat_name bfd_mach_o_section_type_name[]; | 647 extern const bfd_mach_o_xlat_name bfd_mach_o_section_type_name[]; |
601 | 648 |
602 extern const bfd_target mach_o_fat_vec; | 649 extern const bfd_target mach_o_fat_vec; |
603 | 650 |
| 651 /* Interfaces between BFD names and Mach-O names. */ |
| 652 |
| 653 typedef struct mach_o_section_name_xlat |
| 654 { |
| 655 const char *bfd_name; |
| 656 const char *mach_o_name; |
| 657 flagword bfd_flags; |
| 658 unsigned int macho_sectype; |
| 659 unsigned int macho_secattr; |
| 660 unsigned int sectalign; |
| 661 } mach_o_section_name_xlat; |
| 662 |
| 663 typedef struct mach_o_segment_name_xlat |
| 664 { |
| 665 const char *segname; |
| 666 const mach_o_section_name_xlat *sections; |
| 667 } mach_o_segment_name_xlat; |
| 668 |
| 669 const mach_o_section_name_xlat * |
| 670 bfd_mach_o_section_data_for_mach_sect (bfd *, const char *, const char *); |
| 671 const mach_o_section_name_xlat * |
| 672 bfd_mach_o_section_data_for_bfd_name (bfd *, const char *, const char **); |
| 673 |
| 674 typedef struct bfd_mach_o_backend_data |
| 675 { |
| 676 enum bfd_architecture arch; |
| 677 bfd_boolean (*_bfd_mach_o_swap_reloc_in)(arelent *, bfd_mach_o_reloc_info *); |
| 678 bfd_boolean (*_bfd_mach_o_swap_reloc_out)(arelent *, bfd_mach_o_reloc_info *); |
| 679 bfd_boolean (*_bfd_mach_o_print_thread)(bfd *, bfd_mach_o_thread_flavour *, |
| 680 void *, char *); |
| 681 const mach_o_segment_name_xlat *segsec_names_xlat; |
| 682 bfd_boolean (*bfd_mach_o_section_type_valid_for_target) (unsigned long); |
| 683 } |
| 684 bfd_mach_o_backend_data; |
| 685 |
| 686 /* Values used in symbol.udata.i, to signal that the mach-o-specific data in the |
| 687 symbol are not yet set, or need validation (where this is possible). */ |
| 688 |
| 689 #define SYM_MACHO_FIELDS_UNSET ((bfd_vma) -1) |
| 690 #define SYM_MACHO_FIELDS_NOT_VALIDATED ((bfd_vma) -2) |
| 691 |
604 #endif /* _BFD_MACH_O_H_ */ | 692 #endif /* _BFD_MACH_O_H_ */ |
OLD | NEW |