X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Fmach-o.h;h=1db86746b9bb0b4ef402d36862bf4b52e6f34d33;hb=95830fd17d6ae253d8f6c2595188cadd59058799;hp=da4363bee9cec9bd9964eac956c86a1b75159e92;hpb=2ca7691a9b964e6f393fbcc37e83dd8f91e63ae2;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/mach-o.h b/bfd/mach-o.h index da4363bee9..1db86746b9 100644 --- a/bfd/mach-o.h +++ b/bfd/mach-o.h @@ -1,6 +1,7 @@ /* Mach-O support for BFD. Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2009, 2011, - 2012 Free Software Foundation, Inc. + 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; } @@ -104,26 +123,12 @@ 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; - - /* Mach-O symbol fields. */ - 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 - (sorted by name) - (4) common + (3) external undefined / common (sorted by name) */ @@ -449,10 +454,20 @@ 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. */ - unsigned int rebase_off; + unsigned int rebase_off; unsigned int rebase_size; /* File offset and size of binding info. */ @@ -482,6 +497,31 @@ 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_main_command +{ + bfd_uint64_t entryoff; + bfd_uint64_t stacksize; +} +bfd_mach_o_main_command; + +typedef struct bfd_mach_o_source_version_command +{ + unsigned int a; + unsigned short b; + unsigned short c; + unsigned short d; + unsigned short e; +} +bfd_mach_o_source_version_command; + typedef struct bfd_mach_o_load_command { bfd_mach_o_load_command_type type; @@ -502,6 +542,10 @@ 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; + bfd_mach_o_main_command main; + bfd_mach_o_source_version_command source_version; } command; } @@ -528,18 +572,6 @@ typedef struct mach_o_data_struct bfd_mach_o_symtab_command *symtab; bfd_mach_o_dysymtab_command *dysymtab; - /* Base values used for building the dysymtab for a single-module object. */ - unsigned long nlocal; - unsigned long ndefext; - unsigned long nundefext; - - /* If this is non-zero, then the pointer below is populated. */ - unsigned long nindirect; - /* A set of synthetic symbols representing the 'indirect' ones in the file. - These should be sorted (a) by the section they represent and (b) by the - order that they appear within each section. */ - asymbol **indirect_syms; - /* A place to stash dwarf2 info for this bfd. */ void *dwarf2_find_line_info; @@ -595,7 +627,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 *); @@ -670,8 +702,10 @@ typedef struct bfd_mach_o_backend_data } bfd_mach_o_backend_data; -/* Symbol type tests. */ +/* 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 IS_MACHO_INDIRECT(x) (((x) & BFD_MACH_O_N_TYPE) == BFD_MACH_O_N_INDR) +#define SYM_MACHO_FIELDS_UNSET ((bfd_vma) -1) +#define SYM_MACHO_FIELDS_NOT_VALIDATED ((bfd_vma) -2) #endif /* _BFD_MACH_O_H_ */