Mercurial > illumos > illumos-gate
annotate usr/src/cmd/sgs/include/sparc/machdep_sparc.h @ 13004:92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
author | Rod Evans <Rod.Evans@Oracle.COM> |
---|---|
date | Mon, 02 Aug 2010 14:04:48 -0700 |
parents | d7ef53deac3f |
children |
rev | line source |
---|---|
0 | 1 /* |
2 * CDDL HEADER START | |
3 * | |
4 * The contents of this file are subject to the terms of the | |
1618
8c9a4f31d225
6316708 LD_DEBUG should provide a means of identifying/isolating individual
rie
parents:
0
diff
changeset
|
5 * Common Development and Distribution License (the "License"). |
8c9a4f31d225
6316708 LD_DEBUG should provide a means of identifying/isolating individual
rie
parents:
0
diff
changeset
|
6 * You may not use this file except in compliance with the License. |
0 | 7 * |
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | |
9 * or http://www.opensolaris.org/os/licensing. | |
10 * See the License for the specific language governing permissions | |
11 * and limitations under the License. | |
12 * | |
13 * When distributing Covered Code, include this CDDL HEADER in each | |
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | |
15 * If applicable, add the following below this CDDL HEADER, with the | |
16 * fields enclosed by brackets "[]" replaced with your own identifying | |
17 * information: Portions Copyright [yyyy] [name of copyright owner] | |
18 * | |
19 * CDDL HEADER END | |
20 */ | |
1618
8c9a4f31d225
6316708 LD_DEBUG should provide a means of identifying/isolating individual
rie
parents:
0
diff
changeset
|
21 |
0 | 22 /* |
23 * Copyright (c) 1988 AT&T | |
24 * All Rights Reserved | |
25 * | |
13004
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
26 * Copyright (c) 1990, 2010, Oracle and/or its affiliates. All rights reserved. |
0 | 27 * |
28 * Global include file for all sgs SPARC machine dependent macros, constants | |
29 * and declarations. | |
30 */ | |
31 | |
6206 | 32 #ifndef _MACHDEP_SPARC_H |
33 #define _MACHDEP_SPARC_H | |
0 | 34 |
35 #include <link.h> | |
36 #include <sys/machelf.h> | |
37 | |
38 #ifdef __cplusplus | |
39 extern "C" { | |
40 #endif | |
41 | |
42 /* | |
43 * Elf header information. | |
44 */ | |
6206 | 45 #define M_MACH_32 EM_SPARC |
46 #define M_MACH_64 EM_SPARCV9 | |
47 | |
0 | 48 #ifdef _ELF64 |
49 #define M_MACH EM_SPARCV9 | |
50 #define M_CLASS ELFCLASS64 | |
51 #else | |
52 #define M_MACH EM_SPARC | |
53 #define M_CLASS ELFCLASS32 | |
54 #endif | |
55 #define M_MACHPLUS EM_SPARC32PLUS | |
56 #define M_DATA ELFDATA2MSB | |
57 #define M_FLAGSPLUS EF_SPARC_32PLUS | |
58 | |
59 /* | |
60 * Page boundary Macros: truncate to previous page boundary and round to | |
61 * next page boundary (refer to generic macros in ../sgs.h also). | |
62 */ | |
63 #define M_PTRUNC(X) ((X) & ~(syspagsz - 1)) | |
64 #define M_PROUND(X) (((X) + syspagsz - 1) & ~(syspagsz - 1)) | |
65 | |
66 /* | |
67 * Segment boundary macros: truncate to previous segment boundary and round | |
68 * to next page boundary. | |
69 */ | |
70 #ifndef M_SEGSIZE | |
71 #define M_SEGSIZE ELF_SPARC_MAXPGSZ | |
72 #endif | |
73 #define M_STRUNC(X) ((X) & ~(M_SEGSIZE - 1)) | |
74 #define M_SROUND(X) (((X) + M_SEGSIZE - 1) & ~(M_SEGSIZE - 1)) | |
75 | |
8598
0867fc633d66
6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents:
8501
diff
changeset
|
76 /* |
0867fc633d66
6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents:
8501
diff
changeset
|
77 * Relocation type macro. |
0867fc633d66
6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents:
8501
diff
changeset
|
78 */ |
0867fc633d66
6686372 ld.so.1 should use mmapobj(2)
Rod Evans <Rod.Evans@Sun.COM>
parents:
8501
diff
changeset
|
79 #define M_RELOC Rela |
0 | 80 |
81 /* | |
82 * TLS static segments must be rounded to the following requirements, | |
83 * due to libthread stack allocation. | |
84 */ | |
85 #if defined(_ELF64) | |
86 #define M_TLSSTATALIGN 0x10 | |
87 #else | |
2647 | 88 #define M_TLSSTATALIGN 0x08 |
0 | 89 #endif |
90 | |
91 /* | |
92 * Instruction encodings. | |
93 */ | |
94 #define M_SAVESP64 0x9de3bfc0 /* save %sp, -64, %sp */ | |
95 #define M_CALL 0x40000000 | |
96 #define M_JMPL 0x81c06000 /* jmpl %g1 + simm13, %g0 */ | |
97 #define M_SETHIG0 0x01000000 /* sethi %hi(val), %g0 */ | |
98 #define M_SETHIG1 0x03000000 /* sethi %hi(val), %g1 */ | |
99 #define M_STO7G1IM 0xde206000 /* st %o7,[%g1 + %lo(val)] */ | |
100 #define M_SUBFPSPG1 0x8227800e /* sub %fp,%sp,%g1 */ | |
101 #define M_NOP 0x01000000 /* sethi 0, %o0 (nop) */ | |
102 #define M_BA_A 0x30800000 /* ba,a */ | |
103 #define M_BA_A_PT 0x30480000 /* ba,a %icc, <dst> */ | |
104 #define M_MOVO7TOG1 0x8210000f /* mov %o7, %g1 */ | |
105 #define M_MOVO7TOG5 0x8a10000f /* mov %o7, %g5 */ | |
106 #define M_MOVI7TOG1 0x8210001f /* mov %i7, %g1 */ | |
107 #define M_BA_A_XCC 0x30680000 /* ba,a %xcc */ | |
108 #define M_JMPL_G5G0 0x81c16000 /* jmpl %g5 + 0, %g0 */ | |
109 #define M_XNOR_G5G1 0x82396000 /* xnor %g5, 0, %g1 */ | |
110 | |
111 | |
112 #define M_BIND_ADJ 4 /* adjustment for end of */ | |
113 /* elf_rtbndr() address */ | |
114 | |
10201
47013accbd9c
6863263 libproc doesn't access in-core elf data correctly
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents:
9085
diff
changeset
|
115 /* transition flags for got sizing */ |
0 | 116 #define M_GOT_LARGE (Sword)(-M_GOT_MAXSMALL - 1) |
117 #define M_GOT_SMALL (Sword)(-M_GOT_MAXSMALL - 2) | |
5152
fa5ab16f3606
5035454 mixing -Kpic and -KPIC may cause SIGSEGV with -xarch=v9
ab196087
parents:
4665
diff
changeset
|
118 #define M_GOT_MIXED (Sword)(-M_GOT_MAXSMALL - 3) |
0 | 119 |
120 /* | |
121 * Other machine dependent entities | |
122 */ | |
123 #ifdef _ELF64 | |
124 #define M_SEGM_ALIGN ELF_SPARCV9_MAXPGSZ | |
125 /* | |
8501
e544a13d2b41
6789925 64-bit applications with SF1_SUNW_ADDR32 require non-default starting address
Rod Evans <Rod.Evans@Sun.COM>
parents:
7833
diff
changeset
|
126 * Put default 64-bit programs above 4 gigabytes to help insure correctness, so |
e544a13d2b41
6789925 64-bit applications with SF1_SUNW_ADDR32 require non-default starting address
Rod Evans <Rod.Evans@Sun.COM>
parents:
7833
diff
changeset
|
127 * that any 64-bit programs that truncate pointers will fault now instead of |
e544a13d2b41
6789925 64-bit applications with SF1_SUNW_ADDR32 require non-default starting address
Rod Evans <Rod.Evans@Sun.COM>
parents:
7833
diff
changeset
|
128 * corrupting itself and dying mysteriously. 64-bit programs can also be |
e544a13d2b41
6789925 64-bit applications with SF1_SUNW_ADDR32 require non-default starting address
Rod Evans <Rod.Evans@Sun.COM>
parents:
7833
diff
changeset
|
129 * restricted to a 32-bit address space (SF1_SUNW_ADDR32), and these programs |
e544a13d2b41
6789925 64-bit applications with SF1_SUNW_ADDR32 require non-default starting address
Rod Evans <Rod.Evans@Sun.COM>
parents:
7833
diff
changeset
|
130 * provide an alternative origin. |
0 | 131 */ |
8501
e544a13d2b41
6789925 64-bit applications with SF1_SUNW_ADDR32 require non-default starting address
Rod Evans <Rod.Evans@Sun.COM>
parents:
7833
diff
changeset
|
132 #define M_SEGM_ORIGIN (Addr)0x100000000ULL /* default 1st segment origin */ |
e544a13d2b41
6789925 64-bit applications with SF1_SUNW_ADDR32 require non-default starting address
Rod Evans <Rod.Evans@Sun.COM>
parents:
7833
diff
changeset
|
133 #define M_SEGM_AORIGIN (Addr)0x100000ULL /* alternative 1st segment */ |
e544a13d2b41
6789925 64-bit applications with SF1_SUNW_ADDR32 require non-default starting address
Rod Evans <Rod.Evans@Sun.COM>
parents:
7833
diff
changeset
|
134 /* origin */ |
0 | 135 #else |
136 #define M_SEGM_ALIGN ELF_SPARC_MAXPGSZ | |
8501
e544a13d2b41
6789925 64-bit applications with SF1_SUNW_ADDR32 require non-default starting address
Rod Evans <Rod.Evans@Sun.COM>
parents:
7833
diff
changeset
|
137 #define M_SEGM_ORIGIN (Addr)0x10000 /* default 1st segment origin */ |
e544a13d2b41
6789925 64-bit applications with SF1_SUNW_ADDR32 require non-default starting address
Rod Evans <Rod.Evans@Sun.COM>
parents:
7833
diff
changeset
|
138 #define M_SEGM_AORIGIN M_SEGM_ORIGIN /* alternative 1st segment */ |
e544a13d2b41
6789925 64-bit applications with SF1_SUNW_ADDR32 require non-default starting address
Rod Evans <Rod.Evans@Sun.COM>
parents:
7833
diff
changeset
|
139 /* origin */ |
0 | 140 #endif |
141 | |
142 /* | |
143 * Make common relocation information transparent to the common code | |
144 */ | |
145 #define M_REL_DT_TYPE DT_RELA /* .dynamic entry */ | |
146 #define M_REL_DT_SIZE DT_RELASZ /* .dynamic entry */ | |
147 #define M_REL_DT_ENT DT_RELAENT /* .dynamic entry */ | |
148 #define M_REL_DT_COUNT DT_RELACOUNT /* .dynamic entry */ | |
149 #define M_REL_SHT_TYPE SHT_RELA /* section header type */ | |
150 #define M_REL_ELF_TYPE ELF_T_RELA /* data buffer type */ | |
151 | |
152 /* | |
153 * Make common relocation types transparent to the common code | |
154 */ | |
155 #define M_R_NONE R_SPARC_NONE | |
156 #define M_R_GLOB_DAT R_SPARC_GLOB_DAT | |
157 #define M_R_COPY R_SPARC_COPY | |
158 #define M_R_RELATIVE R_SPARC_RELATIVE | |
159 #define M_R_JMP_SLOT R_SPARC_JMP_SLOT | |
160 #define M_R_REGISTER R_SPARC_REGISTER | |
161 #define M_R_FPTR R_SPARC_NONE | |
162 #define M_R_NUM R_SPARC_NUM | |
163 | |
164 #ifdef _ELF64 | |
165 #define M_R_ARRAYADDR R_SPARC_64 | |
166 #define M_R_DTPMOD R_SPARC_TLS_DTPMOD64 | |
167 #define M_R_DTPOFF R_SPARC_TLS_DTPOFF64 | |
168 #define M_R_TPOFF R_SPARC_TLS_TPOFF64 | |
169 #else /* _ELF32 */ | |
170 #define M_R_ARRAYADDR R_SPARC_32 | |
171 #define M_R_DTPMOD R_SPARC_TLS_DTPMOD32 | |
172 #define M_R_DTPOFF R_SPARC_TLS_DTPOFF32 | |
173 #define M_R_TPOFF R_SPARC_TLS_TPOFF32 | |
174 #endif /* _ELF64 */ | |
175 | |
176 | |
177 /* | |
178 * Make register symbols transparent to common code | |
179 */ | |
180 #define M_DT_REGISTER DT_SPARC_REGISTER | |
181 | |
182 /* | |
183 * Make plt section information transparent to the common code. | |
184 */ | |
185 #define M_PLT_SHF_FLAGS (SHF_ALLOC | SHF_WRITE | SHF_EXECINSTR) | |
186 | |
187 /* | |
11734
d29dc9c2b6c5
6916788 ld version 2 mapfile syntax
Ali Bahrami <Ali.Bahrami@Sun.COM>
parents:
10201
diff
changeset
|
188 * Make default data segment and stack flags transparent to the common code. |
0 | 189 */ |
190 #define M_DATASEG_PERM (PF_R | PF_W | PF_X) | |
11734
d29dc9c2b6c5
6916788 ld version 2 mapfile syntax
Ali Bahrami <Ali.Bahrami@Sun.COM>
parents:
10201
diff
changeset
|
191 #ifdef _ELF64 |
d29dc9c2b6c5
6916788 ld version 2 mapfile syntax
Ali Bahrami <Ali.Bahrami@Sun.COM>
parents:
10201
diff
changeset
|
192 #define M_STACK_PERM (PF_R | PF_W) |
d29dc9c2b6c5
6916788 ld version 2 mapfile syntax
Ali Bahrami <Ali.Bahrami@Sun.COM>
parents:
10201
diff
changeset
|
193 #else |
d29dc9c2b6c5
6916788 ld version 2 mapfile syntax
Ali Bahrami <Ali.Bahrami@Sun.COM>
parents:
10201
diff
changeset
|
194 #define M_STACK_PERM (PF_R | PF_W | PF_X) |
d29dc9c2b6c5
6916788 ld version 2 mapfile syntax
Ali Bahrami <Ali.Bahrami@Sun.COM>
parents:
10201
diff
changeset
|
195 #endif |
d29dc9c2b6c5
6916788 ld version 2 mapfile syntax
Ali Bahrami <Ali.Bahrami@Sun.COM>
parents:
10201
diff
changeset
|
196 |
0 | 197 /* |
198 * Define a set of identifies for special sections. These allow the sections | |
199 * to be ordered within the output file image. These values should be | |
200 * maintained consistently, where appropriate, in each platform specific header | |
201 * file. | |
202 * | |
13004
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
203 * - null identifies that this section does not need to be added to the |
0 | 204 * output image (ie. shared object sections or sections we're going to |
205 * recreate (sym tables, string tables, relocations, etc.)). | |
206 * | |
13004
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
207 * - any user defined section will be first in the associated segment. |
0 | 208 * |
13004
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
209 * - interp and capabilities sections are next, as these are accessed |
0 | 210 * immediately the first page of the image is mapped. |
211 * | |
13004
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
212 * - objects that do not provide an interp normally have a read-only |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
213 * .dynamic section that comes next (in this case, there is no need to |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
214 * update a DT_DEBUG entry at runtime). |
0 | 215 * |
13004
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
216 * - the syminfo, hash, dynsym, dynstr and rel's are grouped together as |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
217 * these will all be accessed together by ld.so.1 to perform relocations. |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
218 * |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
219 * - the got, dynamic, and plt are grouped together as these may also be |
0 | 220 * accessed first by ld.so.1 to perform relocations, fill in DT_DEBUG |
221 * (executables only), and .plt[0]. | |
222 * | |
13004
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
223 * - unknown sections (stabs, comments, etc.) go at the end. |
0 | 224 * |
225 * Note that .tlsbss/.bss are given the largest identifiers. This insures that | |
226 * if any unknown sections become associated to the same segment as the .bss, | |
227 * the .bss sections are always the last section in the segment. | |
228 */ | |
229 #define M_ID_NULL 0x00 | |
230 #define M_ID_USER 0x01 | |
231 | |
232 #define M_ID_INTERP 0x02 /* SHF_ALLOC */ | |
233 #define M_ID_CAP 0x03 | |
13004
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
234 #define M_ID_CAPINFO 0x04 |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
235 #define M_ID_CAPCHAIN 0x05 |
11827
d7ef53deac3f
6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents:
11734
diff
changeset
|
236 |
13004
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
237 #define M_ID_DYNAMIC 0x06 /* if no .interp, then no */ |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
238 /* DT_DEBUG is required */ |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
239 #define M_ID_UNWINDHDR 0x07 |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
240 #define M_ID_UNWIND 0x08 |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
241 |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
242 #define M_ID_SYMINFO 0x09 |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
243 #define M_ID_HASH 0x0a |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
244 #define M_ID_LDYNSYM 0x0b /* always right before DYNSYM */ |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
245 #define M_ID_DYNSYM 0x0c |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
246 #define M_ID_DYNSTR 0x0d |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
247 #define M_ID_VERSION 0x0e |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
248 #define M_ID_DYNSORT 0x0f |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
249 #define M_ID_REL 0x10 |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
250 #define M_ID_ARRAY 0x11 |
11827
d7ef53deac3f
6918143 symbol capabilities
Rod Evans <Rod.Evans@Sun.COM>
parents:
11734
diff
changeset
|
251 #define M_ID_TEXT 0x12 /* SHF_ALLOC + SHF_EXECINSTR */ |
9085
ff7eb0bace56
6813909 generalize eh_frame support to non-amd64 platforms
Ali Bahrami <Ali.Bahrami@Sun.COM>
parents:
8598
diff
changeset
|
252 #define M_ID_DATA 0x20 |
0 | 253 |
254 /* M_ID_USER 0x01 dual entry - listed above */ | |
255 #define M_ID_GOTDATA 0x02 /* SHF_ALLOC + SHF_WRITE */ | |
256 #define M_ID_GOT 0x03 | |
257 #define M_ID_PLT 0x04 | |
13004
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
258 /* M_ID_DYNAMIC 0x06 dual entry - listed above */ |
92dfdb3a48cc
6935867 .dynamic could be readonly in sharable objects
Rod Evans <Rod.Evans@Oracle.COM>
parents:
11827
diff
changeset
|
259 /* M_ID_UNWIND 0x08 dual entry - listed above */ |
0 | 260 |
261 #define M_ID_UNKNOWN 0xfc /* just before TLS */ | |
262 | |
263 #define M_ID_TLS 0xfd /* just before bss */ | |
264 #define M_ID_TLSBSS 0xfe | |
265 #define M_ID_BSS 0xff | |
266 | |
267 #define M_ID_SYMTAB_NDX 0x02 /* ! SHF_ALLOC */ | |
268 #define M_ID_SYMTAB 0x03 | |
269 #define M_ID_STRTAB 0x04 | |
270 #define M_ID_DYNSYM_NDX 0x05 | |
271 #define M_ID_NOTE 0x06 | |
272 | |
6206 | 273 |
0 | 274 #ifdef __cplusplus |
275 } | |
276 #endif | |
277 | |
6206 | 278 #endif /* _MACHDEP_SPARC_H */ |