/* 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.
}
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
/* 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;
}
}
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)
*/
}
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. */
}
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;
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;
}
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;
+ /* BFD of .dSYM file. */
+ bfd *dsym_bfd;
+
/* Cache of dynamic relocs. */
arelent *dyn_reloc_cache;
}
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,
+long bfd_mach_o_get_synthetic_symtab (bfd *, long, asymbol **, long,
asymbol **, asymbol **ret);
long bfd_mach_o_get_reloc_upper_bound (bfd *, asection *);
long bfd_mach_o_canonicalize_reloc (bfd *, asection *, arelent **, asymbol **);
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 *);
}
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_ */