OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-6.8/] [bfd/] [mach-o.h] - Diff between revs 157 and 225

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 157 Rev 225
Line 1... Line 1...
/* Mach-O support for BFD.
/* Mach-O support for BFD.
   Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007
   Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2009
   Free Software Foundation, Inc.
   Free Software Foundation, Inc.
 
 
   This file is part of BFD, the Binary File Descriptor library.
   This file is part of BFD, the Binary File Descriptor library.
 
 
   This program is free software; you can redistribute it and/or modify
   This program is free software; you can redistribute it and/or modify
Line 22... Line 22...
#ifndef _BFD_MACH_O_H_
#ifndef _BFD_MACH_O_H_
#define _BFD_MACH_O_H_
#define _BFD_MACH_O_H_
 
 
#include "bfd.h"
#include "bfd.h"
 
 
 
/* Symbol n_type values.  */
#define BFD_MACH_O_N_STAB  0xe0 /* If any of these bits set, a symbolic debugging entry.  */
#define BFD_MACH_O_N_STAB  0xe0 /* If any of these bits set, a symbolic debugging entry.  */
#define BFD_MACH_O_N_PEXT  0x10 /* Private external symbol bit.  */
#define BFD_MACH_O_N_PEXT  0x10 /* Private external symbol bit.  */
#define BFD_MACH_O_N_TYPE  0x0e /* Mask for the type bits.  */
#define BFD_MACH_O_N_TYPE  0x0e /* Mask for the type bits.  */
#define BFD_MACH_O_N_EXT   0x01 /* External symbol bit, set for external symbols.  */
#define BFD_MACH_O_N_EXT   0x01 /* External symbol bit, set for external symbols.  */
#define BFD_MACH_O_N_UNDF  0x00 /* Undefined, n_sect == NO_SECT.  */
#define BFD_MACH_O_N_UNDF  0x00 /* Undefined, n_sect == NO_SECT.  */
#define BFD_MACH_O_N_ABS   0x02 /* Absolute, n_sect == NO_SECT.  */
#define BFD_MACH_O_N_ABS   0x02 /* Absolute, n_sect == NO_SECT.  */
#define BFD_MACH_O_N_SECT  0x0e /* Defined in section number n_sect.  */
 
#define BFD_MACH_O_N_PBUD  0x0c /* Prebound undefined (defined in a dylib).  */
 
#define BFD_MACH_O_N_INDR  0x0a /* Indirect.  */
#define BFD_MACH_O_N_INDR  0x0a /* Indirect.  */
 
#define BFD_MACH_O_N_PBUD  0x0c /* Prebound undefined (defined in a dylib).  */
 
#define BFD_MACH_O_N_SECT  0x0e /* Defined in section number n_sect.  */
 
 
 
#define BFD_MACH_O_NO_SECT 0    /* Symbol not in any section of the image.  */
 
 
 
/* 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
 
#define BFD_MACH_O_N_WEAK_REF                                   0x40
 
#define BFD_MACH_O_N_WEAK_DEF                                   0x80
 
 
 
typedef enum bfd_mach_o_mach_header_magic
 
{
 
  BFD_MACH_O_MH_MAGIC    = 0xfeedface,
 
  BFD_MACH_O_MH_CIGAM    = 0xcefaedfe,
 
  BFD_MACH_O_MH_MAGIC_64 = 0xfeedfacf,
 
  BFD_MACH_O_MH_CIGAM_64 = 0xcffaedfe
 
}
 
bfd_mach_o_mach_header_magic;
 
 
typedef enum bfd_mach_o_ppc_thread_flavour
typedef enum bfd_mach_o_ppc_thread_flavour
{
{
  BFD_MACH_O_PPC_THREAD_STATE = 1,
  BFD_MACH_O_PPC_THREAD_STATE = 1,
  BFD_MACH_O_PPC_FLOAT_STATE = 2,
  BFD_MACH_O_PPC_FLOAT_STATE = 2,
  BFD_MACH_O_PPC_EXCEPTION_STATE = 3,
  BFD_MACH_O_PPC_EXCEPTION_STATE = 3,
  BFD_MACH_O_PPC_VECTOR_STATE = 4
  BFD_MACH_O_PPC_VECTOR_STATE      = 4,
 
  BFD_MACH_O_PPC_THREAD_STATE64    = 5,
 
  BFD_MACH_O_PPC_EXCEPTION_STATE64 = 6,
 
  BFD_MACH_O_PPC_THREAD_STATE_NONE = 7
}
}
bfd_mach_o_ppc_thread_flavour;
bfd_mach_o_ppc_thread_flavour;
 
 
 
/* Defined in <mach/i386/thread_status.h> */
typedef enum bfd_mach_o_i386_thread_flavour
typedef enum bfd_mach_o_i386_thread_flavour
{
{
  BFD_MACH_O_i386_NEW_THREAD_STATE = 1,
  BFD_MACH_O_x86_THREAD_STATE32    = 1,
  BFD_MACH_O_i386_FLOAT_STATE = 2,
  BFD_MACH_O_x86_FLOAT_STATE32     = 2,
  BFD_MACH_O_i386_ISA_PORT_MAP_STATE = 3,
  BFD_MACH_O_x86_EXCEPTION_STATE32 = 3,
  BFD_MACH_O_i386_V86_ASSIST_STATE = 4,
  BFD_MACH_O_x86_THREAD_STATE64    = 4,
  BFD_MACH_O_i386_REGS_SEGS_STATE = 5,
  BFD_MACH_O_x86_FLOAT_STATE64     = 5,
  BFD_MACH_O_i386_THREAD_SYSCALL_STATE = 6,
  BFD_MACH_O_x86_EXCEPTION_STATE64 = 6,
  BFD_MACH_O_i386_THREAD_STATE_NONE = 7,
  BFD_MACH_O_x86_THREAD_STATE      = 7,
  BFD_MACH_O_i386_SAVED_STATE = 8,
  BFD_MACH_O_x86_FLOAT_STATE       = 8,
  BFD_MACH_O_i386_THREAD_STATE = -1,
  BFD_MACH_O_x86_EXCEPTION_STATE   = 9,
  BFD_MACH_O_i386_THREAD_FPSTATE = -2,
  BFD_MACH_O_x86_DEBUG_STATE32     = 10,
  BFD_MACH_O_i386_THREAD_EXCEPTSTATE = -3,
  BFD_MACH_O_x86_DEBUG_STATE64     = 11,
  BFD_MACH_O_i386_THREAD_CTHREADSTATE = -4,
  BFD_MACH_O_x86_DEBUG_STATE       = 12,
 
  BFD_MACH_O_x86_THREAD_STATE_NONE = 13
}
}
bfd_mach_o_i386_thread_flavour;
bfd_mach_o_i386_thread_flavour;
 
 
#define BFD_MACH_O_LC_REQ_DYLD 0x80000000
#define BFD_MACH_O_LC_REQ_DYLD 0x80000000
 
 
Line 87... Line 119...
  BFD_MACH_O_LC_SUB_LIBRARY = 0x15,     /* Sub library.  */
  BFD_MACH_O_LC_SUB_LIBRARY = 0x15,     /* Sub library.  */
  BFD_MACH_O_LC_TWOLEVEL_HINTS = 0x16,  /* Two-level namespace lookup hints.  */
  BFD_MACH_O_LC_TWOLEVEL_HINTS = 0x16,  /* Two-level namespace lookup hints.  */
  BFD_MACH_O_LC_PREBIND_CKSUM = 0x17,   /* Prebind checksum.  */
  BFD_MACH_O_LC_PREBIND_CKSUM = 0x17,   /* Prebind checksum.  */
  /* Load a dynamically linked shared library that is allowed to be
  /* Load a dynamically linked shared library that is allowed to be
       missing (weak).  */
       missing (weak).  */
  BFD_MACH_O_LC_LOAD_WEAK_DYLIB = 0x18
  BFD_MACH_O_LC_LOAD_WEAK_DYLIB = 0x18,
 
  BFD_MACH_O_LC_SEGMENT_64 = 0x19,      /* 64-bit segment of this file to be
 
                                           mapped.  */
 
  BFD_MACH_O_LC_ROUTINES_64 = 0x1a,     /* Address of the dyld init routine
 
                                           in a dylib.  */
 
  BFD_MACH_O_LC_UUID = 0x1b,            /* 128-bit UUID of the executable.  */
 
  BFD_MACH_O_LC_RPATH = 0x1c,           /* Run path addiions.  */
 
  BFD_MACH_O_LC_CODE_SIGNATURE = 0x1d,  /* Local of code signature.  */
 
  BFD_MACH_O_LC_SEGMENT_SPLIT_INFO = 0x1e, /* Local of info to split seg.  */
 
  BFD_MACH_O_LC_REEXPORT_DYLIB = 0x1f,  /* Load and re-export lib.  */
 
  BFD_MACH_O_LC_LAZY_LOAD_DYLIB = 0x20, /* Delay load of lib until use.  */
 
  BFD_MACH_O_LC_ENCRYPTION_INFO = 0x21  /* Encrypted segment info.  */
}
}
bfd_mach_o_load_command_type;
bfd_mach_o_load_command_type;
 
 
 
#define BFD_MACH_O_CPU_IS64BIT 0x1000000
 
 
typedef enum bfd_mach_o_cpu_type
typedef enum bfd_mach_o_cpu_type
{
{
  BFD_MACH_O_CPU_TYPE_VAX = 1,
  BFD_MACH_O_CPU_TYPE_VAX = 1,
  BFD_MACH_O_CPU_TYPE_MC680x0 = 6,
  BFD_MACH_O_CPU_TYPE_MC680x0 = 6,
  BFD_MACH_O_CPU_TYPE_I386 = 7,
  BFD_MACH_O_CPU_TYPE_I386 = 7,
Line 104... Line 149...
  BFD_MACH_O_CPU_TYPE_ARM = 12,
  BFD_MACH_O_CPU_TYPE_ARM = 12,
  BFD_MACH_O_CPU_TYPE_MC88000 = 13,
  BFD_MACH_O_CPU_TYPE_MC88000 = 13,
  BFD_MACH_O_CPU_TYPE_SPARC = 14,
  BFD_MACH_O_CPU_TYPE_SPARC = 14,
  BFD_MACH_O_CPU_TYPE_I860 = 15,
  BFD_MACH_O_CPU_TYPE_I860 = 15,
  BFD_MACH_O_CPU_TYPE_ALPHA = 16,
  BFD_MACH_O_CPU_TYPE_ALPHA = 16,
  BFD_MACH_O_CPU_TYPE_POWERPC = 18
  BFD_MACH_O_CPU_TYPE_POWERPC = 18,
 
  BFD_MACH_O_CPU_TYPE_POWERPC_64 = (BFD_MACH_O_CPU_TYPE_POWERPC | BFD_MACH_O_CPU_IS64BIT),
 
  BFD_MACH_O_CPU_TYPE_X86_64 = (BFD_MACH_O_CPU_TYPE_I386 | BFD_MACH_O_CPU_IS64BIT)
}
}
bfd_mach_o_cpu_type;
bfd_mach_o_cpu_type;
 
 
 
typedef enum bfd_mach_o_cpu_subtype
 
{
 
  BFD_MACH_O_CPU_SUBTYPE_X86_ALL = 3
 
}
 
bfd_mach_o_cpu_subtype;
 
 
typedef enum bfd_mach_o_filetype
typedef enum bfd_mach_o_filetype
{
{
  BFD_MACH_O_MH_OBJECT = 1,
  BFD_MACH_O_MH_OBJECT = 1,
  BFD_MACH_O_MH_EXECUTE = 2,
  BFD_MACH_O_MH_EXECUTE = 2,
  BFD_MACH_O_MH_FVMLIB = 3,
  BFD_MACH_O_MH_FVMLIB = 3,
Line 121... Line 174...
  BFD_MACH_O_MH_DYLINKER = 7,
  BFD_MACH_O_MH_DYLINKER = 7,
  BFD_MACH_O_MH_BUNDLE = 8
  BFD_MACH_O_MH_BUNDLE = 8
}
}
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.  */
/* Constants for the type of a section.  */
 
 
typedef enum bfd_mach_o_section_type
typedef enum bfd_mach_o_section_type
{
{
  /* Regular section.  */
  /* Regular section.  */
Line 162... Line 242...
  BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS = 0x6,
  BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS = 0x6,
 
 
  /* Section with only lazy symbol pointers.  */
  /* Section with only lazy symbol pointers.  */
  BFD_MACH_O_S_LAZY_SYMBOL_POINTERS = 0x7,
  BFD_MACH_O_S_LAZY_SYMBOL_POINTERS = 0x7,
 
 
  /* Section with only symbol stubs, byte size of stub in the reserved2 field.  */
  /* Section with only symbol stubs, byte size of stub in the reserved2
 
     field.  */
  BFD_MACH_O_S_SYMBOL_STUBS = 0x8,
  BFD_MACH_O_S_SYMBOL_STUBS = 0x8,
 
 
  /* Section with only function pointers for initialization.  */
  /* Section with only function pointers for initialization.  */
  BFD_MACH_O_S_MOD_INIT_FUNC_POINTERS = 0x9
  BFD_MACH_O_S_MOD_INIT_FUNC_POINTERS = 0x9,
 
 
 
  /* Section with only function pointers for termination.  */
 
  BFD_MACH_O_S_MOD_FINI_FUNC_POINTERS = 0xa,
 
 
 
  /* Section contains symbols that are coalesced by the linkers.  */
 
  BFD_MACH_O_S_COALESCED = 0xb,
 
 
 
  /* Zero fill on demand section (possibly larger than 4 GB).  */
 
  BFD_MACH_O_S_GB_ZEROFILL = 0xc,
 
 
 
  /* Section with only pairs of function pointers for interposing.  */
 
  BFD_MACH_O_S_INTERPOSING = 0xd,
 
 
 
  /* Section with only 16 byte literals.  */
 
  BFD_MACH_O_S_16BYTE_LITERALS = 0xe,
 
 
 
  /* Section contains DTrace Object Format.  */
 
  BFD_MACH_O_S_DTRACE_DOF = 0xf,
 
 
 
  /* Section with only lazy symbol pointers to lazy loaded dylibs.  */
 
  BFD_MACH_O_S_LAZY_DYLIB_SYMBOL_POINTERS = 0x10
}
}
bfd_mach_o_section_type;
bfd_mach_o_section_type;
 
 
typedef unsigned long bfd_mach_o_cpu_subtype;
/* The flags field of a section structure is separated into two parts a section
 
   type and section attributes.  The section types are mutually exclusive (it
 
   can only have one type) but the section attributes are not (it may have more
 
   than one attribute).  */
 
 
 
#define BFD_MACH_O_SECTION_TYPE_MASK        0x000000ff
 
 
 
/* Constants for the section attributes part of the flags field of a section
 
   structure.  */
 
#define BFD_MACH_O_SECTION_ATTRIBUTES_MASK  0xffffff00
 
/* System setable attributes.  */
 
#define BFD_MACH_O_SECTION_ATTRIBUTES_SYS   0x00ffff00
 
/* User attributes.  */
 
#define BFD_MACH_O_SECTION_ATTRIBUTES_USR   0xff000000
 
 
 
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.  */
 
  BFD_MACH_O_S_ATTR_EXT_RELOC         = 0x00000200,
 
 
 
  /* Section contains some machine instructions.  */
 
  BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS = 0x00000400,
 
 
 
  /* A debug section.  */
 
  BFD_MACH_O_S_ATTR_DEBUG             = 0x02000000,
 
 
 
  /* 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,
 
 
 
  /* No dead stripping.  */
 
  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 contains coalesced symbols that are not to be in the TOC of an
 
     archive.  */
 
  BFD_MACH_O_S_ATTR_NO_TOC            = 0x40000000,
 
 
 
  /* 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
typedef struct bfd_mach_o_header
{
{
  unsigned long magic;
  unsigned long magic;
  unsigned long cputype;
  unsigned long cputype;
  unsigned long cpusubtype;
  unsigned long cpusubtype;
  unsigned long filetype;
  unsigned long filetype;
  unsigned long ncmds;
  unsigned long ncmds;
  unsigned long sizeofcmds;
  unsigned long sizeofcmds;
  unsigned long flags;
  unsigned long flags;
 
  unsigned int reserved;
 
  /* Version 1: 32 bits, version 2: 64 bits.  */
 
  unsigned int version;
  enum bfd_endian byteorder;
  enum bfd_endian byteorder;
}
}
bfd_mach_o_header;
bfd_mach_o_header;
 
 
 
#define BFD_MACH_O_HEADER_SIZE 28
 
#define BFD_MACH_O_HEADER_64_SIZE 32
 
 
typedef struct bfd_mach_o_section
typedef struct bfd_mach_o_section
{
{
  asection *bfdsection;
  asection *bfdsection;
  char sectname[16 + 1];
  char sectname[16 + 1];
  char segname[16 + 1];
  char segname[16 + 1];
Line 199... Line 355...
  bfd_vma reloff;
  bfd_vma reloff;
  unsigned long nreloc;
  unsigned long nreloc;
  unsigned long flags;
  unsigned long flags;
  unsigned long reserved1;
  unsigned long reserved1;
  unsigned long reserved2;
  unsigned long reserved2;
 
  unsigned long reserved3;
}
}
bfd_mach_o_section;
bfd_mach_o_section;
 
#define BFD_MACH_O_SECTION_SIZE 68
 
#define BFD_MACH_O_SECTION_64_SIZE 80
 
 
typedef struct bfd_mach_o_segment_command
typedef struct bfd_mach_o_segment_command
{
{
  char segname[16];
  char segname[16 + 1];
  bfd_vma vmaddr;
  bfd_vma vmaddr;
  bfd_vma vmsize;
  bfd_vma vmsize;
  bfd_vma fileoff;
  bfd_vma fileoff;
  unsigned long filesize;
  unsigned long filesize;
 
  unsigned long maxprot;        /* Maximum permitted protection.  */
 
  unsigned long initprot;       /* Initial protection.  */
  unsigned long nsects;
  unsigned long nsects;
  unsigned long flags;
  unsigned long flags;
  bfd_mach_o_section *sections;
  bfd_mach_o_section *sections;
  asection *segment;
 
}
}
bfd_mach_o_segment_command;
bfd_mach_o_segment_command;
 
#define BFD_MACH_O_LC_SEGMENT_SIZE 56
 
#define BFD_MACH_O_LC_SEGMENT_64_SIZE 72
 
 
 
/* Protection flags.  */
 
#define BFD_MACH_O_PROT_READ    0x01
 
#define BFD_MACH_O_PROT_WRITE   0x02
 
#define BFD_MACH_O_PROT_EXECUTE 0x04
 
 
 
/* Generic relocation types (used by i386).  */
 
#define BFD_MACH_O_GENERIC_RELOC_VANILLA        0
 
#define BFD_MACH_O_GENERIC_RELOC_PAIR           1
 
#define BFD_MACH_O_GENERIC_RELOC_SECTDIFF       2
 
#define BFD_MACH_O_GENERIC_RELOC_PB_LA_PTR      3
 
#define BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF 4
 
 
 
/* Size of a relocation entry.  */
 
#define BFD_MACH_O_RELENT_SIZE 8
 
 
 
/* Fields for a normal (non-scattered) entry.  */
 
#define BFD_MACH_O_R_PCREL              0x01000000
 
#define BFD_MACH_O_GET_R_LENGTH(s)      (((s) >> 25) & 0x3)
 
#define BFD_MACH_O_R_EXTERN             0x08000000
 
#define BFD_MACH_O_GET_R_TYPE(s)        (((s) >> 28) & 0x0f)
 
#define BFD_MACH_O_GET_R_SYMBOLNUM(s)   ((s) & 0x00ffffff)
 
#define BFD_MACH_O_SET_R_LENGTH(l)      (((l) & 0x3) << 25)
 
#define BFD_MACH_O_SET_R_TYPE(t)        (((t) & 0xf) << 28)
 
#define BFD_MACH_O_SET_R_SYMBOLNUM(s)   ((s) & 0x00ffffff)
 
 
 
/* Fields for a scattered entry.  */
 
#define BFD_MACH_O_SR_SCATTERED         0x80000000
 
#define BFD_MACH_O_SR_PCREL             0x40000000
 
#define BFD_MACH_O_GET_SR_LENGTH(s)     (((s) >> 28) & 0x3)
 
#define BFD_MACH_O_GET_SR_TYPE(s)       (((s) >> 24) & 0x0f)
 
#define BFD_MACH_O_GET_SR_ADDRESS(s)    ((s) & 0x00ffffff)
 
#define BFD_MACH_O_SET_SR_LENGTH(l)     (((l) & 0x3) << 28)
 
#define BFD_MACH_O_SET_SR_TYPE(t)       (((t) & 0xf) << 24)
 
#define BFD_MACH_O_SET_SR_ADDRESS(s)    ((s) & 0x00ffffff)
 
 
 
/* Expanded internal representation of a relocation entry.  */
 
typedef struct bfd_mach_o_reloc_info
 
{
 
  bfd_vma r_address;
 
  bfd_vma r_value;
 
  unsigned int r_scattered : 1;
 
  unsigned int r_type : 4;
 
  unsigned int r_pcrel : 1;
 
  unsigned int r_length : 2;
 
  unsigned int r_extern : 1;
 
}
 
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;
 
#define BFD_MACH_O_NLIST_SIZE 12
 
#define BFD_MACH_O_NLIST_64_SIZE 16
 
 
typedef struct bfd_mach_o_symtab_command
typedef struct bfd_mach_o_symtab_command
{
{
  unsigned long symoff;
  unsigned int symoff;
  unsigned long nsyms;
  unsigned int nsyms;
  unsigned long stroff;
  unsigned int stroff;
  unsigned long strsize;
  unsigned int strsize;
  asymbol *symbols;
  bfd_mach_o_asymbol *symbols;
  char *strtab;
  char *strtab;
  asection *stabs_segment;
 
  asection *stabstr_segment;
 
}
}
bfd_mach_o_symtab_command;
bfd_mach_o_symtab_command;
 
 
/* This is the second set of the symbolic information which is used to support
/* This is the second set of the symbolic information which is used to support
   the data structures for the dynamically link editor.
   the data structures for the dynamically link editor.
Line 266... Line 488...
       external relocation entries
       external relocation entries
       local relocation entries
       local relocation entries
   For executable and object modules the relocation entries continue to hang
   For executable and object modules the relocation entries continue to hang
   off the section structures.  */
   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
typedef struct bfd_mach_o_dysymtab_command
{
{
  /* The symbols indicated by symoff and nsyms of the LC_SYMTAB load command
  /* The symbols indicated by symoff and nsyms of the LC_SYMTAB load command
     are grouped into the following three groups:
     are grouped into the following three groups:
       local symbols (further grouped by the module they are from)
       local symbols (further grouped by the module they are from)
Line 366... Line 670...
     grouped by their module since they are only used if the object is moved
     grouped by their module since they are only used if the object is moved
     from it statically link edited address).  */
     from it statically link edited address).  */
 
 
  unsigned long locreloff;    /* Offset to local relocation entries.  */
  unsigned long locreloff;    /* Offset to local relocation entries.  */
  unsigned long nlocrel;      /* Number of 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;
bfd_mach_o_dysymtab_command;
 
 
/* An indirect symbol table entry is simply a 32bit index into the symbol table
/* 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
   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
   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.  */
   symbol was also absolute INDIRECT_SYMBOL_ABS is or'ed with that.  */
 
 
#define INDIRECT_SYMBOL_LOCAL 0x80000000
#define BFD_MACH_O_INDIRECT_SYMBOL_LOCAL 0x80000000
#define INDIRECT_SYMBOL_ABS   0x40000000
#define BFD_MACH_O_INDIRECT_SYMBOL_ABS   0x40000000
 
#define BFD_MACH_O_INDIRECT_SYMBOL_SIZE  4
 
 
 
/* For LC_THREAD or LC_UNIXTHREAD.  */
 
 
typedef struct bfd_mach_o_thread_flavour
typedef struct bfd_mach_o_thread_flavour
{
{
  unsigned long flavour;
  unsigned long flavour;
  bfd_vma offset;
  unsigned long offset;
  unsigned long size;
  unsigned long size;
}
}
bfd_mach_o_thread_flavour;
bfd_mach_o_thread_flavour;
 
 
typedef struct bfd_mach_o_thread_command
typedef struct bfd_mach_o_thread_command
Line 394... Line 706...
  bfd_mach_o_thread_flavour *flavours;
  bfd_mach_o_thread_flavour *flavours;
  asection *section;
  asection *section;
}
}
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
typedef struct bfd_mach_o_dylinker_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_offset;           /* Offset to library's path name.  */
  unsigned long name_len;              /* Offset to library's path name.  */
  unsigned long name_len;              /* Offset to library's path name.  */
  asection *section;
  char *name_str;
}
}
bfd_mach_o_dylinker_command;
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
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_offset;           /* Offset to library's path name.  */
  unsigned long name_len;              /* Offset to library's path name.  */
  unsigned long name_len;              /* Offset to library's path name.  */
  unsigned long timestamp;             /* Library's build time stamp.  */
  unsigned long timestamp;             /* Library's build time stamp.  */
  unsigned long current_version;       /* Library's current version number.  */
  unsigned long current_version;       /* Library's current version number.  */
  unsigned long compatibility_version; /* Library's compatibility vers number.  */
  unsigned long compatibility_version; /* Library's compatibility vers number.  */
  asection *section;
  char *name_str;
}
}
bfd_mach_o_dylib_command;
bfd_mach_o_dylib_command;
 
 
 
/* For LC_PREBOUND_DYLIB.  */
 
 
typedef struct bfd_mach_o_prebound_dylib_command
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 name;                /* Library's path name.  */
  unsigned long nmodules;            /* Number of modules in library.  */
  unsigned long nmodules;            /* Number of modules in library.  */
  unsigned long linked_modules;      /* Bit vector of linked modules.  */
  unsigned long linked_modules;      /* Bit vector of linked modules.  */
  asection *section;
 
}
}
bfd_mach_o_prebound_dylib_command;
bfd_mach_o_prebound_dylib_command;
 
 
 
/* For LC_UUID.  */
 
 
 
typedef struct bfd_mach_o_uuid_command
 
{
 
  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
typedef struct bfd_mach_o_load_command
{
{
  bfd_mach_o_load_command_type type;
  bfd_mach_o_load_command_type type;
  unsigned int type_required;
  bfd_boolean type_required;
  bfd_vma offset;
  unsigned int offset;
  bfd_vma len;
  unsigned int len;
  union
  union
  {
  {
    bfd_mach_o_segment_command segment;
    bfd_mach_o_segment_command segment;
    bfd_mach_o_symtab_command symtab;
    bfd_mach_o_symtab_command symtab;
    bfd_mach_o_dysymtab_command dysymtab;
    bfd_mach_o_dysymtab_command dysymtab;
    bfd_mach_o_thread_command thread;
    bfd_mach_o_thread_command thread;
    bfd_mach_o_dylib_command dylib;
    bfd_mach_o_dylib_command dylib;
    bfd_mach_o_dylinker_command dylinker;
    bfd_mach_o_dylinker_command dylinker;
    bfd_mach_o_prebound_dylib_command prebound_dylib;
    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;
  command;
}
}
bfd_mach_o_load_command;
bfd_mach_o_load_command;
 
 
typedef struct mach_o_data_struct
typedef struct mach_o_data_struct
{
{
 
  /* Mach-O header.  */
  bfd_mach_o_header header;
  bfd_mach_o_header header;
 
  /* Array of load commands (length is given by header.ncmds).  */
  bfd_mach_o_load_command *commands;
  bfd_mach_o_load_command *commands;
  unsigned long nsymbols;
 
  asymbol *symbols;
  /* Flatten array of sections.  The array is 0-based.  */
  unsigned long nsects;
  unsigned long nsects;
  bfd_mach_o_section **sections;
  bfd_mach_o_section **sections;
  bfd *ibfd;
 
}
 
mach_o_data_struct;
 
 
 
typedef struct mach_o_data_struct bfd_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;
 
  bfd_mach_o_dysymtab_command *dysymtab;
 
}
 
bfd_mach_o_data_struct;
 
 
 
/* Target specific routines.  */
 
typedef struct bfd_mach_o_backend_data
 
{
 
  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) \
 
  ((bfd_mach_o_backend_data*)(abfd)->xvec->backend_data)
 
 
bfd_boolean        bfd_mach_o_valid  (bfd *);
bfd_boolean        bfd_mach_o_valid  (bfd *);
int                bfd_mach_o_scan_read_symtab_symbol        (bfd *, bfd_mach_o_symtab_command *, asymbol *, unsigned long);
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_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 *, asymbol *, unsigned long);
 
int                bfd_mach_o_scan_start_address             (bfd *);
int                bfd_mach_o_scan_start_address             (bfd *);
int                bfd_mach_o_scan                           (bfd *, bfd_mach_o_header *, bfd_mach_o_data_struct *);
int                bfd_mach_o_scan                           (bfd *, bfd_mach_o_header *, bfd_mach_o_data_struct *);
bfd_boolean        bfd_mach_o_mkobject                       (bfd *);
bfd_boolean bfd_mach_o_mkobject_init (bfd *);
const bfd_target * bfd_mach_o_object_p                       (bfd *);
const bfd_target * bfd_mach_o_object_p                       (bfd *);
const bfd_target * bfd_mach_o_core_p                         (bfd *);
const bfd_target * bfd_mach_o_core_p                         (bfd *);
const bfd_target * bfd_mach_o_archive_p                      (bfd *);
const bfd_target * bfd_mach_o_archive_p                      (bfd *);
bfd *              bfd_mach_o_openr_next_archived_file       (bfd *, bfd *);
bfd *              bfd_mach_o_openr_next_archived_file       (bfd *, bfd *);
int                bfd_mach_o_lookup_section                 (bfd *, asection *, bfd_mach_o_load_command **, bfd_mach_o_section **);
int                bfd_mach_o_lookup_section                 (bfd *, asection *, bfd_mach_o_load_command **, bfd_mach_o_section **);
int                bfd_mach_o_lookup_command                 (bfd *, bfd_mach_o_load_command_type, bfd_mach_o_load_command **);
int                bfd_mach_o_lookup_command                 (bfd *, bfd_mach_o_load_command_type, bfd_mach_o_load_command **);
 
bfd_boolean bfd_mach_o_write_contents (bfd *);
 
bfd_boolean bfd_mach_o_bfd_copy_private_symbol_data (bfd *, asymbol *,
 
                                                     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 *);
 
long bfd_mach_o_get_symtab_upper_bound (bfd *);
 
long bfd_mach_o_canonicalize_symtab (bfd *, asymbol **);
 
long bfd_mach_o_get_reloc_upper_bound (bfd *, asection *);
 
long bfd_mach_o_canonicalize_reloc (bfd *, asection *, arelent **, asymbol **);
 
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);
 
bfd_boolean bfd_mach_o_bfd_print_private_bfd_data (bfd *, PTR);
 
int bfd_mach_o_sizeof_headers (bfd *, struct bfd_link_info *);
unsigned long      bfd_mach_o_stack_addr                     (enum bfd_mach_o_cpu_type);
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 *);
int                bfd_mach_o_core_fetch_environment         (bfd *, unsigned char **, unsigned int *);
char *             bfd_mach_o_core_file_failing_command      (bfd *);
char *             bfd_mach_o_core_file_failing_command      (bfd *);
int                bfd_mach_o_core_file_failing_signal       (bfd *);
int                bfd_mach_o_core_file_failing_signal       (bfd *);
bfd_boolean        bfd_mach_o_core_file_matches_executable_p (bfd *, bfd *);
bfd_boolean        bfd_mach_o_core_file_matches_executable_p (bfd *, bfd *);
 
bfd *bfd_mach_o_fat_extract (bfd *, bfd_format , const bfd_arch_info_type *);
 
const bfd_target *bfd_mach_o_header_p (bfd *, bfd_mach_o_filetype,
 
                                       bfd_mach_o_cpu_type);
 
bfd_boolean bfd_mach_o_build_commands (bfd *);
 
bfd_boolean bfd_mach_o_set_section_contents (bfd *, asection *, const void *,
 
                                             file_ptr, bfd_size_type);
 
unsigned int bfd_mach_o_version (bfd *);
 
 
extern const bfd_target mach_o_be_vec;
 
extern const bfd_target mach_o_le_vec;
 
extern const bfd_target mach_o_fat_vec;
extern const bfd_target mach_o_fat_vec;
 
 
#endif /* _BFD_MACH_O_H_ */
#endif /* _BFD_MACH_O_H_ */
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.