4 /* File format definition for SOM executables / shared libraries */
6 /* we need struct timespec */
7 #include <linux/time.h>
9 #define SOM_PAGESIZE 4096
11 /* this is the SOM header */
13 short system_id
; /* magic number - system */
14 short a_magic
; /* magic number - file type */
15 unsigned int version_id
; /* versiod ID: YYMMDDHH */
16 struct timespec file_time
; /* system clock */
17 unsigned int entry_space
; /* space for entry point */
18 unsigned int entry_subspace
; /* subspace for entry point */
19 unsigned int entry_offset
; /* offset of entry point */
20 unsigned int aux_header_location
; /* auxiliary header location */
21 unsigned int aux_header_size
; /* auxiliary header size */
22 unsigned int som_length
; /* length of entire SOM */
23 unsigned int presumed_dp
; /* compiler's DP value */
24 unsigned int space_location
; /* space dictionary location */
25 unsigned int space_total
; /* number of space entries */
26 unsigned int subspace_location
; /* subspace entries location */
27 unsigned int subspace_total
; /* number of subspace entries */
28 unsigned int loader_fixup_location
; /* MPE/iX loader fixup */
29 unsigned int loader_fixup_total
; /* number of fixup records */
30 unsigned int space_strings_location
; /* (sub)space names */
31 unsigned int space_strings_size
; /* size of strings area */
32 unsigned int init_array_location
; /* reserved */
33 unsigned int init_array_total
; /* reserved */
34 unsigned int compiler_location
; /* module dictionary */
35 unsigned int compiler_total
; /* number of modules */
36 unsigned int symbol_location
; /* symbol dictionary */
37 unsigned int symbol_total
; /* number of symbols */
38 unsigned int fixup_request_location
; /* fixup requests */
39 unsigned int fixup_request_total
; /* number of fixup requests */
40 unsigned int symbol_strings_location
;/* module & symbol names area */
41 unsigned int symbol_strings_size
; /* size of strings area */
42 unsigned int unloadable_sp_location
; /* unloadable spaces location */
43 unsigned int unloadable_sp_size
; /* size of data */
44 unsigned int checksum
;
47 /* values for system_id */
49 #define SOM_SID_PARISC_1_0 0x020b
50 #define SOM_SID_PARISC_1_1 0x0210
51 #define SOM_SID_PARISC_2_0 0x0214
53 /* values for a_magic */
55 #define SOM_LIB_EXEC 0x0104
56 #define SOM_RELOCATABLE 0x0106
57 #define SOM_EXEC_NONSHARE 0x0107
58 #define SOM_EXEC_SHARE 0x0108
59 #define SOM_EXEC_DEMAND 0x010B
60 #define SOM_LIB_DYN 0x010D
61 #define SOM_LIB_SHARE 0x010E
62 #define SOM_LIB_RELOC 0x0619
64 /* values for version_id. Decimal not hex, yes. Grr. */
66 #define SOM_ID_OLD 85082112
67 #define SOM_ID_NEW 87102412
70 unsigned int mandatory
:1; /* the linker must understand this */
71 unsigned int copy
:1; /* Must be copied by the linker */
72 unsigned int append
:1; /* Must be merged by the linker */
73 unsigned int ignore
:1; /* Discard section if unknown */
74 unsigned int reserved
:12;
75 unsigned int type
:16; /* Header type */
76 unsigned int length
; /* length of _following_ data */
79 /* The Exec Auxiliary Header. Called The HP-UX Header within HP apparently. */
80 struct som_exec_auxhdr
{
81 struct aux_id som_auxhdr
;
82 int exec_tsize
; /* Text size in bytes */
83 int exec_tmem
; /* Address to load text at */
84 int exec_tfile
; /* Location of text in file */
85 int exec_dsize
; /* Data size in bytes */
86 int exec_dmem
; /* Address to load data at */
87 int exec_dfile
; /* Location of data in file */
88 int exec_bsize
; /* Uninitialised data (bss) */
89 int exec_entry
; /* Address to start executing */
90 int exec_flags
; /* loader flags */
91 int exec_bfill
; /* initialisation value for bss */
94 /* Oh, the things people do to avoid casts. Shame it'll break with gcc's
95 * new aliasing rules really.
102 /* The Space Dictionary */
103 struct space_dictionary_record
{
104 union name_pt name
; /* index to subspace name */
105 unsigned int is_loadable
:1; /* loadable */
106 unsigned int is_defined
:1; /* defined within file */
107 unsigned int is_private
:1; /* not sharable */
108 unsigned int has_intermediate_code
:1; /* contains intermediate code */
109 unsigned int is_tspecific
:1; /* thread specific */
110 unsigned int reserved
:11; /* for future expansion */
111 unsigned int sort_key
:8; /* for linker */
112 unsigned int reserved2
:8; /* for future expansion */
114 int space_number
; /* index */
115 int subspace_index
; /* index into subspace dict */
116 unsigned int subspace_quantity
; /* number of subspaces */
117 int loader_fix_index
; /* for loader */
118 unsigned int loader_fix_quantity
; /* for loader */
119 int init_pointer_index
; /* data pointer array index */
120 unsigned int init_pointer_quantity
; /* number of data pointers */
123 /* The Subspace Dictionary */
124 struct subspace_dictionary_record
{
126 unsigned int access_control_bits
:7;
127 unsigned int memory_resident
:1;
128 unsigned int dup_common
:1;
129 unsigned int is_common
:1;
130 unsigned int quadrant
:2;
131 unsigned int initially_frozen
:1;
132 unsigned int is_first
:1;
133 unsigned int code_only
:1;
134 unsigned int sort_key
:8;
135 unsigned int replicate_init
:1;
136 unsigned int continuation
:1;
137 unsigned int is_tspecific
:1;
138 unsigned int is_comdat
:1;
139 unsigned int reserved
:4;
141 int file_loc_init_value
;
142 unsigned int initialization_length
;
143 unsigned int subspace_start
;
144 unsigned int subspace_length
;
146 unsigned int reserved2
:5;
147 unsigned int alignment
:27;
150 int fixup_request_index
;
151 unsigned int fixup_request_quantity
;
154 #endif /* _LINUX_SOM_H */