Commit 0c607d572860b692db95543c0d37f202c707b09a

Authored by bellard
1 parent 67b915a5

win32 port (initial patch by kazu)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@693 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 431 additions and 0 deletions
a.out.h 0 → 100644
  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 + unsigned long f_timdat; /* time & date stamp */
  29 + unsigned long f_symptr; /* file pointer to symtab */
  30 + unsigned long 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 + unsigned long tsize; /* text size in bytes, padded to FW bdry*/
  76 + unsigned long dsize; /* initialized data " " */
  77 + unsigned long bsize; /* uninitialized data " " */
  78 + unsigned long entry; /* entry pt. */
  79 + unsigned long text_start; /* base of text used for this file */
  80 + unsigned long 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 + unsigned long s_paddr; /* physical address, offset
  107 + of last addr in scn */
  108 + unsigned long s_vaddr; /* virtual address */
  109 + unsigned long s_size; /* section size */
  110 + unsigned long s_scnptr; /* file ptr to raw data for section */
  111 + unsigned long s_relptr; /* file ptr to relocation */
  112 + unsigned long 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 + unsigned long 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 + unsigned long l_symndx; /* function name symbol index, iff l_lnno 0 */
  140 + unsigned long 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 external_syment
  155 +{
  156 + union {
  157 + char e_name[E_SYMNMLEN];
  158 + struct {
  159 + unsigned long e_zeroes;
  160 + unsigned long e_offset;
  161 + } e;
  162 + } e;
  163 + unsigned long 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 + unsigned long 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 + unsigned long x_fsize; /* size of function */
  184 + } x_misc;
  185 + union {
  186 + struct { /* if ISFCN, tag, or .bb */
  187 + unsigned long x_lnnoptr;/* ptr to fcn line # */
  188 + unsigned long 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 + unsigned long x_zeroes;
  201 + unsigned long x_offset;
  202 + } x_n;
  203 + } x_file;
  204 +
  205 + struct {
  206 + unsigned long x_scnlen; /* section length */
  207 + unsigned short x_nreloc; /* # relocation entries */
  208 + unsigned short x_nlinno; /* # line numbers */
  209 + unsigned long 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 + unsigned long 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 + unsigned long 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 + unsigned long f_timdat; /* time & date stamp */
  356 + unsigned long f_symptr; /* file pointer to symtab */
  357 + unsigned long 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 + unsigned long tsize; /* text size in bytes, padded to FW bdry*/
  374 + unsigned long dsize; /* initialized data " " */
  375 + unsigned long bsize; /* uninitialized data " " */
  376 + unsigned long entry; /* entry pt. */
  377 + unsigned long text_start; /* base of text used for this file */
  378 + unsigned long data_start; /* base of all data used for this file */
  379 +
  380 + /* NT extra fields; see internal.h for descriptions */
  381 + unsigned long ImageBase;
  382 + unsigned long SectionAlignment;
  383 + unsigned long 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 + unsigned long SizeOfImage;
  392 + unsigned long SizeOfHeaders;
  393 + unsigned long CheckSum;
  394 + unsigned short Subsystem;
  395 + unsigned short DllCharacteristics;
  396 + unsigned long SizeOfStackReserve;
  397 + unsigned long SizeOfStackCommit;
  398 + unsigned long SizeOfHeapReserve;
  399 + unsigned long SizeOfHeapCommit;
  400 + unsigned long LoaderFlags;
  401 + unsigned long 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_ */
  431 +
... ...