2009-06-19 Tristan Gingold <gingold@adacore.com>

* mach-o.c (bfd_mach_o_scan_read_symtab_symbols): Add prototype.
	(bfd_mach_o_version): Use bfd_mach_o_get_data instead of direct access.
	(bfd_mach_o_valid): Ditto.
	(bfd_mach_o_wide_p): Ditto.
	(bfd_mach_o_canonicalize_reloc): Ditto.
	(bfd_mach_o_build_commands): Ditto.
	(bfd_mach_o_scan_read_thread): Ditto.
	(bfd_mach_o_flatten_sections): Ditto.
	(bfd_mach_o_scan_start_address): Ditto.
	(bfd_mach_o_lookup_section): Ditto.
	(bfd_mach_o_core_fetch_environment): Ditto.
	(bfd_mach_o_write_contents): Ditto.  Handle reexport_dylib.
	(bfd_mach_o_scan_write_relocs): Adjust for bfd_mach_o_get_data.
	(bfd_mach_o_scan_write_symtab): Ditto.
	Use macros instead of hard-coded values.
	(bfd_mach_o_scan_read_symtab_symbol): Make the function static.
	Use bfd_mach_o_get_data instead of direct access.  Use macros
	instead of hard-coded values.
	(bfd_mach_o_scan_read_symtab_strtab): Make the function static.
	Remove sym argument and get section from mdata.
	Move code into the else branch.
	(bfd_mach_o_scan_read_symtab_symbols): Make the function static.
	Remove sym argument and get section from mdata.  Adjust code.
	(bfd_mach_o_scan_read_dylib): Move assertion into the created
	switch (which replaces consecutive if statements).
	(bfd_mach_o_scan_read_dysymtab): Rename seg to cmd.  Load
	module table, table of content, indirect symbols and external
	referenced symbols.
	(bfd_mach_o_scan_read_symtab): Renames seg to symtab.  Set symtab
	field.
	(bfd_mach_o_scan_read_linkedit): New function.
	(bfd_mach_o_scan_read_str): Ditto.
	(bfd_mach_o_count_symbols): Simplify the code by using the symtab
	field of mdata.
	(bfd_mach_o_get_symtab_upper_bound): Remove check as
	bfd_mach_o_count_symbols never returns an error.
	(bfd_mach_o_canonicalize_symtab): Simplify the code by using the
	symtab field (there might be only one symtab).
	(bfd_mach_o_scan_read_command): Handle reexported dylib.
	Handle sub frameworks, sub umbrella, sub library and sub client.
	Read code signature and segment split info commands.
	(bfd_mach_o_scan): Reindent.
	(bfd_mach_o_xlat_name): New type.
	(bfd_mach_o_print_flags): New function.
	(bfd_mach_o_get_name): Ditto.
	(bfd_mach_o_cpu_name): New variable.
	(bfd_mach_o_filetype_name, bfd_mach_o_header_flags_name)
	(bfd_mach_o_section_type_name)
	(bfd_mach_o_section_attribute_name)
	(bfd_mach_o_load_command_name): New variables.
	(bfd_mach_o_print_private_header): New function.
	(bfd_mach_o_print_section_map): New function extracted from
	bfd_mach_o_print_private_bfd_data.
	(bfd_mach_o_print_section): Ditto.  Print more infos.
	(bfd_mach_o_print_segment): Ditto.
	(bfd_mach_o_print_dysymtab): Ditto.
	(bfd_mach_o_bfd_print_private_bfd_data): Reworked.  Handle
	load weak dylib, reexport dylib and id dylib.
	Handle code signature and segment_split info.
	Handle sub frameworks, sub umbrella, sub library and sub client.
	(bfd_mach_o_section_get_nbr_indirect): New function.

	* mach-o.h (BFD_MACH_O_REFERENCE_MASK): New macro.  Add comment.
	(bfd_mach_o_header_flags): New enum to define header flags.
	(bfd_mach_o_section_attribute): New enum to replace ...
	(BFD_MACH_O_S_ATTR_LOC_RELOC, BFD_MACH_O_S_ATTR_EXT_RELOC,
	BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS, BFD_MACH_O_S_ATTR_DEBUG,
	BFD_MACH_O_S_SELF_MODIFYING_CODE, BFD_MACH_O_S_ATTR_LIVE_SUPPORT,
	BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS,
	BFD_MACH_O_S_ATTR_NO_TOC, BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS): ...
	these removed macros.
	(BFD_MACH_O_NLIST_SIZE, BFD_MACH_O_NLIST_64_SIZE): New macros.
	(bfd_mach_o_dylib_module): New type.
	(BFD_MACH_O_DYLIB_MODULE_SIZE, BFD_MACH_O_DYLIB_MODULE_64_SIZE): New
	macros.
	(bfd_mach_o_dylib_table_of_content): New type.
	(BFD_MACH_O_TABLE_OF_CONTENT_SIZE): New macro.
	(bfd_mach_o_dylib_reference): New type.
	(BFD_MACH_O_REFERENCE_SIZE): New macro.
	(bfd_mach_o_dysymtab_command): Add fields for loaded and decoded
	modules, toc, references and indirect syms.
	(BFD_MACH_O_INDIRECT_SYMBOL_SIZE): New macro.
	(bfd_mach_o_dylinker_command): Remove cmd and cmdsize fields (were
	unused).  Add comment.
	(bfd_mach_o_dylib_command): Ditto.
	(bfd_mach_o_prebound_dylib_command): Ditto.
	(bfd_mach_o_linkedit_command): New type.
	(bfd_mach_o_str_command): New type.
	(bfd_mach_o_load_command): Add linkedit and str fields.
	(mach_o_data_struct): Add symtab field.
	(bfd_get_mach_o_data): Renamed to ...
	(bfd_mach_o_get_data): ... this new macro.
	(bfd_mach_o_scan_read_symtab_symbol,
	bfd_mach_o_scan_read_symtab_strtab,
	bfd_mach_o_scan_read_symtab_symbols): Prototypes removed.

	* mach-o-i386.c (bfd_mach_o_i386_mkobject): Use bfd_mach_o_get_data
	instead of direct access.
This commit is contained in:
Tristan Gingold 2009-06-19 09:12:41 +00:00
parent 6d78d0b92e
commit 046b007d85
4 changed files with 1127 additions and 200 deletions

View File

@ -1,3 +1,104 @@
2009-06-19 Tristan Gingold <gingold@adacore.com>
* mach-o.c (bfd_mach_o_scan_read_symtab_symbols): Add prototype.
(bfd_mach_o_version): Use bfd_mach_o_get_data instead of direct access.
(bfd_mach_o_valid): Ditto.
(bfd_mach_o_wide_p): Ditto.
(bfd_mach_o_canonicalize_reloc): Ditto.
(bfd_mach_o_build_commands): Ditto.
(bfd_mach_o_scan_read_thread): Ditto.
(bfd_mach_o_flatten_sections): Ditto.
(bfd_mach_o_scan_start_address): Ditto.
(bfd_mach_o_lookup_section): Ditto.
(bfd_mach_o_core_fetch_environment): Ditto.
(bfd_mach_o_write_contents): Ditto. Handle reexport_dylib.
(bfd_mach_o_scan_write_relocs): Adjust for bfd_mach_o_get_data.
(bfd_mach_o_scan_write_symtab): Ditto.
Use macros instead of hard-coded values.
(bfd_mach_o_scan_read_symtab_symbol): Make the function static.
Use bfd_mach_o_get_data instead of direct access. Use macros
instead of hard-coded values.
(bfd_mach_o_scan_read_symtab_strtab): Make the function static.
Remove sym argument and get section from mdata.
Move code into the else branch.
(bfd_mach_o_scan_read_symtab_symbols): Make the function static.
Remove sym argument and get section from mdata. Adjust code.
(bfd_mach_o_scan_read_dylib): Move assertion into the created
switch (which replaces consecutive if statements).
(bfd_mach_o_scan_read_dysymtab): Rename seg to cmd. Load
module table, table of content, indirect symbols and external
referenced symbols.
(bfd_mach_o_scan_read_symtab): Renames seg to symtab. Set symtab
field.
(bfd_mach_o_scan_read_linkedit): New function.
(bfd_mach_o_scan_read_str): Ditto.
(bfd_mach_o_count_symbols): Simplify the code by using the symtab
field of mdata.
(bfd_mach_o_get_symtab_upper_bound): Remove check as
bfd_mach_o_count_symbols never returns an error.
(bfd_mach_o_canonicalize_symtab): Simplify the code by using the
symtab field (there might be only one symtab).
(bfd_mach_o_scan_read_command): Handle reexported dylib.
Handle sub frameworks, sub umbrella, sub library and sub client.
Read code signature and segment split info commands.
(bfd_mach_o_scan): Reindent.
(bfd_mach_o_xlat_name): New type.
(bfd_mach_o_print_flags): New function.
(bfd_mach_o_get_name): Ditto.
(bfd_mach_o_cpu_name): New variable.
(bfd_mach_o_filetype_name, bfd_mach_o_header_flags_name)
(bfd_mach_o_section_type_name)
(bfd_mach_o_section_attribute_name)
(bfd_mach_o_load_command_name): New variables.
(bfd_mach_o_print_private_header): New function.
(bfd_mach_o_print_section_map): New function extracted from
bfd_mach_o_print_private_bfd_data.
(bfd_mach_o_print_section): Ditto. Print more infos.
(bfd_mach_o_print_segment): Ditto.
(bfd_mach_o_print_dysymtab): Ditto.
(bfd_mach_o_bfd_print_private_bfd_data): Reworked. Handle
load weak dylib, reexport dylib and id dylib.
Handle code signature and segment_split info.
Handle sub frameworks, sub umbrella, sub library and sub client.
(bfd_mach_o_section_get_nbr_indirect): New function.
* mach-o.h (BFD_MACH_O_REFERENCE_MASK): New macro. Add comment.
(bfd_mach_o_header_flags): New enum to define header flags.
(bfd_mach_o_section_attribute): New enum to replace ...
(BFD_MACH_O_S_ATTR_LOC_RELOC, BFD_MACH_O_S_ATTR_EXT_RELOC,
BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS, BFD_MACH_O_S_ATTR_DEBUG,
BFD_MACH_O_S_SELF_MODIFYING_CODE, BFD_MACH_O_S_ATTR_LIVE_SUPPORT,
BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS,
BFD_MACH_O_S_ATTR_NO_TOC, BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS): ...
these removed macros.
(BFD_MACH_O_NLIST_SIZE, BFD_MACH_O_NLIST_64_SIZE): New macros.
(bfd_mach_o_dylib_module): New type.
(BFD_MACH_O_DYLIB_MODULE_SIZE, BFD_MACH_O_DYLIB_MODULE_64_SIZE): New
macros.
(bfd_mach_o_dylib_table_of_content): New type.
(BFD_MACH_O_TABLE_OF_CONTENT_SIZE): New macro.
(bfd_mach_o_dylib_reference): New type.
(BFD_MACH_O_REFERENCE_SIZE): New macro.
(bfd_mach_o_dysymtab_command): Add fields for loaded and decoded
modules, toc, references and indirect syms.
(BFD_MACH_O_INDIRECT_SYMBOL_SIZE): New macro.
(bfd_mach_o_dylinker_command): Remove cmd and cmdsize fields (were
unused). Add comment.
(bfd_mach_o_dylib_command): Ditto.
(bfd_mach_o_prebound_dylib_command): Ditto.
(bfd_mach_o_linkedit_command): New type.
(bfd_mach_o_str_command): New type.
(bfd_mach_o_load_command): Add linkedit and str fields.
(mach_o_data_struct): Add symtab field.
(bfd_get_mach_o_data): Renamed to ...
(bfd_mach_o_get_data): ... this new macro.
(bfd_mach_o_scan_read_symtab_symbol,
bfd_mach_o_scan_read_symtab_strtab,
bfd_mach_o_scan_read_symtab_symbols): Prototypes removed.
* mach-o-i386.c (bfd_mach_o_i386_mkobject): Use bfd_mach_o_get_data
instead of direct access.
2009-06-19 Alan Modra <amodra@bigpond.net.au>
* elf32-ppc.c (ppc_elf_check_relocs): Allow local symbols for
@ -366,7 +467,7 @@
Adjust for bfd_mach_o_asymbol. Move code to convert from BFD to
Mach-O to ...
(bfd_mach_o_mangle_symbols): ... this new function.
(bfd_mach_o_write_contents): Be sure to habe load commands built.
(bfd_mach_o_write_contents): Be sure to have load commands built.
Call bfd_mach_o_mangle_symbols.
(bfd_mach_o_build_commands): Adjust for filelen field.
Use FILE_ALIGN macro. Clear section file offset if section is empty.

View File

@ -50,7 +50,7 @@ bfd_mach_o_i386_mkobject (bfd *abfd)
if (!bfd_mach_o_mkobject_init (abfd))
return FALSE;
mdata = abfd->tdata.mach_o_data;
mdata = bfd_mach_o_get_data (abfd);
mdata->header.magic = BFD_MACH_O_MH_MAGIC;
mdata->header.cputype = BFD_MACH_O_CPU_TYPE_I386;
mdata->header.cpusubtype = BFD_MACH_O_CPU_SUBTYPE_X86_ALL;

File diff suppressed because it is too large Load Diff

View File

@ -37,13 +37,15 @@
#define BFD_MACH_O_NO_SECT 0 /* Symbol not in any section of the image. */
/* Symbol n_desc flags. */
/* Symbol n_desc reference flags. */
#define BFD_MACH_O_REFERENCE_MASK 0x0f
#define BFD_MACH_O_REFERENCE_FLAG_UNDEFINED_NON_LAZY 0x00
#define BFD_MACH_O_REFERENCE_FLAG_UNDEFINED_LAZY 0x01
#define BFD_MACH_O_REFERENCE_FLAG_DEFINED 0x02
#define BFD_MACH_O_REFERENCE_FLAG_PRIVATE_DEFINED 0x03
#define BFD_MACH_O_REFERENCE_FLAG_PRIVATE_UNDEFINED_NON_LAZY 0x04
#define BFD_MACH_O_REFERENCE_FLAG_PRIVATE_UNDEFINED_LAZY 0x05
#define BFD_MACH_O_REFERENCED_DYNAMICALLY 0x10
#define BFD_MACH_O_N_DESC_DISCARDED 0x20
#define BFD_MACH_O_N_NO_DEAD_STRIP 0x20
@ -172,6 +174,33 @@ typedef enum bfd_mach_o_filetype
}
bfd_mach_o_filetype;
typedef enum bfd_mach_o_header_flags
{
BFD_MACH_O_MH_NOUNDEFS = 0x000001,
BFD_MACH_O_MH_INCRLINK = 0x000002,
BFD_MACH_O_MH_DYLDLINK = 0x000004,
BFD_MACH_O_MH_BINDATLOAD = 0x000008,
BFD_MACH_O_MH_PREBOUND = 0x000010,
BFD_MACH_O_MH_SPLIT_SEGS = 0x000020,
BFD_MACH_O_MH_LAZY_INIT = 0x000040,
BFD_MACH_O_MH_TWOLEVEL = 0x000080,
BFD_MACH_O_MH_FORCE_FLAT = 0x000100,
BFD_MACH_O_MH_NOMULTIDEFS = 0x000200,
BFD_MACH_O_MH_NOFIXPREBINDING = 0x000400,
BFD_MACH_O_MH_PREBINDABLE = 0x000800,
BFD_MACH_O_MH_ALLMODSBOUND = 0x001000,
BFD_MACH_O_MH_SUBSECTIONS_VIA_SYMBOLS = 0x002000,
BFD_MACH_O_MH_CANONICAL = 0x004000,
BFD_MACH_O_MH_WEAK_DEFINES = 0x008000,
BFD_MACH_O_MH_BINDS_TO_WEAK = 0x010000,
BFD_MACH_O_MH_ALLOW_STACK_EXECUTION = 0x020000,
BFD_MACH_O_MH_ROOT_SAFE = 0x040000,
BFD_MACH_O_MH_SETUID_SAFE = 0x080000,
BFD_MACH_O_MH_NO_REEXPORTED_DYLIBS = 0x100000,
BFD_MACH_O_MH_PIE = 0x200000
}
bfd_mach_o_header_flags;
/* Constants for the type of a section. */
typedef enum bfd_mach_o_section_type
@ -258,36 +287,40 @@ bfd_mach_o_section_type;
/* User attributes. */
#define BFD_MACH_O_SECTION_ATTRIBUTES_USR 0xff000000
/* Section has local relocation entries. */
#define BFD_MACH_O_S_ATTR_LOC_RELOC 0x00000100
typedef enum bfd_mach_o_section_attribute
{
/* Section has local relocation entries. */
BFD_MACH_O_S_ATTR_LOC_RELOC = 0x00000100,
/* Section has external relocation entries. */
#define BFD_MACH_O_S_ATTR_EXT_RELOC 0x00000200
/* Section has external relocation entries. */
BFD_MACH_O_S_ATTR_EXT_RELOC = 0x00000200,
/* Section contains some machine instructions. */
#define BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS 0x00000400
/* Section contains some machine instructions. */
BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS = 0x00000400,
/* A debug section. */
#define BFD_MACH_O_S_ATTR_DEBUG 0x02000000
/* A debug section. */
BFD_MACH_O_S_ATTR_DEBUG = 0x02000000,
/* Used with i386 stubs. */
#define BFD_MACH_O_S_SELF_MODIFYING_CODE 0x04000000
/* Used with i386 stubs. */
BFD_MACH_O_S_SELF_MODIFYING_CODE = 0x04000000,
/* Blocks are live if they reference live blocks. */
BFD_MACH_O_S_ATTR_LIVE_SUPPORT = 0x08000000,
/* Blocks are live if they reference live blocks. */
#define BFD_MACH_O_S_ATTR_LIVE_SUPPORT 0x08000000
/* No dead stripping. */
BFD_MACH_O_S_ATTR_NO_DEAD_STRIP = 0x10000000,
/* No dead stripping. */
#define BFD_MACH_O_S_ATTR_NO_DEAD_STRIP 0x10000000
/* Section symbols can be stripped in files with MH_DYLDLINK flag. */
BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS = 0x20000000,
/* Section symbols can be stripped in files with MH_DYLDLINK flag. */
#define BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS 0x20000000
/* Section contains coalesced symbols that are not to be in the TOC of an
archive. */
BFD_MACH_O_S_ATTR_NO_TOC = 0x40000000,
/* Section contains coalesced symbols that are not to be in the TOC of an
archive. */
#define BFD_MACH_O_S_ATTR_NO_TOC 0x40000000
/* Section contains only true machine instructions. */
#define BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS 0x80000000
/* Section contains only true machine instructions. */
BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS = 0x80000000
}
bfd_mach_o_section_attribute;
typedef struct bfd_mach_o_header
{
@ -405,6 +438,8 @@ typedef struct bfd_mach_o_asymbol
unsigned short n_desc;
}
bfd_mach_o_asymbol;
#define BFD_MACH_O_NLIST_SIZE 12
#define BFD_MACH_O_NLIST_64_SIZE 16
typedef struct bfd_mach_o_symtab_command
{
@ -454,6 +489,88 @@ bfd_mach_o_symtab_command;
For executable and object modules the relocation entries continue to hang
off the section structures. */
typedef struct bfd_mach_o_dylib_module
{
/* Index into the string table indicating the name of the module. */
unsigned long module_name_idx;
char *module_name;
/* Index into the symbol table of the first defined external symbol provided
by the module. */
unsigned long iextdefsym;
/* Number of external symbols provided by this module. */
unsigned long nextdefsym;
/* Index into the external reference table of the first entry
provided by this module. */
unsigned long irefsym;
/* Number of external reference entries provided by this module. */
unsigned long nrefsym;
/* Index into the symbol table of the first local symbol provided by this
module. */
unsigned long ilocalsym;
/* Number of local symbols provided by this module. */
unsigned long nlocalsym;
/* Index into the external relocation table of the first entry provided
by this module. */
unsigned long iextrel;
/* Number of external relocation entries provided by this module. */
unsigned long nextrel;
/* Index in the module initialization section to the pointers for this
module. */
unsigned short iinit;
/* Index in the module termination section to the pointers for this
module. */
unsigned short iterm;
/* Number of pointers in the module initialization for this module. */
unsigned short ninit;
/* Number of pointers in the module termination for this module. */
unsigned short nterm;
/* Number of data byte for this module that are used in the __module_info
section of the __OBJC segment. */
unsigned long objc_module_info_size;
/* Statically linked address of the start of the data for this module
in the __module_info section of the __OBJC_segment. */
bfd_vma objc_module_info_addr;
}
bfd_mach_o_dylib_module;
#define BFD_MACH_O_DYLIB_MODULE_SIZE 52
#define BFD_MACH_O_DYLIB_MODULE_64_SIZE 56
typedef struct bfd_mach_o_dylib_table_of_content
{
/* Index into the symbol table to the defined external symbol. */
unsigned long symbol_index;
/* Index into the module table to the module for this entry. */
unsigned long module_index;
}
bfd_mach_o_dylib_table_of_content;
#define BFD_MACH_O_TABLE_OF_CONTENT_SIZE 8
typedef struct bfd_mach_o_dylib_reference
{
/* Index into the symbol table for the symbol being referenced. */
unsigned long isym;
/* Type of the reference being made (use REFERENCE_FLAGS constants). */
unsigned long flags;
}
bfd_mach_o_dylib_reference;
#define BFD_MACH_O_REFERENCE_SIZE 4
typedef struct bfd_mach_o_dysymtab_command
{
/* The symbols indicated by symoff and nsyms of the LC_SYMTAB load command
@ -554,17 +671,23 @@ typedef struct bfd_mach_o_dysymtab_command
unsigned long locreloff; /* Offset to local relocation entries. */
unsigned long nlocrel; /* Number of local relocation entries. */
bfd_mach_o_dylib_module *dylib_module;
bfd_mach_o_dylib_table_of_content *dylib_toc;
unsigned int *indirect_syms;
bfd_mach_o_dylib_reference *ext_refs;
}
bfd_mach_o_dysymtab_command;
/* An indirect symbol table entry is simply a 32bit index into the symbol table
to the symbol that the pointer or stub is refering to. Unless it is for a
non-lazy symbol pointer section for a defined symbol which strip(1) as
non-lazy symbol pointer section for a defined symbol which strip(1) has
removed. In which case it has the value INDIRECT_SYMBOL_LOCAL. If the
symbol was also absolute INDIRECT_SYMBOL_ABS is or'ed with that. */
#define BFD_MACH_O_INDIRECT_SYMBOL_LOCAL 0x80000000
#define BFD_MACH_O_INDIRECT_SYMBOL_ABS 0x40000000
#define BFD_MACH_O_INDIRECT_SYMBOL_SIZE 4
typedef struct bfd_mach_o_thread_flavour
{
@ -582,20 +705,21 @@ typedef struct bfd_mach_o_thread_command
}
bfd_mach_o_thread_command;
/* For LC_LOAD_DYLINKER and LC_ID_DYLINKER. */
typedef struct bfd_mach_o_dylinker_command
{
unsigned long cmd; /* LC_ID_DYLINKER or LC_LOAD_DYLINKER. */
unsigned long cmdsize; /* Includes pathname string. */
unsigned long name_offset; /* Offset to library's path name. */
unsigned long name_len; /* Offset to library's path name. */
asection *section;
}
bfd_mach_o_dylinker_command;
/* For LC_LOAD_DYLIB, LC_LOAD_WEAK_DYLIB, LC_ID_DYLIB
or LC_REEXPORT_DYLIB. */
typedef struct bfd_mach_o_dylib_command
{
unsigned long cmd; /* LC_ID_DYLIB or LC_LOAD_DYLIB. */
unsigned long cmdsize; /* Includes pathname string. */
unsigned long name_offset; /* Offset to library's path name. */
unsigned long name_len; /* Offset to library's path name. */
unsigned long timestamp; /* Library's build time stamp. */
@ -605,10 +729,10 @@ typedef struct bfd_mach_o_dylib_command
}
bfd_mach_o_dylib_command;
/* For LC_PREBOUND_DYLIB. */
typedef struct bfd_mach_o_prebound_dylib_command
{
unsigned long cmd; /* LC_PREBOUND_DYLIB. */
unsigned long cmdsize; /* Includes strings. */
unsigned long name; /* Library's path name. */
unsigned long nmodules; /* Number of modules in library. */
unsigned long linked_modules; /* Bit vector of linked modules. */
@ -616,15 +740,32 @@ typedef struct bfd_mach_o_prebound_dylib_command
}
bfd_mach_o_prebound_dylib_command;
/* For LC_UUID. */
typedef struct bfd_mach_o_uuid_command
{
unsigned long cmd; /* LC_PREBOUND_DYLIB. */
unsigned long cmdsize; /* Includes uuid. */
unsigned char uuid[16]; /* Uuid. */
unsigned char uuid[16];
asection *section;
}
bfd_mach_o_uuid_command;
/* For LC_CODE_SIGNATURE or LC_SEGMENT_SPLIT_INFO. */
typedef struct bfd_mach_o_linkedit_command
{
unsigned long dataoff;
unsigned long datasize;
}
bfd_mach_o_linkedit_command;
typedef struct bfd_mach_o_str_command
{
unsigned long stroff;
unsigned long str_len;
char *str;
}
bfd_mach_o_str_command;
typedef struct bfd_mach_o_load_command
{
bfd_mach_o_load_command_type type;
@ -641,6 +782,8 @@ typedef struct bfd_mach_o_load_command
bfd_mach_o_dylinker_command dylinker;
bfd_mach_o_prebound_dylib_command prebound_dylib;
bfd_mach_o_uuid_command uuid;
bfd_mach_o_linkedit_command linkedit;
bfd_mach_o_str_command str;
}
command;
}
@ -660,9 +803,13 @@ typedef struct mach_o_data_struct
/* Used while writting: current length of the output file. This is used
to allocate space in the file. */
ufile_ptr filelen;
/* As symtab is referenced by other load command, it is handy to have
a direct access to it. Also it is not clearly stated, only one symtab
is expected. */
bfd_mach_o_symtab_command *symtab;
}
mach_o_data_struct;
typedef struct mach_o_data_struct bfd_mach_o_data_struct;
bfd_mach_o_data_struct;
/* Target specific routines. */
typedef struct bfd_mach_o_backend_data
@ -672,15 +819,11 @@ typedef struct bfd_mach_o_backend_data
}
bfd_mach_o_backend_data;
#define bfd_get_mach_o_data(abfd) ((abfd)->tdata.mach_o_data)
#define bfd_mach_o_get_data(abfd) ((abfd)->tdata.mach_o_data)
#define bfd_mach_o_get_backend_data(abfd) \
((bfd_mach_o_backend_data*)(abfd)->xvec->backend_data)
bfd_boolean bfd_mach_o_valid (bfd *);
int bfd_mach_o_scan_read_symtab_symbol (bfd *, bfd_mach_o_symtab_command *,
bfd_mach_o_asymbol *, unsigned long);
int bfd_mach_o_scan_read_symtab_strtab (bfd *, bfd_mach_o_symtab_command *);
int bfd_mach_o_scan_read_symtab_symbols (bfd *, bfd_mach_o_symtab_command *);
int bfd_mach_o_scan_read_dysymtab_symbol (bfd *, bfd_mach_o_dysymtab_command *, bfd_mach_o_symtab_command *, bfd_mach_o_asymbol *, unsigned long);
int bfd_mach_o_scan_start_address (bfd *);
int bfd_mach_o_scan (bfd *, bfd_mach_o_header *, bfd_mach_o_data_struct *);