Annotation of qemu/a.out.h, revision 1.1.1.3

1.1       root        1: /* a.out.h
                      2: 
                      3:    Copyright 1997, 1998, 1999, 2001 Red Hat, Inc.
                      4: 
                      5: This file is part of Cygwin.
                      6: 
                      7: This software is a copyrighted work licensed under the terms of the
                      8: Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
                      9: details. */
                     10: 
                     11: #ifndef _A_OUT_H_
                     12: #define _A_OUT_H_
                     13: 
                     14: #ifdef __cplusplus
                     15: extern "C" {
                     16: #endif
                     17: #define COFF_IMAGE_WITH_PE
                     18: #define COFF_LONG_SECTION_NAMES
                     19: 
                     20: /*** coff information for Intel 386/486.  */
                     21: 
                     22: 
                     23: /********************** FILE HEADER **********************/
                     24: 
                     25: struct external_filehdr {
                     26:   short f_magic;       /* magic number                 */
                     27:   short f_nscns;       /* number of sections           */
1.1.1.2   root       28:   host_ulong f_timdat; /* time & date stamp            */
                     29:   host_ulong f_symptr; /* file pointer to symtab       */
                     30:   host_ulong f_nsyms;  /* number of symtab entries     */
1.1       root       31:   short f_opthdr;      /* sizeof(optional hdr)         */
                     32:   short f_flags;       /* flags                        */
                     33: };
                     34: 
                     35: /* Bits for f_flags:
                     36:  *     F_RELFLG        relocation info stripped from file
                     37:  *     F_EXEC          file is executable (no unresolved external references)
                     38:  *     F_LNNO          line numbers stripped from file
                     39:  *     F_LSYMS         local symbols stripped from file
                     40:  *     F_AR32WR        file has byte ordering of an AR32WR machine (e.g. vax)
                     41:  */
                     42: 
                     43: #define F_RELFLG       (0x0001)
                     44: #define F_EXEC         (0x0002)
                     45: #define F_LNNO         (0x0004)
                     46: #define F_LSYMS                (0x0008)
                     47: 
                     48: 
                     49: 
                     50: #define        I386MAGIC       0x14c
                     51: #define I386PTXMAGIC   0x154
                     52: #define I386AIXMAGIC   0x175
                     53: 
                     54: /* This is Lynx's all-platform magic number for executables. */
                     55: 
                     56: #define LYNXCOFFMAGIC  0415
                     57: 
                     58: #define I386BADMAG(x) (((x).f_magic != I386MAGIC) \
                     59:                       && (x).f_magic != I386AIXMAGIC \
                     60:                       && (x).f_magic != I386PTXMAGIC \
                     61:                       && (x).f_magic != LYNXCOFFMAGIC)
                     62: 
                     63: #define        FILHDR  struct external_filehdr
                     64: #define        FILHSZ  20
                     65: 
                     66: 
                     67: /********************** AOUT "OPTIONAL HEADER"=
                     68:  **********************/
                     69: 
                     70: 
                     71: typedef struct
                     72: {
                     73:   unsigned short magic;                /* type of file                         */
                     74:   unsigned short vstamp;       /* version stamp                        */
1.1.1.2   root       75:   host_ulong   tsize;          /* text size in bytes, padded to FW bdry*/
                     76:   host_ulong   dsize;          /* initialized data "  "                */
                     77:   host_ulong   bsize;          /* uninitialized data "   "             */
                     78:   host_ulong   entry;          /* entry pt.                            */
                     79:   host_ulong text_start;       /* base of text used for this file */
                     80:   host_ulong data_start;       /* base of data used for this file=
1.1       root       81:  */
                     82: }
                     83: AOUTHDR;
                     84: 
                     85: #define AOUTSZ 28
                     86: #define AOUTHDRSZ 28
                     87: 
                     88: #define OMAGIC          0404    /* object files, eg as output */
                     89: #define ZMAGIC          0413    /* demand load format, eg normal ld output */
                     90: #define STMAGIC                0401    /* target shlib */
                     91: #define SHMAGIC                0443    /* host   shlib */
                     92: 
                     93: 
                     94: /* define some NT default values */
                     95: /*  #define NT_IMAGE_BASE        0x400000 moved to internal.h */
                     96: #define NT_SECTION_ALIGNMENT 0x1000
                     97: #define NT_FILE_ALIGNMENT    0x200
                     98: #define NT_DEF_RESERVE       0x100000
                     99: #define NT_DEF_COMMIT        0x1000
                    100: 
                    101: /********************** SECTION HEADER **********************/
                    102: 
                    103: 
                    104: struct external_scnhdr {
                    105:   char         s_name[8];      /* section name                 */
1.1.1.2   root      106:   host_ulong   s_paddr;        /* physical address, offset
1.1       root      107:                                   of last addr in scn */
1.1.1.2   root      108:   host_ulong   s_vaddr;        /* virtual address              */
                    109:   host_ulong   s_size;         /* section size                 */
                    110:   host_ulong   s_scnptr;       /* file ptr to raw data for section */
                    111:   host_ulong   s_relptr;       /* file ptr to relocation       */
                    112:   host_ulong   s_lnnoptr;      /* file ptr to line numbers     */
1.1       root      113:   unsigned short s_nreloc;     /* number of relocation entries */
                    114:   unsigned short s_nlnno;      /* number of line number entries*/
1.1.1.2   root      115:   host_ulong   s_flags;        /* flags                        */
1.1       root      116: };
                    117: 
                    118: #define        SCNHDR  struct external_scnhdr
                    119: #define        SCNHSZ  40
                    120: 
                    121: /*
                    122:  * names of "special" sections
                    123:  */
                    124: #define _TEXT  ".text"
                    125: #define _DATA  ".data"
                    126: #define _BSS   ".bss"
                    127: #define _COMMENT ".comment"
                    128: #define _LIB ".lib"
                    129: 
                    130: /********************** LINE NUMBERS **********************/
                    131: 
                    132: /* 1 line number entry for every "breakpointable" source line in a section.
                    133:  * Line numbers are grouped on a per function basis; first entry in a function
                    134:  * grouping will have l_lnno = 0 and in place of physical address will be the
                    135:  * symbol table index of the function name.
                    136:  */
                    137: struct external_lineno {
                    138:   union {
1.1.1.2   root      139:     host_ulong l_symndx; /* function name symbol index, iff l_lnno 0 */
                    140:     host_ulong l_paddr;        /* (physical) address of line number    */
1.1       root      141:   } l_addr;
                    142:   unsigned short l_lnno;       /* line number          */
                    143: };
                    144: 
                    145: #define        LINENO  struct external_lineno
                    146: #define        LINESZ  6
                    147: 
                    148: /********************** SYMBOLS **********************/
                    149: 
                    150: #define E_SYMNMLEN     8       /* # characters in a symbol name        */
                    151: #define E_FILNMLEN     14      /* # characters in a file name          */
                    152: #define E_DIMNUM       4       /* # array dimensions in auxiliary entry */
                    153: 
                    154: struct __attribute__((packed)) external_syment
                    155: {
                    156:   union {
                    157:     char e_name[E_SYMNMLEN];
                    158:     struct {
1.1.1.2   root      159:       host_ulong e_zeroes;
                    160:       host_ulong e_offset;
1.1       root      161:     } e;
                    162:   } e;
1.1.1.2   root      163:   host_ulong e_value;
1.1       root      164:   unsigned short e_scnum;
                    165:   unsigned short e_type;
                    166:   char e_sclass[1];
                    167:   char e_numaux[1];
                    168: };
                    169: 
                    170: #define N_BTMASK       (0xf)
                    171: #define N_TMASK                (0x30)
                    172: #define N_BTSHFT       (4)
                    173: #define N_TSHIFT       (2)
                    174: 
                    175: union external_auxent {
                    176:   struct {
1.1.1.2   root      177:     host_ulong x_tagndx;       /* str, un, or enum tag indx */
1.1       root      178:     union {
                    179:       struct {
                    180:        unsigned short  x_lnno; /* declaration line number */
                    181:        unsigned short  x_size; /* str/union/array size */
                    182:       } x_lnsz;
1.1.1.2   root      183:       host_ulong x_fsize;      /* size of function */
1.1       root      184:     } x_misc;
                    185:     union {
                    186:       struct {                 /* if ISFCN, tag, or .bb */
1.1.1.2   root      187:        host_ulong x_lnnoptr;/* ptr to fcn line # */
                    188:        host_ulong x_endndx;    /* entry ndx past block end */
1.1       root      189:       } x_fcn;
                    190:       struct {                 /* if ISARY, up to 4 dimen. */
                    191:        char x_dimen[E_DIMNUM][2];
                    192:       } x_ary;
                    193:     } x_fcnary;
                    194:     unsigned short x_tvndx;    /* tv index */
                    195:   } x_sym;
                    196: 
                    197:   union {
                    198:     char x_fname[E_FILNMLEN];
                    199:     struct {
1.1.1.2   root      200:       host_ulong x_zeroes;
                    201:       host_ulong x_offset;
1.1       root      202:     } x_n;
                    203:   } x_file;
                    204: 
                    205:   struct {
1.1.1.2   root      206:     host_ulong x_scnlen;       /* section length */
1.1       root      207:     unsigned short x_nreloc;   /* # relocation entries */
                    208:     unsigned short x_nlinno;   /* # line numbers */
1.1.1.2   root      209:     host_ulong x_checksum;     /* section COMDAT checksum */
1.1       root      210:     unsigned short x_associated;/* COMDAT associated section index */
                    211:     char x_comdat[1];          /* COMDAT selection number */
                    212:   } x_scn;
                    213: 
                    214:   struct {
1.1.1.2   root      215:     host_ulong x_tvfill;       /* tv fill value */
1.1       root      216:     unsigned short x_tvlen;    /* length of .tv */
                    217:     char x_tvran[2][2];                /* tv range */
                    218:   } x_tv;      /* info about .tv section (in auxent of symbol .tv)) */
                    219: 
                    220: };
                    221: 
                    222: #define        SYMENT  struct external_syment
                    223: #define        SYMESZ  18
                    224: #define        AUXENT  union external_auxent
                    225: #define        AUXESZ  18
                    226: 
                    227: #define _ETEXT "etext"
                    228: 
                    229: /********************** RELOCATION DIRECTIVES **********************/
                    230: 
                    231: struct external_reloc {
                    232:   char r_vaddr[4];
                    233:   char r_symndx[4];
                    234:   char r_type[2];
                    235: };
                    236: 
                    237: #define RELOC struct external_reloc
                    238: #define RELSZ 10
                    239: 
                    240: /* end of coff/i386.h */
                    241: 
                    242: /* PE COFF header information */
                    243: 
                    244: #ifndef _PE_H
                    245: #define _PE_H
                    246: 
                    247: /* NT specific file attributes */
                    248: #define IMAGE_FILE_RELOCS_STRIPPED           0x0001
                    249: #define IMAGE_FILE_EXECUTABLE_IMAGE          0x0002
                    250: #define IMAGE_FILE_LINE_NUMS_STRIPPED        0x0004
                    251: #define IMAGE_FILE_LOCAL_SYMS_STRIPPED       0x0008
                    252: #define IMAGE_FILE_BYTES_REVERSED_LO         0x0080
                    253: #define IMAGE_FILE_32BIT_MACHINE             0x0100
                    254: #define IMAGE_FILE_DEBUG_STRIPPED            0x0200
                    255: #define IMAGE_FILE_SYSTEM                    0x1000
                    256: #define IMAGE_FILE_DLL                       0x2000
                    257: #define IMAGE_FILE_BYTES_REVERSED_HI         0x8000
                    258: 
                    259: /* additional flags to be set for section headers to allow the NT loader to
                    260:    read and write to the section data (to replace the addresses of data in
                    261:    dlls for one thing); also to execute the section in .text's case=
                    262:  */
                    263: #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
                    264: #define IMAGE_SCN_MEM_EXECUTE     0x20000000
                    265: #define IMAGE_SCN_MEM_READ        0x40000000
                    266: #define IMAGE_SCN_MEM_WRITE       0x80000000
                    267: 
                    268: /*
                    269:  * Section characteristics added for ppc-nt
                    270:  */
                    271: 
                    272: #define IMAGE_SCN_TYPE_NO_PAD                0x00000008  /* Reserved.  */
                    273: 
                    274: #define IMAGE_SCN_CNT_CODE                   0x00000020  /* Section contains code. */
                    275: #define IMAGE_SCN_CNT_INITIALIZED_DATA       0x00000040  /* Section contains initialized data. */
                    276: #define IMAGE_SCN_CNT_UNINITIALIZED_DATA     0x00000080  /* Section contains uninitialized data. */
                    277: 
                    278: #define IMAGE_SCN_LNK_OTHER                  0x00000100  /* Reserved.  */
                    279: #define IMAGE_SCN_LNK_INFO                   0x00000200  /* Section contains comments or some other type of information. */
                    280: #define IMAGE_SCN_LNK_REMOVE                 0x00000800  /* Section contents will not become part of image. */
                    281: #define IMAGE_SCN_LNK_COMDAT                 0x00001000  /* Section contents comdat. */
                    282: 
                    283: #define IMAGE_SCN_MEM_FARDATA                0x00008000
                    284: 
                    285: #define IMAGE_SCN_MEM_PURGEABLE              0x00020000
                    286: #define IMAGE_SCN_MEM_16BIT                  0x00020000
                    287: #define IMAGE_SCN_MEM_LOCKED                 0x00040000
                    288: #define IMAGE_SCN_MEM_PRELOAD                0x00080000
                    289: 
                    290: #define IMAGE_SCN_ALIGN_1BYTES               0x00100000
                    291: #define IMAGE_SCN_ALIGN_2BYTES               0x00200000
                    292: #define IMAGE_SCN_ALIGN_4BYTES               0x00300000
                    293: #define IMAGE_SCN_ALIGN_8BYTES               0x00400000
                    294: #define IMAGE_SCN_ALIGN_16BYTES              0x00500000  /* Default alignment if no others are specified. */
                    295: #define IMAGE_SCN_ALIGN_32BYTES              0x00600000
                    296: #define IMAGE_SCN_ALIGN_64BYTES              0x00700000
                    297: 
                    298: 
                    299: #define IMAGE_SCN_LNK_NRELOC_OVFL            0x01000000  /* Section contains extended relocations. */
                    300: #define IMAGE_SCN_MEM_NOT_CACHED             0x04000000  /* Section is not cachable.               */
                    301: #define IMAGE_SCN_MEM_NOT_PAGED              0x08000000  /* Section is not pageable.               */
                    302: #define IMAGE_SCN_MEM_SHARED                 0x10000000  /* Section is shareable.                  */
                    303: 
                    304: /* COMDAT selection codes.  */
                    305: 
                    306: #define IMAGE_COMDAT_SELECT_NODUPLICATES     (1) /* Warn if duplicates.  */
                    307: #define IMAGE_COMDAT_SELECT_ANY                     (2) /* No warning.  */
                    308: #define IMAGE_COMDAT_SELECT_SAME_SIZE       (3) /* Warn if different size.  */
                    309: #define IMAGE_COMDAT_SELECT_EXACT_MATCH             (4) /* Warn if different.  */
                    310: #define IMAGE_COMDAT_SELECT_ASSOCIATIVE             (5) /* Base on other section.  */
                    311: 
                    312: /* Magic values that are true for all dos/nt implementations */
                    313: #define DOSMAGIC       0x5a4d
                    314: #define NT_SIGNATURE   0x00004550
                    315: 
                    316: /* NT allows long filenames, we want to accommodate this.  This may break
                    317:      some of the bfd functions */
                    318: #undef  FILNMLEN
                    319: #define FILNMLEN       18      /* # characters in a file name          */
                    320: 
                    321: 
                    322: #ifdef COFF_IMAGE_WITH_PE
                    323: /* The filehdr is only weired in images */
                    324: 
                    325: #undef FILHDR
                    326: struct external_PE_filehdr
                    327: {
                    328:   /* DOS header fields */
                    329:   unsigned short e_magic;      /* Magic number, 0x5a4d */
                    330:   unsigned short e_cblp;       /* Bytes on last page of file, 0x90 */
                    331:   unsigned short e_cp;         /* Pages in file, 0x3 */
                    332:   unsigned short e_crlc;       /* Relocations, 0x0 */
                    333:   unsigned short e_cparhdr;    /* Size of header in paragraphs, 0x4 */
                    334:   unsigned short e_minalloc;   /* Minimum extra paragraphs needed, 0x0 */
                    335:   unsigned short e_maxalloc;   /* Maximum extra paragraphs needed, 0xFFFF */
                    336:   unsigned short e_ss;         /* Initial (relative) SS value, 0x0 */
                    337:   unsigned short e_sp;         /* Initial SP value, 0xb8 */
                    338:   unsigned short e_csum;       /* Checksum, 0x0 */
                    339:   unsigned short e_ip;         /* Initial IP value, 0x0 */
                    340:   unsigned short e_cs;         /* Initial (relative) CS value, 0x0 */
                    341:   unsigned short e_lfarlc;     /* File address of relocation table, 0x40 */
                    342:   unsigned short e_ovno;       /* Overlay number, 0x0 */
                    343:   char e_res[4][2];            /* Reserved words, all 0x0 */
                    344:   unsigned short e_oemid;      /* OEM identifier (for e_oeminfo), 0x0 */
                    345:   unsigned short e_oeminfo;    /* OEM information; e_oemid specific, 0x0 */
                    346:   char e_res2[10][2];          /* Reserved words, all 0x0 */
1.1.1.2   root      347:   host_ulong e_lfanew; /* File address of new exe header, 0x80 */
1.1       root      348:   char dos_message[16][4];     /* other stuff, always follow DOS header */
                    349:   unsigned int nt_signature;   /* required NT signature, 0x4550 */
                    350: 
                    351:   /* From standard header */
                    352: 
                    353:   unsigned short f_magic;      /* magic number                 */
                    354:   unsigned short f_nscns;      /* number of sections           */
1.1.1.2   root      355:   host_ulong f_timdat; /* time & date stamp            */
                    356:   host_ulong f_symptr; /* file pointer to symtab       */
                    357:   host_ulong f_nsyms;  /* number of symtab entries     */
1.1       root      358:   unsigned short f_opthdr;     /* sizeof(optional hdr)         */
                    359:   unsigned short f_flags;      /* flags                        */
                    360: };
                    361: 
                    362: 
                    363: #define FILHDR struct external_PE_filehdr
                    364: #undef FILHSZ
                    365: #define FILHSZ 152
                    366: 
                    367: #endif
                    368: 
                    369: typedef struct
                    370: {
                    371:   unsigned short magic;                /* type of file                         */
                    372:   unsigned short vstamp;       /* version stamp                        */
1.1.1.2   root      373:   host_ulong   tsize;          /* text size in bytes, padded to FW bdry*/
                    374:   host_ulong   dsize;          /* initialized data "  "                */
                    375:   host_ulong   bsize;          /* uninitialized data "   "             */
                    376:   host_ulong   entry;          /* entry pt.                            */
                    377:   host_ulong text_start;       /* base of text used for this file */
                    378:   host_ulong data_start;       /* base of all data used for this file */
1.1       root      379: 
                    380:   /* NT extra fields; see internal.h for descriptions */
1.1.1.2   root      381:   host_ulong  ImageBase;
                    382:   host_ulong  SectionAlignment;
                    383:   host_ulong  FileAlignment;
1.1       root      384:   unsigned short  MajorOperatingSystemVersion;
                    385:   unsigned short  MinorOperatingSystemVersion;
                    386:   unsigned short  MajorImageVersion;
                    387:   unsigned short  MinorImageVersion;
                    388:   unsigned short  MajorSubsystemVersion;
                    389:   unsigned short  MinorSubsystemVersion;
                    390:   char  Reserved1[4];
1.1.1.2   root      391:   host_ulong  SizeOfImage;
                    392:   host_ulong  SizeOfHeaders;
                    393:   host_ulong  CheckSum;
1.1       root      394:   unsigned short Subsystem;
                    395:   unsigned short DllCharacteristics;
1.1.1.2   root      396:   host_ulong  SizeOfStackReserve;
                    397:   host_ulong  SizeOfStackCommit;
                    398:   host_ulong  SizeOfHeapReserve;
                    399:   host_ulong  SizeOfHeapCommit;
                    400:   host_ulong  LoaderFlags;
                    401:   host_ulong  NumberOfRvaAndSizes;
1.1       root      402:   /* IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; */
                    403:   char  DataDirectory[16][2][4]; /* 16 entries, 2 elements/entry, 4 chars */
                    404: 
                    405: } PEAOUTHDR;
                    406: 
                    407: 
                    408: #undef AOUTSZ
                    409: #define AOUTSZ (AOUTHDRSZ + 196)
                    410: 
                    411: #undef  E_FILNMLEN
                    412: #define E_FILNMLEN     18      /* # characters in a file name          */
                    413: #endif
                    414: 
                    415: /* end of coff/pe.h */
                    416: 
                    417: #define DT_NON         (0)     /* no derived type */
                    418: #define DT_PTR         (1)     /* pointer */
                    419: #define DT_FCN         (2)     /* function */
                    420: #define DT_ARY         (3)     /* array */
                    421: 
                    422: #define ISPTR(x)       (((x) & N_TMASK) == (DT_PTR << N_BTSHFT))
                    423: #define ISFCN(x)       (((x) & N_TMASK) == (DT_FCN << N_BTSHFT))
                    424: #define ISARY(x)       (((x) & N_TMASK) == (DT_ARY << N_BTSHFT))
                    425: 
                    426: #ifdef __cplusplus
                    427: }
                    428: #endif
                    429: 
                    430: #endif /* _A_OUT_H_ */

unix.superglobalmegacorp.com