source: trunk/emx/include/defs.h@ 3659

Last change on this file since 3659 was 3659, checked in by bird, 15 years ago

emx: Added elf headers and fixed some properties.

  • Property cvs2svn:cvs-rev set to 1.4
  • Property svn:eol-style set to native
File size: 6.0 KB
Line 
1/* defs.h -- Various definitions for emx development utilities
2 Copyright (c) 1992-1998 Eberhard Mattes
3
4This file is part of emx.
5
6emx is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2, or (at your option)
9any later version.
10
11emx is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with emx; see the file COPYING. If not, write to
18the Free Software Foundation, 59 Temple Place - Suite 330,
19Boston, MA 02111-1307, USA. */
20
21
22#define FALSE 0
23#define TRUE 1
24
25#ifdef __GNUC__
26#define NORETURN2 __attribute__ ((noreturn))
27#define ATTR_PRINTF(s,f) __attribute__ ((__format__ (__printf__, s, f)))
28#else
29#define NORETURN2
30#define ATTR_PRINTF(s,f)
31#endif
32
33/* The magic number that is always the first DWORD in .data,
34 followed by a offset to the __os2dll set. */
35#define DATASEG_MAGIC 0xba0bab
36
37/* The maximum OMF record size supported by OMF linkers. This value
38 includes the record type, length and checksum fields. */
39#define MAX_REC_SIZE 1024
40
41#ifndef _BYTE_WORD_DWORD
42#define _BYTE_WORD_DWORD
43typedef unsigned char byte;
44typedef unsigned short word;
45typedef unsigned long dword;
46#endif /* _BYTE_WORD_DWORD */
47
48/* This is the header of a DOS executable file. */
49struct exe1_header
50{
51 word magic; /* Magic number, "MZ" (0x5a4d) */
52 word last_page; /* Number of bytes in last page */
53 word pages; /* Size of the file in 512-byte pages */
54 word reloc_size; /* Number of relocation entries */
55 word hdr_size; /* Size of header in 16-byte paragraphs */
56 word min_alloc; /* Minimum allocation (paragraphs) */
57 word max_alloc; /* Maximum allocation (paragraphs) */
58 word ss, sp; /* Initial stack pointer */
59 word chksum; /* Checksum */
60 word ip, cs; /* Entry point */
61 word reloc_ptr; /* Location of the relocation table */
62 word ovl; /* Overlay number */
63};
64
65/* This is an additional header of a DOS executable file. It contains
66 a pointer to the new EXE header. */
67struct exe2_header
68{
69 word res1[16]; /* Reserved */
70 word new_lo; /* Low word of the location of the header */
71 word new_hi; /* High word of the location of the header */
72};
73
74/* This is the layout of the OS/2 LX header. */
75struct os2_header
76{
77 word magic; /* Magic number, "LX" (0x584c) */
78 byte byte_order; /* Byte order */
79 byte word_order; /* Word order */
80 dword level; /* Format level */
81 word cpu; /* CPU type */
82 word os; /* Operating system type */
83 dword ver; /* Module version */
84 dword mod_flags; /* Module flags */
85 dword mod_pages; /* Number of pages in the EXE file */
86 dword entry_obj; /* Object number for EIP */
87 dword entry_eip; /* Entry point */
88 dword stack_obj; /* Object number for ESP */
89 dword stack_esp; /* Stack */
90 dword pagesize; /* System page size */
91 dword pageshift; /* Page offset shift */
92 dword fixup_size; /* Fixup section size */
93 dword fixup_checksum; /* Fixup section checksum */
94 dword loader_size; /* Loader section size */
95 dword loader_checksum; /* Loader section checksum */
96 dword obj_offset; /* Object table offset */
97 dword obj_count; /* Number of objects in module */
98 dword pagemap_offset; /* Object page table offset */
99 dword itermap_offset; /* Object iterated pages offset */
100 dword rsctab_offset; /* Resource table offset */
101 dword rsctab_count; /* Number of resource table entries */
102 dword resname_offset; /* Resident name table offset */
103 dword entry_offset; /* Entry table offset */
104 dword moddir_offset; /* Module directives offset */
105 dword moddir_count; /* Number of module directives */
106 dword fixpage_offset; /* Fixup page table offset */
107 dword fixrecord_offset; /* Fixup record table offset */
108 dword impmod_offset; /* Import module table offset */
109 dword impmod_count; /* Number of import module table entries */
110 dword impprocname_offset; /* Import procedure table offset */
111 dword page_checksum_offset; /* Per page checksum table offset */
112 dword enum_offset; /* Data pages offset */
113 dword preload_count; /* Number of preload pages */
114 dword nonresname_offset; /* Non-resident name table offset */
115 dword nonresname_size; /* Non-resident name table size */
116 dword nonresname_checksum; /* Non-resident name table checksum */
117 dword auto_obj; /* Auto data segment object number */
118 dword debug_offset; /* Debug information offset */
119 dword debug_size; /* Debug information size */
120 dword instance_preload; /* Number of instance preload pages */
121 dword instance_demand; /* Number of instance load-on-demand pages */
122 dword heap_size; /* Heap size */
123 dword stack_size; /* Stack size */
124 dword reserved[5]; /* Reserved */
125};
126
127/* This is the layout of an object table entry. */
128struct object
129{
130 dword virt_size; /* Virtual size */
131 dword virt_base; /* Relocation base address */
132 dword attr_flags; /* Object attributes and flags */
133 dword map_first; /* Page table index */
134 dword map_count; /* Number of page table entries */
135 dword reserved; /* Reserved */
136};
137
138#pragma pack(1)
139
140struct omf_rec
141{
142 byte rec_type;
143 word rec_len;
144};
145
146#pragma pack()
Note: See TracBrowser for help on using the repository browser.