source: svn/trunk/newcon3bcm2_21bu/toolchain/mips-linux-uclibc/include/linux/som.h

Last change on this file was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 5.3 KB
RevLine 
[2]1#ifndef _LINUX_SOM_H
2#define _LINUX_SOM_H
3
4/* File format definition for SOM executables / shared libraries */
5
6/* we need struct timespec */
7#include <sys/time.h>
8
9#define SOM_PAGESIZE 4096
10
11/* this is the SOM header */
12struct som_hdr {
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;
45};
46
47/* values for system_id */
48
49#define SOM_SID_PARISC_1_0      0x020b
50#define SOM_SID_PARISC_1_1      0x0210
51#define SOM_SID_PARISC_2_0      0x0214
52
53/* values for a_magic */
54
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
63
64/* values for version_id.  Decimal not hex, yes.  Grr. */
65
66#define SOM_ID_OLD              85082112
67#define SOM_ID_NEW              87102412
68
69struct aux_id {
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 */
77};
78
79/* The Exec Auxiliary Header.  Called The HP-UX Header within HP apparently. */
80struct 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 */
92};
93
94/* Oh, the things people do to avoid casts.  Shame it'll break with gcc's
95 * new aliasing rules really.
96 */
97union name_pt {
98        char *          n_name;
99        unsigned int    n_strx;
100};
101
102/* The Space Dictionary */
103struct 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 */
113
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 */
121};
122
123/* The Subspace Dictionary */
124struct subspace_dictionary_record {
125        int             space_index;
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;
140
141        int             file_loc_init_value;
142        unsigned int    initialization_length;
143        unsigned int    subspace_start;
144        unsigned int    subspace_length;
145
146        unsigned int    reserved2       :5;
147        unsigned int    alignment       :27;
148
149        union name_pt   name;
150        int             fixup_request_index;
151        unsigned int    fixup_request_quantity;
152};
153
154#endif /* _LINUX_SOM_H */
Note: See TracBrowser for help on using the repository browser.