| Index: bfd/mach-o.h
|
| diff --git a/bfd/mach-o.h b/bfd/mach-o.h
|
| index d85224e9f745e25d1ca1672a4e82d31781762b77..f228df048ff338da614b37b151fe8001eee50a60 100644
|
| --- a/bfd/mach-o.h
|
| +++ b/bfd/mach-o.h
|
| @@ -1,5 +1,6 @@
|
| /* Mach-O support for BFD.
|
| - Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2009
|
| + Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2009, 2011,
|
| + 2012
|
| Free Software Foundation, Inc.
|
|
|
| This file is part of BFD, the Binary File Descriptor library.
|
| @@ -41,6 +42,18 @@ typedef struct bfd_mach_o_header
|
| }
|
| bfd_mach_o_header;
|
|
|
| +typedef struct bfd_mach_o_asymbol
|
| +{
|
| + /* The actual symbol which the rest of BFD works with. */
|
| + asymbol symbol;
|
| +
|
| + /* Mach-O symbol fields. */
|
| + unsigned char n_type;
|
| + unsigned char n_sect;
|
| + unsigned short n_desc;
|
| +}
|
| +bfd_mach_o_asymbol;
|
| +
|
| #define BFD_MACH_O_SEGNAME_SIZE 16
|
| #define BFD_MACH_O_SECTNAME_SIZE 16
|
|
|
| @@ -63,6 +76,12 @@ typedef struct bfd_mach_o_section
|
| /* Corresponding bfd section. */
|
| asection *bfdsection;
|
|
|
| + /* An array holding the indirect symbols for this section.
|
| + NULL values indicate local symbols.
|
| + The number of symbols is determined from the section size and type. */
|
| +
|
| + bfd_mach_o_asymbol **indirect_syms;
|
| +
|
| /* Simply linked list. */
|
| struct bfd_mach_o_section *next;
|
| }
|
| @@ -70,7 +89,7 @@ bfd_mach_o_section;
|
|
|
| typedef struct bfd_mach_o_segment_command
|
| {
|
| - char segname[16 + 1];
|
| + char segname[BFD_MACH_O_SEGNAME_SIZE + 1];
|
| bfd_vma vmaddr;
|
| bfd_vma vmsize;
|
| bfd_vma fileoff;
|
| @@ -104,17 +123,14 @@ typedef struct bfd_mach_o_reloc_info
|
| }
|
| bfd_mach_o_reloc_info;
|
|
|
| -typedef struct bfd_mach_o_asymbol
|
| -{
|
| - /* The actual symbol which the rest of BFD works with. */
|
| - asymbol symbol;
|
| -
|
| - /* Fields from Mach-O symbol. */
|
| - unsigned char n_type;
|
| - unsigned char n_sect;
|
| - unsigned short n_desc;
|
| -}
|
| -bfd_mach_o_asymbol;
|
| +/* The symbol table is sorted like this:
|
| + (1) local.
|
| + (otherwise in order of generation)
|
| + (2) external defined
|
| + (sorted by name)
|
| + (3) external undefined / common
|
| + (sorted by name)
|
| +*/
|
|
|
| typedef struct bfd_mach_o_symtab_command
|
| {
|
| @@ -438,6 +454,16 @@ typedef struct bfd_mach_o_str_command
|
| }
|
| bfd_mach_o_str_command;
|
|
|
| +typedef struct bfd_mach_o_fvmlib_command
|
| +{
|
| + unsigned int name_offset;
|
| + unsigned int name_len;
|
| + char *name_str;
|
| + unsigned int minor_version;
|
| + unsigned int header_addr;
|
| +}
|
| +bfd_mach_o_fvmlib_command;
|
| +
|
| typedef struct bfd_mach_o_dyld_info_command
|
| {
|
| /* File offset and size to rebase info. */
|
| @@ -471,6 +497,14 @@ typedef struct bfd_mach_o_version_min_command
|
| }
|
| bfd_mach_o_version_min_command;
|
|
|
| +typedef struct bfd_mach_o_encryption_info_command
|
| +{
|
| + unsigned int cryptoff;
|
| + unsigned int cryptsize;
|
| + unsigned int cryptid;
|
| +}
|
| +bfd_mach_o_encryption_info_command;
|
| +
|
| typedef struct bfd_mach_o_load_command
|
| {
|
| bfd_mach_o_load_command_type type;
|
| @@ -491,6 +525,8 @@ typedef struct bfd_mach_o_load_command
|
| bfd_mach_o_str_command str;
|
| bfd_mach_o_dyld_info_command dyld_info;
|
| bfd_mach_o_version_min_command version_min;
|
| + bfd_mach_o_encryption_info_command encryption_info;
|
| + bfd_mach_o_fvmlib_command fvmlib;
|
| }
|
| command;
|
| }
|
| @@ -507,7 +543,7 @@ typedef struct mach_o_data_struct
|
| unsigned long nsects;
|
| bfd_mach_o_section **sections;
|
|
|
| - /* Used while writting: current length of the output file. This is used
|
| + /* Used while writing: current length of the output file. This is used
|
| to allocate space in the file. */
|
| ufile_ptr filelen;
|
|
|
| @@ -516,6 +552,15 @@ typedef struct mach_o_data_struct
|
| is expected. */
|
| bfd_mach_o_symtab_command *symtab;
|
| bfd_mach_o_dysymtab_command *dysymtab;
|
| +
|
| + /* A place to stash dwarf2 info for this bfd. */
|
| + void *dwarf2_find_line_info;
|
| +
|
| + /* BFD of .dSYM file. */
|
| + bfd *dsym_bfd;
|
| +
|
| + /* Cache of dynamic relocs. */
|
| + arelent *dyn_reloc_cache;
|
| }
|
| bfd_mach_o_data_struct;
|
|
|
| @@ -527,15 +572,6 @@ typedef struct bfd_mach_o_xlat_name
|
| bfd_mach_o_xlat_name;
|
|
|
| /* Target specific routines. */
|
| -typedef struct bfd_mach_o_backend_data
|
| -{
|
| - enum bfd_architecture arch;
|
| - bfd_boolean (*_bfd_mach_o_swap_reloc_in)(arelent *, bfd_mach_o_reloc_info *);
|
| - bfd_boolean (*_bfd_mach_o_swap_reloc_out)(arelent *, bfd_mach_o_reloc_info *);
|
| - bfd_boolean (*_bfd_mach_o_print_thread)(bfd *, bfd_mach_o_thread_flavour *,
|
| - void *, char *);
|
| -}
|
| -bfd_mach_o_backend_data;
|
|
|
| #define bfd_mach_o_get_data(abfd) ((abfd)->tdata.mach_o_data)
|
| #define bfd_mach_o_get_backend_data(abfd) \
|
| @@ -561,6 +597,7 @@ bfd_boolean bfd_mach_o_bfd_copy_private_symbol_data (bfd *, asymbol *,
|
| bfd_boolean bfd_mach_o_bfd_copy_private_section_data (bfd *, asection *,
|
| bfd *, asection *);
|
| bfd_boolean bfd_mach_o_bfd_copy_private_bfd_data (bfd *, bfd *);
|
| +bfd_boolean bfd_mach_o_bfd_set_private_flags (bfd *, flagword);
|
| long bfd_mach_o_get_symtab_upper_bound (bfd *);
|
| long bfd_mach_o_canonicalize_symtab (bfd *, asymbol **);
|
| long bfd_mach_o_get_synthetic_symtab (bfd *, long, asymbol **, long,
|
| @@ -571,7 +608,7 @@ long bfd_mach_o_get_dynamic_reloc_upper_bound (bfd *);
|
| long bfd_mach_o_canonicalize_dynamic_reloc (bfd *, arelent **, asymbol **);
|
| asymbol *bfd_mach_o_make_empty_symbol (bfd *);
|
| void bfd_mach_o_get_symbol_info (bfd *, asymbol *, symbol_info *);
|
| -void bfd_mach_o_print_symbol (bfd *, PTR, asymbol *, bfd_print_symbol_type);
|
| +void bfd_mach_o_print_symbol (bfd *, void *, asymbol *, bfd_print_symbol_type);
|
| int bfd_mach_o_sizeof_headers (bfd *, struct bfd_link_info *);
|
| unsigned long bfd_mach_o_stack_addr (enum bfd_mach_o_cpu_type);
|
| int bfd_mach_o_core_fetch_environment (bfd *, unsigned char **, unsigned int *);
|
| @@ -586,19 +623,70 @@ bfd_boolean bfd_mach_o_set_section_contents (bfd *, asection *, const void *,
|
| file_ptr, bfd_size_type);
|
| unsigned int bfd_mach_o_version (bfd *);
|
|
|
| -unsigned int bfd_mach_o_get_section_type_from_name (const char *);
|
| +unsigned int bfd_mach_o_get_section_type_from_name (bfd *, const char *);
|
| unsigned int bfd_mach_o_get_section_attribute_from_name (const char *);
|
| -void bfd_mach_o_normalize_section_name (const char *, const char *,
|
| - const char **, flagword *);
|
| +
|
| +void bfd_mach_o_convert_section_name_to_bfd (bfd *, const char *, const char *,
|
| + const char **, flagword *);
|
| +bfd_boolean bfd_mach_o_find_nearest_line (bfd *, asection *, asymbol **,
|
| + bfd_vma, const char **,
|
| + const char **, unsigned int *);
|
| +bfd_boolean bfd_mach_o_close_and_cleanup (bfd *);
|
| +bfd_boolean bfd_mach_o_free_cached_info (bfd *);
|
|
|
| unsigned int bfd_mach_o_section_get_nbr_indirect (bfd *, bfd_mach_o_section *);
|
| unsigned int bfd_mach_o_section_get_entry_size (bfd *, bfd_mach_o_section *);
|
| bfd_boolean bfd_mach_o_read_symtab_symbols (bfd *);
|
| bfd_boolean bfd_mach_o_read_symtab_strtab (bfd *abfd);
|
|
|
| +/* A placeholder in case we need to suppress emitting the dysymtab for some
|
| + reason (e.g. compatibility with older system versions). */
|
| +#define bfd_mach_o_should_emit_dysymtab(x) TRUE
|
| +
|
| extern const bfd_mach_o_xlat_name bfd_mach_o_section_attribute_name[];
|
| extern const bfd_mach_o_xlat_name bfd_mach_o_section_type_name[];
|
|
|
| extern const bfd_target mach_o_fat_vec;
|
|
|
| +/* Interfaces between BFD names and Mach-O names. */
|
| +
|
| +typedef struct mach_o_section_name_xlat
|
| +{
|
| + const char *bfd_name;
|
| + const char *mach_o_name;
|
| + flagword bfd_flags;
|
| + unsigned int macho_sectype;
|
| + unsigned int macho_secattr;
|
| + unsigned int sectalign;
|
| +} mach_o_section_name_xlat;
|
| +
|
| +typedef struct mach_o_segment_name_xlat
|
| +{
|
| + const char *segname;
|
| + const mach_o_section_name_xlat *sections;
|
| +} mach_o_segment_name_xlat;
|
| +
|
| +const mach_o_section_name_xlat *
|
| +bfd_mach_o_section_data_for_mach_sect (bfd *, const char *, const char *);
|
| +const mach_o_section_name_xlat *
|
| +bfd_mach_o_section_data_for_bfd_name (bfd *, const char *, const char **);
|
| +
|
| +typedef struct bfd_mach_o_backend_data
|
| +{
|
| + enum bfd_architecture arch;
|
| + bfd_boolean (*_bfd_mach_o_swap_reloc_in)(arelent *, bfd_mach_o_reloc_info *);
|
| + bfd_boolean (*_bfd_mach_o_swap_reloc_out)(arelent *, bfd_mach_o_reloc_info *);
|
| + bfd_boolean (*_bfd_mach_o_print_thread)(bfd *, bfd_mach_o_thread_flavour *,
|
| + void *, char *);
|
| + const mach_o_segment_name_xlat *segsec_names_xlat;
|
| + bfd_boolean (*bfd_mach_o_section_type_valid_for_target) (unsigned long);
|
| +}
|
| +bfd_mach_o_backend_data;
|
| +
|
| +/* Values used in symbol.udata.i, to signal that the mach-o-specific data in the
|
| + symbol are not yet set, or need validation (where this is possible). */
|
| +
|
| +#define SYM_MACHO_FIELDS_UNSET ((bfd_vma) -1)
|
| +#define SYM_MACHO_FIELDS_NOT_VALIDATED ((bfd_vma) -2)
|
| +
|
| #endif /* _BFD_MACH_O_H_ */
|
|
|