1 /**
2  * D header file for Solaris.
3  *
4  * $(LINK2 http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/sys/elf_SPARC.h, illumos sys/elf_SPARC.h)
5  */
6 module core.sys.solaris.sys.elf_SPARC;
7 
8 version (Solaris):
9 extern (C):
10 nothrow:
11 
12 enum EF_SPARC_32PLUS_MASK = 0xffff00;
13 enum EF_SPARC_32PLUS      = 0x000100;
14 enum EF_SPARC_EXT_MASK    = 0xffff00;
15 enum EF_SPARC_SUN_US1     = 0x000200;
16 enum EF_SPARC_HAL_R1      = 0x000400;
17 enum EF_SPARC_SUN_US3     = 0x000800;
18 
19 enum EF_SPARCV9_MM  = 0x3;
20 enum EF_SPARCV9_TSO = 0x0;
21 enum EF_SPARCV9_PSO = 0x1;
22 enum EF_SPARCV9_RMO = 0x2;
23 
24 enum R_SPARC_NONE             = 0;
25 enum R_SPARC_8                = 1;
26 enum R_SPARC_16               = 2;
27 enum R_SPARC_32               = 3;
28 enum R_SPARC_DISP8            = 4;
29 enum R_SPARC_DISP16           = 5;
30 enum R_SPARC_DISP32           = 6;
31 enum R_SPARC_WDISP30          = 7;
32 enum R_SPARC_WDISP22          = 8;
33 enum R_SPARC_HI22             = 9;
34 enum R_SPARC_22               = 10;
35 enum R_SPARC_13               = 11;
36 enum R_SPARC_LO10             = 12;
37 enum R_SPARC_GOT10            = 13;
38 enum R_SPARC_GOT13            = 14;
39 enum R_SPARC_GOT22            = 15;
40 enum R_SPARC_PC10             = 16;
41 enum R_SPARC_PC22             = 17;
42 enum R_SPARC_WPLT30           = 18;
43 enum R_SPARC_COPY             = 19;
44 enum R_SPARC_GLOB_DAT         = 20;
45 enum R_SPARC_JMP_SLOT         = 21;
46 enum R_SPARC_RELATIVE         = 22;
47 enum R_SPARC_UA32             = 23;
48 enum R_SPARC_PLT32            = 24;
49 enum R_SPARC_HIPLT22          = 25;
50 enum R_SPARC_LOPLT10          = 26;
51 enum R_SPARC_PCPLT32          = 27;
52 enum R_SPARC_PCPLT22          = 28;
53 enum R_SPARC_PCPLT10          = 29;
54 enum R_SPARC_10               = 30;
55 enum R_SPARC_11               = 31;
56 enum R_SPARC_64               = 32;
57 enum R_SPARC_OLO10            = 33;
58 enum R_SPARC_HH22             = 34;
59 enum R_SPARC_HM10             = 35;
60 enum R_SPARC_LM22             = 36;
61 enum R_SPARC_PC_HH22          = 37;
62 enum R_SPARC_PC_HM10          = 38;
63 enum R_SPARC_PC_LM22          = 39;
64 enum R_SPARC_WDISP16          = 40;
65 enum R_SPARC_WDISP19          = 41;
66 enum R_SPARC_GLOB_JMP         = 42;
67 enum R_SPARC_7                = 43;
68 enum R_SPARC_5                = 44;
69 enum R_SPARC_6                = 45;
70 enum R_SPARC_DISP64           = 46;
71 enum R_SPARC_PLT64            = 47;
72 enum R_SPARC_HIX22            = 48;
73 enum R_SPARC_LOX10            = 49;
74 enum R_SPARC_H44              = 50;
75 enum R_SPARC_M44              = 51;
76 enum R_SPARC_L44              = 52;
77 enum R_SPARC_REGISTER         = 53;
78 enum R_SPARC_UA64             = 54;
79 enum R_SPARC_UA16             = 55;
80 enum R_SPARC_TLS_GD_HI22      = 56;
81 enum R_SPARC_TLS_GD_LO10      = 57;
82 enum R_SPARC_TLS_GD_ADD       = 58;
83 enum R_SPARC_TLS_GD_CALL      = 59;
84 enum R_SPARC_TLS_LDM_HI22     = 60;
85 enum R_SPARC_TLS_LDM_LO10     = 61;
86 enum R_SPARC_TLS_LDM_ADD      = 62;
87 enum R_SPARC_TLS_LDM_CALL     = 63;
88 enum R_SPARC_TLS_LDO_HIX22    = 64;
89 enum R_SPARC_TLS_LDO_LOX10    = 65;
90 enum R_SPARC_TLS_LDO_ADD      = 66;
91 enum R_SPARC_TLS_IE_HI22      = 67;
92 enum R_SPARC_TLS_IE_LO10      = 68;
93 enum R_SPARC_TLS_IE_LD        = 69;
94 enum R_SPARC_TLS_IE_LDX       = 70;
95 enum R_SPARC_TLS_IE_ADD       = 71;
96 enum R_SPARC_TLS_LE_HIX22     = 72;
97 enum R_SPARC_TLS_LE_LOX10     = 73;
98 enum R_SPARC_TLS_DTPMOD32     = 74;
99 enum R_SPARC_TLS_DTPMOD64     = 75;
100 enum R_SPARC_TLS_DTPOFF32     = 76;
101 enum R_SPARC_TLS_DTPOFF64     = 77;
102 enum R_SPARC_TLS_TPOFF32      = 78;
103 enum R_SPARC_TLS_TPOFF64      = 79;
104 enum R_SPARC_GOTDATA_HIX22    = 80;
105 enum R_SPARC_GOTDATA_LOX10    = 81;
106 enum R_SPARC_GOTDATA_OP_HIX22 = 82;
107 enum R_SPARC_GOTDATA_OP_LOX10 = 83;
108 enum R_SPARC_GOTDATA_OP       = 84;
109 enum R_SPARC_H34              = 85;
110 enum R_SPARC_SIZE32           = 86;
111 enum R_SPARC_SIZE64           = 87;
112 enum R_SPARC_NUM              = 88;
113 
114 enum R_SPARC_L34 = R_SPARC_L44;
115 
116 enum ELF_SPARC_MAXPGSZ   = 0x10000;
117 enum ELF_SPARCV9_MAXPGSZ = 0x100000;
118 
119 enum SHT_SPARC_GOTDATA = 0x70000000;
120 
121 enum SHN_BEFORE = 0xff00;
122 enum SHN_AFTER  =  0xff01;
123 
124 enum STT_SPARC_REGISTER = 13;
125 
126 enum DT_SPARC_REGISTER = 0x70000001;
127 
128 enum STO_SPARC_REGISTER_G1 = 0x1;
129 enum STO_SPARC_REGISTER_G2 = 0x2;
130 enum STO_SPARC_REGISTER_G3 = 0x3;
131 enum STO_SPARC_REGISTER_G4 = 0x4;
132 enum STO_SPARC_REGISTER_G5 = 0x5;
133 enum STO_SPARC_REGISTER_G6 = 0x6;
134 enum STO_SPARC_REGISTER_G7 = 0x7;
135 
136 enum M_PLT_INSSIZE  = 4;
137 enum M_PLT_XNumber  = 4;
138 enum M_GOT_XDYNAMIC = 0;
139 enum M_GOT_XNumber  = 1;
140 
141 enum M32_WORD_ALIGN   = 4;
142 enum M32_PLT_ENTSIZE  = 12;
143 enum M32_PLT_ALIGN    = M_WORD_ALIGN;
144 enum M32_GOT_ENTSIZE  = 4;
145 enum M32_GOT_MAXSMALL = 2048;
146 enum M32_PLT_RESERVSZ = (M_PLT_XNumber * M32_PLT_ENTSIZE);
147 
148 enum M64_WORD_ALIGN   = 8;
149 enum M64_PLT_ENTSIZE  = 32;
150 enum M64_PLT_ALIGN    = 256;
151 enum M64_GOT_ENTSIZE  = 8;
152 enum M64_GOT_MAXSMALL = 1024;
153 enum M64_PLT_RESERVSZ = (M_PLT_XNumber * M64_PLT_ENTSIZE);
154 
155 enum M64_PLT_NEARPLTS = 0x8000;
156 enum M64_PLT_FENTSIZE = 24;
157 enum M64_PLT_PSIZE    = 8;
158 enum M64_PLT_FBLKCNTS = 160;
159 enum M64_PLT_FBLOCKSZ = (M64_PLT_FBLKCNTS * M64_PLT_ENTSIZE);
160 
161 version (_ELF64)
162 {
163     enum M_WORD_ALIGN   = M64_WORD_ALIGN;
164     enum M_PLT_ENTSIZE  = M64_PLT_ENTSIZE;
165     enum M_PLT_ALIGN    = M64_PLT_ALIGN;
166     enum M_PLT_RESERVSZ = M64_PLT_RESERVSZ;
167     enum M_GOT_ENTSIZE  = M64_GOT_ENTSIZE;
168     enum M_GOT_MAXSMALL = M64_GOT_MAXSMALL;
169 }
170 else
171 {
172     enum M_WORD_ALIGN   = M32_WORD_ALIGN;
173     enum M_PLT_ENTSIZE  = M32_PLT_ENTSIZE;
174     enum M_PLT_ALIGN    = M32_PLT_ALIGN;
175     enum M_PLT_RESERVSZ = M32_PLT_RESERVSZ;
176     enum M_GOT_ENTSIZE  = M32_GOT_ENTSIZE;
177     enum M_GOT_MAXSMALL = M32_GOT_MAXSMALL;
178 }