📄 xcoff.h
字号:
/* Internal format of XCOFF object file data structures for BFD. Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Written by Ian Lance Taylor <ian@cygnus.com>, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#ifndef _INTERNAL_XCOFF_H#define _INTERNAL_XCOFF_H/* Linker *//* Names of "special" sections. */#define _TEXT ".text"#define _DATA ".data"#define _BSS ".bss"#define _PAD ".pad"#define _LOADER ".loader"#define _EXCEPT ".except"#define _TYPCHK ".typchk"/* XCOFF uses a special .loader section with type STYP_LOADER. */#define STYP_LOADER 0x1000/* XCOFF uses a special .debug section with type STYP_DEBUG. */#define STYP_DEBUG 0x2000/* XCOFF handles line number or relocation overflow by creating another section header with STYP_OVRFLO set. */#define STYP_OVRFLO 0x8000/* Specifies an exception section. A section of this type provides information to identify the reason that a trap or ececptin occured within and executable object program */#define STYP_EXCEPT 0x0100/* Specifies a type check section. A section of this type contains parameter argument type check strings used by the AIX binder. */#define STYP_TYPCHK 0x4000#define RS6K_AOUTHDR_OMAGIC 0x0107 /* old: text & data writeable */#define RS6K_AOUTHDR_NMAGIC 0x0108 /* new: text r/o, data r/w */#define RS6K_AOUTHDR_ZMAGIC 0x010B /* paged: text r/o, both page-aligned *//* XCOFF relocation types. The relocations are described in the function xcoff[64]_ppc_relocate_section in coff64-rs6000.c and coff-rs6000.c */#define R_POS (0x00)#define R_NEG (0x01)#define R_REL (0x02)#define R_TOC (0x03)#define R_RTB (0x04)#define R_GL (0x05)#define R_TCL (0x06)#define R_BA (0x08)#define R_BR (0x0a)#define R_RL (0x0c)#define R_RLA (0x0d)#define R_REF (0x0f)#define R_TRL (0x12)#define R_TRLA (0x13)#define R_RRTBI (0x14)#define R_RRTBA (0x15)#define R_CAI (0x16)#define R_CREL (0x17)#define R_RBA (0x18)#define R_RBAC (0x19)#define R_RBR (0x1a)#define R_RBRC (0x1b)/* Storage class #defines, from /usr/include/storclass.h that are not already defined in internal.h *//* Comment string in .info section */#define C_INFO 110 /* Auxillary Symbol Entries *//* x_smtyp values: */#define SMTYP_ALIGN(x) ((x) >> 3) /* log2 of alignment */#define SMTYP_SMTYP(x) ((x) & 0x7) /* symbol type *//* Symbol type values: */#define XTY_ER 0 /* External reference */#define XTY_SD 1 /* Csect definition */#define XTY_LD 2 /* Label definition */#define XTY_CM 3 /* .BSS */#define XTY_EM 4 /* Error message */#define XTY_US 5 /* "Reserved for internal use" *//* x_smclas values: */#define XMC_PR 0 /* Read-only program code */#define XMC_RO 1 /* Read-only constant */#define XMC_DB 2 /* Read-only debug dictionary table */#define XMC_TC 3 /* Read-write general TOC entry */#define XMC_UA 4 /* Read-write unclassified */#define XMC_RW 5 /* Read-write data */#define XMC_GL 6 /* Read-only global linkage */#define XMC_XO 7 /* Read-only extended operation */#define XMC_SV 8 /* Read-only supervisor call */#define XMC_BS 9 /* Read-write BSS */#define XMC_DS 10 /* Read-write descriptor csect */#define XMC_UC 11 /* Read-write unnamed Fortran common */#define XMC_TI 12 /* Read-only traceback index csect */#define XMC_TB 13 /* Read-only traceback table csect *//* 14 ??? */#define XMC_TC0 15 /* Read-write TOC anchor */#define XMC_TD 16 /* Read-write data in TOC */#define XMC_SV64 17 /* Read-only 64 bit supervisor call */#define XMC_SV3264 18 /* Read-only 32 or 64 bit supervisor call *//* The ldhdr structure. This appears at the start of the .loader section. */struct internal_ldhdr{ /* The version number: 1 : 32 bit 2 : 64 bit */ unsigned long l_version; /* The number of symbol table entries. */ bfd_size_type l_nsyms; /* The number of relocation table entries. */ bfd_size_type l_nreloc; /* The length of the import file string table. */ bfd_size_type l_istlen; /* The number of import files. */ bfd_size_type l_nimpid; /* The offset from the start of the .loader section to the first entry in the import file table. */ bfd_size_type l_impoff; /* The length of the string table. */ bfd_size_type l_stlen; /* The offset from the start of the .loader section to the first entry in the string table. */ bfd_size_type l_stoff; /* The offset to start of the symbol table, only in XCOFF64 */ bfd_vma l_symoff; /* The offset to the start of the relocation table, only in XCOFF64 */ bfd_vma l_rldoff;};/* The ldsym structure. This is used to represent a symbol in the .loader section. */struct internal_ldsym{ union { /* The symbol name if <= SYMNMLEN characters. */ char _l_name[SYMNMLEN]; struct { /* Zero if the symbol name is more than SYMNMLEN characters. */ long _l_zeroes; /* The offset in the string table if the symbol name is more than SYMNMLEN characters. */ long _l_offset; } _l_l; } _l; /* The symbol value. */ bfd_vma l_value; /* The symbol section number. */ short l_scnum; /* The symbol type and flags. */ char l_smtype; /* The symbol storage class. */ char l_smclas; /* The import file ID. */ bfd_size_type l_ifile; /* Offset to the parameter type check string. */ bfd_size_type l_parm;};/* These flags are for the l_smtype field (the lower three bits are an XTY_* value). *//* Imported symbol. */#define L_IMPORT (0x40)/* Entry point. */#define L_ENTRY (0x20)/* Exported symbol. */#define L_EXPORT (0x10)/* The ldrel structure. This is used to represent a reloc in the .loader section. */struct internal_ldrel{ /* The reloc address. */ bfd_vma l_vaddr; /* The symbol table index in the .loader section symbol table. */ bfd_size_type l_symndx; /* The relocation type and size. */ short l_rtype; /* The section number this relocation applies to. */ short l_rsecnm;};/* An entry in the XCOFF linker hash table. */struct xcoff_link_hash_entry{ struct bfd_link_hash_entry root; /* Symbol index in output file. Set to -1 initially. Set to -2 if there is a reloc against this symbol. */ long indx; /* If we have created a TOC entry for this symbol, this is the .tc section which holds it. */ asection *toc_section; union { /* If we have created a TOC entry (the XCOFF_SET_TOC flag is set), this is the offset in toc_section. */ bfd_vma toc_offset; /* If the TOC entry comes from an input file, this is set to the symbol index of the C_HIDEXT XMC_TC or XMC_TD symbol. */ long toc_indx; } u; /* If this symbol is a function entry point which is called, this field holds a pointer to the function descriptor. If this symbol is a function descriptor, this field holds a pointer to the function entry point. */ struct xcoff_link_hash_entry *descriptor; /* The .loader symbol table entry, if there is one. */ struct internal_ldsym *ldsym; /* If XCOFF_BUILT_LDSYM is set, this is the .loader symbol table index. If XCOFF_BUILD_LDSYM is clear, and XCOFF_IMPORT is set, this is the l_ifile value. */ long ldindx; /* Some linker flags. */ unsigned long flags; /* The storage mapping class. */ unsigned char smclas;};/* Flags for xcoff_link_hash_entry. *//* Symbol is referenced by a regular object. */#define XCOFF_REF_REGULAR 0x00000001/* Symbol is defined by a regular object. */#define XCOFF_DEF_REGULAR 0x00000002/* Symbol is defined by a dynamic object. */#define XCOFF_DEF_DYNAMIC 0x00000004/* Symbol is used in a reloc being copied into the .loader section. */#define XCOFF_LDREL 0x00000008/* Symbol is the entry point. */#define XCOFF_ENTRY 0x00000010/* Symbol is called; this is, it appears in a R_BR reloc. */#define XCOFF_CALLED 0x00000020/* Symbol needs the TOC entry filled in. */#define XCOFF_SET_TOC 0x00000040/* Symbol is explicitly imported. */#define XCOFF_IMPORT 0x00000080/* Symbol is explicitly exported. */#define XCOFF_EXPORT 0x00000100/* Symbol has been processed by xcoff_build_ldsyms. */#define XCOFF_BUILT_LDSYM 0x00000200/* Symbol is mentioned by a section which was not garbage collected. */#define XCOFF_MARK 0x00000400/* Symbol size is recorded in size_list list from hash table. */#define XCOFF_HAS_SIZE 0x00000800/* Symbol is a function descriptor. */#define XCOFF_DESCRIPTOR 0x00001000/* Multiple definitions have been for the symbol. */#define XCOFF_MULTIPLY_DEFINED 0x00002000/* Symbol is the __rtinit symbol. */#define XCOFF_RTINIT 0x00004000/* Symbol is an imported 32 bit syscall. */#define XCOFF_SYSCALL32 0x00008000/* Symbol is an imported 64 bit syscall. */#define XCOFF_SYSCALL64 0x00010000 /* The XCOFF linker hash table. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -