golang xcoff 代码
文件路径:/src/internal/xcoff/xcoff.go
/ Copyright 2018 The Go Authors. All rights reserved.
/ Use of this source code is governed by a BSD-style
/ license that can be found in the LICENSE file.
package xcoff
/ File Header.
type FileHeader32 struct {
Fmagic uint16 / Target machine
Fnscns uint16 / Number of sections
Ftimedat int32 / Time and date of file creation
Fsymptr uint32 / Byte offset to symbol table start
Fnsyms int32 / Number of entries in symbol table
Fopthdr uint16 / Number of bytes in optional header
Fflags uint16 / Flags
}
type FileHeader64 struct {
Fmagic uint16 / Target machine
Fnscns uint16 / Number of sections
Ftimedat int32 / Time and date of file creation
Fsymptr uint64 / Byte offset to symbol table start
Fopthdr uint16 / Number of bytes in optional header
Fflags uint16 / Flags
Fnsyms int32 / Number of entries in symbol table
}
const (
FILHSZ_32 = 20
FILHSZ_64 = 24
)
const (
U802TOCMAGIC = 0737 / AIX 32-bit XCOFF
U64_TOCMAGIC = 0767 / AIX 64-bit XCOFF
)
/ Flags that describe the type of the object file.
const (
F_RELFLG = 0x0001
F_EXEC = 0x0002
F_LNNO = 0x0004
F_FDPR_PROF = 0x0010
F_FDPR_OPTI = 0x0020
F_DSA = 0x0040
F_VARPG = 0x0100
F_DYNLOAD = 0x1000
F_SHROBJ = 0x2000
F_LOADONLY = 0x4000
)
/ Section Header.
type SectionHeader32 struct {
Sname [8]byte / Section name
Spaddr uint32 / Physical address
Svaddr uint32 / Virtual address
Ssize uint32 / Section size
Sscnptr uint32 / Offset in file to raw data for section
Srelptr uint32 / Offset in file to relocation entries for section
Slnnoptr uint32 / Offset in file to line number entries for section
Snreloc uint16 / Number of relocation entries
Snlnno uint16 / Number of line number entries
Sflags uint32 / Flags to define the section type
}
type SectionHeader64 struct {
Sname [8]byte / Section name
Spaddr uint64 / Physical address
Svaddr uint64 / Virtual address
Ssize uint64 / Section size
Sscnptr uint64 / Offset in file to raw data for section
Srelptr uint64 / Offset in file to relocation entries for section
Slnnoptr uint64 / Offset in file to line number entries for section
Snreloc uint32 / Number of relocation entries
Snlnno uint32 / Number of line number entries
Sflags uint32 / Flags to define the section type
Spad uint32 / Needs to be 72 bytes long
}
/ Flags defining the section type.
const (
STYP_DWARF = 0x0010
STYP_TEXT = 0x0020
STYP_DATA = 0x0040
STYP_BSS = 0x0080
STYP_EXCEPT = 0x0100
STYP_INFO = 0x0200
STYP_TDATA = 0x0400
STYP_TBSS = 0x0800
STYP_LOADER = 0x1000
STYP_DEBUG = 0x2000
STYP_TYPCHK = 0x4000
STYP_OVRFLO = 0x8000
)
const (
SSUBTYP_DWINFO = 0x10000 / DWARF info section
SSUBTYP_DWLINE = 0x20000 / DWARF line-number section
SSUBTYP_DWPBNMS = 0x30000 / DWARF public names section
SSUBTYP_DWPBTYP = 0x40000 / DWARF public types section
SSUBTYP_DWARNGE = 0x50000 / DWARF aranges section
SSUBTYP_DWABREV = 0x60000 / DWARF abbreviation section
SSUBTYP_DWSTR = 0x70000 / DWARF strings section
SSUBTYP_DWRNGES = 0x80000 / DWARF ranges section
SSUBTYP_DWLOC = 0x90000 / DWARF location lists section
SSUBTYP_DWFRAME = 0xA0000 / DWARF frames section
SSUBTYP_DWMAC = 0xB0000 / DWARF macros section
)
/ Symbol Table Entry.
type SymEnt32 struct {
Nname [8]byte / Symbol name
Nvalue uint32 / Symbol value
Nscnum int16 / Section number of symbol
Ntype uint16 / Basic and derived type specification
Nsclass int8 / Storage class of symbol
Nnumaux int8 / Number of auxiliary entries
}
type SymEnt64 struct {
Nvalue uint64 / Symbol value
Noffset uint32 / Offset of the name in string table or .debug section
Nscnum int16 / Section number of symbol
Ntype uint16 / Basic and derived type specification
Nsclass int8 / Storage class of symbol
Nnumaux int8 / Number of auxiliary entries
}
const SYMESZ = 18
const (
/ Nscnum
N_DEBUG = -2
N_ABS = -1
N_UNDEF = 0
/Ntype
SYM_V_INTERNAL = 0x1000
SYM_V_HIDDEN = 0x2000
SYM_V_PROTECTED = 0x3000
SYM_V_EXPORTED = 0x4000
SYM_TYPE_FUNC = 0x0020 / is function
)
/ Storage Class.
const (
C_NULL = 0 / Symbol table entry marked for deletion
C_EXT = 2 / External symbol
C_STAT = 3 / Static symbol
C_BLOCK = 100 / Beginning or end of inner block
C_FCN = 101 / Beginning or end of function
C_FILE = 103 / Source file name and compiler information
C_HIDEXT = 107 / Unnamed external symbol
C_BINCL = 108 / Beginning of include file
C_EINCL = 109 / End of include file
C_WEAKEXT = 111 / Weak external symbol
C_DWARF = 112 / DWARF symbol
C_GSYM = 128 / Global variable
C_LSYM = 129 / Automatic variable allocated on stack
C_PSYM = 130 / Argument to subroutine allocated on stack
C_RSYM = 131 / Register variable
C_RPSYM = 132 / Argument to function or procedure stored in register
C_STSYM = 133 / Statically allocated symbol
C_BCOMM = 135 / Beginning of common block
C_ECOML = 136 / Local member of common block
C_ECOMM = 137 / End of common block
C_DECL = 140 / Declaration of object
C_ENTRY = 141 / Alternate entry
C_FUN = 142 / Function or procedure
C_BSTAT = 143 / Beginning of static block
C_ESTAT = 144 / End of static block
C_GTLS = 145 / Global thread-local variable
C_STTLS = 146 / Static thread-local variable
)
/ File Auxiliary Entry
type AuxFile64 struct {
Xfname [8]byte / Name or offset inside string table
Xftype uint8 / Source file string type
Xauxtype uint8 / Type of auxiliary entry
}
/ Function Auxiliary Entry
type AuxFcn32 struct {
Xexptr uint32 / File offset to exception table entry
Xfsize uint32 / Size of function in bytes
Xlnnoptr uint32 / File pointer to line number
Xendndx uint32 / Symbol table index of next entry
Xpad uint16 / Unused
}
type AuxFcn64 struct {
Xlnnoptr uint64 / File pointer to line number
Xfsize uint32 / Size of function in bytes
Xendndx uint32 / Symbol table index of next entry
Xpad uint8 / Unused
Xauxtype uint8 / Type of auxiliary entry
}
type AuxSect64 struct {
Xscnlen uint64 / section length
Xnreloc uint64 / Num RLDs
pad uint8
Xauxtype uint8 / Type of auxiliary entry
}
/ csect Auxiliary Entry.
type AuxCSect32 struct {
Xscnlen int32 / Length or symbol table index
Xparmhash uint32 / Offset of parameter type-check string
Xsnhash uint16 / .typchk section number
Xsmtyp uint8 / Symbol alignment and type
Xsmclas uint8 / Storage-mapping class
Xstab uint32 / Reserved
Xsnstab uint16 / Reserved
}
type AuxCSect64 struct {
Xscnlenlo uint32 / Lower 4 bytes of length or symbol table index
Xparmhash uint32 / Offset of parameter type-check string
Xsnhash uint16 / .typchk section number
Xsmtyp uint8 / Symbol alignment and type
Xsmclas uint8 / Storage-mapping class
Xscnlenhi int32 / Upper 4 bytes of length or symbol table index
Xpad uint8 / Unused
Xauxtype uint8 / Type of auxiliary entry
}
/ Auxiliary type
const (
_AUX_EXCEPT = 255
_AUX_FCN = 254
_AUX_SYM = 253
_AUX_FILE = 252
_AUX_CSECT = 251
_AUX_SECT = 250
)
/ Symbol type field.
const (
XTY_ER = 0 / External reference
XTY_SD = 1 / Section definition
XTY_LD = 2 / Label definition
XTY_CM = 3 / Common csect definition
)
/ Defines for File auxiliary definitions: x_ftype field of x_file
const (
XFT_FN = 0 / Source File Name
XFT_CT = 1 / Compile Time Stamp
XFT_CV = 2 / Compiler Version Number
XFT_CD = 128 / Compiler Defined Information
)
/ Storage-mapping class.
const (
XMC_PR = 0 / Program code
XMC_RO = 1 / Read-only constant
XMC_DB = 2 / Debug dictionary table
XMC_TC = 3 / TOC entry
XMC_UA = 4 / Unclassified
XMC_RW = 5 / Read/Write data
XMC_GL = 6 / Global linkage
XMC_XO = 7 / Extended operation
XMC_SV = 8 / 32-bit supervisor call descriptor
XMC_BS = 9 / BSS class
XMC_DS = 10 / Function descriptor
XMC_UC = 11 / Unnamed FORTRAN common
XMC_TC0 = 15 / TOC anchor
XMC_TD = 16 / Scalar data entry in the TOC
XMC_SV64 = 17 / 64-bit supervisor call descriptor
XMC_SV3264 = 18 / Supervisor call descriptor for both 32-bit and 64-bit
XMC_TL = 20 / Read/Write thread-local data
XMC_UL = 21 / Read/Write thread-local data (.tbss)
XMC_TE = 22 / TOC entry
)
/ Loader Header.
type LoaderHeader32 struct {
Lversion int32 / Loader section version number
Lnsyms int32 / Number of symbol table entries
Lnreloc int32 / Number of relocation table entries
Listlen uint32 / Length of import file ID string table
Lnimpid int32 / Number of import file IDs
Limpoff uint32 / Offset to start of import file IDs
Lstlen uint32 / Length of string table
Lstoff uint32 / Offset to start of string table
}
type LoaderHeader64 struct {
Lversion int32 / Loader section version number
Lnsyms int32 / Number of symbol table entries
Lnreloc int32 / Number of relocation table entries
Listlen uint32 / Length of import file ID string table
Lnimpid int32 / Number of import file IDs
Lstlen uint32 / Length of string table
Limpoff uint64 / Offset to start of import file IDs
Lstoff uint64 / Offset to start of string table
Lsymoff uint64 / Offset to start of symbol table
Lrldoff uint64 / Offset to start of relocation entries
}
const (
LDHDRSZ_32 = 32
LDHDRSZ_64 = 56
)
/ Loader Symbol.
type LoaderSymbol32 struct {
Lname [8]byte / Symbol name or byte offset into string table
Lvalue uint32 / Address field
Lscnum int16 / Section number containing symbol
Lsmtype int8 / Symbol type, export, import flags
Lsmclas int8 / Symbol storage class
Lifile int32 / Import file ID; ordinal of import file IDs
Lparm uint32 / Parameter type-check field
}
type LoaderSymbol64 struct {
Lvalue uint64 / Address field
Loffset uint32 / Byte offset into string table of symbol name
Lscnum int16 / Section number containing symbol
Lsmtype int8 / Symbol type, export, import flags
Lsmclas int8 / Symbol storage class
Lifile int32 / Import file ID; ordinal of import file IDs
Lparm uint32 / Parameter type-check field
}
type Reloc32 struct {
Rvaddr uint32 / (virtual) address of reference
Rsymndx uint32 / Index into symbol table
Rsize uint8 / Sign and reloc bit len
Rtype uint8 / Toc relocation type
}
type Reloc64 struct {
Rvaddr uint64 / (virtual) address of reference
Rsymndx uint32 / Index into symbol table
Rsize uint8 / Sign and reloc bit len
Rtype uint8 / Toc relocation type
}
const (
R_POS = 0x00 / A(sym) Positive Relocation
R_NEG = 0x01 / -A(sym) Negative Relocation
R_REL = 0x02 / A(sym-*) Relative to self
R_TOC = 0x03 / A(sym-TOC) Relative to TOC
R_TRL = 0x12 / A(sym-TOC) TOC Relative indirect load.
R_TRLA = 0x13 / A(sym-TOC) TOC Rel load address. modifiable inst
R_GL = 0x05 / A(external TOC of sym) Global Linkage
R_TCL = 0x06 / A(local TOC of sym) Local object TOC address
R_RL = 0x0C / A(sym) Pos indirect load. modifiable instruction
R_RLA = 0x0D / A(sym) Pos Load Address. modifiable instruction
R_REF = 0x0F / AL0(sym) Non relocating ref. No garbage collect
R_BA = 0x08 / A(sym) Branch absolute. Cannot modify instruction
R_RBA = 0x18 / A(sym) Branch absolute. modifiable instruction
R_BR = 0x0A / A(sym-*) Branch rel to self. non modifiable
R_RBR = 0x1A / A(sym-*) Branch rel to self. modifiable instr
R_TLS = 0x20 / General-dynamic reference to TLS symbol
R_TLS_IE = 0x21 / Initial-exec reference to TLS symbol
R_TLS_LD = 0x22 / Local-dynamic reference to TLS symbol
R_TLS_LE = 0x23 / Local-exec reference to TLS symbol
R_TLSM = 0x24 / Module reference to TLS symbol
R_TLSML = 0x25 / Module reference to local (own) module
R_TOCU = 0x30 / Relative to TOC - high order bits
R_TOCL = 0x31 / Relative to TOC - low order bits
)