File:  [Qemu by Fabrice Bellard] / qemu / a.out.h
Revision 1.1.1.3 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 16:50:38 2018 UTC (3 years, 6 months ago) by root
Branches: qemu, MAIN
CVS tags: qemu1000, qemu0151, qemu0150, qemu0141, qemu0140, qemu0130, qemu0125, qemu0124, qemu0123, qemu0122, qemu0121, qemu0120, qemu0111, qemu0110, qemu0105, qemu0104, qemu0103, qemu0102, qemu0101, qemu0100, HEAD
qemu 0.10.0

    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		*/
   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	*/
   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			*/
   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=
   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			*/
  106:   host_ulong	s_paddr;	/* physical address, offset
  107: 				   of last addr in scn */
  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	*/
  113:   unsigned short s_nreloc;	/* number of relocation entries	*/
  114:   unsigned short s_nlnno;	/* number of line number entries*/
  115:   host_ulong	s_flags;	/* flags			*/
  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 {
  139:     host_ulong l_symndx; /* function name symbol index, iff l_lnno 0 */
  140:     host_ulong l_paddr;	/* (physical) address of line number	*/
  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 {
  159:       host_ulong e_zeroes;
  160:       host_ulong e_offset;
  161:     } e;
  162:   } e;
  163:   host_ulong e_value;
  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 {
  177:     host_ulong x_tagndx;	/* str, un, or enum tag indx */
  178:     union {
  179:       struct {
  180: 	unsigned short  x_lnno; /* declaration line number */
  181: 	unsigned short  x_size; /* str/union/array size */
  182:       } x_lnsz;
  183:       host_ulong x_fsize;	/* size of function */
  184:     } x_misc;
  185:     union {
  186:       struct {			/* if ISFCN, tag, or .bb */
  187: 	host_ulong x_lnnoptr;/* ptr to fcn line # */
  188: 	host_ulong x_endndx;	/* entry ndx past block end */
  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 {
  200:       host_ulong x_zeroes;
  201:       host_ulong x_offset;
  202:     } x_n;
  203:   } x_file;
  204: 
  205:   struct {
  206:     host_ulong x_scnlen;	/* section length */
  207:     unsigned short x_nreloc;	/* # relocation entries */
  208:     unsigned short x_nlinno;	/* # line numbers */
  209:     host_ulong x_checksum;	/* section COMDAT checksum */
  210:     unsigned short x_associated;/* COMDAT associated section index */
  211:     char x_comdat[1];		/* COMDAT selection number */
  212:   } x_scn;
  213: 
  214:   struct {
  215:     host_ulong x_tvfill;	/* tv fill value */
  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 */
  347:   host_ulong e_lfanew;	/* File address of new exe header, 0x80 */
  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		*/
  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	*/
  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			*/
  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 */
  379: 
  380:   /* NT extra fields; see internal.h for descriptions */
  381:   host_ulong  ImageBase;
  382:   host_ulong  SectionAlignment;
  383:   host_ulong  FileAlignment;
  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];
  391:   host_ulong  SizeOfImage;
  392:   host_ulong  SizeOfHeaders;
  393:   host_ulong  CheckSum;
  394:   unsigned short Subsystem;
  395:   unsigned short DllCharacteristics;
  396:   host_ulong  SizeOfStackReserve;
  397:   host_ulong  SizeOfStackCommit;
  398:   host_ulong  SizeOfHeapReserve;
  399:   host_ulong  SizeOfHeapCommit;
  400:   host_ulong  LoaderFlags;
  401:   host_ulong  NumberOfRvaAndSizes;
  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