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:
parent
6d78d0b92e
commit
046b007d85
4 changed files with 1127 additions and 200 deletions
103
bfd/ChangeLog
103
bfd/ChangeLog
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
999
bfd/mach-o.c
999
bfd/mach-o.c
File diff suppressed because it is too large
Load diff
223
bfd/mach-o.h
223
bfd/mach-o.h
|
@ -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 *);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue