1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
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,  this CDDL HEADER in each
14  * file and  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  */
21 
22 /*
23  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 #include <memory.h>
27 #include <libelf.h>
28 #include <link.h>
29 #include <sys/elf_SPARC.h>
30 #include <sys/elf_amd64.h>
31 #include <decl.h>
32 #include <msg.h>
33 #include <sgs.h>
34 #include <stddef.h>
35 
36 /*
37  * fmsize:  Array used to determine what size the the structures
38  *	    are (for memory image & file image).
39  *
40  * x64:  Translation routines - to file & to memory.
41  *
42  * What must be done when adding a new type for conversion:
43  *
44  * The first question is whether you need a new ELF_T_* type
45  * to be created.  If you've introduced a new structure - then
46  * it will need to be described - this is done by:
47  *
48  * o adding a new type ELF_T_* to usr/src/head/libelf.h
49  * o Create a new macro to  the bytes contained in the structure. Take a
50  *   look at the 'Syminfo_1' macro defined below.  The declarations describe
51  *   the structure based off of the field size of each element of the structure.
52  * o Add a entry to the fmsize table for the new ELF_T_* type.
53  * o Create a <newtype>_11_tof macro.  Take a look at 'syminfo_11_tof'.
54  * o Create a <newtype>_11_tom macro.  Take a look at 'syminfo_11_tom'.
55  * o The <newtype>_11_tof & <newtype>_11_tom results in conversion routines
56  *   <newtype>_2L11_tof, <newtype>_2L11_tom, <newtype>_2M11_tof,
57  *   <newtype>_2M11_tom being created in xlate.c.  These routines
58  *   need to be added to the 'x64[]' array.
59  * o Add entries to getdata.c::align32[] and getdata.c::align64[].  These
60  *   tables  what the alignment requirements for a data type are.
61  *
62  * In order to tie a section header type (SHT_*) to a data
63  * structure you need to update elf64_mtype() so that it can
64  * make the association.  If you are introducing a new section built
65  * on a basic datatype (SHT_INIT_ARRAY) then this is all the updating
66  * that needs to be done.
67  *
68  *
69  * ELF translation routines
70  *
71  *	These routines make a subtle implicit assumption.
72  *	The file representations of all structures are "packed,"
73  *	meaning no implicit padding bytes occur.  This might not
74  *	be the case for the memory representations.  Consequently,
75  *	the memory representations ALWAYS contain at least as many
76  *	bytes as the file representations.  Otherwise, the memory
77  *	structures would lose information, meaning they're not
78  *	implemented properly.
79  *
80  *	The words above apply to structures with the same members.
81  *	If a future version changes the number of members, the
82  *	relative structure sizes for different version must be
83  *	tested with the compiler.
84  */
85 
86 #define	HI32	0x80000000UL
87 #define	LO31	0x7fffffffUL
88 
89 #define	HI64	0x8000000000000000ULL
90 #define	LO63	0x7fffffffffffffffULL
91 
92 /*
93  *	These macros create indexes for accessing the bytes of
94  *	words and halfwords for ELFCLASS64 data representations
95  *	(currently ELFDATA2LSB and ELFDATA2MSB).  In all cases,
96  *
97  *	x = ((((((((((((X_7 << 8) + X_6) << 8) + X_5) << 8) + X_4) << 8
98  *		+ X_3) << 8) + X_2) << 8) + X_1) << 8) + X_0
99  *	w = (((((X_3 << 8) + X_2) << 8) + X_1) << 8) + X_0
100  *	h = (X_1 << 8) + X_0
101  *
102  *	These assume the file representations for Addr, Off,
103  *	Sword, and Word use 4 bytes, but the memory def's for
104  *	the types may differ.
105  *
106  *	Naming convention:
107  *		..._L	ELFDATA2LSB
108  *		..._M	ELFDATA2MSB
109  *
110  *	enuma_*(n)	 enum names for addr n
111  *	enumb_*(n)	 enum names for byte n
112  *	enumh_*(n)	 enum names for half n
113  *	enumo_*(n)	 enum names for off n
114  *	enumw_*(n)	 enum names for word n
115  *	enumx_*(n)	 enum names for xword n
116  *	enuml_*(n)	 enum names for Lword n
117  *	tofa(d,s,n)	xlate addr n from mem s to file d
118  *	tofb(d,s,n)	xlate byte n from mem s to file d
119  *	tofh(d,s,n)	xlate half n from mem s to file d
120  *	tofo(d,s,n)	xlate off n from mem s to file d
121  *	tofw(d,s,n)	xlate word n from mem s to file d
122  *	tofx(d,s,n)	xlate xword n from mem s to file d
123  *	tofl(d,s,n)	xlate Lword n from mem s to file d
124  *	toma(s,n)	xlate addr n from file s to expression value
125  *	tomb(s,n)	xlate byte n from file s to expression value
126  *	tomh(s,n)	xlate half n from file s to expression value
127  *	tomo(s,n)	xlate off n from file s to expression value
128  *	tomw(s,n)	xlate word n from file s to expression value
129  *	tomx(s,n)	xlate xword n from file s to expression value
130  *	toml(s,n)	xlate Lword n from file s to expression value
131  *
132  *	tof*() macros must move a multi-byte value into a temporary
133  *	because `in place' conversions are allowed.  If a temp is not
134  *	used for multi-byte objects, storing an initial destination byte
135  *	may clobber a source byte not yet examined.
136  *
137  *	tom*() macros compute an expression value from the source
138  *	without touching the destination; so they're safe.
139  */
140 
141 
142 
143 
144 
145 /*
146  * ELF data object indexes
147  *	The enums are broken apart to get around deficiencies
148  *	in some compilers.
149  */
150 
151 
152 
153 
154 enum
155 {
156 	A_L0, A_L1, A_L2, A_L3, A_L4, A_L5, A_L6, A_L7
157 };
158 
159 enum
160 {
161 	A_M7, A_M6, A_M5, A_M4, A_M3, A_M2, A_M1, A_M0,
162 	A_sizeof
163 };
164 
165 
166 
167 
168 
169 enum
170 {
171 	H_L0, H_L1
172 };
173 
174 enum
175 {
176 	H_M1, H_M0,
177 	H_sizeof
178 };
179 
180 
181 
182 
183 enum
184 {
185 	L_L0, L_L1, L_L2, L_L3, L_L4, L_L5, L_L6, L_L7
186 };
187 
188 enum
189 {
190 	L_M7, L_M6, L_M5, L_M4, L_M3, L_M2, L_M1, L_M0,
191 	L_sizeof
192 };
193 
194 
195 
196 
197 enum
198 {
199 	M1_value_L0, M1_value_L1, M1_value_L2, M1_value_L3, M1_value_L4, M1_value_L5, M1_value_L6, M1_value_L7,
200 	M1_info_L0, M1_info_L1, M1_info_L2, M1_info_L3, M1_info_L4, M1_info_L5, M1_info_L6, M1_info_L7,
201 	M1_poffset_L0, M1_poffset_L1, M1_poffset_L2, M1_poffset_L3, M1_poffset_L4, M1_poffset_L5, M1_poffset_L6, M1_poffset_L7,
202 	M1_repeat_L0, M1_repeat_L1,
203 	M1_stride_L0, M1_stride_L1
204 };
205 
206 enum
207 {
208 	M1_value_M7, M1_value_M6, M1_value_M5, M1_value_M4, M1_value_M3, M1_value_M2, M1_value_M1, M1_value_M0,
209 	M1_info_M7, M1_info_M6, M1_info_M5, M1_info_M4, M1_info_M3, M1_info_M2, M1_info_M1, M1_info_M0,
210 	M1_poffset_M7, M1_poffset_M6, M1_poffset_M5, M1_poffset_M4, M1_poffset_M3, M1_poffset_M2, M1_poffset_M1, M1_poffset_M0,
211 	M1_repeat_M1, M1_repeat_M0,
212 	M1_stride_M1, M1_stride_M0,
213 	M1_sizeof
214 };
215 
216 
217 
218 
219 
220 enum
221 {
222 	MP1_value_L0, MP1_value_L1, MP1_value_L2, MP1_value_L3, MP1_value_L4, MP1_value_L5, MP1_value_L6, MP1_value_L7,
223 	MP1_info_L0, MP1_info_L1, MP1_info_L2, MP1_info_L3, MP1_info_L4, MP1_info_L5, MP1_info_L6, MP1_info_L7,
224 	MP1_poffset_L0, MP1_poffset_L1, MP1_poffset_L2, MP1_poffset_L3, MP1_poffset_L4, MP1_poffset_L5, MP1_poffset_L6, MP1_poffset_L7,
225 	MP1_repeat_L0, MP1_repeat_L1,
226 	MP1_stride_L0, MP1_stride_L1,
227 	MP1_padding_L0, MP1_padding_L1, MP1_padding_L2, MP1_padding_L3
228 };
229 
230 enum
231 {
232 	MP1_value_M7, MP1_value_M6, MP1_value_M5, MP1_value_M4, MP1_value_M3, MP1_value_M2, MP1_value_M1, MP1_value_M0,
233 	MP1_info_M7, MP1_info_M6, MP1_info_M5, MP1_info_M4, MP1_info_M3, MP1_info_M2, MP1_info_M1, MP1_info_M0,
234 	MP1_poffset_M7, MP1_poffset_M6, MP1_poffset_M5, MP1_poffset_M4, MP1_poffset_M3, MP1_poffset_M2, MP1_poffset_M1, MP1_poffset_M0,
235 	MP1_repeat_M1, MP1_repeat_M0,
236 	MP1_stride_M1, MP1_stride_M0,
237 	MP1_padding_M3, MP1_padding_M2, MP1_padding_M1, MP1_padding_M0,
238 	MP1_sizeof
239 };
240 
241 
242 
243 
244 
245 enum
246 {
247 	O_L0, O_L1, O_L2, O_L3, O_L4, O_L5, O_L6, O_L7
248 };
249 
250 enum
251 {
252 	O_M7, O_M6, O_M5, O_M4, O_M3, O_M2, O_M1, O_M0,
253 	O_sizeof
254 };
255 
256 
257 
258 
259 
260 enum
261 {
262 	W_L0, W_L1, W_L2, W_L3
263 };
264 
265 enum
266 {
267 	W_M3, W_M2, W_M1, W_M0,
268 	W_sizeof
269 };
270 
271 
272 
273 
274 
275 enum
276 {
277 	X_L0, X_L1, X_L2, X_L3, X_L4, X_L5, X_L6, X_L7
278 };
279 
280 enum
281 {
282 	X_M7, X_M6, X_M5, X_M4, X_M3, X_M2, X_M1, X_M0,
283 	X_sizeof
284 };
285 
286 
287 
288 
289 
290 enum
291 {
292 	D1_tag_L0, D1_tag_L1, D1_tag_L2, D1_tag_L3, D1_tag_L4, D1_tag_L5, D1_tag_L6, D1_tag_L7,
293 	D1_val_L0, D1_val_L1, D1_val_L2, D1_val_L3, D1_val_L4, D1_val_L5, D1_val_L6, D1_val_L7
294 };
295 
296 enum
297 {
298 	D1_tag_M7, D1_tag_M6, D1_tag_M5, D1_tag_M4, D1_tag_M3, D1_tag_M2, D1_tag_M1, D1_tag_M0,
299 	D1_val_M7, D1_val_M6, D1_val_M5, D1_val_M4, D1_val_M3, D1_val_M2, D1_val_M1, D1_val_M0,
300 	D1_sizeof
301 };
302 
303 
304 #define	E1_Nident	16
305 
306 
307 
308 
309 enum {
310 	E1_ident, E1_ident_L_Z = E1_Nident - 1,
311 	E1_type_L0, E1_type_L1,
312 	E1_machine_L0, E1_machine_L1,
313 	E1_version_L0, E1_version_L1, E1_version_L2, E1_version_L3,
314 	E1_entry_L0, E1_entry_L1, E1_entry_L2, E1_entry_L3, E1_entry_L4, E1_entry_L5, E1_entry_L6, E1_entry_L7,
315 	E1_phoff_L0, E1_phoff_L1, E1_phoff_L2, E1_phoff_L3, E1_phoff_L4, E1_phoff_L5, E1_phoff_L6, E1_phoff_L7,
316 	E1_shoff_L0, E1_shoff_L1, E1_shoff_L2, E1_shoff_L3, E1_shoff_L4, E1_shoff_L5, E1_shoff_L6, E1_shoff_L7,
317 	E1_flags_L0, E1_flags_L1, E1_flags_L2, E1_flags_L3,
318 	E1_ehsize_L0, E1_ehsize_L1,
319 	E1_phentsize_L0, E1_phentsize_L1,
320 	E1_phnum_L0, E1_phnum_L1,
321 	E1_shentsize_L0, E1_shentsize_L1,
322 	E1_shnum_L0, E1_shnum_L1,
323 	E1_shstrndx_L0, E1_shstrndx_L1
324 };
325 
326 enum {
327 	E1_ident_M_Z = E1_Nident - 1,
328 	E1_type_M1, E1_type_M0,
329 	E1_machine_M1, E1_machine_M0,
330 	E1_version_M3, E1_version_M2, E1_version_M1, E1_version_M0,
331 	E1_entry_M7, E1_entry_M6, E1_entry_M5, E1_entry_M4, E1_entry_M3, E1_entry_M2, E1_entry_M1, E1_entry_M0,
332 	E1_phoff_M7, E1_phoff_M6, E1_phoff_M5, E1_phoff_M4, E1_phoff_M3, E1_phoff_M2, E1_phoff_M1, E1_phoff_M0,
333 	E1_shoff_M7, E1_shoff_M6, E1_shoff_M5, E1_shoff_M4, E1_shoff_M3, E1_shoff_M2, E1_shoff_M1, E1_shoff_M0,
334 	E1_flags_M3, E1_flags_M2, E1_flags_M1, E1_flags_M0,
335 	E1_ehsize_M1, E1_ehsize_M0,
336 	E1_phentsize_M1, E1_phentsize_M0,
337 	E1_phnum_M1, E1_phnum_M0,
338 	E1_shentsize_M1, E1_shentsize_M0,
339 	E1_shnum_M1, E1_shnum_M0,
340 	E1_shstrndx_M1, E1_shstrndx_M0,
341 	E1_sizeof
342 };
343 
344 
345 
346 
347 enum
348 {
349 	N1_namesz_L0, N1_namesz_L1, N1_namesz_L2, N1_namesz_L3,
350 	N1_descsz_L0, N1_descsz_L1, N1_descsz_L2, N1_descsz_L3,
351 	N1_type_L0, N1_type_L1, N1_type_L2, N1_type_L3
352 };
353 
354 enum
355 {
356 	N1_namesz_M3, N1_namesz_M2, N1_namesz_M1, N1_namesz_M0,
357 	N1_descsz_M3, N1_descsz_M2, N1_descsz_M1, N1_descsz_M0,
358 	N1_type_M3, N1_type_M2, N1_type_M1, N1_type_M0,
359 	N1_sizeof
360 };
361 
362 
363 
364 
365 enum
366 {
367 	P1_type_L0, P1_type_L1, P1_type_L2, P1_type_L3,
368 	P1_flags_L0, P1_flags_L1, P1_flags_L2, P1_flags_L3,
369 	P1_offset_L0, P1_offset_L1, P1_offset_L2, P1_offset_L3, P1_offset_L4, P1_offset_L5, P1_offset_L6, P1_offset_L7,
370 	P1_vaddr_L0, P1_vaddr_L1, P1_vaddr_L2, P1_vaddr_L3, P1_vaddr_L4, P1_vaddr_L5, P1_vaddr_L6, P1_vaddr_L7,
371 	P1_paddr_L0, P1_paddr_L1, P1_paddr_L2, P1_paddr_L3, P1_paddr_L4, P1_paddr_L5, P1_paddr_L6, P1_paddr_L7,
372 	P1_filesz_L0, P1_filesz_L1, P1_filesz_L2, P1_filesz_L3, P1_filesz_L4, P1_filesz_L5, P1_filesz_L6, P1_filesz_L7,
373 	P1_memsz_L0, P1_memsz_L1, P1_memsz_L2, P1_memsz_L3, P1_memsz_L4, P1_memsz_L5, P1_memsz_L6, P1_memsz_L7,
374 	P1_align_L0, P1_align_L1, P1_align_L2, P1_align_L3, P1_align_L4, P1_align_L5, P1_align_L6, P1_align_L7
375 };
376 
377 enum
378 {
379 	P1_type_M3, P1_type_M2, P1_type_M1, P1_type_M0,
380 	P1_flags_M3, P1_flags_M2, P1_flags_M1, P1_flags_M0,
381 	P1_offset_M7, P1_offset_M6, P1_offset_M5, P1_offset_M4, P1_offset_M3, P1_offset_M2, P1_offset_M1, P1_offset_M0,
382 	P1_vaddr_M7, P1_vaddr_M6, P1_vaddr_M5, P1_vaddr_M4, P1_vaddr_M3, P1_vaddr_M2, P1_vaddr_M1, P1_vaddr_M0,
383 	P1_paddr_M7, P1_paddr_M6, P1_paddr_M5, P1_paddr_M4, P1_paddr_M3, P1_paddr_M2, P1_paddr_M1, P1_paddr_M0,
384 	P1_filesz_M7, P1_filesz_M6, P1_filesz_M5, P1_filesz_M4, P1_filesz_M3, P1_filesz_M2, P1_filesz_M1, P1_filesz_M0,
385 	P1_memsz_M7, P1_memsz_M6, P1_memsz_M5, P1_memsz_M4, P1_memsz_M3, P1_memsz_M2, P1_memsz_M1, P1_memsz_M0,
386 	P1_align_M7, P1_align_M6, P1_align_M5, P1_align_M4, P1_align_M3, P1_align_M2, P1_align_M1, P1_align_M0,
387 	P1_sizeof
388 };
389 
390 
391 
392 
393 
394 enum
395 {
396 	R1_offset_L0, R1_offset_L1, R1_offset_L2, R1_offset_L3, R1_offset_L4, R1_offset_L5, R1_offset_L6, R1_offset_L7,
397 	R1_info_L0, R1_info_L1, R1_info_L2, R1_info_L3, R1_info_L4, R1_info_L5, R1_info_L6, R1_info_L7
398 };
399 
400 enum
401 {
402 	R1_offset_M7, R1_offset_M6, R1_offset_M5, R1_offset_M4, R1_offset_M3, R1_offset_M2, R1_offset_M1, R1_offset_M0,
403 	R1_info_M7, R1_info_M6, R1_info_M5, R1_info_M4, R1_info_M3, R1_info_M2, R1_info_M1, R1_info_M0,
404 	R1_sizeof
405 };
406 
407 
408 
409 
410 
411 enum
412 {
413 	RA1_offset_L0, RA1_offset_L1, RA1_offset_L2, RA1_offset_L3, RA1_offset_L4, RA1_offset_L5, RA1_offset_L6, RA1_offset_L7,
414 	RA1_info_L0, RA1_info_L1, RA1_info_L2, RA1_info_L3, RA1_info_L4, RA1_info_L5, RA1_info_L6, RA1_info_L7,
415 	RA1_addend_L0, RA1_addend_L1, RA1_addend_L2, RA1_addend_L3, RA1_addend_L4, RA1_addend_L5, RA1_addend_L6, RA1_addend_L7
416 };
417 
418 enum
419 {
420 	RA1_offset_M7, RA1_offset_M6, RA1_offset_M5, RA1_offset_M4, RA1_offset_M3, RA1_offset_M2, RA1_offset_M1, RA1_offset_M0,
421 	RA1_info_M7, RA1_info_M6, RA1_info_M5, RA1_info_M4, RA1_info_M3, RA1_info_M2, RA1_info_M1, RA1_info_M0,
422 	RA1_addend_M7, RA1_addend_M6, RA1_addend_M5, RA1_addend_M4, RA1_addend_M3, RA1_addend_M2, RA1_addend_M1, RA1_addend_M0,
423 	RA1_sizeof
424 };
425 
426 
427 
428 
429 
430 enum
431 {
432 	SH1_name_L0, SH1_name_L1, SH1_name_L2, SH1_name_L3,
433 	SH1_type_L0, SH1_type_L1, SH1_type_L2, SH1_type_L3,
434 	SH1_flags_L0, SH1_flags_L1, SH1_flags_L2, SH1_flags_L3, SH1_flags_L4, SH1_flags_L5, SH1_flags_L6, SH1_flags_L7,
435 	SH1_addr_L0, SH1_addr_L1, SH1_addr_L2, SH1_addr_L3, SH1_addr_L4, SH1_addr_L5, SH1_addr_L6, SH1_addr_L7,
436 	SH1_offset_L0, SH1_offset_L1, SH1_offset_L2, SH1_offset_L3, SH1_offset_L4, SH1_offset_L5, SH1_offset_L6, SH1_offset_L7,
437 	SH1_size_L0, SH1_size_L1, SH1_size_L2, SH1_size_L3, SH1_size_L4, SH1_size_L5, SH1_size_L6, SH1_size_L7,
438 	SH1_link_L0, SH1_link_L1, SH1_link_L2, SH1_link_L3,
439 	SH1_info_L0, SH1_info_L1, SH1_info_L2, SH1_info_L3,
440 	SH1_addralign_L0, SH1_addralign_L1, SH1_addralign_L2, SH1_addralign_L3, SH1_addralign_L4, SH1_addralign_L5, SH1_addralign_L6, SH1_addralign_L7,
441 	SH1_entsize_L0, SH1_entsize_L1, SH1_entsize_L2, SH1_entsize_L3, SH1_entsize_L4, SH1_entsize_L5, SH1_entsize_L6, SH1_entsize_L7
442 };
443 
444 enum
445 {
446 	SH1_name_M3, SH1_name_M2, SH1_name_M1, SH1_name_M0,
447 	SH1_type_M3, SH1_type_M2, SH1_type_M1, SH1_type_M0,
448 	SH1_flags_M7, SH1_flags_M6, SH1_flags_M5, SH1_flags_M4, SH1_flags_M3, SH1_flags_M2, SH1_flags_M1, SH1_flags_M0,
449 	SH1_addr_M7, SH1_addr_M6, SH1_addr_M5, SH1_addr_M4, SH1_addr_M3, SH1_addr_M2, SH1_addr_M1, SH1_addr_M0,
450 	SH1_offset_M7, SH1_offset_M6, SH1_offset_M5, SH1_offset_M4, SH1_offset_M3, SH1_offset_M2, SH1_offset_M1, SH1_offset_M0,
451 	SH1_size_M7, SH1_size_M6, SH1_size_M5, SH1_size_M4, SH1_size_M3, SH1_size_M2, SH1_size_M1, SH1_size_M0,
452 	SH1_link_M3, SH1_link_M2, SH1_link_M1, SH1_link_M0,
453 	SH1_info_M3, SH1_info_M2, SH1_info_M1, SH1_info_M0,
454 	SH1_addralign_M7, SH1_addralign_M6, SH1_addralign_M5, SH1_addralign_M4, SH1_addralign_M3, SH1_addralign_M2, SH1_addralign_M1, SH1_addralign_M0,
455 	SH1_entsize_M7, SH1_entsize_M6, SH1_entsize_M5, SH1_entsize_M4, SH1_entsize_M3, SH1_entsize_M2, SH1_entsize_M1, SH1_entsize_M0,
456 	SH1_sizeof
457 };
458 
459 
460 
461 
462 
463 enum
464 {
465 	ST1_name_L0, ST1_name_L1, ST1_name_L2, ST1_name_L3,
466 	ST1_info_L,
467 	ST1_other_L,
468 	ST1_shndx_L0, ST1_shndx_L1,
469 	ST1_value_L0, ST1_value_L1, ST1_value_L2, ST1_value_L3, ST1_value_L4, ST1_value_L5, ST1_value_L6, ST1_value_L7,
470 	ST1_size_L0, ST1_size_L1, ST1_size_L2, ST1_size_L3, ST1_size_L4, ST1_size_L5, ST1_size_L6, ST1_size_L7
471 };
472 
473 enum
474 {
475 	ST1_name_M3, ST1_name_M2, ST1_name_M1, ST1_name_M0,
476 	ST1_info_M,
477 	ST1_other_M,
478 	ST1_shndx_M1, ST1_shndx_M0,
479 	ST1_value_M7, ST1_value_M6, ST1_value_M5, ST1_value_M4, ST1_value_M3, ST1_value_M2, ST1_value_M1, ST1_value_M0,
480 	ST1_size_M7, ST1_size_M6, ST1_size_M5, ST1_size_M4, ST1_size_M3, ST1_size_M2, ST1_size_M1, ST1_size_M0,
481 	ST1_sizeof
482 };
483 
484 
485 
486 
487 
488 enum
489 {
490 	SI1_boundto_L0, SI1_boundto_L1,
491 	SI1_flags_L0, SI1_flags_L1
492 };
493 
494 enum
495 {
496 	SI1_boundto_M1, SI1_boundto_M0,
497 	SI1_flags_M1, SI1_flags_M0,
498 	SI1_sizeof
499 };
500 
501 
502 
503 
504 
505 enum
506 {
507 	C1_tag_L0, C1_tag_L1, C1_tag_L2, C1_tag_L3, C1_tag_L4, C1_tag_L5, C1_tag_L6, C1_tag_L7,
508 	C1_val_L0, C1_val_L1, C1_val_L2, C1_val_L3, C1_val_L4, C1_val_L5, C1_val_L6, C1_val_L7
509 };
510 
511 enum
512 {
513 	C1_tag_M7, C1_tag_M6, C1_tag_M5, C1_tag_M4, C1_tag_M3, C1_tag_M2, C1_tag_M1, C1_tag_M0,
514 	C1_val_M7, C1_val_M6, C1_val_M5, C1_val_M4, C1_val_M3, C1_val_M2, C1_val_M1, C1_val_M0,
515 	C1_sizeof
516 };
517 
518 
519 
520 
521 
522 enum
523 {
524 	VD1_version_L0, VD1_version_L1,
525 	VD1_flags_L0, VD1_flags_L1,
526 	VD1_ndx_L0, VD1_ndx_L1,
527 	VD1_cnt_L0, VD1_cnt_L1,
528 	VD1_hash_L0, VD1_hash_L1, VD1_hash_L2, VD1_hash_L3,
529 	VD1_aux_L0, VD1_aux_L1, VD1_aux_L2, VD1_aux_L3,
530 	VD1_next_L0, VD1_next_L1, VD1_next_L2, VD1_next_L3
531 };
532 
533 enum
534 {
535 	VD1_version_M1, VD1_version_M0,
536 	VD1_flags_M1, VD1_flags_M0,
537 	VD1_ndx_M1, VD1_ndx_M0,
538 	VD1_cnt_M1, VD1_cnt_M0,
539 	VD1_hash_M3, VD1_hash_M2, VD1_hash_M1, VD1_hash_M0,
540 	VD1_aux_M3, VD1_aux_M2, VD1_aux_M1, VD1_aux_M0,
541 	VD1_next_M3, VD1_next_M2, VD1_next_M1, VD1_next_M0,
542 	VD1_sizeof
543 };
544 
545 
546 
547 
548 
549 enum
550 {
551 	VDA1_name_L0, VDA1_name_L1, VDA1_name_L2, VDA1_name_L3,
552 	VDA1_next_L0, VDA1_next_L1, VDA1_next_L2, VDA1_next_L3
553 };
554 
555 enum
556 {
557 	VDA1_name_M3, VDA1_name_M2, VDA1_name_M1, VDA1_name_M0,
558 	VDA1_next_M3, VDA1_next_M2, VDA1_next_M1, VDA1_next_M0,
559 	VDA1_sizeof
560 };
561 
562 
563 
564 
565 
566 enum
567 {
568 	VN1_version_L0, VN1_version_L1,
569 	VN1_cnt_L0, VN1_cnt_L1,
570 	VN1_file_L0, VN1_file_L1, VN1_file_L2, VN1_file_L3,
571 	VN1_aux_L0, VN1_aux_L1, VN1_aux_L2, VN1_aux_L3,
572 	VN1_next_L0, VN1_next_L1, VN1_next_L2, VN1_next_L3
573 };
574 
575 enum
576 {
577 	VN1_version_M1, VN1_version_M0,
578 	VN1_cnt_M1, VN1_cnt_M0,
579 	VN1_file_M3, VN1_file_M2, VN1_file_M1, VN1_file_M0,
580 	VN1_aux_M3, VN1_aux_M2, VN1_aux_M1, VN1_aux_M0,
581 	VN1_next_M3, VN1_next_M2, VN1_next_M1, VN1_next_M0,
582 	VN1_sizeof
583 };
584 
585 
586 
587 
588 
589 enum
590 {
591 	VNA1_hash_L0, VNA1_hash_L1, VNA1_hash_L2, VNA1_hash_L3,
592 	VNA1_flags_L0, VNA1_flags_L1,
593 	VNA1_other_L0, VNA1_other_L1,
594 	VNA1_name_L0, VNA1_name_L1, VNA1_name_L2, VNA1_name_L3,
595 	VNA1_next_L0, VNA1_next_L1, VNA1_next_L2, VNA1_next_L3
596 };
597 
598 enum
599 {
600 	VNA1_hash_M3, VNA1_hash_M2, VNA1_hash_M1, VNA1_hash_M0,
601 	VNA1_flags_M1, VNA1_flags_M0,
602 	VNA1_other_M1, VNA1_other_M0,
603 	VNA1_name_M3, VNA1_name_M2, VNA1_name_M1, VNA1_name_M0,
604 	VNA1_next_M3, VNA1_next_M2, VNA1_next_M1, VNA1_next_M0,
605 	VNA1_sizeof
606 };
607 
608 
609 /*
610  *	Translation function declarations.
611  *
612  *		<object>_<data><dver><sver>_tof
613  *		<object>_<data><dver><sver>_tom
614  *	where
615  *		<data>	2L	ELFDATA2LSB
616  *			2M	ELFDATA2MSB
617  */
618 
619 static void	addr_2L_tof(), addr_2L_tom(),
620 		addr_2M_tof(), addr_2M_tom(),
621 		byte_to(),
622 		dyn_2L11_tof(), dyn_2L11_tom(),
623 		dyn_2M11_tof(), dyn_2M11_tom(),
624 		ehdr_2L11_tof(), ehdr_2L11_tom(),
625 		ehdr_2M11_tof(), ehdr_2M11_tom(),
626 		half_2L_tof(), half_2L_tom(),
627 		half_2M_tof(), half_2M_tom(),
628 		move_2L11_tof(), move_2L11_tom(),
629 		move_2M11_tof(), move_2M11_tom(),
630 		movep_2L11_tof(), movep_2L11_tom(),
631 		movep_2M11_tof(), movep_2M11_tom(),
632 		off_2L_tof(), off_2L_tom(),
633 		off_2M_tof(), off_2M_tom(),
634 		note_2L11_tof(), note_2L11_tom(),
635 		note_2M11_tof(), note_2M11_tom(),
636 		phdr_2L11_tof(), phdr_2L11_tom(),
637 		phdr_2M11_tof(), phdr_2M11_tom(),
638 		rel_2L11_tof(), rel_2L11_tom(),
639 		rel_2M11_tof(), rel_2M11_tom(),
640 		rela_2L11_tof(), rela_2L11_tom(),
641 		rela_2M11_tof(), rela_2M11_tom(),
642 		shdr_2L11_tof(), shdr_2L11_tom(),
643 		shdr_2M11_tof(), shdr_2M11_tom(),
644 		sword_2L_tof(), sword_2L_tom(),
645 		sword_2M_tof(), sword_2M_tom(),
646 		sym_2L11_tof(), sym_2L11_tom(),
647 		sym_2M11_tof(), sym_2M11_tom(),
648 		syminfo_2L11_tof(), syminfo_2L11_tom(),
649 		syminfo_2M11_tof(), syminfo_2M11_tom(),
650 		word_2L_tof(), word_2L_tom(),
651 		word_2M_tof(), word_2M_tom(),
652 		verdef_2L11_tof(), verdef_2L11_tom(),
653 		verdef_2M11_tof(), verdef_2M11_tom(),
654 		verneed_2L11_tof(), verneed_2L11_tom(),
655 		verneed_2M11_tof(), verneed_2M11_tom(),
656 		sxword_2L_tof(), sxword_2L_tom(),
657 		sxword_2M_tof(), sxword_2M_tom(),
658 		xword_2L_tof(), xword_2L_tom(),
659 		xword_2M_tof(), xword_2M_tom(),
660 		cap_2L11_tof(), cap_2L11_tom(),
661 		cap_2M11_tof(), cap_2M11_tom();
662 
663 
664 /*
665  *	x64 [dst_version - 1] [src_version - 1] [encode - 1] [type]
666  */
667 
668 static struct {
669 	void	(*x_tof)(),
670 		(*x_tom)();
671 } x64 [EV_CURRENT] [EV_CURRENT] [ELFDATANUM - 1] [ELF_T_NUM] = {
672 	{
673 		{
674 			{			/* [1-1][1-1][2LSB-1][.] */
675 /* BYTE */			{ byte_to, byte_to },
676 /* ADDR */			{ addr_2L_tof, addr_2L_tom },
677 /* DYN */			{ dyn_2L11_tof, dyn_2L11_tom },
678 /* EHDR */			{ ehdr_2L11_tof, ehdr_2L11_tom },
679 /* HALF */			{ half_2L_tof, half_2L_tom },
680 /* OFF */			{ off_2L_tof, off_2L_tom },
681 /* PHDR */			{ phdr_2L11_tof, phdr_2L11_tom },
682 /* RELA */			{ rela_2L11_tof, rela_2L11_tom },
683 /* REL */			{ rel_2L11_tof, rel_2L11_tom },
684 /* SHDR */			{ shdr_2L11_tof, shdr_2L11_tom },
685 /* SWORD */			{ sword_2L_tof, sword_2L_tom },
686 /* SYM */			{ sym_2L11_tof, sym_2L11_tom },
687 /* WORD */			{ word_2L_tof, word_2L_tom },
688 /* VERDEF */			{ verdef_2L11_tof, verdef_2L11_tom},
689 /* VERNEED */			{ verneed_2L11_tof, verneed_2L11_tom},
690 /* SXWORD */			{ sxword_2L_tof, sxword_2L_tom },
691 /* XWORD */			{ xword_2L_tof, xword_2L_tom },
692 /* SYMINFO */			{ syminfo_2L11_tof, syminfo_2L11_tom },
693 /* NOTE */			{ note_2L11_tof, note_2L11_tom },
694 /* MOVE */			{ move_2L11_tof, move_2L11_tom },
695 /* MOVEP */			{ movep_2L11_tof, movep_2L11_tom },
696 /* CAP */			{ cap_2L11_tof, cap_2L11_tom },
697 			},
698 			{			/* [1-1][1-1][2MSB-1][.] */
699 /* BYTE */			{ byte_to, byte_to },
700 /* ADDR */			{ addr_2M_tof, addr_2M_tom },
701 /* DYN */			{ dyn_2M11_tof, dyn_2M11_tom },
702 /* EHDR */			{ ehdr_2M11_tof, ehdr_2M11_tom },
703 /* HALF */			{ half_2M_tof, half_2M_tom },
704 /* OFF */			{ off_2M_tof, off_2M_tom },
705 /* PHDR */			{ phdr_2M11_tof, phdr_2M11_tom },
706 /* RELA */			{ rela_2M11_tof, rela_2M11_tom },
707 /* REL */			{ rel_2M11_tof, rel_2M11_tom },
708 /* SHDR */			{ shdr_2M11_tof, shdr_2M11_tom },
709 /* SWORD */			{ sword_2M_tof, sword_2M_tom },
710 /* SYM */			{ sym_2M11_tof, sym_2M11_tom },
711 /* WORD */			{ word_2M_tof, word_2M_tom },
712 /* VERDEF */			{ verdef_2M11_tof, verdef_2M11_tom},
713 /* VERNEED */			{ verneed_2M11_tof, verneed_2M11_tom},
714 /* SXWORD */			{ sxword_2M_tof, sxword_2M_tom },
715 /* XWORD */			{ xword_2M_tof, xword_2M_tom },
716 /* SYMINFO */			{ syminfo_2M11_tof, syminfo_2M11_tom },
717 /* NOTE */			{ note_2M11_tof, note_2M11_tom },
718 /* MOVE */			{ move_2M11_tof, move_2M11_tom },
719 /* MOVEP */			{ movep_2M11_tof, movep_2M11_tom },
720 /* CAP */			{ cap_2M11_tof, cap_2M11_tom },
721 			},
722 		},
723 	},
724 };
725 
726 
727 /*
728  *	size [version - 1] [type]
729  */
730 
731 static const struct {
732 	size_t	s_filesz,
733 		s_memsz;
734 } fmsize [EV_CURRENT] [ELF_T_NUM] =
735 {
736 	{					/* [1-1][.] */
737 /* BYTE */	{ 1, 1 },
738 /* ADDR */	{ A_sizeof, sizeof (Elf64_Addr) },
739 /* DYN */	{ D1_sizeof, sizeof (Elf64_Dyn) },
740 /* EHDR */	{ E1_sizeof, sizeof (Elf64_Ehdr) },
741 /* HALF */	{ H_sizeof, sizeof (Elf64_Half) },
742 /* OFF */	{ O_sizeof, sizeof (Elf64_Off) },
743 /* PHDR */	{ P1_sizeof, sizeof (Elf64_Phdr) },
744 /* RELA */	{ RA1_sizeof, sizeof (Elf64_Rela) },
745 /* REL */	{ R1_sizeof, sizeof (Elf64_Rel) },
746 /* SHDR */	{ SH1_sizeof, sizeof (Elf64_Shdr) },
747 /* SWORD */	{ W_sizeof, sizeof (Elf64_Sword) },
748 /* SYM */	{ ST1_sizeof, sizeof (Elf64_Sym) },
749 /* WORD */	{ W_sizeof, sizeof (Elf64_Word) },
750 /* VERDEF */	{ 1, 1 },	/* both VERDEF & VERNEED have varying size */
751 /* VERNEED */	{ 1, 1 },	/* structures so we set their sizes to 1 */
752 /* SXWORD */	{ X_sizeof, sizeof (Elf64_Sxword) },
753 /* XWORD */	{ X_sizeof, sizeof (Elf64_Xword) },
754 /* SYMINFO */	{ SI1_sizeof, sizeof (Elf64_Syminfo) },
755 /* NOTE */	{ 1, 1},	/* NOTE has varying sized data we can't */
756 				/*  use the usual table magic. */
757 /* MOVE */	{ M1_sizeof, sizeof (Elf64_Move) },
758 /* MOVEP */	{ MP1_sizeof, sizeof (Elf64_Move) },
759 /* CAP */	{ C1_sizeof, sizeof (Elf64_Cap) },
760 	},
761 };
762 
763 
764 /*
765  *	memory type [version - 1] [section type]
766  */
767 
768 static const Elf_Type	mtype[EV_CURRENT][SHT_NUM] =
769 {
770 	{			/* [1-1][.] */
771 /* NULL */		ELF_T_BYTE,
772 /* PROGBITS */		ELF_T_BYTE,
773 /* SYMTAB */		ELF_T_SYM,
774 /* STRTAB */		ELF_T_BYTE,
775 /* RELA */		ELF_T_RELA,
776 /* HASH */		ELF_T_WORD,
777 /* DYNAMIC */		ELF_T_DYN,
778 /* NOTE */		ELF_T_NOTE,
779 /* NOBITS */		ELF_T_BYTE,
780 /* REL */		ELF_T_REL,
781 /* SHLIB */		ELF_T_BYTE,
782 /* DYNSYM */		ELF_T_SYM,
783 /* UNKNOWN12 */		ELF_T_BYTE,
784 /* UNKNOWN13 */		ELF_T_BYTE,
785 /* INIT_ARRAY */	ELF_T_ADDR,
786 /* FINI_ARRAY */	ELF_T_ADDR,
787 /* PREINIT_ARRAY */	ELF_T_ADDR,
788 /* GROUP */		ELF_T_WORD,
789 /* SYMTAB_SHNDX */	ELF_T_WORD
790 	},
791 };
792 
793 
794 size_t
795 elf64_fsize(Elf_Type type, size_t count, unsigned ver)
796 {
797 	if (--ver >= EV_CURRENT) {
798 		_elf_seterr(EREQ_VER, 0);
799 		return (0);
800 	}
801 	if ((unsigned)type >= ELF_T_NUM) {
802 		_elf_seterr(EREQ_TYPE, 0);
803 		return (0);
804 	}
805 	return (fmsize[ver][type].s_filesz * count);
806 }
807 
808 
809 size_t
810 _elf64_msize(Elf_Type type, unsigned ver)
811 {
812 	return (fmsize[ver - 1][type].s_memsz);
813 }
814 
815 
816 Elf_Type
817 /* ARGSUSED */
818 _elf64_mtype(Elf * elf, Elf64_Word shtype, unsigned ver)
819 {
820 	Elf64_Ehdr *	ehdr = (Elf64_Ehdr *)elf->ed_ehdr;
821 
822 	if (shtype < SHT_NUM)
823 		return (mtype[ver - 1][shtype]);
824 
825 	switch (shtype) {
826 	case SHT_SUNW_symsort:
827 	case SHT_SUNW_tlssort:
828 		return (ELF_T_WORD);
829 	case SHT_SUNW_LDYNSYM:
830 		return (ELF_T_SYM);
831 	case SHT_SUNW_dof:
832 		return (ELF_T_BYTE);
833 	case SHT_SUNW_cap:
834 		return (ELF_T_CAP);
835 	case SHT_SUNW_capchain:
836 		return (ELF_T_WORD);
837 	case SHT_SUNW_capinfo:
838 		return (ELF_T_XWORD);
839 	case SHT_SUNW_SIGNATURE:
840 		return (ELF_T_BYTE);
841 	case SHT_SUNW_ANNOTATE:
842 		return (ELF_T_BYTE);
843 	case SHT_SUNW_DEBUGSTR:
844 		return (ELF_T_BYTE);
845 	case SHT_SUNW_DEBUG:
846 		return (ELF_T_BYTE);
847 	case SHT_SUNW_move:
848 		/*
849 		 * Right now - the only 64bit binaries I know
850 		 * about with a move is SPARC - and SPARC
851 		 * binaries pad the size of the move.
852 		 */
853 		return (ELF_T_MOVEP);
854 	case SHT_SUNW_COMDAT:
855 		return (ELF_T_BYTE);
856 	case SHT_SUNW_syminfo:
857 		return (ELF_T_SYMINFO);
858 	case SHT_SUNW_verdef:
859 		return (ELF_T_VDEF);
860 	case SHT_SUNW_verneed:
861 		return (ELF_T_VNEED);
862 	case SHT_SUNW_versym:
863 		return (ELF_T_HALF);
864 	};
865 
866 	/*
867 	 * Check for the sparc specific section types
868 	 * below.
869 	 */
870 	if (((ehdr->e_machine == EM_SPARC) ||
871 	    (ehdr->e_machine == EM_SPARC32PLUS) ||
872 	    (ehdr->e_machine == EM_SPARCV9)) &&
873 	    (shtype == SHT_SPARC_GOTDATA))
874 		return (ELF_T_BYTE);
875 
876 	/*
877 	 * Check for the amd64 specific section types
878 	 * below.
879 	 */
880 	if ((ehdr->e_machine == EM_AMD64) &&
881 	    (shtype == SHT_AMD64_UNWIND))
882 		return (ELF_T_BYTE);
883 
884 	/*
885 	 * And the default is ELF_T_BYTE - but we should
886 	 * certainly have caught any sections we know about
887 	 * above.  This is for unknown sections to libelf.
888 	 */
889 	return (ELF_T_BYTE);
890 }
891 
892 
893 size_t
894 _elf64_entsz(Elf *elf, Elf64_Word shtype, unsigned ver)
895 {
896 	Elf_Type	ttype;
897 
898 	ttype = _elf64_mtype(elf, shtype, ver);
899 	return ((ttype == ELF_T_BYTE) ? 0 : fmsize[ver - 1][ttype].s_filesz);
900 }
901 
902 
903 static Elf_Data *
904 xlate(Elf_Data *dst, const Elf_Data *src, unsigned encode, int tof)
905 						/* !0 -> xlatetof */
906 {
907 	size_t		cnt, dsz, ssz;
908 	unsigned	type;
909 	unsigned	dver, sver;
910 	void		(*f)();
911 	unsigned	_encode;
912 
913 	if (dst == 0 || src == 0)
914 		return (0);
915 	if (--encode >= (ELFDATANUM - 1)) {
916 		_elf_seterr(EREQ_ENCODE, 0);
917 		return (0);
918 	}
919 	if ((dver = dst->d_version - 1) >= EV_CURRENT ||
920 	    (sver = src->d_version - 1) >= EV_CURRENT) {
921 		_elf_seterr(EREQ_VER, 0);
922 		return (0);
923 	}
924 	if ((type = src->d_type) >= ELF_T_NUM) {
925 		_elf_seterr(EREQ_TYPE, 0);
926 		return (0);
927 	}
928 
929 	if (tof) {
930 		dsz = fmsize[dver][type].s_filesz;
931 		ssz = fmsize[sver][type].s_memsz;
932 		f = x64[dver][sver][encode][type].x_tof;
933 	} else {
934 		dsz = fmsize[dver][type].s_memsz;
935 		ssz = fmsize[sver][type].s_filesz;
936 		f = x64[dver][sver][encode][type].x_tom;
937 	}
938 	cnt = src->d_size / ssz;
939 	if (dst->d_size < dsz * cnt) {
940 		_elf_seterr(EREQ_DSZ, 0);
941 		return (0);
942 	}
943 
944 	ELFACCESSDATA(_encode, _elf_encode)
945 	if ((_encode == (encode + 1)) && (dsz == ssz)) {
946 		/*
947 		 *	ld(1) frequently produces empty sections (eg. .dynsym,
948 		 *	.dynstr, .symtab, .strtab, etc) so that the initial
949 		 *	output image can be created of the correct size.  Later
950 		 *	these sections are filled in with the associated data.
951 		 *	So that we don't have to pre-allocate buffers for
952 		 *	these segments, allow for the src destination to be 0.
953 		 */
954 		if (src->d_buf && src->d_buf != dst->d_buf)
955 			(void) memcpy(dst->d_buf, src->d_buf, src->d_size);
956 		dst->d_type = src->d_type;
957 		dst->d_size = src->d_size;
958 		return (dst);
959 	}
960 	if (cnt)
961 		(*f)(dst->d_buf, src->d_buf, cnt);
962 	dst->d_size = dsz * cnt;
963 	dst->d_type = src->d_type;
964 	return (dst);
965 }
966 
967 
968 Elf_Data *
969 elf64_xlatetof(Elf_Data *dst, const Elf_Data *src, unsigned encode)
970 {
971 	return (xlate(dst, src, encode, 1));
972 }
973 
974 
975 Elf_Data *
976 elf64_xlatetom(Elf_Data *dst, const Elf_Data *src, unsigned encode)
977 {
978 	return (xlate(dst, src, encode, 0));
979 }
980 
981 
982 /*
983  * xlate to file format
984  *
985  *	..._tof(name, data) -- macros
986  *
987  *	Recall that the file format must be no larger than the
988  *	memory format (equal versions).  Use "forward" copy.
989  *	All these routines require non-null, non-zero arguments.
990  */
991 
992 
993 
994 
995 static void
996 addr_2L_tof(Byte *dst, Elf64_Addr *src, size_t cnt)
997 {
998 	Elf64_Addr	*end = src + cnt;
999 
1000 	do {
1001 		{	Elf64_Addr _t_ = *src;
1002 		(dst)[A_L0] = (Byte)_t_,
1003 		(dst)[A_L1] = (Byte)(_t_>>8),
1004 		(dst)[A_L2] = (Byte)(_t_>>16),
1005 		(dst)[A_L3] = (Byte)(_t_>>24),
1006 		(dst)[A_L4] = (Byte)(_t_>>32),
1007 		(dst)[A_L5] = (Byte)(_t_>>40),
1008 		(dst)[A_L6] = (Byte)(_t_>>48),
1009 		(dst)[A_L7] = (Byte)(_t_>>56); };
1010 		dst += A_sizeof;
1011 	} while (++src < end);
1012 }
1013 
1014 static void
1015 addr_2M_tof(Byte *dst, Elf64_Addr *src, size_t cnt)
1016 {
1017 	Elf64_Addr	*end = src + cnt;
1018 
1019 	do {
1020 		{	Elf64_Addr _t_ = *src;
1021 		(dst)[A_M0] = (Byte)_t_,
1022 		(dst)[A_M1] = (Byte)(_t_>>8),
1023 		(dst)[A_M2] = (Byte)(_t_>>16),
1024 		(dst)[A_M3] = (Byte)(_t_>>24),
1025 		(dst)[A_M4] = (Byte)(_t_>>32),
1026 		(dst)[A_M5] = (Byte)(_t_>>40),
1027 		(dst)[A_M6] = (Byte)(_t_>>48),
1028 		(dst)[A_M7] = (Byte)(_t_>>56); };
1029 		dst += A_sizeof;
1030 	} while (++src < end);
1031 }
1032 
1033 
1034 static void
1035 byte_to(Byte *dst, Byte *src, size_t cnt)
1036 {
1037 	if (dst != src)
1038 		(void) memcpy(dst, src, cnt);
1039 }
1040 
1041 
1042 
1043 
1044 
1045 static void
1046 dyn_2L11_tof(Byte *dst, Elf64_Dyn *src, size_t cnt)
1047 {
1048 	Elf64_Dyn	*end = src + cnt;
1049 
1050 	do {
1051 		{ Elf64_Xword _t_ = src->d_tag;
1052 		(dst)[D1_tag_L0] = (Byte)_t_,
1053 		(dst)[D1_tag_L1] = (Byte)(_t_>>8),
1054 		(dst)[D1_tag_L2] = (Byte)(_t_>>16),
1055 		(dst)[D1_tag_L3] = (Byte)(_t_>>24),
1056 		(dst)[D1_tag_L4] = (Byte)(_t_>>32),
1057 		(dst)[D1_tag_L5] = (Byte)(_t_>>40),
1058 		(dst)[D1_tag_L6] = (Byte)(_t_>>48),
1059 		(dst)[D1_tag_L7] = (Byte)(_t_>>56); };
1060 		{ Elf64_Xword _t_ = src->d_un.d_val;
1061 		(dst)[D1_val_L0] = (Byte)_t_,
1062 		(dst)[D1_val_L1] = (Byte)(_t_>>8),
1063 		(dst)[D1_val_L2] = (Byte)(_t_>>16),
1064 		(dst)[D1_val_L3] = (Byte)(_t_>>24),
1065 		(dst)[D1_val_L4] = (Byte)(_t_>>32),
1066 		(dst)[D1_val_L5] = (Byte)(_t_>>40),
1067 		(dst)[D1_val_L6] = (Byte)(_t_>>48),
1068 		(dst)[D1_val_L7] = (Byte)(_t_>>56); };
1069 		dst += D1_sizeof;
1070 	} while (++src < end);
1071 }
1072 
1073 static void
1074 dyn_2M11_tof(Byte *dst, Elf64_Dyn *src, size_t cnt)
1075 {
1076 	Elf64_Dyn	*end = src + cnt;
1077 
1078 	do {
1079 		{ Elf64_Xword _t_ = src->d_tag;
1080 		(dst)[D1_tag_M0] = (Byte)_t_,
1081 		(dst)[D1_tag_M1] = (Byte)(_t_>>8),
1082 		(dst)[D1_tag_M2] = (Byte)(_t_>>16),
1083 		(dst)[D1_tag_M3] = (Byte)(_t_>>24),
1084 		(dst)[D1_tag_M4] = (Byte)(_t_>>32),
1085 		(dst)[D1_tag_M5] = (Byte)(_t_>>40),
1086 		(dst)[D1_tag_M6] = (Byte)(_t_>>48),
1087 		(dst)[D1_tag_M7] = (Byte)(_t_>>56); };
1088 		{ Elf64_Xword _t_ = src->d_un.d_val;
1089 		(dst)[D1_val_M0] = (Byte)_t_,
1090 		(dst)[D1_val_M1] = (Byte)(_t_>>8),
1091 		(dst)[D1_val_M2] = (Byte)(_t_>>16),
1092 		(dst)[D1_val_M3] = (Byte)(_t_>>24),
1093 		(dst)[D1_val_M4] = (Byte)(_t_>>32),
1094 		(dst)[D1_val_M5] = (Byte)(_t_>>40),
1095 		(dst)[D1_val_M6] = (Byte)(_t_>>48),
1096 		(dst)[D1_val_M7] = (Byte)(_t_>>56); };
1097 		dst += D1_sizeof;
1098 	} while (++src < end);
1099 }
1100 
1101 
1102 
1103 
1104 
1105 static void
1106 ehdr_2L11_tof(Byte *dst, Elf64_Ehdr *src, size_t cnt)
1107 {
1108 	Elf64_Ehdr	*end = src + cnt;
1109 
1110 	do {
1111 		if (&dst[E1_ident] != src->e_ident)
1112 			(void) memcpy(&dst[E1_ident], src->e_ident, E1_Nident);
1113 		{ Elf64_Half _t_ = src->e_type;
1114 		(dst)[E1_type_L0] = (Byte)_t_,
1115 		(dst)[E1_type_L1] = (Byte)(_t_>>8); };
1116 		{ Elf64_Half _t_ = src->e_machine;
1117 		(dst)[E1_machine_L0] = (Byte)_t_,
1118 		(dst)[E1_machine_L1] = (Byte)(_t_>>8); };
1119 		{ Elf64_Word _t_ = src->e_version;
1120 		(dst)[E1_version_L0] = (Byte)_t_,
1121 		(dst)[E1_version_L1] = (Byte)(_t_>>8),
1122 		(dst)[E1_version_L2] = (Byte)(_t_>>16),
1123 		(dst)[E1_version_L3] = (Byte)(_t_>>24); };
1124 		{	Elf64_Addr _t_ = src->e_entry;
1125 		(dst)[E1_entry_L0] = (Byte)_t_,
1126 		(dst)[E1_entry_L1] = (Byte)(_t_>>8),
1127 		(dst)[E1_entry_L2] = (Byte)(_t_>>16),
1128 		(dst)[E1_entry_L3] = (Byte)(_t_>>24),
1129 		(dst)[E1_entry_L4] = (Byte)(_t_>>32),
1130 		(dst)[E1_entry_L5] = (Byte)(_t_>>40),
1131 		(dst)[E1_entry_L6] = (Byte)(_t_>>48),
1132 		(dst)[E1_entry_L7] = (Byte)(_t_>>56); };
1133 		{ Elf64_Off _t_ = src->e_phoff;
1134 		(dst)[E1_phoff_L0] = (Byte)_t_,
1135 		(dst)[E1_phoff_L1] = (Byte)(_t_>>8),
1136 		(dst)[E1_phoff_L2] = (Byte)(_t_>>16),
1137 		(dst)[E1_phoff_L3] = (Byte)(_t_>>24),
1138 		(dst)[E1_phoff_L4] = (Byte)(_t_>>32),
1139 		(dst)[E1_phoff_L5] = (Byte)(_t_>>40),
1140 		(dst)[E1_phoff_L6] = (Byte)(_t_>>48),
1141 		(dst)[E1_phoff_L7] = (Byte)(_t_>>56); };
1142 		{ Elf64_Off _t_ = src->e_shoff;
1143 		(dst)[E1_shoff_L0] = (Byte)_t_,
1144 		(dst)[E1_shoff_L1] = (Byte)(_t_>>8),
1145 		(dst)[E1_shoff_L2] = (Byte)(_t_>>16),
1146 		(dst)[E1_shoff_L3] = (Byte)(_t_>>24),
1147 		(dst)[E1_shoff_L4] = (Byte)(_t_>>32),
1148 		(dst)[E1_shoff_L5] = (Byte)(_t_>>40),
1149 		(dst)[E1_shoff_L6] = (Byte)(_t_>>48),
1150 		(dst)[E1_shoff_L7] = (Byte)(_t_>>56); };
1151 		{ Elf64_Word _t_ = src->e_flags;
1152 		(dst)[E1_flags_L0] = (Byte)_t_,
1153 		(dst)[E1_flags_L1] = (Byte)(_t_>>8),
1154 		(dst)[E1_flags_L2] = (Byte)(_t_>>16),
1155 		(dst)[E1_flags_L3] = (Byte)(_t_>>24); };
1156 		{ Elf64_Half _t_ = src->e_ehsize;
1157 		(dst)[E1_ehsize_L0] = (Byte)_t_,
1158 		(dst)[E1_ehsize_L1] = (Byte)(_t_>>8); };
1159 		{ Elf64_Half _t_ = src->e_phentsize;
1160 		(dst)[E1_phentsize_L0] = (Byte)_t_,
1161 		(dst)[E1_phentsize_L1] = (Byte)(_t_>>8); };
1162 		{ Elf64_Half _t_ = src->e_phnum;
1163 		(dst)[E1_phnum_L0] = (Byte)_t_,
1164 		(dst)[E1_phnum_L1] = (Byte)(_t_>>8); };
1165 		{ Elf64_Half _t_ = src->e_shentsize;
1166 		(dst)[E1_shentsize_L0] = (Byte)_t_,
1167 		(dst)[E1_shentsize_L1] = (Byte)(_t_>>8); };
1168 		{ Elf64_Half _t_ = src->e_shnum;
1169 		(dst)[E1_shnum_L0] = (Byte)_t_,
1170 		(dst)[E1_shnum_L1] = (Byte)(_t_>>8); };
1171 		{ Elf64_Half _t_ = src->e_shstrndx;
1172 		(dst)[E1_shstrndx_L0] = (Byte)_t_,
1173 		(dst)[E1_shstrndx_L1] = (Byte)(_t_>>8); };
1174 		dst += E1_sizeof;
1175 	} while (++src < end);
1176 }
1177 
1178 static void
1179 ehdr_2M11_tof(Byte *dst, Elf64_Ehdr *src, size_t cnt)
1180 {
1181 	Elf64_Ehdr	*end = src + cnt;
1182 
1183 	do {
1184 		if (&dst[E1_ident] != src->e_ident)
1185 			(void) memcpy(&dst[E1_ident], src->e_ident, E1_Nident);
1186 		{ Elf64_Half _t_ = src->e_type;
1187 		(dst)[E1_type_M0] = (Byte)_t_,
1188 		(dst)[E1_type_M1] = (Byte)(_t_>>8); };
1189 		{ Elf64_Half _t_ = src->e_machine;
1190 		(dst)[E1_machine_M0] = (Byte)_t_,
1191 		(dst)[E1_machine_M1] = (Byte)(_t_>>8); };
1192 		{ Elf64_Word _t_ = src->e_version;
1193 		(dst)[E1_version_M0] = (Byte)_t_,
1194 		(dst)[E1_version_M1] = (Byte)(_t_>>8),
1195 		(dst)[E1_version_M2] = (Byte)(_t_>>16),
1196 		(dst)[E1_version_M3] = (Byte)(_t_>>24); };
1197 		{	Elf64_Addr _t_ = src->e_entry;
1198 		(dst)[E1_entry_M0] = (Byte)_t_,
1199 		(dst)[E1_entry_M1] = (Byte)(_t_>>8),
1200 		(dst)[E1_entry_M2] = (Byte)(_t_>>16),
1201 		(dst)[E1_entry_M3] = (Byte)(_t_>>24),
1202 		(dst)[E1_entry_M4] = (Byte)(_t_>>32),
1203 		(dst)[E1_entry_M5] = (Byte)(_t_>>40),
1204 		(dst)[E1_entry_M6] = (Byte)(_t_>>48),
1205 		(dst)[E1_entry_M7] = (Byte)(_t_>>56); };
1206 		{ Elf64_Off _t_ = src->e_phoff;
1207 		(dst)[E1_phoff_M0] = (Byte)_t_,
1208 		(dst)[E1_phoff_M1] = (Byte)(_t_>>8),
1209 		(dst)[E1_phoff_M2] = (Byte)(_t_>>16),
1210 		(dst)[E1_phoff_M3] = (Byte)(_t_>>24),
1211 		(dst)[E1_phoff_M4] = (Byte)(_t_>>32),
1212 		(dst)[E1_phoff_M5] = (Byte)(_t_>>40),
1213 		(dst)[E1_phoff_M6] = (Byte)(_t_>>48),
1214 		(dst)[E1_phoff_M7] = (Byte)(_t_>>56); };
1215 		{ Elf64_Off _t_ = src->e_shoff;
1216 		(dst)[E1_shoff_M0] = (Byte)_t_,
1217 		(dst)[E1_shoff_M1] = (Byte)(_t_>>8),
1218 		(dst)[E1_shoff_M2] = (Byte)(_t_>>16),
1219 		(dst)[E1_shoff_M3] = (Byte)(_t_>>24),
1220 		(dst)[E1_shoff_M4] = (Byte)(_t_>>32),
1221 		(dst)[E1_shoff_M5] = (Byte)(_t_>>40),
1222 		(dst)[E1_shoff_M6] = (Byte)(_t_>>48),
1223 		(dst)[E1_shoff_M7] = (Byte)(_t_>>56); };
1224 		{ Elf64_Word _t_ = src->e_flags;
1225 		(dst)[E1_flags_M0] = (Byte)_t_,
1226 		(dst)[E1_flags_M1] = (Byte)(_t_>>8),
1227 		(dst)[E1_flags_M2] = (Byte)(_t_>>16),
1228 		(dst)[E1_flags_M3] = (Byte)(_t_>>24); };
1229 		{ Elf64_Half _t_ = src->e_ehsize;
1230 		(dst)[E1_ehsize_M0] = (Byte)_t_,
1231 		(dst)[E1_ehsize_M1] = (Byte)(_t_>>8); };
1232 		{ Elf64_Half _t_ = src->e_phentsize;
1233 		(dst)[E1_phentsize_M0] = (Byte)_t_,
1234 		(dst)[E1_phentsize_M1] = (Byte)(_t_>>8); };
1235 		{ Elf64_Half _t_ = src->e_phnum;
1236 		(dst)[E1_phnum_M0] = (Byte)_t_,
1237 		(dst)[E1_phnum_M1] = (Byte)(_t_>>8); };
1238 		{ Elf64_Half _t_ = src->e_shentsize;
1239 		(dst)[E1_shentsize_M0] = (Byte)_t_,
1240 		(dst)[E1_shentsize_M1] = (Byte)(_t_>>8); };
1241 		{ Elf64_Half _t_ = src->e_shnum;
1242 		(dst)[E1_shnum_M0] = (Byte)_t_,
1243 		(dst)[E1_shnum_M1] = (Byte)(_t_>>8); };
1244 		{ Elf64_Half _t_ = src->e_shstrndx;
1245 		(dst)[E1_shstrndx_M0] = (Byte)_t_,
1246 		(dst)[E1_shstrndx_M1] = (Byte)(_t_>>8); };
1247 		dst += E1_sizeof;
1248 	} while (++src < end);
1249 }
1250 
1251 
1252 
1253 
1254 
1255 static void
1256 half_2L_tof(Byte *dst, Elf64_Half *src, size_t cnt)
1257 {
1258 	Elf64_Half	*end = src + cnt;
1259 
1260 	do {
1261 		{ Elf64_Half _t_ = *src;
1262 		(dst)[H_L0] = (Byte)_t_,
1263 		(dst)[H_L1] = (Byte)(_t_>>8); };
1264 		dst += H_sizeof;
1265 	} while (++src < end);
1266 }
1267 
1268 static void
1269 half_2M_tof(Byte *dst, Elf64_Half *src, size_t cnt)
1270 {
1271 	Elf64_Half	*end = src + cnt;
1272 
1273 	do {
1274 		{ Elf64_Half _t_ = *src;
1275 		(dst)[H_M0] = (Byte)_t_,
1276 		(dst)[H_M1] = (Byte)(_t_>>8); };
1277 		dst += H_sizeof;
1278 	} while (++src < end);
1279 }
1280 
1281 
1282 
1283 
1284 
1285 static void
1286 move_2L11_tof(unsigned char *dst, Elf64_Move *src, size_t cnt)
1287 {
1288 	Elf64_Move	*end = src + cnt;
1289 
1290 	do {
1291 		{ Elf64_Lword _t_ = src->m_value;
1292 		(dst)[M1_value_L0] = (Byte)_t_,
1293 		(dst)[M1_value_L1] = (Byte)(_t_>>8),
1294 		(dst)[M1_value_L2] = (Byte)(_t_>>16),
1295 		(dst)[M1_value_L3] = (Byte)(_t_>>24),
1296 		(dst)[M1_value_L4] = (Byte)(_t_>>32),
1297 		(dst)[M1_value_L5] = (Byte)(_t_>>40),
1298 		(dst)[M1_value_L6] = (Byte)(_t_>>48),
1299 		(dst)[M1_value_L7] = (Byte)(_t_>>56); };
1300 		{ Elf64_Word _t_ = src->m_info;
1301 		(dst)[M1_info_L0] = (Byte)_t_,
1302 		(dst)[M1_info_L1] = (Byte)(_t_>>8),
1303 		(dst)[M1_info_L2] = (Byte)(_t_>>16),
1304 		(dst)[M1_info_L3] = (Byte)(_t_>>24); };
1305 		{ Elf64_Word _t_ = src->m_poffset;
1306 		(dst)[M1_poffset_L0] = (Byte)_t_,
1307 		(dst)[M1_poffset_L1] = (Byte)(_t_>>8),
1308 		(dst)[M1_poffset_L2] = (Byte)(_t_>>16),
1309 		(dst)[M1_poffset_L3] = (Byte)(_t_>>24); };
1310 		{ Elf64_Half _t_ = src->m_repeat;
1311 		(dst)[M1_repeat_L0] = (Byte)_t_,
1312 		(dst)[M1_repeat_L1] = (Byte)(_t_>>8); };
1313 		{ Elf64_Half _t_ = src->m_stride;
1314 		(dst)[M1_stride_L0] = (Byte)_t_,
1315 		(dst)[M1_stride_L1] = (Byte)(_t_>>8); };
1316 		dst += M1_sizeof;
1317 	} while (++src < end);
1318 }
1319 
1320 static void
1321 move_2M11_tof(unsigned char *dst, Elf64_Move *src, size_t cnt)
1322 {
1323 	Elf64_Move	*end = src + cnt;
1324 
1325 	do {
1326 		{ Elf64_Lword _t_ = src->m_value;
1327 		(dst)[M1_value_M0] = (Byte)_t_,
1328 		(dst)[M1_value_M1] = (Byte)(_t_>>8),
1329 		(dst)[M1_value_M2] = (Byte)(_t_>>16),
1330 		(dst)[M1_value_M3] = (Byte)(_t_>>24),
1331 		(dst)[M1_value_M4] = (Byte)(_t_>>32),
1332 		(dst)[M1_value_M5] = (Byte)(_t_>>40),
1333 		(dst)[M1_value_M6] = (Byte)(_t_>>48),
1334 		(dst)[M1_value_M7] = (Byte)(_t_>>56); };
1335 		{ Elf64_Word _t_ = src->m_info;
1336 		(dst)[M1_info_M0] = (Byte)_t_,
1337 		(dst)[M1_info_M1] = (Byte)(_t_>>8),
1338 		(dst)[M1_info_M2] = (Byte)(_t_>>16),
1339 		(dst)[M1_info_M3] = (Byte)(_t_>>24); };
1340 		{ Elf64_Word _t_ = src->m_poffset;
1341 		(dst)[M1_poffset_M0] = (Byte)_t_,
1342 		(dst)[M1_poffset_M1] = (Byte)(_t_>>8),
1343 		(dst)[M1_poffset_M2] = (Byte)(_t_>>16),
1344 		(dst)[M1_poffset_M3] = (Byte)(_t_>>24); };
1345 		{ Elf64_Half _t_ = src->m_repeat;
1346 		(dst)[M1_repeat_M0] = (Byte)_t_,
1347 		(dst)[M1_repeat_M1] = (Byte)(_t_>>8); };
1348 		{ Elf64_Half _t_ = src->m_stride;
1349 		(dst)[M1_stride_M0] = (Byte)_t_,
1350 		(dst)[M1_stride_M1] = (Byte)(_t_>>8); };
1351 		dst += M1_sizeof;
1352 	} while (++src < end);
1353 }
1354 
1355 
1356 
1357 
1358 
1359 static void
1360 movep_2L11_tof(unsigned char *dst, Elf64_Move *src, size_t cnt)
1361 {
1362 	Elf64_Move	*end = src + cnt;
1363 
1364 	do {
1365 		{ Elf64_Lword _t_ = src->m_value;
1366 		(dst)[MP1_value_L0] = (Byte)_t_,
1367 		(dst)[MP1_value_L1] = (Byte)(_t_>>8),
1368 		(dst)[MP1_value_L2] = (Byte)(_t_>>16),
1369 		(dst)[MP1_value_L3] = (Byte)(_t_>>24),
1370 		(dst)[MP1_value_L4] = (Byte)(_t_>>32),
1371 		(dst)[MP1_value_L5] = (Byte)(_t_>>40),
1372 		(dst)[MP1_value_L6] = (Byte)(_t_>>48),
1373 		(dst)[MP1_value_L7] = (Byte)(_t_>>56); };
1374 		{ Elf64_Word _t_ = src->m_info;
1375 		(dst)[MP1_info_L0] = (Byte)_t_,
1376 		(dst)[MP1_info_L1] = (Byte)(_t_>>8),
1377 		(dst)[MP1_info_L2] = (Byte)(_t_>>16),
1378 		(dst)[MP1_info_L3] = (Byte)(_t_>>24); };
1379 		{ Elf64_Word _t_ = src->m_poffset;
1380 		(dst)[MP1_poffset_L0] = (Byte)_t_,
1381 		(dst)[MP1_poffset_L1] = (Byte)(_t_>>8),
1382 		(dst)[MP1_poffset_L2] = (Byte)(_t_>>16),
1383 		(dst)[MP1_poffset_L3] = (Byte)(_t_>>24); };
1384 		{ Elf64_Half _t_ = src->m_repeat;
1385 		(dst)[MP1_repeat_L0] = (Byte)_t_,
1386 		(dst)[MP1_repeat_L1] = (Byte)(_t_>>8); };
1387 		{ Elf64_Half _t_ = src->m_stride;
1388 		(dst)[MP1_stride_L0] = (Byte)_t_,
1389 		(dst)[MP1_stride_L1] = (Byte)(_t_>>8); };
1390 		dst += MP1_sizeof;
1391 	} while (++src < end);
1392 }
1393 
1394 static void
1395 movep_2M11_tof(unsigned char *dst, Elf64_Move *src, size_t cnt)
1396 {
1397 	Elf64_Move	*end = src + cnt;
1398 
1399 	do {
1400 		{ Elf64_Lword _t_ = src->m_value;
1401 		(dst)[MP1_value_M0] = (Byte)_t_,
1402 		(dst)[MP1_value_M1] = (Byte)(_t_>>8),
1403 		(dst)[MP1_value_M2] = (Byte)(_t_>>16),
1404 		(dst)[MP1_value_M3] = (Byte)(_t_>>24),
1405 		(dst)[MP1_value_M4] = (Byte)(_t_>>32),
1406 		(dst)[MP1_value_M5] = (Byte)(_t_>>40),
1407 		(dst)[MP1_value_M6] = (Byte)(_t_>>48),
1408 		(dst)[MP1_value_M7] = (Byte)(_t_>>56); };
1409 		{ Elf64_Word _t_ = src->m_info;
1410 		(dst)[MP1_info_M0] = (Byte)_t_,
1411 		(dst)[MP1_info_M1] = (Byte)(_t_>>8),
1412 		(dst)[MP1_info_M2] = (Byte)(_t_>>16),
1413 		(dst)[MP1_info_M3] = (Byte)(_t_>>24); };
1414 		{ Elf64_Word _t_ = src->m_poffset;
1415 		(dst)[MP1_poffset_M0] = (Byte)_t_,
1416 		(dst)[MP1_poffset_M1] = (Byte)(_t_>>8),
1417 		(dst)[MP1_poffset_M2] = (Byte)(_t_>>16),
1418 		(dst)[MP1_poffset_M3] = (Byte)(_t_>>24); };
1419 		{ Elf64_Half _t_ = src->m_repeat;
1420 		(dst)[MP1_repeat_M0] = (Byte)_t_,
1421 		(dst)[MP1_repeat_M1] = (Byte)(_t_>>8); };
1422 		{ Elf64_Half _t_ = src->m_stride;
1423 		(dst)[MP1_stride_M0] = (Byte)_t_,
1424 		(dst)[MP1_stride_M1] = (Byte)(_t_>>8); };
1425 		dst += MP1_sizeof;
1426 	} while (++src < end);
1427 }
1428 
1429 
1430 
1431 
1432 
1433 static void
1434 off_2L_tof(Byte *dst, Elf64_Off *src, size_t cnt)
1435 {
1436 	Elf64_Off	*end = src + cnt;
1437 
1438 	do {
1439 		{ Elf64_Off _t_ = *src;
1440 		(dst)[O_L0] = (Byte)_t_,
1441 		(dst)[O_L1] = (Byte)(_t_>>8),
1442 		(dst)[O_L2] = (Byte)(_t_>>16),
1443 		(dst)[O_L3] = (Byte)(_t_>>24),
1444 		(dst)[O_L4] = (Byte)(_t_>>32),
1445 		(dst)[O_L5] = (Byte)(_t_>>40),
1446 		(dst)[O_L6] = (Byte)(_t_>>48),
1447 		(dst)[O_L7] = (Byte)(_t_>>56); };
1448 		dst += O_sizeof;
1449 	} while (++src < end);
1450 }
1451 
1452 static void
1453 off_2M_tof(Byte *dst, Elf64_Off *src, size_t cnt)
1454 {
1455 	Elf64_Off	*end = src + cnt;
1456 
1457 	do {
1458 		{ Elf64_Off _t_ = *src;
1459 		(dst)[O_M0] = (Byte)_t_,
1460 		(dst)[O_M1] = (Byte)(_t_>>8),
1461 		(dst)[O_M2] = (Byte)(_t_>>16),
1462 		(dst)[O_M3] = (Byte)(_t_>>24),
1463 		(dst)[O_M4] = (Byte)(_t_>>32),
1464 		(dst)[O_M5] = (Byte)(_t_>>40),
1465 		(dst)[O_M6] = (Byte)(_t_>>48),
1466 		(dst)[O_M7] = (Byte)(_t_>>56); };
1467 		dst += O_sizeof;
1468 	} while (++src < end);
1469 }
1470 
1471 
1472 
1473 
1474 
1475 static void
1476 note_2L11_tof(unsigned char *dst, Elf64_Nhdr *src, size_t cnt)
1477 {
1478 	/* LINTED */
1479 	Elf64_Nhdr 	*end = (Elf64_Nhdr *)((char *)src + cnt);
1480 
1481 	/*
1482 	 * Copy the note data to the source, translating the
1483 	 * length fields. Clip against the size of the actual buffer
1484 	 * to guard against corrupt note data.
1485 	 */
1486 	do {
1487 		Elf64_Word	descsz, namesz;
1488 
1489 		/*
1490 		 * cache size of desc & name fields - while rounding
1491 		 * up their size.
1492 		 */
1493 		namesz = S_ROUND(src->n_namesz, sizeof (Elf64_Word));
1494 		descsz = src->n_descsz;
1495 
1496 		/*
1497 		 * Copy contents of Elf64_Nhdr
1498 		 */
1499 		if ((offsetof(Elf64_Nhdr, n_namesz) + sizeof(Elf64_Word) +
1500 		    (char *) src) >= (char *) end)
1501 			break;
1502 		{ Elf64_Word _t_ = src->n_namesz;
1503 		(dst)[N1_namesz_L0] = (Byte)_t_,
1504 		(dst)[N1_namesz_L1] = (Byte)(_t_>>8),
1505 		(dst)[N1_namesz_L2] = (Byte)(_t_>>16),
1506 		(dst)[N1_namesz_L3] = (Byte)(_t_>>24); };
1507 
1508 		if ((offsetof(Elf64_Nhdr, n_descsz) + sizeof(Elf64_Word) +
1509 		    (char *) src) >= (char *) end)
1510 			break;
1511 		{ Elf64_Word _t_ = src->n_descsz;
1512 		(dst)[N1_descsz_L0] = (Byte)_t_,
1513 		(dst)[N1_descsz_L1] = (Byte)(_t_>>8),
1514 		(dst)[N1_descsz_L2] = (Byte)(_t_>>16),
1515 		(dst)[N1_descsz_L3] = (Byte)(_t_>>24); };
1516 
1517 		if ((offsetof(Elf64_Nhdr, n_type) + sizeof(Elf64_Word) +
1518 		    (char *) src) >= (char *) end)
1519 			break;
1520 		{ Elf64_Word _t_ = src->n_type;
1521 		(dst)[N1_type_L0] = (Byte)_t_,
1522 		(dst)[N1_type_L1] = (Byte)(_t_>>8),
1523 		(dst)[N1_type_L2] = (Byte)(_t_>>16),
1524 		(dst)[N1_type_L3] = (Byte)(_t_>>24); };
1525 
1526 		/*
1527 		 * Copy contents of Name field
1528 		 */
1529 		dst += N1_sizeof;
1530 		src++;
1531 		if ((namesz + (char *) src) > (char *) end) {
1532 			namesz = (char *) end - (char *) src;
1533 			if (namesz == 0)
1534 				break;
1535 		}
1536 		(void)memcpy(dst, src, namesz);
1537 
1538 		/*
1539 		 * Copy contents of desc field
1540 		 */
1541 		dst += namesz;
1542 		src = (Elf64_Nhdr *)((uintptr_t)src + namesz);
1543 		if ((descsz + (char *) src) > (char *) end) {
1544 			descsz = (char *) end - (char *) src;
1545 			if (descsz == 0)
1546 				break;
1547 		}
1548 		(void)memcpy(dst, src, descsz);
1549 
1550 		descsz = S_ROUND(descsz, sizeof (Elf64_Word));
1551 		dst += descsz;
1552 		src = (Elf64_Nhdr *)((uintptr_t)src + descsz);
1553 	} while (src < end);
1554 }
1555 
1556 static void
1557 note_2M11_tof(unsigned char *dst, Elf64_Nhdr *src, size_t cnt)
1558 {
1559 	/* LINTED */
1560 	Elf64_Nhdr 	*end = (Elf64_Nhdr *)((char *)src + cnt);
1561 
1562 	/*
1563 	 * Copy the note data to the source, translating the
1564 	 * length fields. Clip against the size of the actual buffer
1565 	 * to guard against corrupt note data.
1566 	 */
1567 	do {
1568 		Elf64_Word	descsz, namesz;
1569 
1570 		/*
1571 		 * cache size of desc & name fields - while rounding
1572 		 * up their size.
1573 		 */
1574 		namesz = S_ROUND(src->n_namesz, sizeof (Elf64_Word));
1575 		descsz = src->n_descsz;
1576 
1577 		/*
1578 		 * Copy contents of Elf64_Nhdr
1579 		 */
1580 		if ((offsetof(Elf64_Nhdr, n_namesz) + sizeof(Elf64_Word) +
1581 		    (char *) src) >= (char *) end)
1582 			break;
1583 		{ Elf64_Word _t_ = src->n_namesz;
1584 		(dst)[N1_namesz_M0] = (Byte)_t_,
1585 		(dst)[N1_namesz_M1] = (Byte)(_t_>>8),
1586 		(dst)[N1_namesz_M2] = (Byte)(_t_>>16),
1587 		(dst)[N1_namesz_M3] = (Byte)(_t_>>24); };
1588 
1589 		if ((offsetof(Elf64_Nhdr, n_descsz) + sizeof(Elf64_Word) +
1590 		    (char *) src) >= (char *) end)
1591 			break;
1592 		{ Elf64_Word _t_ = src->n_descsz;
1593 		(dst)[N1_descsz_M0] = (Byte)_t_,
1594 		(dst)[N1_descsz_M1] = (Byte)(_t_>>8),
1595 		(dst)[N1_descsz_M2] = (Byte)(_t_>>16),
1596 		(dst)[N1_descsz_M3] = (Byte)(_t_>>24); };
1597 
1598 		if ((offsetof(Elf64_Nhdr, n_type) + sizeof(Elf64_Word) +
1599 		    (char *) src) >= (char *) end)
1600 			break;
1601 		{ Elf64_Word _t_ = src->n_type;
1602 		(dst)[N1_type_M0] = (Byte)_t_,
1603 		(dst)[N1_type_M1] = (Byte)(_t_>>8),
1604 		(dst)[N1_type_M2] = (Byte)(_t_>>16),
1605 		(dst)[N1_type_M3] = (Byte)(_t_>>24); };
1606 
1607 		/*
1608 		 * Copy contents of Name field
1609 		 */
1610 		dst += N1_sizeof;
1611 		src++;
1612 		if ((namesz + (char *) src) > (char *) end) {
1613 			namesz = (char *) end - (char *) src;
1614 			if (namesz == 0)
1615 				break;
1616 		}
1617 		(void)memcpy(dst, src, namesz);
1618 
1619 		/*
1620 		 * Copy contents of desc field
1621 		 */
1622 		dst += namesz;
1623 		src = (Elf64_Nhdr *)((uintptr_t)src + namesz);
1624 		if ((descsz + (char *) src) > (char *) end) {
1625 			descsz = (char *) end - (char *) src;
1626 			if (descsz == 0)
1627 				break;
1628 		}
1629 		(void)memcpy(dst, src, descsz);
1630 
1631 		descsz = S_ROUND(descsz, sizeof (Elf64_Word));
1632 		dst += descsz;
1633 		src = (Elf64_Nhdr *)((uintptr_t)src + descsz);
1634 	} while (src < end);
1635 }
1636 
1637 
1638 
1639 
1640 
1641 static void
1642 phdr_2L11_tof(Byte *dst, Elf64_Phdr *src, size_t cnt)
1643 {
1644 	Elf64_Phdr	*end = src + cnt;
1645 
1646 	do {
1647 		{ Elf64_Word _t_ = src->p_type;
1648 		(dst)[P1_type_L0] = (Byte)_t_,
1649 		(dst)[P1_type_L1] = (Byte)(_t_>>8),
1650 		(dst)[P1_type_L2] = (Byte)(_t_>>16),
1651 		(dst)[P1_type_L3] = (Byte)(_t_>>24); };
1652 		{ Elf64_Word _t_ = src->p_flags;
1653 		(dst)[P1_flags_L0] = (Byte)_t_,
1654 		(dst)[P1_flags_L1] = (Byte)(_t_>>8),
1655 		(dst)[P1_flags_L2] = (Byte)(_t_>>16),
1656 		(dst)[P1_flags_L3] = (Byte)(_t_>>24); };
1657 		{ Elf64_Off _t_ = src->p_offset;
1658 		(dst)[P1_offset_L0] = (Byte)_t_,
1659 		(dst)[P1_offset_L1] = (Byte)(_t_>>8),
1660 		(dst)[P1_offset_L2] = (Byte)(_t_>>16),
1661 		(dst)[P1_offset_L3] = (Byte)(_t_>>24),
1662 		(dst)[P1_offset_L4] = (Byte)(_t_>>32),
1663 		(dst)[P1_offset_L5] = (Byte)(_t_>>40),
1664 		(dst)[P1_offset_L6] = (Byte)(_t_>>48),
1665 		(dst)[P1_offset_L7] = (Byte)(_t_>>56); };
1666 		{	Elf64_Addr _t_ = src->p_vaddr;
1667 		(dst)[P1_vaddr_L0] = (Byte)_t_,
1668 		(dst)[P1_vaddr_L1] = (Byte)(_t_>>8),
1669 		(dst)[P1_vaddr_L2] = (Byte)(_t_>>16),
1670 		(dst)[P1_vaddr_L3] = (Byte)(_t_>>24),
1671 		(dst)[P1_vaddr_L4] = (Byte)(_t_>>32),
1672 		(dst)[P1_vaddr_L5] = (Byte)(_t_>>40),
1673 		(dst)[P1_vaddr_L6] = (Byte)(_t_>>48),
1674 		(dst)[P1_vaddr_L7] = (Byte)(_t_>>56); };
1675 		{	Elf64_Addr _t_ = src->p_paddr;
1676 		(dst)[P1_paddr_L0] = (Byte)_t_,
1677 		(dst)[P1_paddr_L1] = (Byte)(_t_>>8),
1678 		(dst)[P1_paddr_L2] = (Byte)(_t_>>16),
1679 		(dst)[P1_paddr_L3] = (Byte)(_t_>>24),
1680 		(dst)[P1_paddr_L4] = (Byte)(_t_>>32),
1681 		(dst)[P1_paddr_L5] = (Byte)(_t_>>40),
1682 		(dst)[P1_paddr_L6] = (Byte)(_t_>>48),
1683 		(dst)[P1_paddr_L7] = (Byte)(_t_>>56); };
1684 		{ Elf64_Xword _t_ = src->p_filesz;
1685 		(dst)[P1_filesz_L0] = (Byte)_t_,
1686 		(dst)[P1_filesz_L1] = (Byte)(_t_>>8),
1687 		(dst)[P1_filesz_L2] = (Byte)(_t_>>16),
1688 		(dst)[P1_filesz_L3] = (Byte)(_t_>>24),
1689 		(dst)[P1_filesz_L4] = (Byte)(_t_>>32),
1690 		(dst)[P1_filesz_L5] = (Byte)(_t_>>40),
1691 		(dst)[P1_filesz_L6] = (Byte)(_t_>>48),
1692 		(dst)[P1_filesz_L7] = (Byte)(_t_>>56); };
1693 		{ Elf64_Xword _t_ = src->p_memsz;
1694 		(dst)[P1_memsz_L0] = (Byte)_t_,
1695 		(dst)[P1_memsz_L1] = (Byte)(_t_>>8),
1696 		(dst)[P1_memsz_L2] = (Byte)(_t_>>16),
1697 		(dst)[P1_memsz_L3] = (Byte)(_t_>>24),
1698 		(dst)[P1_memsz_L4] = (Byte)(_t_>>32),
1699 		(dst)[P1_memsz_L5] = (Byte)(_t_>>40),
1700 		(dst)[P1_memsz_L6] = (Byte)(_t_>>48),
1701 		(dst)[P1_memsz_L7] = (Byte)(_t_>>56); };
1702 		{ Elf64_Xword _t_ = src->p_align;
1703 		(dst)[P1_align_L0] = (Byte)_t_,
1704 		(dst)[P1_align_L1] = (Byte)(_t_>>8),
1705 		(dst)[P1_align_L2] = (Byte)(_t_>>16),
1706 		(dst)[P1_align_L3] = (Byte)(_t_>>24),
1707 		(dst)[P1_align_L4] = (Byte)(_t_>>32),
1708 		(dst)[P1_align_L5] = (Byte)(_t_>>40),
1709 		(dst)[P1_align_L6] = (Byte)(_t_>>48),
1710 		(dst)[P1_align_L7] = (Byte)(_t_>>56); };
1711 		dst += P1_sizeof;
1712 	} while (++src < end);
1713 }
1714 
1715 static void
1716 phdr_2M11_tof(Byte *dst, Elf64_Phdr *src, size_t cnt)
1717 {
1718 	Elf64_Phdr	*end = src + cnt;
1719 
1720 	do {
1721 		{ Elf64_Word _t_ = src->p_type;
1722 		(dst)[P1_type_M0] = (Byte)_t_,
1723 		(dst)[P1_type_M1] = (Byte)(_t_>>8),
1724 		(dst)[P1_type_M2] = (Byte)(_t_>>16),
1725 		(dst)[P1_type_M3] = (Byte)(_t_>>24); };
1726 		{ Elf64_Word _t_ = src->p_flags;
1727 		(dst)[P1_flags_M0] = (Byte)_t_,
1728 		(dst)[P1_flags_M1] = (Byte)(_t_>>8),
1729 		(dst)[P1_flags_M2] = (Byte)(_t_>>16),
1730 		(dst)[P1_flags_M3] = (Byte)(_t_>>24); };
1731 		{ Elf64_Off _t_ = src->p_offset;
1732 		(dst)[P1_offset_M0] = (Byte)_t_,
1733 		(dst)[P1_offset_M1] = (Byte)(_t_>>8),
1734 		(dst)[P1_offset_M2] = (Byte)(_t_>>16),
1735 		(dst)[P1_offset_M3] = (Byte)(_t_>>24),
1736 		(dst)[P1_offset_M4] = (Byte)(_t_>>32),
1737 		(dst)[P1_offset_M5] = (Byte)(_t_>>40),
1738 		(dst)[P1_offset_M6] = (Byte)(_t_>>48),
1739 		(dst)[P1_offset_M7] = (Byte)(_t_>>56); };
1740 		{	Elf64_Addr _t_ = src->p_vaddr;
1741 		(dst)[P1_vaddr_M0] = (Byte)_t_,
1742 		(dst)[P1_vaddr_M1] = (Byte)(_t_>>8),
1743 		(dst)[P1_vaddr_M2] = (Byte)(_t_>>16),
1744 		(dst)[P1_vaddr_M3] = (Byte)(_t_>>24),
1745 		(dst)[P1_vaddr_M4] = (Byte)(_t_>>32),
1746 		(dst)[P1_vaddr_M5] = (Byte)(_t_>>40),
1747 		(dst)[P1_vaddr_M6] = (Byte)(_t_>>48),
1748 		(dst)[P1_vaddr_M7] = (Byte)(_t_>>56); };
1749 		{	Elf64_Addr _t_ = src->p_paddr;
1750 		(dst)[P1_paddr_M0] = (Byte)_t_,
1751 		(dst)[P1_paddr_M1] = (Byte)(_t_>>8),
1752 		(dst)[P1_paddr_M2] = (Byte)(_t_>>16),
1753 		(dst)[P1_paddr_M3] = (Byte)(_t_>>24),
1754 		(dst)[P1_paddr_M4] = (Byte)(_t_>>32),
1755 		(dst)[P1_paddr_M5] = (Byte)(_t_>>40),
1756 		(dst)[P1_paddr_M6] = (Byte)(_t_>>48),
1757 		(dst)[P1_paddr_M7] = (Byte)(_t_>>56); };
1758 		{ Elf64_Xword _t_ = src->p_filesz;
1759 		(dst)[P1_filesz_M0] = (Byte)_t_,
1760 		(dst)[P1_filesz_M1] = (Byte)(_t_>>8),
1761 		(dst)[P1_filesz_M2] = (Byte)(_t_>>16),
1762 		(dst)[P1_filesz_M3] = (Byte)(_t_>>24),
1763 		(dst)[P1_filesz_M4] = (Byte)(_t_>>32),
1764 		(dst)[P1_filesz_M5] = (Byte)(_t_>>40),
1765 		(dst)[P1_filesz_M6] = (Byte)(_t_>>48),
1766 		(dst)[P1_filesz_M7] = (Byte)(_t_>>56); };
1767 		{ Elf64_Xword _t_ = src->p_memsz;
1768 		(dst)[P1_memsz_M0] = (Byte)_t_,
1769 		(dst)[P1_memsz_M1] = (Byte)(_t_>>8),
1770 		(dst)[P1_memsz_M2] = (Byte)(_t_>>16),
1771 		(dst)[P1_memsz_M3] = (Byte)(_t_>>24),
1772 		(dst)[P1_memsz_M4] = (Byte)(_t_>>32),
1773 		(dst)[P1_memsz_M5] = (Byte)(_t_>>40),
1774 		(dst)[P1_memsz_M6] = (Byte)(_t_>>48),
1775 		(dst)[P1_memsz_M7] = (Byte)(_t_>>56); };
1776 		{ Elf64_Xword _t_ = src->p_align;
1777 		(dst)[P1_align_M0] = (Byte)_t_,
1778 		(dst)[P1_align_M1] = (Byte)(_t_>>8),
1779 		(dst)[P1_align_M2] = (Byte)(_t_>>16),
1780 		(dst)[P1_align_M3] = (Byte)(_t_>>24),
1781 		(dst)[P1_align_M4] = (Byte)(_t_>>32),
1782 		(dst)[P1_align_M5] = (Byte)(_t_>>40),
1783 		(dst)[P1_align_M6] = (Byte)(_t_>>48),
1784 		(dst)[P1_align_M7] = (Byte)(_t_>>56); };
1785 		dst += P1_sizeof;
1786 	} while (++src < end);
1787 }
1788 
1789 
1790 
1791 
1792 
1793 static void
1794 rel_2L11_tof(Byte *dst, Elf64_Rel *src, size_t cnt)
1795 {
1796 	Elf64_Rel	*end = src + cnt;
1797 
1798 	do {
1799 		{	Elf64_Addr _t_ = src->r_offset;
1800 		(dst)[R1_offset_L0] = (Byte)_t_,
1801 		(dst)[R1_offset_L1] = (Byte)(_t_>>8),
1802 		(dst)[R1_offset_L2] = (Byte)(_t_>>16),
1803 		(dst)[R1_offset_L3] = (Byte)(_t_>>24),
1804 		(dst)[R1_offset_L4] = (Byte)(_t_>>32),
1805 		(dst)[R1_offset_L5] = (Byte)(_t_>>40),
1806 		(dst)[R1_offset_L6] = (Byte)(_t_>>48),
1807 		(dst)[R1_offset_L7] = (Byte)(_t_>>56); };
1808 		{ Elf64_Xword _t_ = src->r_info;
1809 		(dst)[R1_info_L0] = (Byte)_t_,
1810 		(dst)[R1_info_L1] = (Byte)(_t_>>8),
1811 		(dst)[R1_info_L2] = (Byte)(_t_>>16),
1812 		(dst)[R1_info_L3] = (Byte)(_t_>>24),
1813 		(dst)[R1_info_L4] = (Byte)(_t_>>32),
1814 		(dst)[R1_info_L5] = (Byte)(_t_>>40),
1815 		(dst)[R1_info_L6] = (Byte)(_t_>>48),
1816 		(dst)[R1_info_L7] = (Byte)(_t_>>56); };
1817 		dst += R1_sizeof;
1818 	} while (++src < end);
1819 }
1820 
1821 static void
1822 rel_2M11_tof(Byte *dst, Elf64_Rel *src, size_t cnt)
1823 {
1824 	Elf64_Rel	*end = src + cnt;
1825 
1826 	do {
1827 		{	Elf64_Addr _t_ = src->r_offset;
1828 		(dst)[R1_offset_M0] = (Byte)_t_,
1829 		(dst)[R1_offset_M1] = (Byte)(_t_>>8),
1830 		(dst)[R1_offset_M2] = (Byte)(_t_>>16),
1831 		(dst)[R1_offset_M3] = (Byte)(_t_>>24),
1832 		(dst)[R1_offset_M4] = (Byte)(_t_>>32),
1833 		(dst)[R1_offset_M5] = (Byte)(_t_>>40),
1834 		(dst)[R1_offset_M6] = (Byte)(_t_>>48),
1835 		(dst)[R1_offset_M7] = (Byte)(_t_>>56); };
1836 		{ Elf64_Xword _t_ = src->r_info;
1837 		(dst)[R1_info_M0] = (Byte)_t_,
1838 		(dst)[R1_info_M1] = (Byte)(_t_>>8),
1839 		(dst)[R1_info_M2] = (Byte)(_t_>>16),
1840 		(dst)[R1_info_M3] = (Byte)(_t_>>24),
1841 		(dst)[R1_info_M4] = (Byte)(_t_>>32),
1842 		(dst)[R1_info_M5] = (Byte)(_t_>>40),
1843 		(dst)[R1_info_M6] = (Byte)(_t_>>48),
1844 		(dst)[R1_info_M7] = (Byte)(_t_>>56); };
1845 		dst += R1_sizeof;
1846 	} while (++src < end);
1847 }
1848 
1849 
1850 
1851 
1852 
1853 static void
1854 rela_2L11_tof(Byte *dst, Elf64_Rela *src, size_t cnt)
1855 {
1856 	Elf64_Rela	*end = src + cnt;
1857 
1858 	do {
1859 		{	Elf64_Addr _t_ = src->r_offset;
1860 		(dst)[RA1_offset_L0] = (Byte)_t_,
1861 		(dst)[RA1_offset_L1] = (Byte)(_t_>>8),
1862 		(dst)[RA1_offset_L2] = (Byte)(_t_>>16),
1863 		(dst)[RA1_offset_L3] = (Byte)(_t_>>24),
1864 		(dst)[RA1_offset_L4] = (Byte)(_t_>>32),
1865 		(dst)[RA1_offset_L5] = (Byte)(_t_>>40),
1866 		(dst)[RA1_offset_L6] = (Byte)(_t_>>48),
1867 		(dst)[RA1_offset_L7] = (Byte)(_t_>>56); };
1868 		{ Elf64_Xword _t_ = src->r_info;
1869 		(dst)[RA1_info_L0] = (Byte)_t_,
1870 		(dst)[RA1_info_L1] = (Byte)(_t_>>8),
1871 		(dst)[RA1_info_L2] = (Byte)(_t_>>16),
1872 		(dst)[RA1_info_L3] = (Byte)(_t_>>24),
1873 		(dst)[RA1_info_L4] = (Byte)(_t_>>32),
1874 		(dst)[RA1_info_L5] = (Byte)(_t_>>40),
1875 		(dst)[RA1_info_L6] = (Byte)(_t_>>48),
1876 		(dst)[RA1_info_L7] = (Byte)(_t_>>56); };
1877 		/*CONSTANTCONDITION*/
1878 		if (~(Elf64_Xword)0 == -(Elf64_Sxword)1) {	/* 2s comp */
1879 			{ Elf64_Xword _t_ = src->r_addend;
1880 		(dst)[RA1_addend_L0] = (Byte)_t_,
1881 		(dst)[RA1_addend_L1] = (Byte)(_t_>>8),
1882 		(dst)[RA1_addend_L2] = (Byte)(_t_>>16),
1883 		(dst)[RA1_addend_L3] = (Byte)(_t_>>24),
1884 		(dst)[RA1_addend_L4] = (Byte)(_t_>>32),
1885 		(dst)[RA1_addend_L5] = (Byte)(_t_>>40),
1886 		(dst)[RA1_addend_L6] = (Byte)(_t_>>48),
1887 		(dst)[RA1_addend_L7] = (Byte)(_t_>>56); };
1888 		} else {
1889 			Elf64_Xword	w;
1890 
1891 			if (src->r_addend < 0) {
1892 				w = - src->r_addend;
1893 				w = ~w + 1;
1894 			} else
1895 				w = src->r_addend;
1896 			{ Elf64_Xword _t_ = w;
1897 		(dst)[RA1_addend_L0] = (Byte)_t_,
1898 		(dst)[RA1_addend_L1] = (Byte)(_t_>>8),
1899 		(dst)[RA1_addend_L2] = (Byte)(_t_>>16),
1900 		(dst)[RA1_addend_L3] = (Byte)(_t_>>24),
1901 		(dst)[RA1_addend_L4] = (Byte)(_t_>>32),
1902 		(dst)[RA1_addend_L5] = (Byte)(_t_>>40),
1903 		(dst)[RA1_addend_L6] = (Byte)(_t_>>48),
1904 		(dst)[RA1_addend_L7] = (Byte)(_t_>>56); };
1905 		}
1906 		dst += RA1_sizeof;
1907 	} while (++src < end);
1908 }
1909 
1910 static void
1911 rela_2M11_tof(Byte *dst, Elf64_Rela *src, size_t cnt)
1912 {
1913 	Elf64_Rela	*end = src + cnt;
1914 
1915 	do {
1916 		{	Elf64_Addr _t_ = src->r_offset;
1917 		(dst)[RA1_offset_M0] = (Byte)_t_,
1918 		(dst)[RA1_offset_M1] = (Byte)(_t_>>8),
1919 		(dst)[RA1_offset_M2] = (Byte)(_t_>>16),
1920 		(dst)[RA1_offset_M3] = (Byte)(_t_>>24),
1921 		(dst)[RA1_offset_M4] = (Byte)(_t_>>32),
1922 		(dst)[RA1_offset_M5] = (Byte)(_t_>>40),
1923 		(dst)[RA1_offset_M6] = (Byte)(_t_>>48),
1924 		(dst)[RA1_offset_M7] = (Byte)(_t_>>56); };
1925 		{ Elf64_Xword _t_ = src->r_info;
1926 		(dst)[RA1_info_M0] = (Byte)_t_,
1927 		(dst)[RA1_info_M1] = (Byte)(_t_>>8),
1928 		(dst)[RA1_info_M2] = (Byte)(_t_>>16),
1929 		(dst)[RA1_info_M3] = (Byte)(_t_>>24),
1930 		(dst)[RA1_info_M4] = (Byte)(_t_>>32),
1931 		(dst)[RA1_info_M5] = (Byte)(_t_>>40),
1932 		(dst)[RA1_info_M6] = (Byte)(_t_>>48),
1933 		(dst)[RA1_info_M7] = (Byte)(_t_>>56); };
1934 		/*CONSTANTCONDITION*/
1935 		if (~(Elf64_Xword)0 == -(Elf64_Sxword)1) {	/* 2s comp */
1936 			{ Elf64_Xword _t_ = src->r_addend;
1937 		(dst)[RA1_addend_M0] = (Byte)_t_,
1938 		(dst)[RA1_addend_M1] = (Byte)(_t_>>8),
1939 		(dst)[RA1_addend_M2] = (Byte)(_t_>>16),
1940 		(dst)[RA1_addend_M3] = (Byte)(_t_>>24),
1941 		(dst)[RA1_addend_M4] = (Byte)(_t_>>32),
1942 		(dst)[RA1_addend_M5] = (Byte)(_t_>>40),
1943 		(dst)[RA1_addend_M6] = (Byte)(_t_>>48),
1944 		(dst)[RA1_addend_M7] = (Byte)(_t_>>56); };
1945 		} else {
1946 			Elf64_Xword	w;
1947 
1948 			if (src->r_addend < 0) {
1949 				w = - src->r_addend;
1950 				w = ~w + 1;
1951 			} else
1952 				w = src->r_addend;
1953 			{ Elf64_Xword _t_ = w;
1954 		(dst)[RA1_addend_M0] = (Byte)_t_,
1955 		(dst)[RA1_addend_M1] = (Byte)(_t_>>8),
1956 		(dst)[RA1_addend_M2] = (Byte)(_t_>>16),
1957 		(dst)[RA1_addend_M3] = (Byte)(_t_>>24),
1958 		(dst)[RA1_addend_M4] = (Byte)(_t_>>32),
1959 		(dst)[RA1_addend_M5] = (Byte)(_t_>>40),
1960 		(dst)[RA1_addend_M6] = (Byte)(_t_>>48),
1961 		(dst)[RA1_addend_M7] = (Byte)(_t_>>56); };
1962 		}
1963 		dst += RA1_sizeof;
1964 	} while (++src < end);
1965 }
1966 
1967 
1968 
1969 
1970 
1971 static void
1972 shdr_2L11_tof(Byte *dst, Elf64_Shdr *src, size_t cnt)
1973 {
1974 	Elf64_Shdr	*end = src + cnt;
1975 
1976 	do {
1977 		{ Elf64_Word _t_ = src->sh_name;
1978 		(dst)[SH1_name_L0] = (Byte)_t_,
1979 		(dst)[SH1_name_L1] = (Byte)(_t_>>8),
1980 		(dst)[SH1_name_L2] = (Byte)(_t_>>16),
1981 		(dst)[SH1_name_L3] = (Byte)(_t_>>24); };
1982 		{ Elf64_Word _t_ = src->sh_type;
1983 		(dst)[SH1_type_L0] = (Byte)_t_,
1984 		(dst)[SH1_type_L1] = (Byte)(_t_>>8),
1985 		(dst)[SH1_type_L2] = (Byte)(_t_>>16),
1986 		(dst)[SH1_type_L3] = (Byte)(_t_>>24); };
1987 		{ Elf64_Xword _t_ = src->sh_flags;
1988 		(dst)[SH1_flags_L0] = (Byte)_t_,
1989 		(dst)[SH1_flags_L1] = (Byte)(_t_>>8),
1990 		(dst)[SH1_flags_L2] = (Byte)(_t_>>16),
1991 		(dst)[SH1_flags_L3] = (Byte)(_t_>>24),
1992 		(dst)[SH1_flags_L4] = (Byte)(_t_>>32),
1993 		(dst)[SH1_flags_L5] = (Byte)(_t_>>40),
1994 		(dst)[SH1_flags_L6] = (Byte)(_t_>>48),
1995 		(dst)[SH1_flags_L7] = (Byte)(_t_>>56); };
1996 		{	Elf64_Addr _t_ = src->sh_addr;
1997 		(dst)[SH1_addr_L0] = (Byte)_t_,
1998 		(dst)[SH1_addr_L1] = (Byte)(_t_>>8),
1999 		(dst)[SH1_addr_L2] = (Byte)(_t_>>16),
2000 		(dst)[SH1_addr_L3] = (Byte)(_t_>>24),
2001 		(dst)[SH1_addr_L4] = (Byte)(_t_>>32),
2002 		(dst)[SH1_addr_L5] = (Byte)(_t_>>40),
2003 		(dst)[SH1_addr_L6] = (Byte)(_t_>>48),
2004 		(dst)[SH1_addr_L7] = (Byte)(_t_>>56); };
2005 		{ Elf64_Off _t_ = src->sh_offset;
2006 		(dst)[SH1_offset_L0] = (Byte)_t_,
2007 		(dst)[SH1_offset_L1] = (Byte)(_t_>>8),
2008 		(dst)[SH1_offset_L2] = (Byte)(_t_>>16),
2009 		(dst)[SH1_offset_L3] = (Byte)(_t_>>24),
2010 		(dst)[SH1_offset_L4] = (Byte)(_t_>>32),
2011 		(dst)[SH1_offset_L5] = (Byte)(_t_>>40),
2012 		(dst)[SH1_offset_L6] = (Byte)(_t_>>48),
2013 		(dst)[SH1_offset_L7] = (Byte)(_t_>>56); };
2014 		{ Elf64_Xword _t_ = src->sh_size;
2015 		(dst)[SH1_size_L0] = (Byte)_t_,
2016 		(dst)[SH1_size_L1] = (Byte)(_t_>>8),
2017 		(dst)[SH1_size_L2] = (Byte)(_t_>>16),
2018 		(dst)[SH1_size_L3] = (Byte)(_t_>>24),
2019 		(dst)[SH1_size_L4] = (Byte)(_t_>>32),
2020 		(dst)[SH1_size_L5] = (Byte)(_t_>>40),
2021 		(dst)[SH1_size_L6] = (Byte)(_t_>>48),
2022 		(dst)[SH1_size_L7] = (Byte)(_t_>>56); };
2023 		{ Elf64_Word _t_ = src->sh_link;
2024 		(dst)[SH1_link_L0] = (Byte)_t_,
2025 		(dst)[SH1_link_L1] = (Byte)(_t_>>8),
2026 		(dst)[SH1_link_L2] = (Byte)(_t_>>16),
2027 		(dst)[SH1_link_L3] = (Byte)(_t_>>24); };
2028 		{ Elf64_Word _t_ = src->sh_info;
2029 		(dst)[SH1_info_L0] = (Byte)_t_,
2030 		(dst)[SH1_info_L1] = (Byte)(_t_>>8),
2031 		(dst)[SH1_info_L2] = (Byte)(_t_>>16),
2032 		(dst)[SH1_info_L3] = (Byte)(_t_>>24); };
2033 		{ Elf64_Xword _t_ = src->sh_addralign;
2034 		(dst)[SH1_addralign_L0] = (Byte)_t_,
2035 		(dst)[SH1_addralign_L1] = (Byte)(_t_>>8),
2036 		(dst)[SH1_addralign_L2] = (Byte)(_t_>>16),
2037 		(dst)[SH1_addralign_L3] = (Byte)(_t_>>24),
2038 		(dst)[SH1_addralign_L4] = (Byte)(_t_>>32),
2039 		(dst)[SH1_addralign_L5] = (Byte)(_t_>>40),
2040 		(dst)[SH1_addralign_L6] = (Byte)(_t_>>48),
2041 		(dst)[SH1_addralign_L7] = (Byte)(_t_>>56); };
2042 		{ Elf64_Xword _t_ = src->sh_entsize;
2043 		(dst)[SH1_entsize_L0] = (Byte)_t_,
2044 		(dst)[SH1_entsize_L1] = (Byte)(_t_>>8),
2045 		(dst)[SH1_entsize_L2] = (Byte)(_t_>>16),
2046 		(dst)[SH1_entsize_L3] = (Byte)(_t_>>24),
2047 		(dst)[SH1_entsize_L4] = (Byte)(_t_>>32),
2048 		(dst)[SH1_entsize_L5] = (Byte)(_t_>>40),
2049 		(dst)[SH1_entsize_L6] = (Byte)(_t_>>48),
2050 		(dst)[SH1_entsize_L7] = (Byte)(_t_>>56); };
2051 		dst += SH1_sizeof;
2052 	} while (++src < end);
2053 }
2054 
2055 static void
2056 shdr_2M11_tof(Byte *dst, Elf64_Shdr *src, size_t cnt)
2057 {
2058 	Elf64_Shdr	*end = src + cnt;
2059 
2060 	do {
2061 		{ Elf64_Word _t_ = src->sh_name;
2062 		(dst)[SH1_name_M0] = (Byte)_t_,
2063 		(dst)[SH1_name_M1] = (Byte)(_t_>>8),
2064 		(dst)[SH1_name_M2] = (Byte)(_t_>>16),
2065 		(dst)[SH1_name_M3] = (Byte)(_t_>>24); };
2066 		{ Elf64_Word _t_ = src->sh_type;
2067 		(dst)[SH1_type_M0] = (Byte)_t_,
2068 		(dst)[SH1_type_M1] = (Byte)(_t_>>8),
2069 		(dst)[SH1_type_M2] = (Byte)(_t_>>16),
2070 		(dst)[SH1_type_M3] = (Byte)(_t_>>24); };
2071 		{ Elf64_Xword _t_ = src->sh_flags;
2072 		(dst)[SH1_flags_M0] = (Byte)_t_,
2073 		(dst)[SH1_flags_M1] = (Byte)(_t_>>8),
2074 		(dst)[SH1_flags_M2] = (Byte)(_t_>>16),
2075 		(dst)[SH1_flags_M3] = (Byte)(_t_>>24),
2076 		(dst)[SH1_flags_M4] = (Byte)(_t_>>32),
2077 		(dst)[SH1_flags_M5] = (Byte)(_t_>>40),
2078 		(dst)[SH1_flags_M6] = (Byte)(_t_>>48),
2079 		(dst)[SH1_flags_M7] = (Byte)(_t_>>56); };
2080 		{	Elf64_Addr _t_ = src->sh_addr;
2081 		(dst)[SH1_addr_M0] = (Byte)_t_,
2082 		(dst)[SH1_addr_M1] = (Byte)(_t_>>8),
2083 		(dst)[SH1_addr_M2] = (Byte)(_t_>>16),
2084 		(dst)[SH1_addr_M3] = (Byte)(_t_>>24),
2085 		(dst)[SH1_addr_M4] = (Byte)(_t_>>32),
2086 		(dst)[SH1_addr_M5] = (Byte)(_t_>>40),
2087 		(dst)[SH1_addr_M6] = (Byte)(_t_>>48),
2088 		(dst)[SH1_addr_M7] = (Byte)(_t_>>56); };
2089 		{ Elf64_Off _t_ = src->sh_offset;
2090 		(dst)[SH1_offset_M0] = (Byte)_t_,
2091 		(dst)[SH1_offset_M1] = (Byte)(_t_>>8),
2092 		(dst)[SH1_offset_M2] = (Byte)(_t_>>16),
2093 		(dst)[SH1_offset_M3] = (Byte)(_t_>>24),
2094 		(dst)[SH1_offset_M4] = (Byte)(_t_>>32),
2095 		(dst)[SH1_offset_M5] = (Byte)(_t_>>40),
2096 		(dst)[SH1_offset_M6] = (Byte)(_t_>>48),
2097 		(dst)[SH1_offset_M7] = (Byte)(_t_>>56); };
2098 		{ Elf64_Xword _t_ = src->sh_size;
2099 		(dst)[SH1_size_M0] = (Byte)_t_,
2100 		(dst)[SH1_size_M1] = (Byte)(_t_>>8),
2101 		(dst)[SH1_size_M2] = (Byte)(_t_>>16),
2102 		(dst)[SH1_size_M3] = (Byte)(_t_>>24),
2103 		(dst)[SH1_size_M4] = (Byte)(_t_>>32),
2104 		(dst)[SH1_size_M5] = (Byte)(_t_>>40),
2105 		(dst)[SH1_size_M6] = (Byte)(_t_>>48),
2106 		(dst)[SH1_size_M7] = (Byte)(_t_>>56); };
2107 		{ Elf64_Word _t_ = src->sh_link;
2108 		(dst)[SH1_link_M0] = (Byte)_t_,
2109 		(dst)[SH1_link_M1] = (Byte)(_t_>>8),
2110 		(dst)[SH1_link_M2] = (Byte)(_t_>>16),
2111 		(dst)[SH1_link_M3] = (Byte)(_t_>>24); };
2112 		{ Elf64_Word _t_ = src->sh_info;
2113 		(dst)[SH1_info_M0] = (Byte)_t_,
2114 		(dst)[SH1_info_M1] = (Byte)(_t_>>8),
2115 		(dst)[SH1_info_M2] = (Byte)(_t_>>16),
2116 		(dst)[SH1_info_M3] = (Byte)(_t_>>24); };
2117 		{ Elf64_Xword _t_ = src->sh_addralign;
2118 		(dst)[SH1_addralign_M0] = (Byte)_t_,
2119 		(dst)[SH1_addralign_M1] = (Byte)(_t_>>8),
2120 		(dst)[SH1_addralign_M2] = (Byte)(_t_>>16),
2121 		(dst)[SH1_addralign_M3] = (Byte)(_t_>>24),
2122 		(dst)[SH1_addralign_M4] = (Byte)(_t_>>32),
2123 		(dst)[SH1_addralign_M5] = (Byte)(_t_>>40),
2124 		(dst)[SH1_addralign_M6] = (Byte)(_t_>>48),
2125 		(dst)[SH1_addralign_M7] = (Byte)(_t_>>56); };
2126 		{ Elf64_Xword _t_ = src->sh_entsize;
2127 		(dst)[SH1_entsize_M0] = (Byte)_t_,
2128 		(dst)[SH1_entsize_M1] = (Byte)(_t_>>8),
2129 		(dst)[SH1_entsize_M2] = (Byte)(_t_>>16),
2130 		(dst)[SH1_entsize_M3] = (Byte)(_t_>>24),
2131 		(dst)[SH1_entsize_M4] = (Byte)(_t_>>32),
2132 		(dst)[SH1_entsize_M5] = (Byte)(_t_>>40),
2133 		(dst)[SH1_entsize_M6] = (Byte)(_t_>>48),
2134 		(dst)[SH1_entsize_M7] = (Byte)(_t_>>56); };
2135 		dst += SH1_sizeof;
2136 	} while (++src < end);
2137 }
2138 
2139 
2140 
2141 
2142 
2143 static void
2144 sword_2L_tof(Byte *dst, Elf64_Sword *src, size_t cnt)
2145 {
2146 	Elf64_Sword	*end = src + cnt;
2147 
2148 	do {
2149 		/*CONSTANTCONDITION*/
2150 		if (~(Elf64_Word)0 == -(Elf64_Sword)1) {	/* 2s comp */
2151 			{ Elf64_Word _t_ = *src;
2152 		(dst)[W_L0] = (Byte)_t_,
2153 		(dst)[W_L1] = (Byte)(_t_>>8),
2154 		(dst)[W_L2] = (Byte)(_t_>>16),
2155 		(dst)[W_L3] = (Byte)(_t_>>24); };
2156 		} else {
2157 			Elf64_Word	w;
2158 
2159 			if (*src < 0) {
2160 				w = - *src;
2161 				w = ~w + 1;
2162 			} else
2163 				w = *src;
2164 			{ Elf64_Word _t_ = w;
2165 		(dst)[W_L0] = (Byte)_t_,
2166 		(dst)[W_L1] = (Byte)(_t_>>8),
2167 		(dst)[W_L2] = (Byte)(_t_>>16),
2168 		(dst)[W_L3] = (Byte)(_t_>>24); };
2169 		}
2170 		dst += W_sizeof;
2171 	} while (++src < end);
2172 }
2173 
2174 static void
2175 sword_2M_tof(Byte *dst, Elf64_Sword *src, size_t cnt)
2176 {
2177 	Elf64_Sword	*end = src + cnt;
2178 
2179 	do {
2180 		/*CONSTANTCONDITION*/
2181 		if (~(Elf64_Word)0 == -(Elf64_Sword)1) {	/* 2s comp */
2182 			{ Elf64_Word _t_ = *src;
2183 		(dst)[W_M0] = (Byte)_t_,
2184 		(dst)[W_M1] = (Byte)(_t_>>8),
2185 		(dst)[W_M2] = (Byte)(_t_>>16),
2186 		(dst)[W_M3] = (Byte)(_t_>>24); };
2187 		} else {
2188 			Elf64_Word	w;
2189 
2190 			if (*src < 0) {
2191 				w = - *src;
2192 				w = ~w + 1;
2193 			} else
2194 				w = *src;
2195 			{ Elf64_Word _t_ = w;
2196 		(dst)[W_M0] = (Byte)_t_,
2197 		(dst)[W_M1] = (Byte)(_t_>>8),
2198 		(dst)[W_M2] = (Byte)(_t_>>16),
2199 		(dst)[W_M3] = (Byte)(_t_>>24); };
2200 		}
2201 		dst += W_sizeof;
2202 	} while (++src < end);
2203 }
2204 
2205 
2206 
2207 
2208 
2209 static void
2210 cap_2L11_tof(unsigned char *dst, Elf64_Cap *src, size_t cnt)
2211 {
2212 	Elf64_Cap	*end = src + cnt;
2213 
2214 	do {
2215 		{ Elf64_Xword _t_ = src->c_tag;
2216 		(dst)[C1_tag_L0] = (Byte)_t_,
2217 		(dst)[C1_tag_L1] = (Byte)(_t_>>8),
2218 		(dst)[C1_tag_L2] = (Byte)(_t_>>16),
2219 		(dst)[C1_tag_L3] = (Byte)(_t_>>24),
2220 		(dst)[C1_tag_L4] = (Byte)(_t_>>32),
2221 		(dst)[C1_tag_L5] = (Byte)(_t_>>40),
2222 		(dst)[C1_tag_L6] = (Byte)(_t_>>48),
2223 		(dst)[C1_tag_L7] = (Byte)(_t_>>56); };
2224 		{ Elf64_Xword _t_ = src->c_un.c_val;
2225 		(dst)[C1_val_L0] = (Byte)_t_,
2226 		(dst)[C1_val_L1] = (Byte)(_t_>>8),
2227 		(dst)[C1_val_L2] = (Byte)(_t_>>16),
2228 		(dst)[C1_val_L3] = (Byte)(_t_>>24),
2229 		(dst)[C1_val_L4] = (Byte)(_t_>>32),
2230 		(dst)[C1_val_L5] = (Byte)(_t_>>40),
2231 		(dst)[C1_val_L6] = (Byte)(_t_>>48),
2232 		(dst)[C1_val_L7] = (Byte)(_t_>>56); };
2233 		dst += C1_sizeof;
2234 	} while (++src < end);
2235 }
2236 
2237 static void
2238 cap_2M11_tof(unsigned char *dst, Elf64_Cap *src, size_t cnt)
2239 {
2240 	Elf64_Cap	*end = src + cnt;
2241 
2242 	do {
2243 		{ Elf64_Xword _t_ = src->c_tag;
2244 		(dst)[C1_tag_M0] = (Byte)_t_,
2245 		(dst)[C1_tag_M1] = (Byte)(_t_>>8),
2246 		(dst)[C1_tag_M2] = (Byte)(_t_>>16),
2247 		(dst)[C1_tag_M3] = (Byte)(_t_>>24),
2248 		(dst)[C1_tag_M4] = (Byte)(_t_>>32),
2249 		(dst)[C1_tag_M5] = (Byte)(_t_>>40),
2250 		(dst)[C1_tag_M6] = (Byte)(_t_>>48),
2251 		(dst)[C1_tag_M7] = (Byte)(_t_>>56); };
2252 		{ Elf64_Xword _t_ = src->c_un.c_val;
2253 		(dst)[C1_val_M0] = (Byte)_t_,
2254 		(dst)[C1_val_M1] = (Byte)(_t_>>8),
2255 		(dst)[C1_val_M2] = (Byte)(_t_>>16),
2256 		(dst)[C1_val_M3] = (Byte)(_t_>>24),
2257 		(dst)[C1_val_M4] = (Byte)(_t_>>32),
2258 		(dst)[C1_val_M5] = (Byte)(_t_>>40),
2259 		(dst)[C1_val_M6] = (Byte)(_t_>>48),
2260 		(dst)[C1_val_M7] = (Byte)(_t_>>56); };
2261 		dst += C1_sizeof;
2262 	} while (++src < end);
2263 }
2264 
2265 
2266 
2267 
2268 
2269 static void
2270 syminfo_2L11_tof(unsigned char *dst, Elf64_Syminfo *src, size_t cnt)
2271 {
2272 	Elf64_Syminfo	*end = src + cnt;
2273 
2274 	do {
2275 		{ Elf64_Half _t_ = src->si_boundto;
2276 		(dst)[SI1_boundto_L0] = (Byte)_t_,
2277 		(dst)[SI1_boundto_L1] = (Byte)(_t_>>8); };
2278 		{ Elf64_Half _t_ = src->si_flags;
2279 		(dst)[SI1_flags_L0] = (Byte)_t_,
2280 		(dst)[SI1_flags_L1] = (Byte)(_t_>>8); };
2281 		dst += SI1_sizeof;
2282 	} while (++src < end);
2283 }
2284 
2285 static void
2286 syminfo_2M11_tof(unsigned char *dst, Elf64_Syminfo *src, size_t cnt)
2287 {
2288 	Elf64_Syminfo	*end = src + cnt;
2289 
2290 	do {
2291 		{ Elf64_Half _t_ = src->si_boundto;
2292 		(dst)[SI1_boundto_M0] = (Byte)_t_,
2293 		(dst)[SI1_boundto_M1] = (Byte)(_t_>>8); };
2294 		{ Elf64_Half _t_ = src->si_flags;
2295 		(dst)[SI1_flags_M0] = (Byte)_t_,
2296 		(dst)[SI1_flags_M1] = (Byte)(_t_>>8); };
2297 		dst += SI1_sizeof;
2298 	} while (++src < end);
2299 }
2300 
2301 
2302 
2303 
2304 
2305 static void
2306 sym_2L11_tof(Byte *dst, Elf64_Sym *src, size_t cnt)
2307 {
2308 	Elf64_Sym	*end = src + cnt;
2309 
2310 	do {
2311 		{ Elf64_Word _t_ = src->st_name;
2312 		(dst)[ST1_name_L0] = (Byte)_t_,
2313 		(dst)[ST1_name_L1] = (Byte)(_t_>>8),
2314 		(dst)[ST1_name_L2] = (Byte)(_t_>>16),
2315 		(dst)[ST1_name_L3] = (Byte)(_t_>>24); };
2316 		(dst)[ST1_info_L] = (Byte)(src->st_info);
2317 		(dst)[ST1_other_L] = (Byte)(src->st_other);
2318 		{ Elf64_Half _t_ = src->st_shndx;
2319 		(dst)[ST1_shndx_L0] = (Byte)_t_,
2320 		(dst)[ST1_shndx_L1] = (Byte)(_t_>>8); };
2321 		{	Elf64_Addr _t_ = src->st_value;
2322 		(dst)[ST1_value_L0] = (Byte)_t_,
2323 		(dst)[ST1_value_L1] = (Byte)(_t_>>8),
2324 		(dst)[ST1_value_L2] = (Byte)(_t_>>16),
2325 		(dst)[ST1_value_L3] = (Byte)(_t_>>24),
2326 		(dst)[ST1_value_L4] = (Byte)(_t_>>32),
2327 		(dst)[ST1_value_L5] = (Byte)(_t_>>40),
2328 		(dst)[ST1_value_L6] = (Byte)(_t_>>48),
2329 		(dst)[ST1_value_L7] = (Byte)(_t_>>56); };
2330 		{ Elf64_Xword _t_ = src->st_size;
2331 		(dst)[ST1_size_L0] = (Byte)_t_,
2332 		(dst)[ST1_size_L1] = (Byte)(_t_>>8),
2333 		(dst)[ST1_size_L2] = (Byte)(_t_>>16),
2334 		(dst)[ST1_size_L3] = (Byte)(_t_>>24),
2335 		(dst)[ST1_size_L4] = (Byte)(_t_>>32),
2336 		(dst)[ST1_size_L5] = (Byte)(_t_>>40),
2337 		(dst)[ST1_size_L6] = (Byte)(_t_>>48),
2338 		(dst)[ST1_size_L7] = (Byte)(_t_>>56); };
2339 		dst += ST1_sizeof;
2340 	} while (++src < end);
2341 }
2342 
2343 static void
2344 sym_2M11_tof(Byte *dst, Elf64_Sym *src, size_t cnt)
2345 {
2346 	Elf64_Sym	*end = src + cnt;
2347 
2348 	do {
2349 		{ Elf64_Word _t_ = src->st_name;
2350 		(dst)[ST1_name_M0] = (Byte)_t_,
2351 		(dst)[ST1_name_M1] = (Byte)(_t_>>8),
2352 		(dst)[ST1_name_M2] = (Byte)(_t_>>16),
2353 		(dst)[ST1_name_M3] = (Byte)(_t_>>24); };
2354 		(dst)[ST1_info_M] = (Byte)(src->st_info);
2355 		(dst)[ST1_other_M] = (Byte)(src->st_other);
2356 		{ Elf64_Half _t_ = src->st_shndx;
2357 		(dst)[ST1_shndx_M0] = (Byte)_t_,
2358 		(dst)[ST1_shndx_M1] = (Byte)(_t_>>8); };
2359 		{	Elf64_Addr _t_ = src->st_value;
2360 		(dst)[ST1_value_M0] = (Byte)_t_,
2361 		(dst)[ST1_value_M1] = (Byte)(_t_>>8),
2362 		(dst)[ST1_value_M2] = (Byte)(_t_>>16),
2363 		(dst)[ST1_value_M3] = (Byte)(_t_>>24),
2364 		(dst)[ST1_value_M4] = (Byte)(_t_>>32),
2365 		(dst)[ST1_value_M5] = (Byte)(_t_>>40),
2366 		(dst)[ST1_value_M6] = (Byte)(_t_>>48),
2367 		(dst)[ST1_value_M7] = (Byte)(_t_>>56); };
2368 		{ Elf64_Xword _t_ = src->st_size;
2369 		(dst)[ST1_size_M0] = (Byte)_t_,
2370 		(dst)[ST1_size_M1] = (Byte)(_t_>>8),
2371 		(dst)[ST1_size_M2] = (Byte)(_t_>>16),
2372 		(dst)[ST1_size_M3] = (Byte)(_t_>>24),
2373 		(dst)[ST1_size_M4] = (Byte)(_t_>>32),
2374 		(dst)[ST1_size_M5] = (Byte)(_t_>>40),
2375 		(dst)[ST1_size_M6] = (Byte)(_t_>>48),
2376 		(dst)[ST1_size_M7] = (Byte)(_t_>>56); };
2377 		dst += ST1_sizeof;
2378 	} while (++src < end);
2379 }
2380 
2381 
2382 
2383 
2384 
2385 static void
2386 word_2L_tof(Byte *dst, Elf64_Word *src, size_t cnt)
2387 {
2388 	Elf64_Word	*end = src + cnt;
2389 
2390 	do {
2391 		{ Elf64_Word _t_ = *src;
2392 		(dst)[W_L0] = (Byte)_t_,
2393 		(dst)[W_L1] = (Byte)(_t_>>8),
2394 		(dst)[W_L2] = (Byte)(_t_>>16),
2395 		(dst)[W_L3] = (Byte)(_t_>>24); };
2396 		dst += W_sizeof;
2397 	} while (++src < end);
2398 }
2399 
2400 static void
2401 word_2M_tof(Byte *dst, Elf64_Word *src, size_t cnt)
2402 {
2403 	Elf64_Word	*end = src + cnt;
2404 
2405 	do {
2406 		{ Elf64_Word _t_ = *src;
2407 		(dst)[W_M0] = (Byte)_t_,
2408 		(dst)[W_M1] = (Byte)(_t_>>8),
2409 		(dst)[W_M2] = (Byte)(_t_>>16),
2410 		(dst)[W_M3] = (Byte)(_t_>>24); };
2411 		dst += W_sizeof;
2412 	} while (++src < end);
2413 }
2414 
2415 
2416 
2417 
2418 
2419 static void
2420 verdef_2L11_tof(Byte *dst, Elf64_Verdef *src, size_t cnt)
2421 {
2422 	/* LINTED */
2423 	Elf64_Verdef	*end = (Elf64_Verdef *)((Byte *)src + cnt);
2424 
2425 	do {
2426 		Elf64_Verdef	*next_verdef;
2427 		Elf64_Verdaux	*vaux;
2428 		Elf64_Half	i;
2429 		Byte		*vaux_dst;
2430 		Byte		*dst_next;
2431 
2432 		/* LINTED */
2433 		next_verdef = (Elf64_Verdef *)(src->vd_next ?
2434 		    (Byte *)src + src->vd_next : (Byte *)end);
2435 		dst_next = dst + src->vd_next;
2436 
2437 		/* LINTED */
2438 		vaux = (Elf64_Verdaux *)((Byte *)src + src->vd_aux);
2439 		vaux_dst = dst + src->vd_aux;
2440 
2441 		/*
2442 		 * Convert auxilary structures
2443 		 */
2444 		for (i = 0; i < src->vd_cnt; i++) {
2445 			Elf64_Verdaux	*vaux_next;
2446 			Byte		*vaux_dst_next;
2447 
2448 			/*
2449 			 * because our source and destination can be
2450 			 * the same place we need to figure out the next
2451 			 * location now.
2452 			 */
2453 			/* LINTED */
2454 			vaux_next = (Elf64_Verdaux *)((Byte *)vaux +
2455 			    vaux->vda_next);
2456 			vaux_dst_next = vaux_dst + vaux->vda_next;
2457 
2458 			{ Elf64_Word _t_ = vaux->vda_name;
2459 		(vaux_dst)[VDA1_name_L0] = (Byte)_t_,
2460 		(vaux_dst)[VDA1_name_L1] = (Byte)(_t_>>8),
2461 		(vaux_dst)[VDA1_name_L2] = (Byte)(_t_>>16),
2462 		(vaux_dst)[VDA1_name_L3] = (Byte)(_t_>>24); };
2463 			{ Elf64_Word _t_ = vaux->vda_next;
2464 		(vaux_dst)[VDA1_next_L0] = (Byte)_t_,
2465 		(vaux_dst)[VDA1_next_L1] = (Byte)(_t_>>8),
2466 		(vaux_dst)[VDA1_next_L2] = (Byte)(_t_>>16),
2467 		(vaux_dst)[VDA1_next_L3] = (Byte)(_t_>>24); };
2468 			vaux_dst = vaux_dst_next;
2469 			vaux = vaux_next;
2470 		}
2471 
2472 		/*
2473 		 * Convert Elf64_Verdef structure.
2474 		 */
2475 		{ Elf64_Half _t_ = src->vd_version;
2476 		(dst)[VD1_version_L0] = (Byte)_t_,
2477 		(dst)[VD1_version_L1] = (Byte)(_t_>>8); };
2478 		{ Elf64_Half _t_ = src->vd_flags;
2479 		(dst)[VD1_flags_L0] = (Byte)_t_,
2480 		(dst)[VD1_flags_L1] = (Byte)(_t_>>8); };
2481 		{ Elf64_Half _t_ = src->vd_ndx;
2482 		(dst)[VD1_ndx_L0] = (Byte)_t_,
2483 		(dst)[VD1_ndx_L1] = (Byte)(_t_>>8); };
2484 		{ Elf64_Half _t_ = src->vd_cnt;
2485 		(dst)[VD1_cnt_L0] = (Byte)_t_,
2486 		(dst)[VD1_cnt_L1] = (Byte)(_t_>>8); };
2487 		{ Elf64_Word _t_ = src->vd_hash;
2488 		(dst)[VD1_hash_L0] = (Byte)_t_,
2489 		(dst)[VD1_hash_L1] = (Byte)(_t_>>8),
2490 		(dst)[VD1_hash_L2] = (Byte)(_t_>>16),
2491 		(dst)[VD1_hash_L3] = (Byte)(_t_>>24); };
2492 		{ Elf64_Word _t_ = src->vd_aux;
2493 		(dst)[VD1_aux_L0] = (Byte)_t_,
2494 		(dst)[VD1_aux_L1] = (Byte)(_t_>>8),
2495 		(dst)[VD1_aux_L2] = (Byte)(_t_>>16),
2496 		(dst)[VD1_aux_L3] = (Byte)(_t_>>24); };
2497 		{ Elf64_Word _t_ = src->vd_next;
2498 		(dst)[VD1_next_L0] = (Byte)_t_,
2499 		(dst)[VD1_next_L1] = (Byte)(_t_>>8),
2500 		(dst)[VD1_next_L2] = (Byte)(_t_>>16),
2501 		(dst)[VD1_next_L3] = (Byte)(_t_>>24); };
2502 		src = next_verdef;
2503 		dst = dst_next;
2504 	} while (src < end);
2505 }
2506 
2507 static void
2508 verdef_2M11_tof(Byte *dst, Elf64_Verdef *src, size_t cnt)
2509 {
2510 	/* LINTED */
2511 	Elf64_Verdef	*end = (Elf64_Verdef *)((Byte *)src + cnt);
2512 
2513 	do {
2514 		Elf64_Verdef	*next_verdef;
2515 		Elf64_Verdaux	*vaux;
2516 		Elf64_Half	i;
2517 		Byte		*vaux_dst;
2518 		Byte		*dst_next;
2519 
2520 		/* LINTED */
2521 		next_verdef = (Elf64_Verdef *)(src->vd_next ?
2522 		    (Byte *)src + src->vd_next : (Byte *)end);
2523 		dst_next = dst + src->vd_next;
2524 
2525 		/* LINTED */
2526 		vaux = (Elf64_Verdaux *)((Byte *)src + src->vd_aux);
2527 		vaux_dst = dst + src->vd_aux;
2528 
2529 		/*
2530 		 * Convert auxilary structures
2531 		 */
2532 		for (i = 0; i < src->vd_cnt; i++) {
2533 			Elf64_Verdaux	*vaux_next;
2534 			Byte		*vaux_dst_next;
2535 
2536 			/*
2537 			 * because our source and destination can be
2538 			 * the same place we need to figure out the next
2539 			 * location now.
2540 			 */
2541 			/* LINTED */
2542 			vaux_next = (Elf64_Verdaux *)((Byte *)vaux +
2543 			    vaux->vda_next);
2544 			vaux_dst_next = vaux_dst + vaux->vda_next;
2545 
2546 			{ Elf64_Word _t_ = vaux->vda_name;
2547 		(vaux_dst)[VDA1_name_M0] = (Byte)_t_,
2548 		(vaux_dst)[VDA1_name_M1] = (Byte)(_t_>>8),
2549 		(vaux_dst)[VDA1_name_M2] = (Byte)(_t_>>16),
2550 		(vaux_dst)[VDA1_name_M3] = (Byte)(_t_>>24); };
2551 			{ Elf64_Word _t_ = vaux->vda_next;
2552 		(vaux_dst)[VDA1_next_M0] = (Byte)_t_,
2553 		(vaux_dst)[VDA1_next_M1] = (Byte)(_t_>>8),
2554 		(vaux_dst)[VDA1_next_M2] = (Byte)(_t_>>16),
2555 		(vaux_dst)[VDA1_next_M3] = (Byte)(_t_>>24); };
2556 			vaux_dst = vaux_dst_next;
2557 			vaux = vaux_next;
2558 		}
2559 
2560 		/*
2561 		 * Convert Elf64_Verdef structure.
2562 		 */
2563 		{ Elf64_Half _t_ = src->vd_version;
2564 		(dst)[VD1_version_M0] = (Byte)_t_,
2565 		(dst)[VD1_version_M1] = (Byte)(_t_>>8); };
2566 		{ Elf64_Half _t_ = src->vd_flags;
2567 		(dst)[VD1_flags_M0] = (Byte)_t_,
2568 		(dst)[VD1_flags_M1] = (Byte)(_t_>>8); };
2569 		{ Elf64_Half _t_ = src->vd_ndx;
2570 		(dst)[VD1_ndx_M0] = (Byte)_t_,
2571 		(dst)[VD1_ndx_M1] = (Byte)(_t_>>8); };
2572 		{ Elf64_Half _t_ = src->vd_cnt;
2573 		(dst)[VD1_cnt_M0] = (Byte)_t_,
2574 		(dst)[VD1_cnt_M1] = (Byte)(_t_>>8); };
2575 		{ Elf64_Word _t_ = src->vd_hash;
2576 		(dst)[VD1_hash_M0] = (Byte)_t_,
2577 		(dst)[VD1_hash_M1] = (Byte)(_t_>>8),
2578 		(dst)[VD1_hash_M2] = (Byte)(_t_>>16),
2579 		(dst)[VD1_hash_M3] = (Byte)(_t_>>24); };
2580 		{ Elf64_Word _t_ = src->vd_aux;
2581 		(dst)[VD1_aux_M0] = (Byte)_t_,
2582 		(dst)[VD1_aux_M1] = (Byte)(_t_>>8),
2583 		(dst)[VD1_aux_M2] = (Byte)(_t_>>16),
2584 		(dst)[VD1_aux_M3] = (Byte)(_t_>>24); };
2585 		{ Elf64_Word _t_ = src->vd_next;
2586 		(dst)[VD1_next_M0] = (Byte)_t_,
2587 		(dst)[VD1_next_M1] = (Byte)(_t_>>8),
2588 		(dst)[VD1_next_M2] = (Byte)(_t_>>16),
2589 		(dst)[VD1_next_M3] = (Byte)(_t_>>24); };
2590 		src = next_verdef;
2591 		dst = dst_next;
2592 	} while (src < end);
2593 }
2594 
2595 
2596 
2597 
2598 static void
2599 verneed_2L11_tof(Byte *dst, Elf64_Verneed *src, size_t cnt)
2600 {
2601 	/* LINTED */
2602 	Elf64_Verneed	*end = (Elf64_Verneed *)((char *)src + cnt);
2603 
2604 	do {
2605 		Elf64_Verneed *	next_verneed;
2606 		Elf64_Vernaux *	vaux;
2607 		Elf64_Half	i;
2608 		Byte *		vaux_dst;
2609 		Byte *		dst_next;
2610 
2611 		/* LINTED */
2612 		next_verneed = (Elf64_Verneed *)(src->vn_next ?
2613 		    (Byte *)src + src->vn_next : (Byte *)end);
2614 		dst_next = dst + src->vn_next;
2615 
2616 		/* LINTED */
2617 		vaux = (Elf64_Vernaux *)((Byte *)src + src->vn_aux);
2618 		vaux_dst = dst + src->vn_aux;
2619 
2620 		/*
2621 		 * Convert auxilary structures first
2622 		 */
2623 		for (i = 0; i < src->vn_cnt; i++) {
2624 			Elf64_Vernaux	*vaux_next;
2625 			Byte		*vaux_dst_next;
2626 
2627 			/*
2628 			 * because our source and destination can be
2629 			 * the same place we need to figure out the
2630 			 * next location now.
2631 			 */
2632 			/* LINTED */
2633 			vaux_next = (Elf64_Vernaux *)((Byte *)vaux +
2634 			    vaux->vna_next);
2635 			vaux_dst_next = vaux_dst + vaux->vna_next;
2636 
2637 			{ Elf64_Word _t_ = vaux->vna_hash;
2638 		(vaux_dst)[VNA1_hash_L0] = (Byte)_t_,
2639 		(vaux_dst)[VNA1_hash_L1] = (Byte)(_t_>>8),
2640 		(vaux_dst)[VNA1_hash_L2] = (Byte)(_t_>>16),
2641 		(vaux_dst)[VNA1_hash_L3] = (Byte)(_t_>>24); };
2642 			{ Elf64_Half _t_ = vaux->vna_flags;
2643 		(vaux_dst)[VNA1_flags_L0] = (Byte)_t_,
2644 		(vaux_dst)[VNA1_flags_L1] = (Byte)(_t_>>8); };
2645 			{ Elf64_Half _t_ = vaux->vna_other;
2646 		(vaux_dst)[VNA1_other_L0] = (Byte)_t_,
2647 		(vaux_dst)[VNA1_other_L1] = (Byte)(_t_>>8); };
2648 			{ Elf64_Word _t_ = vaux->vna_name;
2649 		(vaux_dst)[VNA1_name_L0] = (Byte)_t_,
2650 		(vaux_dst)[VNA1_name_L1] = (Byte)(_t_>>8),
2651 		(vaux_dst)[VNA1_name_L2] = (Byte)(_t_>>16),
2652 		(vaux_dst)[VNA1_name_L3] = (Byte)(_t_>>24); };
2653 			{ Elf64_Word _t_ = vaux->vna_next;
2654 		(vaux_dst)[VNA1_next_L0] = (Byte)_t_,
2655 		(vaux_dst)[VNA1_next_L1] = (Byte)(_t_>>8),
2656 		(vaux_dst)[VNA1_next_L2] = (Byte)(_t_>>16),
2657 		(vaux_dst)[VNA1_next_L3] = (Byte)(_t_>>24); };
2658 			vaux_dst = vaux_dst_next;
2659 			vaux = vaux_next;
2660 		}
2661 
2662 		/*
2663 		 * Convert Elf64_Verneed structure.
2664 		 */
2665 		{ Elf64_Half _t_ = src->vn_version;
2666 		(dst)[VN1_version_L0] = (Byte)_t_,
2667 		(dst)[VN1_version_L1] = (Byte)(_t_>>8); };
2668 		{ Elf64_Half _t_ = src->vn_cnt;
2669 		(dst)[VN1_cnt_L0] = (Byte)_t_,
2670 		(dst)[VN1_cnt_L1] = (Byte)(_t_>>8); };
2671 		{ Elf64_Word _t_ = src->vn_file;
2672 		(dst)[VN1_file_L0] = (Byte)_t_,
2673 		(dst)[VN1_file_L1] = (Byte)(_t_>>8),
2674 		(dst)[VN1_file_L2] = (Byte)(_t_>>16),
2675 		(dst)[VN1_file_L3] = (Byte)(_t_>>24); };
2676 		{ Elf64_Word _t_ = src->vn_aux;
2677 		(dst)[VN1_aux_L0] = (Byte)_t_,
2678 		(dst)[VN1_aux_L1] = (Byte)(_t_>>8),
2679 		(dst)[VN1_aux_L2] = (Byte)(_t_>>16),
2680 		(dst)[VN1_aux_L3] = (Byte)(_t_>>24); };
2681 		{ Elf64_Word _t_ = src->vn_next;
2682 		(dst)[VN1_next_L0] = (Byte)_t_,
2683 		(dst)[VN1_next_L1] = (Byte)(_t_>>8),
2684 		(dst)[VN1_next_L2] = (Byte)(_t_>>16),
2685 		(dst)[VN1_next_L3] = (Byte)(_t_>>24); };
2686 		src = next_verneed;
2687 		dst = dst_next;
2688 	} while (src < end);
2689 }
2690 
2691 static void
2692 verneed_2M11_tof(Byte *dst, Elf64_Verneed *src, size_t cnt)
2693 {
2694 	/* LINTED */
2695 	Elf64_Verneed	*end = (Elf64_Verneed *)((char *)src + cnt);
2696 
2697 	do {
2698 		Elf64_Verneed *	next_verneed;
2699 		Elf64_Vernaux *	vaux;
2700 		Elf64_Half	i;
2701 		Byte *		vaux_dst;
2702 		Byte *		dst_next;
2703 
2704 		/* LINTED */
2705 		next_verneed = (Elf64_Verneed *)(src->vn_next ?
2706 		    (Byte *)src + src->vn_next : (Byte *)end);
2707 		dst_next = dst + src->vn_next;
2708 
2709 		/* LINTED */
2710 		vaux = (Elf64_Vernaux *)((Byte *)src + src->vn_aux);
2711 		vaux_dst = dst + src->vn_aux;
2712 
2713 		/*
2714 		 * Convert auxilary structures first
2715 		 */
2716 		for (i = 0; i < src->vn_cnt; i++) {
2717 			Elf64_Vernaux	*vaux_next;
2718 			Byte		*vaux_dst_next;
2719 
2720 			/*
2721 			 * because our source and destination can be
2722 			 * the same place we need to figure out the
2723 			 * next location now.
2724 			 */
2725 			/* LINTED */
2726 			vaux_next = (Elf64_Vernaux *)((Byte *)vaux +
2727 			    vaux->vna_next);
2728 			vaux_dst_next = vaux_dst + vaux->vna_next;
2729 
2730 			{ Elf64_Word _t_ = vaux->vna_hash;
2731 		(vaux_dst)[VNA1_hash_M0] = (Byte)_t_,
2732 		(vaux_dst)[VNA1_hash_M1] = (Byte)(_t_>>8),
2733 		(vaux_dst)[VNA1_hash_M2] = (Byte)(_t_>>16),
2734 		(vaux_dst)[VNA1_hash_M3] = (Byte)(_t_>>24); };
2735 			{ Elf64_Half _t_ = vaux->vna_flags;
2736 		(vaux_dst)[VNA1_flags_M0] = (Byte)_t_,
2737 		(vaux_dst)[VNA1_flags_M1] = (Byte)(_t_>>8); };
2738 			{ Elf64_Half _t_ = vaux->vna_other;
2739 		(vaux_dst)[VNA1_other_M0] = (Byte)_t_,
2740 		(vaux_dst)[VNA1_other_M1] = (Byte)(_t_>>8); };
2741 			{ Elf64_Word _t_ = vaux->vna_name;
2742 		(vaux_dst)[VNA1_name_M0] = (Byte)_t_,
2743 		(vaux_dst)[VNA1_name_M1] = (Byte)(_t_>>8),
2744 		(vaux_dst)[VNA1_name_M2] = (Byte)(_t_>>16),
2745 		(vaux_dst)[VNA1_name_M3] = (Byte)(_t_>>24); };
2746 			{ Elf64_Word _t_ = vaux->vna_next;
2747 		(vaux_dst)[VNA1_next_M0] = (Byte)_t_,
2748 		(vaux_dst)[VNA1_next_M1] = (Byte)(_t_>>8),
2749 		(vaux_dst)[VNA1_next_M2] = (Byte)(_t_>>16),
2750 		(vaux_dst)[VNA1_next_M3] = (Byte)(_t_>>24); };
2751 			vaux_dst = vaux_dst_next;
2752 			vaux = vaux_next;
2753 		}
2754 
2755 		/*
2756 		 * Convert Elf64_Verneed structure.
2757 		 */
2758 		{ Elf64_Half _t_ = src->vn_version;
2759 		(dst)[VN1_version_M0] = (Byte)_t_,
2760 		(dst)[VN1_version_M1] = (Byte)(_t_>>8); };
2761 		{ Elf64_Half _t_ = src->vn_cnt;
2762 		(dst)[VN1_cnt_M0] = (Byte)_t_,
2763 		(dst)[VN1_cnt_M1] = (Byte)(_t_>>8); };
2764 		{ Elf64_Word _t_ = src->vn_file;
2765 		(dst)[VN1_file_M0] = (Byte)_t_,
2766 		(dst)[VN1_file_M1] = (Byte)(_t_>>8),
2767 		(dst)[VN1_file_M2] = (Byte)(_t_>>16),
2768 		(dst)[VN1_file_M3] = (Byte)(_t_>>24); };
2769 		{ Elf64_Word _t_ = src->vn_aux;
2770 		(dst)[VN1_aux_M0] = (Byte)_t_,
2771 		(dst)[VN1_aux_M1] = (Byte)(_t_>>8),
2772 		(dst)[VN1_aux_M2] = (Byte)(_t_>>16),
2773 		(dst)[VN1_aux_M3] = (Byte)(_t_>>24); };
2774 		{ Elf64_Word _t_ = src->vn_next;
2775 		(dst)[VN1_next_M0] = (Byte)_t_,
2776 		(dst)[VN1_next_M1] = (Byte)(_t_>>8),
2777 		(dst)[VN1_next_M2] = (Byte)(_t_>>16),
2778 		(dst)[VN1_next_M3] = (Byte)(_t_>>24); };
2779 		src = next_verneed;
2780 		dst = dst_next;
2781 	} while (src < end);
2782 }
2783 
2784 
2785 
2786 
2787 
2788 static void
2789 sxword_2L_tof(Byte *dst, Elf64_Sxword *src, size_t cnt)
2790 {
2791 	Elf64_Sxword *end = src + cnt;
2792 
2793 	do {
2794 		/*CONSTANTCONDITION*/
2795 		if (~(Elf64_Xword)0 == -(Elf64_Sxword)1) {	/* 2s comp */
2796 			{ Elf64_Xword _t_ = *src;
2797 		(dst)[X_L0] = (Byte)_t_,
2798 		(dst)[X_L1] = (Byte)(_t_>>8),
2799 		(dst)[X_L2] = (Byte)(_t_>>16),
2800 		(dst)[X_L3] = (Byte)(_t_>>24),
2801 		(dst)[X_L4] = (Byte)(_t_>>32),
2802 		(dst)[X_L5] = (Byte)(_t_>>40),
2803 		(dst)[X_L6] = (Byte)(_t_>>48),
2804 		(dst)[X_L7] = (Byte)(_t_>>56); };
2805 		}
2806 		else {					/* unknown */
2807 			Elf64_Xword w;
2808 
2809 			if (*src < 0) {
2810 				w = - *src;
2811 				w = ~w + 1;
2812 			} else
2813 				w = *src;
2814 			{ Elf64_Xword _t_ = w;
2815 		(dst)[X_L0] = (Byte)_t_,
2816 		(dst)[X_L1] = (Byte)(_t_>>8),
2817 		(dst)[X_L2] = (Byte)(_t_>>16),
2818 		(dst)[X_L3] = (Byte)(_t_>>24),
2819 		(dst)[X_L4] = (Byte)(_t_>>32),
2820 		(dst)[X_L5] = (Byte)(_t_>>40),
2821 		(dst)[X_L6] = (Byte)(_t_>>48),
2822 		(dst)[X_L7] = (Byte)(_t_>>56); };
2823 		}
2824 		dst += X_sizeof;
2825 	} while (++src < end);
2826 }
2827 
2828 static void
2829 sxword_2M_tof(Byte *dst, Elf64_Sxword *src, size_t cnt)
2830 {
2831 	Elf64_Sxword *end = src + cnt;
2832 
2833 	do {
2834 		/*CONSTANTCONDITION*/
2835 		if (~(Elf64_Xword)0 == -(Elf64_Sxword)1) {	/* 2s comp */
2836 			{ Elf64_Xword _t_ = *src;
2837 		(dst)[X_M0] = (Byte)_t_,
2838 		(dst)[X_M1] = (Byte)(_t_>>8),
2839 		(dst)[X_M2] = (Byte)(_t_>>16),
2840 		(dst)[X_M3] = (Byte)(_t_>>24),
2841 		(dst)[X_M4] = (Byte)(_t_>>32),
2842 		(dst)[X_M5] = (Byte)(_t_>>40),
2843 		(dst)[X_M6] = (Byte)(_t_>>48),
2844 		(dst)[X_M7] = (Byte)(_t_>>56); };
2845 		}
2846 		else {					/* unknown */
2847 			Elf64_Xword w;
2848 
2849 			if (*src < 0) {
2850 				w = - *src;
2851 				w = ~w + 1;
2852 			} else
2853 				w = *src;
2854 			{ Elf64_Xword _t_ = w;
2855 		(dst)[X_M0] = (Byte)_t_,
2856 		(dst)[X_M1] = (Byte)(_t_>>8),
2857 		(dst)[X_M2] = (Byte)(_t_>>16),
2858 		(dst)[X_M3] = (Byte)(_t_>>24),
2859 		(dst)[X_M4] = (Byte)(_t_>>32),
2860 		(dst)[X_M5] = (Byte)(_t_>>40),
2861 		(dst)[X_M6] = (Byte)(_t_>>48),
2862 		(dst)[X_M7] = (Byte)(_t_>>56); };
2863 		}
2864 		dst += X_sizeof;
2865 	} while (++src < end);
2866 }
2867 
2868 
2869 
2870 
2871 
2872 static void
2873 xword_2L_tof(Byte *dst, Elf64_Xword *src, size_t cnt)
2874 {
2875 	Elf64_Xword *end = src + cnt;
2876 
2877 	do {
2878 		{ Elf64_Xword _t_ = *src;
2879 		(dst)[X_L0] = (Byte)_t_,
2880 		(dst)[X_L1] = (Byte)(_t_>>8),
2881 		(dst)[X_L2] = (Byte)(_t_>>16),
2882 		(dst)[X_L3] = (Byte)(_t_>>24),
2883 		(dst)[X_L4] = (Byte)(_t_>>32),
2884 		(dst)[X_L5] = (Byte)(_t_>>40),
2885 		(dst)[X_L6] = (Byte)(_t_>>48),
2886 		(dst)[X_L7] = (Byte)(_t_>>56); };
2887 		dst += X_sizeof;
2888 	} while (++src < end);
2889 }
2890 
2891 static void
2892 xword_2M_tof(Byte *dst, Elf64_Xword *src, size_t cnt)
2893 {
2894 	Elf64_Xword *end = src + cnt;
2895 
2896 	do {
2897 		{ Elf64_Xword _t_ = *src;
2898 		(dst)[X_M0] = (Byte)_t_,
2899 		(dst)[X_M1] = (Byte)(_t_>>8),
2900 		(dst)[X_M2] = (Byte)(_t_>>16),
2901 		(dst)[X_M3] = (Byte)(_t_>>24),
2902 		(dst)[X_M4] = (Byte)(_t_>>32),
2903 		(dst)[X_M5] = (Byte)(_t_>>40),
2904 		(dst)[X_M6] = (Byte)(_t_>>48),
2905 		(dst)[X_M7] = (Byte)(_t_>>56); };
2906 		dst += X_sizeof;
2907 	} while (++src < end);
2908 }
2909 
2910 
2911 /*
2912  * xlate to memory format
2913  *
2914  *	..._tom(name, data) -- macros
2915  *
2916  *	Recall that the memory format may be larger than the
2917  *	file format (equal versions).  Use "backward" copy.
2918  *	All these routines require non-null, non-zero arguments.
2919  */
2920 
2921 
2922 
2923 
2924 
2925 static void
2926 addr_2L_tom(Elf64_Addr *dst, Byte *src, size_t cnt)
2927 {
2928 	Elf64_Addr	*end = dst;
2929 
2930 	dst += cnt;
2931 	src += cnt * A_sizeof;
2932 	while (dst-- > end) {
2933 		src -= A_sizeof;
2934 		*dst = (((((((((((Elf64_Addr)(src)[A_L7]<<8)
2935 		+(src)[A_L6]<<8)
2936 		+(src)[A_L5]<<8)
2937 		+(src)[A_L4]<<8)
2938 		+(src)[A_L3]<<8)
2939 		+(src)[A_L2])<<8)
2940 		+(src)[A_L1])<<8)
2941 		+(src)[A_L0]);
2942 	}
2943 }
2944 
2945 static void
2946 addr_2M_tom(Elf64_Addr *dst, Byte *src, size_t cnt)
2947 {
2948 	Elf64_Addr	*end = dst;
2949 
2950 	dst += cnt;
2951 	src += cnt * A_sizeof;
2952 	while (dst-- > end) {
2953 		src -= A_sizeof;
2954 		*dst = (((((((((((Elf64_Addr)(src)[A_M7]<<8)
2955 		+(src)[A_M6]<<8)
2956 		+(src)[A_M5]<<8)
2957 		+(src)[A_M4]<<8)
2958 		+(src)[A_M3]<<8)
2959 		+(src)[A_M2])<<8)
2960 		+(src)[A_M1])<<8)
2961 		+(src)[A_M0]);
2962 	}
2963 }
2964 
2965 
2966 
2967 
2968 
2969 static void
2970 dyn_2L11_tom(Elf64_Dyn *dst, Byte *src, size_t cnt)
2971 {
2972 	Elf64_Dyn	*end = dst + cnt;
2973 
2974 	do {
2975 		dst->d_tag = (((((((((((Elf64_Xword)(src)[D1_tag_L7]<<8)
2976 		+(src)[D1_tag_L6]<<8)
2977 		+(src)[D1_tag_L5]<<8)
2978 		+(src)[D1_tag_L4]<<8)
2979 		+(src)[D1_tag_L3]<<8)
2980 		+(src)[D1_tag_L2])<<8)
2981 		+(src)[D1_tag_L1])<<8)
2982 		+(src)[D1_tag_L0]);
2983 		dst->d_un.d_val = (((((((((((Elf64_Xword)(src)[D1_val_L7]<<8)
2984 		+(src)[D1_val_L6]<<8)
2985 		+(src)[D1_val_L5]<<8)
2986 		+(src)[D1_val_L4]<<8)
2987 		+(src)[D1_val_L3]<<8)
2988 		+(src)[D1_val_L2])<<8)
2989 		+(src)[D1_val_L1])<<8)
2990 		+(src)[D1_val_L0]);
2991 		src += D1_sizeof;
2992 	} while (++dst < end);
2993 }
2994 
2995 static void
2996 dyn_2M11_tom(Elf64_Dyn *dst, Byte *src, size_t cnt)
2997 {
2998 	Elf64_Dyn	*end = dst + cnt;
2999 
3000 	do {
3001 		dst->d_tag = (((((((((((Elf64_Xword)(src)[D1_tag_M7]<<8)
3002 		+(src)[D1_tag_M6]<<8)
3003 		+(src)[D1_tag_M5]<<8)
3004 		+(src)[D1_tag_M4]<<8)
3005 		+(src)[D1_tag_M3]<<8)
3006 		+(src)[D1_tag_M2])<<8)
3007 		+(src)[D1_tag_M1])<<8)
3008 		+(src)[D1_tag_M0]);
3009 		dst->d_un.d_val = (((((((((((Elf64_Xword)(src)[D1_val_M7]<<8)
3010 		+(src)[D1_val_M6]<<8)
3011 		+(src)[D1_val_M5]<<8)
3012 		+(src)[D1_val_M4]<<8)
3013 		+(src)[D1_val_M3]<<8)
3014 		+(src)[D1_val_M2])<<8)
3015 		+(src)[D1_val_M1])<<8)
3016 		+(src)[D1_val_M0]);
3017 		src += D1_sizeof;
3018 	} while (++dst < end);
3019 }
3020 
3021 
3022 
3023 
3024 
3025 static void
3026 ehdr_2L11_tom(Elf64_Ehdr *dst, Byte *src, size_t cnt)
3027 {
3028 	Elf64_Ehdr	*end = dst;
3029 
3030 	dst += cnt;
3031 	src += cnt * E1_sizeof;
3032 	while (dst-- > end) {
3033 		src -= E1_sizeof;
3034 		dst->e_shstrndx = (((Elf64_Half)(src)[E1_shstrndx_L1]<<8)+(src)[E1_shstrndx_L0]);
3035 		dst->e_shnum = (((Elf64_Half)(src)[E1_shnum_L1]<<8)+(src)[E1_shnum_L0]);
3036 		dst->e_shentsize = (((Elf64_Half)(src)[E1_shentsize_L1]<<8)+(src)[E1_shentsize_L0]);
3037 		dst->e_phnum = (((Elf64_Half)(src)[E1_phnum_L1]<<8)+(src)[E1_phnum_L0]);
3038 		dst->e_phentsize = (((Elf64_Half)(src)[E1_phentsize_L1]<<8)+(src)[E1_phentsize_L0]);
3039 		dst->e_ehsize = (((Elf64_Half)(src)[E1_ehsize_L1]<<8)+(src)[E1_ehsize_L0]);
3040 		dst->e_flags = (((((((Elf64_Word)(src)[E1_flags_L3]<<8)
3041 		+(src)[E1_flags_L2])<<8)
3042 		+(src)[E1_flags_L1])<<8)
3043 		+(src)[E1_flags_L0]);
3044 		dst->e_shoff = (((((((((((Elf64_Off)(src)[E1_shoff_L7]<<8)
3045 		+(src)[E1_shoff_L6]<<8)
3046 		+(src)[E1_shoff_L5]<<8)
3047 		+(src)[E1_shoff_L4]<<8)
3048 		+(src)[E1_shoff_L3]<<8)
3049 		+(src)[E1_shoff_L2])<<8)
3050 		+(src)[E1_shoff_L1])<<8)
3051 		+(src)[E1_shoff_L0]);
3052 		dst->e_phoff = (((((((((((Elf64_Off)(src)[E1_phoff_L7]<<8)
3053 		+(src)[E1_phoff_L6]<<8)
3054 		+(src)[E1_phoff_L5]<<8)
3055 		+(src)[E1_phoff_L4]<<8)
3056 		+(src)[E1_phoff_L3]<<8)
3057 		+(src)[E1_phoff_L2])<<8)
3058 		+(src)[E1_phoff_L1])<<8)
3059 		+(src)[E1_phoff_L0]);
3060 		dst->e_entry = (((((((((((Elf64_Addr)(src)[E1_entry_L7]<<8)
3061 		+(src)[E1_entry_L6]<<8)
3062 		+(src)[E1_entry_L5]<<8)
3063 		+(src)[E1_entry_L4]<<8)
3064 		+(src)[E1_entry_L3]<<8)
3065 		+(src)[E1_entry_L2])<<8)
3066 		+(src)[E1_entry_L1])<<8)
3067 		+(src)[E1_entry_L0]);
3068 		dst->e_version = (((((((Elf64_Word)(src)[E1_version_L3]<<8)
3069 		+(src)[E1_version_L2])<<8)
3070 		+(src)[E1_version_L1])<<8)
3071 		+(src)[E1_version_L0]);
3072 		dst->e_machine = (((Elf64_Half)(src)[E1_machine_L1]<<8)+(src)[E1_machine_L0]);
3073 		dst->e_type = (((Elf64_Half)(src)[E1_type_L1]<<8)+(src)[E1_type_L0]);
3074 		if (dst->e_ident != &src[E1_ident])
3075 			(void) memcpy(dst->e_ident, &src[E1_ident], E1_Nident);
3076 	}
3077 }
3078 
3079 static void
3080 ehdr_2M11_tom(Elf64_Ehdr *dst, Byte *src, size_t cnt)
3081 {
3082 	Elf64_Ehdr	*end = dst;
3083 
3084 	dst += cnt;
3085 	src += cnt * E1_sizeof;
3086 	while (dst-- > end) {
3087 		src -= E1_sizeof;
3088 		dst->e_shstrndx = (((Elf64_Half)(src)[E1_shstrndx_M1]<<8)+(src)[E1_shstrndx_M0]);
3089 		dst->e_shnum = (((Elf64_Half)(src)[E1_shnum_M1]<<8)+(src)[E1_shnum_M0]);
3090 		dst->e_shentsize = (((Elf64_Half)(src)[E1_shentsize_M1]<<8)+(src)[E1_shentsize_M0]);
3091 		dst->e_phnum = (((Elf64_Half)(src)[E1_phnum_M1]<<8)+(src)[E1_phnum_M0]);
3092 		dst->e_phentsize = (((Elf64_Half)(src)[E1_phentsize_M1]<<8)+(src)[E1_phentsize_M0]);
3093 		dst->e_ehsize = (((Elf64_Half)(src)[E1_ehsize_M1]<<8)+(src)[E1_ehsize_M0]);
3094 		dst->e_flags = (((((((Elf64_Word)(src)[E1_flags_M3]<<8)
3095 		+(src)[E1_flags_M2])<<8)
3096 		+(src)[E1_flags_M1])<<8)
3097 		+(src)[E1_flags_M0]);
3098 		dst->e_shoff = (((((((((((Elf64_Off)(src)[E1_shoff_M7]<<8)
3099 		+(src)[E1_shoff_M6]<<8)
3100 		+(src)[E1_shoff_M5]<<8)
3101 		+(src)[E1_shoff_M4]<<8)
3102 		+(src)[E1_shoff_M3]<<8)
3103 		+(src)[E1_shoff_M2])<<8)
3104 		+(src)[E1_shoff_M1])<<8)
3105 		+(src)[E1_shoff_M0]);
3106 		dst->e_phoff = (((((((((((Elf64_Off)(src)[E1_phoff_M7]<<8)
3107 		+(src)[E1_phoff_M6]<<8)
3108 		+(src)[E1_phoff_M5]<<8)
3109 		+(src)[E1_phoff_M4]<<8)
3110 		+(src)[E1_phoff_M3]<<8)
3111 		+(src)[E1_phoff_M2])<<8)
3112 		+(src)[E1_phoff_M1])<<8)
3113 		+(src)[E1_phoff_M0]);
3114 		dst->e_entry = (((((((((((Elf64_Addr)(src)[E1_entry_M7]<<8)
3115 		+(src)[E1_entry_M6]<<8)
3116 		+(src)[E1_entry_M5]<<8)
3117 		+(src)[E1_entry_M4]<<8)
3118 		+(src)[E1_entry_M3]<<8)
3119 		+(src)[E1_entry_M2])<<8)
3120 		+(src)[E1_entry_M1])<<8)
3121 		+(src)[E1_entry_M0]);
3122 		dst->e_version = (((((((Elf64_Word)(src)[E1_version_M3]<<8)
3123 		+(src)[E1_version_M2])<<8)
3124 		+(src)[E1_version_M1])<<8)
3125 		+(src)[E1_version_M0]);
3126 		dst->e_machine = (((Elf64_Half)(src)[E1_machine_M1]<<8)+(src)[E1_machine_M0]);
3127 		dst->e_type = (((Elf64_Half)(src)[E1_type_M1]<<8)+(src)[E1_type_M0]);
3128 		if (dst->e_ident != &src[E1_ident])
3129 			(void) memcpy(dst->e_ident, &src[E1_ident], E1_Nident);
3130 	}
3131 }
3132 
3133 
3134 
3135 
3136 
3137 static void
3138 half_2L_tom(Elf64_Half *dst, Byte *src, size_t cnt)
3139 {
3140 	Elf64_Half	*end = dst;
3141 
3142 	dst += cnt;
3143 	src += cnt * H_sizeof;
3144 	while (dst-- > end) {
3145 		src -= H_sizeof;
3146 		*dst = (((Elf64_Half)(src)[H_L1]<<8)+(src)[H_L0]);
3147 	}
3148 }
3149 
3150 static void
3151 half_2M_tom(Elf64_Half *dst, Byte *src, size_t cnt)
3152 {
3153 	Elf64_Half	*end = dst;
3154 
3155 	dst += cnt;
3156 	src += cnt * H_sizeof;
3157 	while (dst-- > end) {
3158 		src -= H_sizeof;
3159 		*dst = (((Elf64_Half)(src)[H_M1]<<8)+(src)[H_M0]);
3160 	}
3161 }
3162 
3163 
3164 
3165 
3166 
3167 static void
3168 move_2L11_tom(Elf64_Move *dst, unsigned char *src, size_t cnt)
3169 {
3170 	Elf64_Move	*end = dst + cnt;
3171 
3172 	do {
3173 		dst->m_value = (((((((((((Elf64_Lword)(src)[M1_value_L7]<<8)
3174 		+(src)[M1_value_L6]<<8)
3175 		+(src)[M1_value_L5]<<8)
3176 		+(src)[M1_value_L4]<<8)
3177 		+(src)[M1_value_L3]<<8)
3178 		+(src)[M1_value_L2])<<8)
3179 		+(src)[M1_value_L1])<<8)
3180 		+(src)[M1_value_L0]);
3181 		dst->m_info = (((((((Elf64_Word)(src)[M1_info_L3]<<8)
3182 		+(src)[M1_info_L2])<<8)
3183 		+(src)[M1_info_L1])<<8)
3184 		+(src)[M1_info_L0]);
3185 		dst->m_poffset = (((((((Elf64_Word)(src)[M1_poffset_L3]<<8)
3186 		+(src)[M1_poffset_L2])<<8)
3187 		+(src)[M1_poffset_L1])<<8)
3188 		+(src)[M1_poffset_L0]);
3189 		dst->m_repeat = (((Elf64_Half)(src)[M1_repeat_L1]<<8)+(src)[M1_repeat_L0]);
3190 		dst->m_stride = (((Elf64_Half)(src)[M1_stride_L1]<<8)+(src)[M1_stride_L0]);
3191 		src += M1_sizeof;
3192 	} while (++dst < end);
3193 }
3194 
3195 static void
3196 move_2M11_tom(Elf64_Move *dst, unsigned char *src, size_t cnt)
3197 {
3198 	Elf64_Move	*end = dst + cnt;
3199 
3200 	do {
3201 		dst->m_value = (((((((((((Elf64_Lword)(src)[M1_value_M7]<<8)
3202 		+(src)[M1_value_M6]<<8)
3203 		+(src)[M1_value_M5]<<8)
3204 		+(src)[M1_value_M4]<<8)
3205 		+(src)[M1_value_M3]<<8)
3206 		+(src)[M1_value_M2])<<8)
3207 		+(src)[M1_value_M1])<<8)
3208 		+(src)[M1_value_M0]);
3209 		dst->m_info = (((((((Elf64_Word)(src)[M1_info_M3]<<8)
3210 		+(src)[M1_info_M2])<<8)
3211 		+(src)[M1_info_M1])<<8)
3212 		+(src)[M1_info_M0]);
3213 		dst->m_poffset = (((((((Elf64_Word)(src)[M1_poffset_M3]<<8)
3214 		+(src)[M1_poffset_M2])<<8)
3215 		+(src)[M1_poffset_M1])<<8)
3216 		+(src)[M1_poffset_M0]);
3217 		dst->m_repeat = (((Elf64_Half)(src)[M1_repeat_M1]<<8)+(src)[M1_repeat_M0]);
3218 		dst->m_stride = (((Elf64_Half)(src)[M1_stride_M1]<<8)+(src)[M1_stride_M0]);
3219 		src += M1_sizeof;
3220 	} while (++dst < end);
3221 }
3222 
3223 
3224 
3225 
3226 
3227 static void
3228 movep_2L11_tom(Elf64_Move *dst, unsigned char *src, size_t cnt)
3229 {
3230 	Elf64_Move	*end = dst + cnt;
3231 
3232 	do
3233 	{
3234 		dst->m_value = (((((((((((Elf64_Lword)(src)[MP1_value_L7]<<8)
3235 		+(src)[MP1_value_L6]<<8)
3236 		+(src)[MP1_value_L5]<<8)
3237 		+(src)[MP1_value_L4]<<8)
3238 		+(src)[MP1_value_L3]<<8)
3239 		+(src)[MP1_value_L2])<<8)
3240 		+(src)[MP1_value_L1])<<8)
3241 		+(src)[MP1_value_L0]);
3242 		dst->m_info = (((((((Elf64_Word)(src)[MP1_info_L3]<<8)
3243 		+(src)[MP1_info_L2])<<8)
3244 		+(src)[MP1_info_L1])<<8)
3245 		+(src)[MP1_info_L0]);
3246 		dst->m_poffset = (((((((Elf64_Word)(src)[MP1_poffset_L3]<<8)
3247 		+(src)[MP1_poffset_L2])<<8)
3248 		+(src)[MP1_poffset_L1])<<8)
3249 		+(src)[MP1_poffset_L0]);
3250 		dst->m_repeat = (((Elf64_Half)(src)[MP1_repeat_L1]<<8)+(src)[MP1_repeat_L0]);
3251 		dst->m_stride = (((Elf64_Half)(src)[MP1_stride_L1]<<8)+(src)[MP1_stride_L0]);
3252 		src += MP1_sizeof;
3253 	} while (++dst < end);
3254 }
3255 
3256 static void
3257 movep_2M11_tom(Elf64_Move *dst, unsigned char *src, size_t cnt)
3258 {
3259 	Elf64_Move	*end = dst + cnt;
3260 
3261 	do
3262 	{
3263 		dst->m_value = (((((((((((Elf64_Lword)(src)[MP1_value_M7]<<8)
3264 		+(src)[MP1_value_M6]<<8)
3265 		+(src)[MP1_value_M5]<<8)
3266 		+(src)[MP1_value_M4]<<8)
3267 		+(src)[MP1_value_M3]<<8)
3268 		+(src)[MP1_value_M2])<<8)
3269 		+(src)[MP1_value_M1])<<8)
3270 		+(src)[MP1_value_M0]);
3271 		dst->m_info = (((((((Elf64_Word)(src)[MP1_info_M3]<<8)
3272 		+(src)[MP1_info_M2])<<8)
3273 		+(src)[MP1_info_M1])<<8)
3274 		+(src)[MP1_info_M0]);
3275 		dst->m_poffset = (((((((Elf64_Word)(src)[MP1_poffset_M3]<<8)
3276 		+(src)[MP1_poffset_M2])<<8)
3277 		+(src)[MP1_poffset_M1])<<8)
3278 		+(src)[MP1_poffset_M0]);
3279 		dst->m_repeat = (((Elf64_Half)(src)[MP1_repeat_M1]<<8)+(src)[MP1_repeat_M0]);
3280 		dst->m_stride = (((Elf64_Half)(src)[MP1_stride_M1]<<8)+(src)[MP1_stride_M0]);
3281 		src += MP1_sizeof;
3282 	} while (++dst < end);
3283 }
3284 
3285 
3286 
3287 
3288 
3289 static void
3290 note_2L11_tom(Elf64_Nhdr *dst, unsigned char *src, size_t cnt)
3291 {
3292 	/* LINTED */
3293 	Elf64_Nhdr	*end = (Elf64_Nhdr *)((char *)dst + cnt);
3294 
3295 	/*
3296 	 * Copy the note data to the destination, translating the
3297 	 * length fields. Clip against the size of the actual buffer
3298 	 * to guard against corrupt note data.
3299 	 */
3300 	while (dst < end) {
3301 		Elf64_Nhdr	*nhdr;
3302 		unsigned char	*namestr;
3303 		void		*desc;
3304 		Elf64_Word	field_sz;
3305 
3306 		if ((offsetof(Elf64_Nhdr, n_namesz) + sizeof(Elf64_Word) +
3307 		    (char *) dst) >= (char *) end)
3308 			break;
3309 		dst->n_namesz = (((((((Elf64_Word)(src)[N1_namesz_L3]<<8)
3310 		+(src)[N1_namesz_L2])<<8)
3311 		+(src)[N1_namesz_L1])<<8)
3312 		+(src)[N1_namesz_L0]);
3313 
3314 		if ((offsetof(Elf64_Nhdr, n_descsz) + sizeof(Elf64_Word) +
3315 		    (char *) dst) >= (char *) end)
3316 			break;
3317 		dst->n_descsz = (((((((Elf64_Word)(src)[N1_descsz_L3]<<8)
3318 		+(src)[N1_descsz_L2])<<8)
3319 		+(src)[N1_descsz_L1])<<8)
3320 		+(src)[N1_descsz_L0]);
3321 
3322 		if ((offsetof(Elf64_Nhdr, n_type) + sizeof(Elf64_Word) +
3323 		    (char *) dst) >= (char *) end)
3324 			break;
3325 		dst->n_type = (((((((Elf64_Word)(src)[N1_type_L3]<<8)
3326 		+(src)[N1_type_L2])<<8)
3327 		+(src)[N1_type_L1])<<8)
3328 		+(src)[N1_type_L0]);
3329 		nhdr = dst;
3330 
3331 		/* LINTED */
3332 		dst = (Elf64_Nhdr *)((char *)dst + sizeof (Elf64_Nhdr));
3333 		namestr = src + N1_sizeof;
3334 		field_sz = S_ROUND(nhdr->n_namesz, sizeof (Elf64_Word));
3335 		if ((field_sz + (char *) dst) > (char *) end) {
3336 			field_sz = (char *) end - (char *) dst;
3337 			if (field_sz == 0)
3338 				break;
3339 		}
3340 		(void)memcpy((void *)dst, namestr, field_sz);
3341 		desc = namestr + field_sz;
3342 
3343 		/* LINTED */
3344 		dst = (Elf64_Nhdr *)((char *)dst + field_sz);
3345 		field_sz = nhdr->n_descsz;
3346 		if ((field_sz + (char *) dst) > (char *) end) {
3347 			field_sz = (char *) end - (char *) dst;
3348 			if (field_sz == 0)
3349 				break;
3350 		}
3351 		(void)memcpy(dst, desc, field_sz);
3352 		field_sz = S_ROUND(field_sz, sizeof (Elf64_Word));
3353 
3354 		/* LINTED */
3355 		dst = (Elf64_Nhdr *)((char *)dst + field_sz);
3356 		src = (unsigned char *)desc + field_sz;
3357 	}
3358 }
3359 
3360 static void
3361 note_2M11_tom(Elf64_Nhdr *dst, unsigned char *src, size_t cnt)
3362 {
3363 	/* LINTED */
3364 	Elf64_Nhdr	*end = (Elf64_Nhdr *)((char *)dst + cnt);
3365 
3366 	/*
3367 	 * Copy the note data to the destination, translating the
3368 	 * length fields. Clip against the size of the actual buffer
3369 	 * to guard against corrupt note data.
3370 	 */
3371 	while (dst < end) {
3372 		Elf64_Nhdr	*nhdr;
3373 		unsigned char	*namestr;
3374 		void		*desc;
3375 		Elf64_Word	field_sz;
3376 
3377 		if ((offsetof(Elf64_Nhdr, n_namesz) + sizeof(Elf64_Word) +
3378 		    (char *) dst) >= (char *) end)
3379 			break;
3380 		dst->n_namesz = (((((((Elf64_Word)(src)[N1_namesz_M3]<<8)
3381 		+(src)[N1_namesz_M2])<<8)
3382 		+(src)[N1_namesz_M1])<<8)
3383 		+(src)[N1_namesz_M0]);
3384 
3385 		if ((offsetof(Elf64_Nhdr, n_descsz) + sizeof(Elf64_Word) +
3386 		    (char *) dst) >= (char *) end)
3387 			break;
3388 		dst->n_descsz = (((((((Elf64_Word)(src)[N1_descsz_M3]<<8)
3389 		+(src)[N1_descsz_M2])<<8)
3390 		+(src)[N1_descsz_M1])<<8)
3391 		+(src)[N1_descsz_M0]);
3392 
3393 		if ((offsetof(Elf64_Nhdr, n_type) + sizeof(Elf64_Word) +
3394 		    (char *) dst) >= (char *) end)
3395 			break;
3396 		dst->n_type = (((((((Elf64_Word)(src)[N1_type_M3]<<8)
3397 		+(src)[N1_type_M2])<<8)
3398 		+(src)[N1_type_M1])<<8)
3399 		+(src)[N1_type_M0]);
3400 		nhdr = dst;
3401 
3402 		/* LINTED */
3403 		dst = (Elf64_Nhdr *)((char *)dst + sizeof (Elf64_Nhdr));
3404 		namestr = src + N1_sizeof;
3405 		field_sz = S_ROUND(nhdr->n_namesz, sizeof (Elf64_Word));
3406 		if ((field_sz + (char *) dst) > (char *) end) {
3407 			field_sz = (char *) end - (char *) dst;
3408 			if (field_sz == 0)
3409 				break;
3410 		}
3411 		(void)memcpy((void *)dst, namestr, field_sz);
3412 		desc = namestr + field_sz;
3413 
3414 		/* LINTED */
3415 		dst = (Elf64_Nhdr *)((char *)dst + field_sz);
3416 		field_sz = nhdr->n_descsz;
3417 		if ((field_sz + (char *) dst) > (char *) end) {
3418 			field_sz = (char *) end - (char *) dst;
3419 			if (field_sz == 0)
3420 				break;
3421 		}
3422 		(void)memcpy(dst, desc, field_sz);
3423 		field_sz = S_ROUND(field_sz, sizeof (Elf64_Word));
3424 
3425 		/* LINTED */
3426 		dst = (Elf64_Nhdr *)((char *)dst + field_sz);
3427 		src = (unsigned char *)desc + field_sz;
3428 	}
3429 }
3430 
3431 
3432 
3433 
3434 static void
3435 off_2L_tom(Elf64_Off *dst, Byte *src, size_t cnt)
3436 {
3437 	Elf64_Off	*end = dst;
3438 
3439 	dst += cnt;
3440 	src += cnt * O_sizeof;
3441 	while (dst-- > end) {
3442 		src -= O_sizeof;
3443 		*dst = (((((((((((Elf64_Off)(src)[O_L7]<<8)
3444 		+(src)[O_L6]<<8)
3445 		+(src)[O_L5]<<8)
3446 		+(src)[O_L4]<<8)
3447 		+(src)[O_L3]<<8)
3448 		+(src)[O_L2])<<8)
3449 		+(src)[O_L1])<<8)
3450 		+(src)[O_L0]);
3451 	}
3452 }
3453 
3454 static void
3455 off_2M_tom(Elf64_Off *dst, Byte *src, size_t cnt)
3456 {
3457 	Elf64_Off	*end = dst;
3458 
3459 	dst += cnt;
3460 	src += cnt * O_sizeof;
3461 	while (dst-- > end) {
3462 		src -= O_sizeof;
3463 		*dst = (((((((((((Elf64_Off)(src)[O_M7]<<8)
3464 		+(src)[O_M6]<<8)
3465 		+(src)[O_M5]<<8)
3466 		+(src)[O_M4]<<8)
3467 		+(src)[O_M3]<<8)
3468 		+(src)[O_M2])<<8)
3469 		+(src)[O_M1])<<8)
3470 		+(src)[O_M0]);
3471 	}
3472 }
3473 
3474 
3475 
3476 
3477 
3478 static void
3479 phdr_2L11_tom(Elf64_Phdr *dst, Byte *src, size_t cnt)
3480 {
3481 	Elf64_Phdr	*end = dst;
3482 
3483 	dst += cnt;
3484 	src += cnt * P1_sizeof;
3485 	while (dst-- > end) {
3486 		src -= P1_sizeof;
3487 		dst->p_align = (((((((((((Elf64_Xword)(src)[P1_align_L7]<<8)
3488 		+(src)[P1_align_L6]<<8)
3489 		+(src)[P1_align_L5]<<8)
3490 		+(src)[P1_align_L4]<<8)
3491 		+(src)[P1_align_L3]<<8)
3492 		+(src)[P1_align_L2])<<8)
3493 		+(src)[P1_align_L1])<<8)
3494 		+(src)[P1_align_L0]);
3495 		dst->p_memsz = (((((((((((Elf64_Xword)(src)[P1_memsz_L7]<<8)
3496 		+(src)[P1_memsz_L6]<<8)
3497 		+(src)[P1_memsz_L5]<<8)
3498 		+(src)[P1_memsz_L4]<<8)
3499 		+(src)[P1_memsz_L3]<<8)
3500 		+(src)[P1_memsz_L2])<<8)
3501 		+(src)[P1_memsz_L1])<<8)
3502 		+(src)[P1_memsz_L0]);
3503 		dst->p_filesz = (((((((((((Elf64_Xword)(src)[P1_filesz_L7]<<8)
3504 		+(src)[P1_filesz_L6]<<8)
3505 		+(src)[P1_filesz_L5]<<8)
3506 		+(src)[P1_filesz_L4]<<8)
3507 		+(src)[P1_filesz_L3]<<8)
3508 		+(src)[P1_filesz_L2])<<8)
3509 		+(src)[P1_filesz_L1])<<8)
3510 		+(src)[P1_filesz_L0]);
3511 		dst->p_paddr = (((((((((((Elf64_Addr)(src)[P1_paddr_L7]<<8)
3512 		+(src)[P1_paddr_L6]<<8)
3513 		+(src)[P1_paddr_L5]<<8)
3514 		+(src)[P1_paddr_L4]<<8)
3515 		+(src)[P1_paddr_L3]<<8)
3516 		+(src)[P1_paddr_L2])<<8)
3517 		+(src)[P1_paddr_L1])<<8)
3518 		+(src)[P1_paddr_L0]);
3519 		dst->p_vaddr = (((((((((((Elf64_Addr)(src)[P1_vaddr_L7]<<8)
3520 		+(src)[P1_vaddr_L6]<<8)
3521 		+(src)[P1_vaddr_L5]<<8)
3522 		+(src)[P1_vaddr_L4]<<8)
3523 		+(src)[P1_vaddr_L3]<<8)
3524 		+(src)[P1_vaddr_L2])<<8)
3525 		+(src)[P1_vaddr_L1])<<8)
3526 		+(src)[P1_vaddr_L0]);
3527 		dst->p_offset = (((((((((((Elf64_Off)(src)[P1_offset_L7]<<8)
3528 		+(src)[P1_offset_L6]<<8)
3529 		+(src)[P1_offset_L5]<<8)
3530 		+(src)[P1_offset_L4]<<8)
3531 		+(src)[P1_offset_L3]<<8)
3532 		+(src)[P1_offset_L2])<<8)
3533 		+(src)[P1_offset_L1])<<8)
3534 		+(src)[P1_offset_L0]);
3535 		dst->p_flags = (((((((Elf64_Word)(src)[P1_flags_L3]<<8)
3536 		+(src)[P1_flags_L2])<<8)
3537 		+(src)[P1_flags_L1])<<8)
3538 		+(src)[P1_flags_L0]);
3539 		dst->p_type = (((((((Elf64_Word)(src)[P1_type_L3]<<8)
3540 		+(src)[P1_type_L2])<<8)
3541 		+(src)[P1_type_L1])<<8)
3542 		+(src)[P1_type_L0]);
3543 	}
3544 }
3545 
3546 static void
3547 phdr_2M11_tom(Elf64_Phdr *dst, Byte *src, size_t cnt)
3548 {
3549 	Elf64_Phdr	*end = dst;
3550 
3551 	dst += cnt;
3552 	src += cnt * P1_sizeof;
3553 	while (dst-- > end) {
3554 		src -= P1_sizeof;
3555 		dst->p_align = (((((((((((Elf64_Xword)(src)[P1_align_M7]<<8)
3556 		+(src)[P1_align_M6]<<8)
3557 		+(src)[P1_align_M5]<<8)
3558 		+(src)[P1_align_M4]<<8)
3559 		+(src)[P1_align_M3]<<8)
3560 		+(src)[P1_align_M2])<<8)
3561 		+(src)[P1_align_M1])<<8)
3562 		+(src)[P1_align_M0]);
3563 		dst->p_memsz = (((((((((((Elf64_Xword)(src)[P1_memsz_M7]<<8)
3564 		+(src)[P1_memsz_M6]<<8)
3565 		+(src)[P1_memsz_M5]<<8)
3566 		+(src)[P1_memsz_M4]<<8)
3567 		+(src)[P1_memsz_M3]<<8)
3568 		+(src)[P1_memsz_M2])<<8)
3569 		+(src)[P1_memsz_M1])<<8)
3570 		+(src)[P1_memsz_M0]);
3571 		dst->p_filesz = (((((((((((Elf64_Xword)(src)[P1_filesz_M7]<<8)
3572 		+(src)[P1_filesz_M6]<<8)
3573 		+(src)[P1_filesz_M5]<<8)
3574 		+(src)[P1_filesz_M4]<<8)
3575 		+(src)[P1_filesz_M3]<<8)
3576 		+(src)[P1_filesz_M2])<<8)
3577 		+(src)[P1_filesz_M1])<<8)
3578 		+(src)[P1_filesz_M0]);
3579 		dst->p_paddr = (((((((((((Elf64_Addr)(src)[P1_paddr_M7]<<8)
3580 		+(src)[P1_paddr_M6]<<8)
3581 		+(src)[P1_paddr_M5]<<8)
3582 		+(src)[P1_paddr_M4]<<8)
3583 		+(src)[P1_paddr_M3]<<8)
3584 		+(src)[P1_paddr_M2])<<8)
3585 		+(src)[P1_paddr_M1])<<8)
3586 		+(src)[P1_paddr_M0]);
3587 		dst->p_vaddr = (((((((((((Elf64_Addr)(src)[P1_vaddr_M7]<<8)
3588 		+(src)[P1_vaddr_M6]<<8)
3589 		+(src)[P1_vaddr_M5]<<8)
3590 		+(src)[P1_vaddr_M4]<<8)
3591 		+(src)[P1_vaddr_M3]<<8)
3592 		+(src)[P1_vaddr_M2])<<8)
3593 		+(src)[P1_vaddr_M1])<<8)
3594 		+(src)[P1_vaddr_M0]);
3595 		dst->p_offset = (((((((((((Elf64_Off)(src)[P1_offset_M7]<<8)
3596 		+(src)[P1_offset_M6]<<8)
3597 		+(src)[P1_offset_M5]<<8)
3598 		+(src)[P1_offset_M4]<<8)
3599 		+(src)[P1_offset_M3]<<8)
3600 		+(src)[P1_offset_M2])<<8)
3601 		+(src)[P1_offset_M1])<<8)
3602 		+(src)[P1_offset_M0]);
3603 		dst->p_flags = (((((((Elf64_Word)(src)[P1_flags_M3]<<8)
3604 		+(src)[P1_flags_M2])<<8)
3605 		+(src)[P1_flags_M1])<<8)
3606 		+(src)[P1_flags_M0]);
3607 		dst->p_type = (((((((Elf64_Word)(src)[P1_type_M3]<<8)
3608 		+(src)[P1_type_M2])<<8)
3609 		+(src)[P1_type_M1])<<8)
3610 		+(src)[P1_type_M0]);
3611 	}
3612 }
3613 
3614 
3615 
3616 
3617 
3618 static void
3619 rel_2L11_tom(Elf64_Rel *dst, Byte *src, size_t cnt)
3620 {
3621 	Elf64_Rel	*end = dst;
3622 
3623 	dst += cnt;
3624 	src += cnt * R1_sizeof;
3625 	while (dst-- > end) {
3626 		src -= R1_sizeof;
3627 		dst->r_info = (((((((((((Elf64_Xword)(src)[R1_info_L7]<<8)
3628 		+(src)[R1_info_L6]<<8)
3629 		+(src)[R1_info_L5]<<8)
3630 		+(src)[R1_info_L4]<<8)
3631 		+(src)[R1_info_L3]<<8)
3632 		+(src)[R1_info_L2])<<8)
3633 		+(src)[R1_info_L1])<<8)
3634 		+(src)[R1_info_L0]);
3635 		dst->r_offset = (((((((((((Elf64_Addr)(src)[R1_offset_L7]<<8)
3636 		+(src)[R1_offset_L6]<<8)
3637 		+(src)[R1_offset_L5]<<8)
3638 		+(src)[R1_offset_L4]<<8)
3639 		+(src)[R1_offset_L3]<<8)
3640 		+(src)[R1_offset_L2])<<8)
3641 		+(src)[R1_offset_L1])<<8)
3642 		+(src)[R1_offset_L0]);
3643 	}
3644 }
3645 
3646 static void
3647 rel_2M11_tom(Elf64_Rel *dst, Byte *src, size_t cnt)
3648 {
3649 	Elf64_Rel	*end = dst;
3650 
3651 	dst += cnt;
3652 	src += cnt * R1_sizeof;
3653 	while (dst-- > end) {
3654 		src -= R1_sizeof;
3655 		dst->r_info = (((((((((((Elf64_Xword)(src)[R1_info_M7]<<8)
3656 		+(src)[R1_info_M6]<<8)
3657 		+(src)[R1_info_M5]<<8)
3658 		+(src)[R1_info_M4]<<8)
3659 		+(src)[R1_info_M3]<<8)
3660 		+(src)[R1_info_M2])<<8)
3661 		+(src)[R1_info_M1])<<8)
3662 		+(src)[R1_info_M0]);
3663 		dst->r_offset = (((((((((((Elf64_Addr)(src)[R1_offset_M7]<<8)
3664 		+(src)[R1_offset_M6]<<8)
3665 		+(src)[R1_offset_M5]<<8)
3666 		+(src)[R1_offset_M4]<<8)
3667 		+(src)[R1_offset_M3]<<8)
3668 		+(src)[R1_offset_M2])<<8)
3669 		+(src)[R1_offset_M1])<<8)
3670 		+(src)[R1_offset_M0]);
3671 	}
3672 }
3673 
3674 
3675 
3676 
3677 
3678 static void
3679 rela_2L11_tom(Elf64_Rela *dst, Byte *src, size_t cnt)
3680 {
3681 	Elf64_Rela *end = dst;
3682 
3683 	dst += cnt;
3684 	src += cnt * RA1_sizeof;
3685 	while (dst-- > end) {
3686 		src -= RA1_sizeof;
3687 		/*CONSTANTCONDITION*/
3688 		if (~(Elf64_Xword)0 == -(Elf64_Sxword)1 &&	/* 2s comp */
3689 		    ~(~(Elf64_Xword)0 >> 1) == HI64) {
3690 			dst->r_addend = (((((((((((Elf64_Xword)(src)[RA1_addend_L7]<<8)
3691 		+(src)[RA1_addend_L6]<<8)
3692 		+(src)[RA1_addend_L5]<<8)
3693 		+(src)[RA1_addend_L4]<<8)
3694 		+(src)[RA1_addend_L3]<<8)
3695 		+(src)[RA1_addend_L2])<<8)
3696 		+(src)[RA1_addend_L1])<<8)
3697 		+(src)[RA1_addend_L0]);
3698 		} else {
3699 			union {
3700 				Elf64_Xword w;
3701 				Elf64_Sxword sw;
3702 			} u;
3703 
3704 			if ((u.w = (((((((((((Elf64_Xword)(src)[RA1_addend_L7]<<8)
3705 		+(src)[RA1_addend_L6]<<8)
3706 		+(src)[RA1_addend_L5]<<8)
3707 		+(src)[RA1_addend_L4]<<8)
3708 		+(src)[RA1_addend_L3]<<8)
3709 		+(src)[RA1_addend_L2])<<8)
3710 		+(src)[RA1_addend_L1])<<8)
3711 		+(src)[RA1_addend_L0])) & HI64) {
3712 				/* LINTED */
3713 				u.w |= ~(Elf64_Xword)LO63;
3714 				u.w = ~u.w + 1;
3715 				u.sw = -u.w;
3716 			}
3717 			dst->r_addend = u.sw;
3718 		}
3719 		dst->r_info = (((((((((((Elf64_Xword)(src)[RA1_info_L7]<<8)
3720 		+(src)[RA1_info_L6]<<8)
3721 		+(src)[RA1_info_L5]<<8)
3722 		+(src)[RA1_info_L4]<<8)
3723 		+(src)[RA1_info_L3]<<8)
3724 		+(src)[RA1_info_L2])<<8)
3725 		+(src)[RA1_info_L1])<<8)
3726 		+(src)[RA1_info_L0]);
3727 		dst->r_offset = (((((((((((Elf64_Addr)(src)[RA1_offset_L7]<<8)
3728 		+(src)[RA1_offset_L6]<<8)
3729 		+(src)[RA1_offset_L5]<<8)
3730 		+(src)[RA1_offset_L4]<<8)
3731 		+(src)[RA1_offset_L3]<<8)
3732 		+(src)[RA1_offset_L2])<<8)
3733 		+(src)[RA1_offset_L1])<<8)
3734 		+(src)[RA1_offset_L0]);
3735 	}
3736 }
3737 
3738 static void
3739 rela_2M11_tom(Elf64_Rela *dst, Byte *src, size_t cnt)
3740 {
3741 	Elf64_Rela *end = dst;
3742 
3743 	dst += cnt;
3744 	src += cnt * RA1_sizeof;
3745 	while (dst-- > end) {
3746 		src -= RA1_sizeof;
3747 		/*CONSTANTCONDITION*/
3748 		if (~(Elf64_Xword)0 == -(Elf64_Sxword)1 &&	/* 2s comp */
3749 		    ~(~(Elf64_Xword)0 >> 1) == HI64) {
3750 			dst->r_addend = (((((((((((Elf64_Xword)(src)[RA1_addend_M7]<<8)
3751 		+(src)[RA1_addend_M6]<<8)
3752 		+(src)[RA1_addend_M5]<<8)
3753 		+(src)[RA1_addend_M4]<<8)
3754 		+(src)[RA1_addend_M3]<<8)
3755 		+(src)[RA1_addend_M2])<<8)
3756 		+(src)[RA1_addend_M1])<<8)
3757 		+(src)[RA1_addend_M0]);
3758 		} else {
3759 			union {
3760 				Elf64_Xword w;
3761 				Elf64_Sxword sw;
3762 			} u;
3763 
3764 			if ((u.w = (((((((((((Elf64_Xword)(src)[RA1_addend_M7]<<8)
3765 		+(src)[RA1_addend_M6]<<8)
3766 		+(src)[RA1_addend_M5]<<8)
3767 		+(src)[RA1_addend_M4]<<8)
3768 		+(src)[RA1_addend_M3]<<8)
3769 		+(src)[RA1_addend_M2])<<8)
3770 		+(src)[RA1_addend_M1])<<8)
3771 		+(src)[RA1_addend_M0])) & HI64) {
3772 				/* LINTED */
3773 				u.w |= ~(Elf64_Xword)LO63;
3774 				u.w = ~u.w + 1;
3775 				u.sw = -u.w;
3776 			}
3777 			dst->r_addend = u.sw;
3778 		}
3779 		dst->r_info = (((((((((((Elf64_Xword)(src)[RA1_info_M7]<<8)
3780 		+(src)[RA1_info_M6]<<8)
3781 		+(src)[RA1_info_M5]<<8)
3782 		+(src)[RA1_info_M4]<<8)
3783 		+(src)[RA1_info_M3]<<8)
3784 		+(src)[RA1_info_M2])<<8)
3785 		+(src)[RA1_info_M1])<<8)
3786 		+(src)[RA1_info_M0]);
3787 		dst->r_offset = (((((((((((Elf64_Addr)(src)[RA1_offset_M7]<<8)
3788 		+(src)[RA1_offset_M6]<<8)
3789 		+(src)[RA1_offset_M5]<<8)
3790 		+(src)[RA1_offset_M4]<<8)
3791 		+(src)[RA1_offset_M3]<<8)
3792 		+(src)[RA1_offset_M2])<<8)
3793 		+(src)[RA1_offset_M1])<<8)
3794 		+(src)[RA1_offset_M0]);
3795 	}
3796 }
3797 
3798 
3799 
3800 
3801 
3802 static void
3803 shdr_2L11_tom(Elf64_Shdr *dst, Byte *src, size_t cnt)
3804 {
3805 	Elf64_Shdr	*end = dst;
3806 
3807 	dst += cnt;
3808 	src += cnt * SH1_sizeof;
3809 	while (dst-- > end) {
3810 		src -= SH1_sizeof;
3811 		dst->sh_entsize = (((((((((((Elf64_Xword)(src)[SH1_entsize_L7]<<8)
3812 		+(src)[SH1_entsize_L6]<<8)
3813 		+(src)[SH1_entsize_L5]<<8)
3814 		+(src)[SH1_entsize_L4]<<8)
3815 		+(src)[SH1_entsize_L3]<<8)
3816 		+(src)[SH1_entsize_L2])<<8)
3817 		+(src)[SH1_entsize_L1])<<8)
3818 		+(src)[SH1_entsize_L0]);
3819 		dst->sh_addralign = (((((((((((Elf64_Xword)(src)[SH1_addralign_L7]<<8)
3820 		+(src)[SH1_addralign_L6]<<8)
3821 		+(src)[SH1_addralign_L5]<<8)
3822 		+(src)[SH1_addralign_L4]<<8)
3823 		+(src)[SH1_addralign_L3]<<8)
3824 		+(src)[SH1_addralign_L2])<<8)
3825 		+(src)[SH1_addralign_L1])<<8)
3826 		+(src)[SH1_addralign_L0]);
3827 		dst->sh_info = (((((((Elf64_Word)(src)[SH1_info_L3]<<8)
3828 		+(src)[SH1_info_L2])<<8)
3829 		+(src)[SH1_info_L1])<<8)
3830 		+(src)[SH1_info_L0]);
3831 		dst->sh_link = (((((((Elf64_Word)(src)[SH1_link_L3]<<8)
3832 		+(src)[SH1_link_L2])<<8)
3833 		+(src)[SH1_link_L1])<<8)
3834 		+(src)[SH1_link_L0]);
3835 		dst->sh_size = (((((((((((Elf64_Xword)(src)[SH1_size_L7]<<8)
3836 		+(src)[SH1_size_L6]<<8)
3837 		+(src)[SH1_size_L5]<<8)
3838 		+(src)[SH1_size_L4]<<8)
3839 		+(src)[SH1_size_L3]<<8)
3840 		+(src)[SH1_size_L2])<<8)
3841 		+(src)[SH1_size_L1])<<8)
3842 		+(src)[SH1_size_L0]);
3843 		dst->sh_offset = (((((((((((Elf64_Off)(src)[SH1_offset_L7]<<8)
3844 		+(src)[SH1_offset_L6]<<8)
3845 		+(src)[SH1_offset_L5]<<8)
3846 		+(src)[SH1_offset_L4]<<8)
3847 		+(src)[SH1_offset_L3]<<8)
3848 		+(src)[SH1_offset_L2])<<8)
3849 		+(src)[SH1_offset_L1])<<8)
3850 		+(src)[SH1_offset_L0]);
3851 		dst->sh_addr = (((((((((((Elf64_Addr)(src)[SH1_addr_L7]<<8)
3852 		+(src)[SH1_addr_L6]<<8)
3853 		+(src)[SH1_addr_L5]<<8)
3854 		+(src)[SH1_addr_L4]<<8)
3855 		+(src)[SH1_addr_L3]<<8)
3856 		+(src)[SH1_addr_L2])<<8)
3857 		+(src)[SH1_addr_L1])<<8)
3858 		+(src)[SH1_addr_L0]);
3859 		dst->sh_flags = (((((((((((Elf64_Xword)(src)[SH1_flags_L7]<<8)
3860 		+(src)[SH1_flags_L6]<<8)
3861 		+(src)[SH1_flags_L5]<<8)
3862 		+(src)[SH1_flags_L4]<<8)
3863 		+(src)[SH1_flags_L3]<<8)
3864 		+(src)[SH1_flags_L2])<<8)
3865 		+(src)[SH1_flags_L1])<<8)
3866 		+(src)[SH1_flags_L0]);
3867 		dst->sh_type = (((((((Elf64_Word)(src)[SH1_type_L3]<<8)
3868 		+(src)[SH1_type_L2])<<8)
3869 		+(src)[SH1_type_L1])<<8)
3870 		+(src)[SH1_type_L0]);
3871 		dst->sh_name = (((((((Elf64_Word)(src)[SH1_name_L3]<<8)
3872 		+(src)[SH1_name_L2])<<8)
3873 		+(src)[SH1_name_L1])<<8)
3874 		+(src)[SH1_name_L0]);
3875 	}
3876 }
3877 
3878 static void
3879 shdr_2M11_tom(Elf64_Shdr *dst, Byte *src, size_t cnt)
3880 {
3881 	Elf64_Shdr	*end = dst;
3882 
3883 	dst += cnt;
3884 	src += cnt * SH1_sizeof;
3885 	while (dst-- > end) {
3886 		src -= SH1_sizeof;
3887 		dst->sh_entsize = (((((((((((Elf64_Xword)(src)[SH1_entsize_M7]<<8)
3888 		+(src)[SH1_entsize_M6]<<8)
3889 		+(src)[SH1_entsize_M5]<<8)
3890 		+(src)[SH1_entsize_M4]<<8)
3891 		+(src)[SH1_entsize_M3]<<8)
3892 		+(src)[SH1_entsize_M2])<<8)
3893 		+(src)[SH1_entsize_M1])<<8)
3894 		+(src)[SH1_entsize_M0]);
3895 		dst->sh_addralign = (((((((((((Elf64_Xword)(src)[SH1_addralign_M7]<<8)
3896 		+(src)[SH1_addralign_M6]<<8)
3897 		+(src)[SH1_addralign_M5]<<8)
3898 		+(src)[SH1_addralign_M4]<<8)
3899 		+(src)[SH1_addralign_M3]<<8)
3900 		+(src)[SH1_addralign_M2])<<8)
3901 		+(src)[SH1_addralign_M1])<<8)
3902 		+(src)[SH1_addralign_M0]);
3903 		dst->sh_info = (((((((Elf64_Word)(src)[SH1_info_M3]<<8)
3904 		+(src)[SH1_info_M2])<<8)
3905 		+(src)[SH1_info_M1])<<8)
3906 		+(src)[SH1_info_M0]);
3907 		dst->sh_link = (((((((Elf64_Word)(src)[SH1_link_M3]<<8)
3908 		+(src)[SH1_link_M2])<<8)
3909 		+(src)[SH1_link_M1])<<8)
3910 		+(src)[SH1_link_M0]);
3911 		dst->sh_size = (((((((((((Elf64_Xword)(src)[SH1_size_M7]<<8)
3912 		+(src)[SH1_size_M6]<<8)
3913 		+(src)[SH1_size_M5]<<8)
3914 		+(src)[SH1_size_M4]<<8)
3915 		+(src)[SH1_size_M3]<<8)
3916 		+(src)[SH1_size_M2])<<8)
3917 		+(src)[SH1_size_M1])<<8)
3918 		+(src)[SH1_size_M0]);
3919 		dst->sh_offset = (((((((((((Elf64_Off)(src)[SH1_offset_M7]<<8)
3920 		+(src)[SH1_offset_M6]<<8)
3921 		+(src)[SH1_offset_M5]<<8)
3922 		+(src)[SH1_offset_M4]<<8)
3923 		+(src)[SH1_offset_M3]<<8)
3924 		+(src)[SH1_offset_M2])<<8)
3925 		+(src)[SH1_offset_M1])<<8)
3926 		+(src)[SH1_offset_M0]);
3927 		dst->sh_addr = (((((((((((Elf64_Addr)(src)[SH1_addr_M7]<<8)
3928 		+(src)[SH1_addr_M6]<<8)
3929 		+(src)[SH1_addr_M5]<<8)
3930 		+(src)[SH1_addr_M4]<<8)
3931 		+(src)[SH1_addr_M3]<<8)
3932 		+(src)[SH1_addr_M2])<<8)
3933 		+(src)[SH1_addr_M1])<<8)
3934 		+(src)[SH1_addr_M0]);
3935 		dst->sh_flags = (((((((((((Elf64_Xword)(src)[SH1_flags_M7]<<8)
3936 		+(src)[SH1_flags_M6]<<8)
3937 		+(src)[SH1_flags_M5]<<8)
3938 		+(src)[SH1_flags_M4]<<8)
3939 		+(src)[SH1_flags_M3]<<8)
3940 		+(src)[SH1_flags_M2])<<8)
3941 		+(src)[SH1_flags_M1])<<8)
3942 		+(src)[SH1_flags_M0]);
3943 		dst->sh_type = (((((((Elf64_Word)(src)[SH1_type_M3]<<8)
3944 		+(src)[SH1_type_M2])<<8)
3945 		+(src)[SH1_type_M1])<<8)
3946 		+(src)[SH1_type_M0]);
3947 		dst->sh_name = (((((((Elf64_Word)(src)[SH1_name_M3]<<8)
3948 		+(src)[SH1_name_M2])<<8)
3949 		+(src)[SH1_name_M1])<<8)
3950 		+(src)[SH1_name_M0]);
3951 	}
3952 }
3953 
3954 
3955 
3956 
3957 
3958 static void
3959 sword_2L_tom(Elf64_Sword *dst, Byte *src, size_t cnt)
3960 {
3961 	Elf64_Sword	*end = dst;
3962 
3963 	dst += cnt;
3964 	src += cnt * W_sizeof;
3965 	while (dst-- > end) {
3966 		src -= W_sizeof;
3967 		/*CONSTANTCONDITION*/
3968 		if (~(Elf64_Word)0 == -(Elf64_Sword)1 &&
3969 		    ~(~(Elf64_Word)0 >> 1) == HI32) {	/* 2s comp */
3970 			*dst = (((((((Elf64_Word)(src)[W_L3]<<8)
3971 		+(src)[W_L2])<<8)
3972 		+(src)[W_L1])<<8)
3973 		+(src)[W_L0]);
3974 		} else {
3975 			union {
3976 				Elf64_Word w;
3977 				Elf64_Sword sw;
3978 			} u;
3979 
3980 			if ((u.w = (((((((Elf64_Word)(src)[W_L3]<<8)
3981 		+(src)[W_L2])<<8)
3982 		+(src)[W_L1])<<8)
3983 		+(src)[W_L0])) & HI32) {
3984 				u.w |= ~(Elf64_Word)LO31;
3985 				u.w = ~u.w + 1;
3986 				u.sw = -u.w;
3987 			}
3988 			*dst = u.sw;
3989 		}
3990 	}
3991 }
3992 
3993 static void
3994 sword_2M_tom(Elf64_Sword *dst, Byte *src, size_t cnt)
3995 {
3996 	Elf64_Sword	*end = dst;
3997 
3998 	dst += cnt;
3999 	src += cnt * W_sizeof;
4000 	while (dst-- > end) {
4001 		src -= W_sizeof;
4002 		/*CONSTANTCONDITION*/
4003 		if (~(Elf64_Word)0 == -(Elf64_Sword)1 &&
4004 		    ~(~(Elf64_Word)0 >> 1) == HI32) {	/* 2s comp */
4005 			*dst = (((((((Elf64_Word)(src)[W_M3]<<8)
4006 		+(src)[W_M2])<<8)
4007 		+(src)[W_M1])<<8)
4008 		+(src)[W_M0]);
4009 		} else {
4010 			union {
4011 				Elf64_Word w;
4012 				Elf64_Sword sw;
4013 			} u;
4014 
4015 			if ((u.w = (((((((Elf64_Word)(src)[W_M3]<<8)
4016 		+(src)[W_M2])<<8)
4017 		+(src)[W_M1])<<8)
4018 		+(src)[W_M0])) & HI32) {
4019 				u.w |= ~(Elf64_Word)LO31;
4020 				u.w = ~u.w + 1;
4021 				u.sw = -u.w;
4022 			}
4023 			*dst = u.sw;
4024 		}
4025 	}
4026 }
4027 
4028 
4029 
4030 
4031 
4032 static void
4033 cap_2L11_tom(Elf64_Cap *dst, unsigned char *src, size_t cnt)
4034 {
4035 	Elf64_Cap	*end = dst + cnt;
4036 
4037 	do {
4038 		dst->c_tag = (((((((((((Elf64_Xword)(src)[C1_tag_L7]<<8)
4039 		+(src)[C1_tag_L6]<<8)
4040 		+(src)[C1_tag_L5]<<8)
4041 		+(src)[C1_tag_L4]<<8)
4042 		+(src)[C1_tag_L3]<<8)
4043 		+(src)[C1_tag_L2])<<8)
4044 		+(src)[C1_tag_L1])<<8)
4045 		+(src)[C1_tag_L0]);
4046 		dst->c_un.c_val = (((((((((((Elf64_Xword)(src)[C1_val_L7]<<8)
4047 		+(src)[C1_val_L6]<<8)
4048 		+(src)[C1_val_L5]<<8)
4049 		+(src)[C1_val_L4]<<8)
4050 		+(src)[C1_val_L3]<<8)
4051 		+(src)[C1_val_L2])<<8)
4052 		+(src)[C1_val_L1])<<8)
4053 		+(src)[C1_val_L0]);
4054 		src += C1_sizeof;
4055 	} while (++dst < end);
4056 }
4057 
4058 static void
4059 cap_2M11_tom(Elf64_Cap *dst, unsigned char *src, size_t cnt)
4060 {
4061 	Elf64_Cap	*end = dst + cnt;
4062 
4063 	do {
4064 		dst->c_tag = (((((((((((Elf64_Xword)(src)[C1_tag_M7]<<8)
4065 		+(src)[C1_tag_M6]<<8)
4066 		+(src)[C1_tag_M5]<<8)
4067 		+(src)[C1_tag_M4]<<8)
4068 		+(src)[C1_tag_M3]<<8)
4069 		+(src)[C1_tag_M2])<<8)
4070 		+(src)[C1_tag_M1])<<8)
4071 		+(src)[C1_tag_M0]);
4072 		dst->c_un.c_val = (((((((((((Elf64_Xword)(src)[C1_val_M7]<<8)
4073 		+(src)[C1_val_M6]<<8)
4074 		+(src)[C1_val_M5]<<8)
4075 		+(src)[C1_val_M4]<<8)
4076 		+(src)[C1_val_M3]<<8)
4077 		+(src)[C1_val_M2])<<8)
4078 		+(src)[C1_val_M1])<<8)
4079 		+(src)[C1_val_M0]);
4080 		src += C1_sizeof;
4081 	} while (++dst < end);
4082 }
4083 
4084 
4085 
4086 
4087 
4088 static void
4089 syminfo_2L11_tom(Elf64_Syminfo *dst, unsigned char *src, size_t cnt)
4090 {
4091 	Elf64_Syminfo	*end = dst;
4092 
4093 	dst += cnt;
4094 	src += cnt * SI1_sizeof;
4095 	while (dst-- > end)
4096 	{
4097 		src -= SI1_sizeof;
4098 		dst->si_boundto = (((Elf64_Half)(src)[SI1_boundto_L1]<<8)+(src)[SI1_boundto_L0]);
4099 		dst->si_flags = (((Elf64_Half)(src)[SI1_flags_L1]<<8)+(src)[SI1_flags_L0]);
4100 	}
4101 }
4102 
4103 static void
4104 syminfo_2M11_tom(Elf64_Syminfo *dst, unsigned char *src, size_t cnt)
4105 {
4106 	Elf64_Syminfo	*end = dst;
4107 
4108 	dst += cnt;
4109 	src += cnt * SI1_sizeof;
4110 	while (dst-- > end)
4111 	{
4112 		src -= SI1_sizeof;
4113 		dst->si_boundto = (((Elf64_Half)(src)[SI1_boundto_M1]<<8)+(src)[SI1_boundto_M0]);
4114 		dst->si_flags = (((Elf64_Half)(src)[SI1_flags_M1]<<8)+(src)[SI1_flags_M0]);
4115 	}
4116 }
4117 
4118 
4119 
4120 
4121 
4122 static void
4123 sym_2L11_tom(Elf64_Sym *dst, Byte *src, size_t cnt)
4124 {
4125 	Elf64_Sym	*end = dst;
4126 
4127 	dst += cnt;
4128 	src += cnt * ST1_sizeof;
4129 	while (dst-- > end) {
4130 		src -= ST1_sizeof;
4131 		dst->st_size = (((((((((((Elf64_Xword)(src)[ST1_size_L7]<<8)
4132 		+(src)[ST1_size_L6]<<8)
4133 		+(src)[ST1_size_L5]<<8)
4134 		+(src)[ST1_size_L4]<<8)
4135 		+(src)[ST1_size_L3]<<8)
4136 		+(src)[ST1_size_L2])<<8)
4137 		+(src)[ST1_size_L1])<<8)
4138 		+(src)[ST1_size_L0]);
4139 		dst->st_value = (((((((((((Elf64_Addr)(src)[ST1_value_L7]<<8)
4140 		+(src)[ST1_value_L6]<<8)
4141 		+(src)[ST1_value_L5]<<8)
4142 		+(src)[ST1_value_L4]<<8)
4143 		+(src)[ST1_value_L3]<<8)
4144 		+(src)[ST1_value_L2])<<8)
4145 		+(src)[ST1_value_L1])<<8)
4146 		+(src)[ST1_value_L0]);
4147 		dst->st_shndx = (((Elf64_Half)(src)[ST1_shndx_L1]<<8)+(src)[ST1_shndx_L0]);
4148 		dst->st_other = ((Byte)(src)[ST1_other_L]);
4149 		dst->st_info = ((Byte)(src)[ST1_info_L]);
4150 		dst->st_name = (((((((Elf64_Word)(src)[ST1_name_L3]<<8)
4151 		+(src)[ST1_name_L2])<<8)
4152 		+(src)[ST1_name_L1])<<8)
4153 		+(src)[ST1_name_L0]);
4154 	}
4155 }
4156 
4157 static void
4158 sym_2M11_tom(Elf64_Sym *dst, Byte *src, size_t cnt)
4159 {
4160 	Elf64_Sym	*end = dst;
4161 
4162 	dst += cnt;
4163 	src += cnt * ST1_sizeof;
4164 	while (dst-- > end) {
4165 		src -= ST1_sizeof;
4166 		dst->st_size = (((((((((((Elf64_Xword)(src)[ST1_size_M7]<<8)
4167 		+(src)[ST1_size_M6]<<8)
4168 		+(src)[ST1_size_M5]<<8)
4169 		+(src)[ST1_size_M4]<<8)
4170 		+(src)[ST1_size_M3]<<8)
4171 		+(src)[ST1_size_M2])<<8)
4172 		+(src)[ST1_size_M1])<<8)
4173 		+(src)[ST1_size_M0]);
4174 		dst->st_value = (((((((((((Elf64_Addr)(src)[ST1_value_M7]<<8)
4175 		+(src)[ST1_value_M6]<<8)
4176 		+(src)[ST1_value_M5]<<8)
4177 		+(src)[ST1_value_M4]<<8)
4178 		+(src)[ST1_value_M3]<<8)
4179 		+(src)[ST1_value_M2])<<8)
4180 		+(src)[ST1_value_M1])<<8)
4181 		+(src)[ST1_value_M0]);
4182 		dst->st_shndx = (((Elf64_Half)(src)[ST1_shndx_M1]<<8)+(src)[ST1_shndx_M0]);
4183 		dst->st_other = ((Byte)(src)[ST1_other_M]);
4184 		dst->st_info = ((Byte)(src)[ST1_info_M]);
4185 		dst->st_name = (((((((Elf64_Word)(src)[ST1_name_M3]<<8)
4186 		+(src)[ST1_name_M2])<<8)
4187 		+(src)[ST1_name_M1])<<8)
4188 		+(src)[ST1_name_M0]);
4189 	}
4190 }
4191 
4192 
4193 
4194 
4195 
4196 static void
4197 word_2L_tom(Elf64_Word *dst, Byte *src, size_t cnt)
4198 {
4199 	Elf64_Word	*end = dst;
4200 
4201 	dst += cnt;
4202 	src += cnt * W_sizeof;
4203 	while (dst-- > end) {
4204 		src -= W_sizeof;
4205 		*dst = (((((((Elf64_Word)(src)[W_L3]<<8)
4206 		+(src)[W_L2])<<8)
4207 		+(src)[W_L1])<<8)
4208 		+(src)[W_L0]);
4209 	}
4210 }
4211 
4212 static void
4213 word_2M_tom(Elf64_Word *dst, Byte *src, size_t cnt)
4214 {
4215 	Elf64_Word	*end = dst;
4216 
4217 	dst += cnt;
4218 	src += cnt * W_sizeof;
4219 	while (dst-- > end) {
4220 		src -= W_sizeof;
4221 		*dst = (((((((Elf64_Word)(src)[W_M3]<<8)
4222 		+(src)[W_M2])<<8)
4223 		+(src)[W_M1])<<8)
4224 		+(src)[W_M0]);
4225 	}
4226 }
4227 
4228 
4229 
4230 
4231 
4232 static void
4233 verdef_2L11_tom(Elf64_Verdef *dst, Byte *src, size_t cnt)
4234 {
4235 	/* LINTED */
4236 	Elf64_Verdef	*end = (Elf64_Verdef *)((Byte *)dst + cnt);
4237 
4238 	while (dst < end) {
4239 		Elf64_Verdaux	*vaux;
4240 		Byte		*src_vaux;
4241 		Elf64_Half	i;
4242 
4243 		dst->vd_version = (((Elf64_Half)(src)[VD1_version_L1]<<8)+(src)[VD1_version_L0]);
4244 		dst->vd_flags = (((Elf64_Half)(src)[VD1_flags_L1]<<8)+(src)[VD1_flags_L0]);
4245 		dst->vd_ndx = (((Elf64_Half)(src)[VD1_ndx_L1]<<8)+(src)[VD1_ndx_L0]);
4246 		dst->vd_cnt = (((Elf64_Half)(src)[VD1_cnt_L1]<<8)+(src)[VD1_cnt_L0]);
4247 		dst->vd_hash = (((((((Elf64_Word)(src)[VD1_hash_L3]<<8)
4248 		+(src)[VD1_hash_L2])<<8)
4249 		+(src)[VD1_hash_L1])<<8)
4250 		+(src)[VD1_hash_L0]);
4251 		dst->vd_aux = (((((((Elf64_Word)(src)[VD1_aux_L3]<<8)
4252 		+(src)[VD1_aux_L2])<<8)
4253 		+(src)[VD1_aux_L1])<<8)
4254 		+(src)[VD1_aux_L0]);
4255 		dst->vd_next = (((((((Elf64_Word)(src)[VD1_next_L3]<<8)
4256 		+(src)[VD1_next_L2])<<8)
4257 		+(src)[VD1_next_L1])<<8)
4258 		+(src)[VD1_next_L0]);
4259 
4260 		src_vaux = src + dst->vd_aux;
4261 		/* LINTED */
4262 		vaux = (Elf64_Verdaux *)((Byte *)dst + dst->vd_aux);
4263 		for (i = 0; i < dst->vd_cnt; i++) {
4264 			vaux->vda_name = (((((((Elf64_Word)(src_vaux)[VDA1_name_L3]<<8)
4265 		+(src_vaux)[VDA1_name_L2])<<8)
4266 		+(src_vaux)[VDA1_name_L1])<<8)
4267 		+(src_vaux)[VDA1_name_L0]);
4268 			vaux->vda_next = (((((((Elf64_Word)(src_vaux)[VDA1_next_L3]<<8)
4269 		+(src_vaux)[VDA1_next_L2])<<8)
4270 		+(src_vaux)[VDA1_next_L1])<<8)
4271 		+(src_vaux)[VDA1_next_L0]);
4272 			src_vaux += vaux->vda_next;
4273 			/* LINTED */
4274 			vaux = (Elf64_Verdaux *)((Byte *)vaux +
4275 			    vaux->vda_next);
4276 		}
4277 		src += dst->vd_next;
4278 		/* LINTED */
4279 		dst = (Elf64_Verdef *)(dst->vd_next ?
4280 		    (Byte *)dst + dst->vd_next : (Byte *)end);
4281 	}
4282 }
4283 
4284 static void
4285 verdef_2M11_tom(Elf64_Verdef *dst, Byte *src, size_t cnt)
4286 {
4287 	/* LINTED */
4288 	Elf64_Verdef	*end = (Elf64_Verdef *)((Byte *)dst + cnt);
4289 
4290 	while (dst < end) {
4291 		Elf64_Verdaux	*vaux;
4292 		Byte		*src_vaux;
4293 		Elf64_Half	i;
4294 
4295 		dst->vd_version = (((Elf64_Half)(src)[VD1_version_M1]<<8)+(src)[VD1_version_M0]);
4296 		dst->vd_flags = (((Elf64_Half)(src)[VD1_flags_M1]<<8)+(src)[VD1_flags_M0]);
4297 		dst->vd_ndx = (((Elf64_Half)(src)[VD1_ndx_M1]<<8)+(src)[VD1_ndx_M0]);
4298 		dst->vd_cnt = (((Elf64_Half)(src)[VD1_cnt_M1]<<8)+(src)[VD1_cnt_M0]);
4299 		dst->vd_hash = (((((((Elf64_Word)(src)[VD1_hash_M3]<<8)
4300 		+(src)[VD1_hash_M2])<<8)
4301 		+(src)[VD1_hash_M1])<<8)
4302 		+(src)[VD1_hash_M0]);
4303 		dst->vd_aux = (((((((Elf64_Word)(src)[VD1_aux_M3]<<8)
4304 		+(src)[VD1_aux_M2])<<8)
4305 		+(src)[VD1_aux_M1])<<8)
4306 		+(src)[VD1_aux_M0]);
4307 		dst->vd_next = (((((((Elf64_Word)(src)[VD1_next_M3]<<8)
4308 		+(src)[VD1_next_M2])<<8)
4309 		+(src)[VD1_next_M1])<<8)
4310 		+(src)[VD1_next_M0]);
4311 
4312 		src_vaux = src + dst->vd_aux;
4313 		/* LINTED */
4314 		vaux = (Elf64_Verdaux *)((Byte *)dst + dst->vd_aux);
4315 		for (i = 0; i < dst->vd_cnt; i++) {
4316 			vaux->vda_name = (((((((Elf64_Word)(src_vaux)[VDA1_name_M3]<<8)
4317 		+(src_vaux)[VDA1_name_M2])<<8)
4318 		+(src_vaux)[VDA1_name_M1])<<8)
4319 		+(src_vaux)[VDA1_name_M0]);
4320 			vaux->vda_next = (((((((Elf64_Word)(src_vaux)[VDA1_next_M3]<<8)
4321 		+(src_vaux)[VDA1_next_M2])<<8)
4322 		+(src_vaux)[VDA1_next_M1])<<8)
4323 		+(src_vaux)[VDA1_next_M0]);
4324 			src_vaux += vaux->vda_next;
4325 			/* LINTED */
4326 			vaux = (Elf64_Verdaux *)((Byte *)vaux +
4327 			    vaux->vda_next);
4328 		}
4329 		src += dst->vd_next;
4330 		/* LINTED */
4331 		dst = (Elf64_Verdef *)(dst->vd_next ?
4332 		    (Byte *)dst + dst->vd_next : (Byte *)end);
4333 	}
4334 }
4335 
4336 
4337 
4338 
4339 
4340 static void
4341 verneed_2L11_tom(Elf64_Verneed *dst, Byte *src, size_t cnt)
4342 {
4343 	/* LINTED */
4344 	Elf64_Verneed	*end = (Elf64_Verneed *)((char *)dst + cnt);
4345 
4346 	while (dst < end) {
4347 		Elf64_Vernaux *	vaux;
4348 		Byte *		src_vaux;
4349 		Elf64_Half	i;
4350 
4351 		dst->vn_version = (((Elf64_Half)(src)[VN1_version_L1]<<8)+(src)[VN1_version_L0]);
4352 		dst->vn_cnt = (((Elf64_Half)(src)[VN1_cnt_L1]<<8)+(src)[VN1_cnt_L0]);
4353 		dst->vn_file = (((((((Elf64_Word)(src)[VN1_file_L3]<<8)
4354 		+(src)[VN1_file_L2])<<8)
4355 		+(src)[VN1_file_L1])<<8)
4356 		+(src)[VN1_file_L0]);
4357 		dst->vn_aux = (((((((Elf64_Word)(src)[VN1_aux_L3]<<8)
4358 		+(src)[VN1_aux_L2])<<8)
4359 		+(src)[VN1_aux_L1])<<8)
4360 		+(src)[VN1_aux_L0]);
4361 		dst->vn_next = (((((((Elf64_Word)(src)[VN1_next_L3]<<8)
4362 		+(src)[VN1_next_L2])<<8)
4363 		+(src)[VN1_next_L1])<<8)
4364 		+(src)[VN1_next_L0]);
4365 
4366 		src_vaux = src + dst->vn_aux;
4367 		/* LINTED */
4368 		vaux = (Elf64_Vernaux *)((Byte *)dst + dst->vn_aux);
4369 		for (i = 0; i < dst->vn_cnt; i++) {
4370 			vaux->vna_hash = (((((((Elf64_Word)(src_vaux)[VNA1_hash_L3]<<8)
4371 		+(src_vaux)[VNA1_hash_L2])<<8)
4372 		+(src_vaux)[VNA1_hash_L1])<<8)
4373 		+(src_vaux)[VNA1_hash_L0]);
4374 			vaux->vna_flags = (((Elf64_Half)(src_vaux)[VNA1_flags_L1]<<8)+(src_vaux)[VNA1_flags_L0]);
4375 			vaux->vna_other = (((Elf64_Half)(src_vaux)[VNA1_other_L1]<<8)+(src_vaux)[VNA1_other_L0]);
4376 			vaux->vna_name = (((((((Elf64_Word)(src_vaux)[VNA1_name_L3]<<8)
4377 		+(src_vaux)[VNA1_name_L2])<<8)
4378 		+(src_vaux)[VNA1_name_L1])<<8)
4379 		+(src_vaux)[VNA1_name_L0]);
4380 			vaux->vna_next = (((((((Elf64_Word)(src_vaux)[VNA1_next_L3]<<8)
4381 		+(src_vaux)[VNA1_next_L2])<<8)
4382 		+(src_vaux)[VNA1_next_L1])<<8)
4383 		+(src_vaux)[VNA1_next_L0]);
4384 			src_vaux += vaux->vna_next;
4385 			/* LINTED */
4386 			vaux = (Elf64_Vernaux *)((Byte *)vaux +
4387 			    vaux->vna_next);
4388 		}
4389 		src += dst->vn_next;
4390 		/* LINTED */
4391 		dst = (Elf64_Verneed *)(dst->vn_next ?
4392 		    (Byte *)dst + dst->vn_next : (Byte *)end);
4393 	}
4394 }
4395 
4396 static void
4397 verneed_2M11_tom(Elf64_Verneed *dst, Byte *src, size_t cnt)
4398 {
4399 	/* LINTED */
4400 	Elf64_Verneed	*end = (Elf64_Verneed *)((char *)dst + cnt);
4401 
4402 	while (dst < end) {
4403 		Elf64_Vernaux *	vaux;
4404 		Byte *		src_vaux;
4405 		Elf64_Half	i;
4406 
4407 		dst->vn_version = (((Elf64_Half)(src)[VN1_version_M1]<<8)+(src)[VN1_version_M0]);
4408 		dst->vn_cnt = (((Elf64_Half)(src)[VN1_cnt_M1]<<8)+(src)[VN1_cnt_M0]);
4409 		dst->vn_file = (((((((Elf64_Word)(src)[VN1_file_M3]<<8)
4410 		+(src)[VN1_file_M2])<<8)
4411 		+(src)[VN1_file_M1])<<8)
4412 		+(src)[VN1_file_M0]);
4413 		dst->vn_aux = (((((((Elf64_Word)(src)[VN1_aux_M3]<<8)
4414 		+(src)[VN1_aux_M2])<<8)
4415 		+(src)[VN1_aux_M1])<<8)
4416 		+(src)[VN1_aux_M0]);
4417 		dst->vn_next = (((((((Elf64_Word)(src)[VN1_next_M3]<<8)
4418 		+(src)[VN1_next_M2])<<8)
4419 		+(src)[VN1_next_M1])<<8)
4420 		+(src)[VN1_next_M0]);
4421 
4422 		src_vaux = src + dst->vn_aux;
4423 		/* LINTED */
4424 		vaux = (Elf64_Vernaux *)((Byte *)dst + dst->vn_aux);
4425 		for (i = 0; i < dst->vn_cnt; i++) {
4426 			vaux->vna_hash = (((((((Elf64_Word)(src_vaux)[VNA1_hash_M3]<<8)
4427 		+(src_vaux)[VNA1_hash_M2])<<8)
4428 		+(src_vaux)[VNA1_hash_M1])<<8)
4429 		+(src_vaux)[VNA1_hash_M0]);
4430 			vaux->vna_flags = (((Elf64_Half)(src_vaux)[VNA1_flags_M1]<<8)+(src_vaux)[VNA1_flags_M0]);
4431 			vaux->vna_other = (((Elf64_Half)(src_vaux)[VNA1_other_M1]<<8)+(src_vaux)[VNA1_other_M0]);
4432 			vaux->vna_name = (((((((Elf64_Word)(src_vaux)[VNA1_name_M3]<<8)
4433 		+(src_vaux)[VNA1_name_M2])<<8)
4434 		+(src_vaux)[VNA1_name_M1])<<8)
4435 		+(src_vaux)[VNA1_name_M0]);
4436 			vaux->vna_next = (((((((Elf64_Word)(src_vaux)[VNA1_next_M3]<<8)
4437 		+(src_vaux)[VNA1_next_M2])<<8)
4438 		+(src_vaux)[VNA1_next_M1])<<8)
4439 		+(src_vaux)[VNA1_next_M0]);
4440 			src_vaux += vaux->vna_next;
4441 			/* LINTED */
4442 			vaux = (Elf64_Vernaux *)((Byte *)vaux +
4443 			    vaux->vna_next);
4444 		}
4445 		src += dst->vn_next;
4446 		/* LINTED */
4447 		dst = (Elf64_Verneed *)(dst->vn_next ?
4448 		    (Byte *)dst + dst->vn_next : (Byte *)end);
4449 	}
4450 }
4451 
4452 
4453 
4454 
4455 
4456 static void
4457 sxword_2L_tom(Elf64_Sxword *dst, Byte *src, size_t cnt)
4458 {
4459 	Elf64_Sxword	*end = dst;
4460 
4461 	dst += cnt;
4462 	src += cnt * X_sizeof;
4463 	while (dst-- > end) {
4464 		src -= X_sizeof;
4465 		/*CONSTANTCONDITION*/
4466 		if (~(Elf64_Xword)0 == -(Elf64_Sxword)1 &&
4467 		    ~(~(Elf64_Xword)0 >> 1) == HI64) {	/* 2s comp */
4468 			*dst = (((((((((((Elf64_Xword)(src)[X_L7]<<8)
4469 		+(src)[X_L6]<<8)
4470 		+(src)[X_L5]<<8)
4471 		+(src)[X_L4]<<8)
4472 		+(src)[X_L3]<<8)
4473 		+(src)[X_L2])<<8)
4474 		+(src)[X_L1])<<8)
4475 		+(src)[X_L0]);
4476 		} else {				/* other */
4477 			union {
4478 				Elf64_Xword w;
4479 				Elf64_Sxword sw;
4480 			} u;
4481 
4482 			if ((u.w = (((((((((((Elf64_Xword)(src)[X_L7]<<8)
4483 		+(src)[X_L6]<<8)
4484 		+(src)[X_L5]<<8)
4485 		+(src)[X_L4]<<8)
4486 		+(src)[X_L3]<<8)
4487 		+(src)[X_L2])<<8)
4488 		+(src)[X_L1])<<8)
4489 		+(src)[X_L0])) & HI64) {
4490 				/* LINTED */
4491 				u.w |= ~(Elf64_Xword)LO63;
4492 				u.w = ~u.w + 1;
4493 				u.sw = -u.w;
4494 			}
4495 			*dst = u.sw;
4496 		}
4497 	}
4498 }
4499 
4500 static void
4501 sxword_2M_tom(Elf64_Sxword *dst, Byte *src, size_t cnt)
4502 {
4503 	Elf64_Sxword	*end = dst;
4504 
4505 	dst += cnt;
4506 	src += cnt * X_sizeof;
4507 	while (dst-- > end) {
4508 		src -= X_sizeof;
4509 		/*CONSTANTCONDITION*/
4510 		if (~(Elf64_Xword)0 == -(Elf64_Sxword)1 &&
4511 		    ~(~(Elf64_Xword)0 >> 1) == HI64) {	/* 2s comp */
4512 			*dst = (((((((((((Elf64_Xword)(src)[X_M7]<<8)
4513 		+(src)[X_M6]<<8)
4514 		+(src)[X_M5]<<8)
4515 		+(src)[X_M4]<<8)
4516 		+(src)[X_M3]<<8)
4517 		+(src)[X_M2])<<8)
4518 		+(src)[X_M1])<<8)
4519 		+(src)[X_M0]);
4520 		} else {				/* other */
4521 			union {
4522 				Elf64_Xword w;
4523 				Elf64_Sxword sw;
4524 			} u;
4525 
4526 			if ((u.w = (((((((((((Elf64_Xword)(src)[X_M7]<<8)
4527 		+(src)[X_M6]<<8)
4528 		+(src)[X_M5]<<8)
4529 		+(src)[X_M4]<<8)
4530 		+(src)[X_M3]<<8)
4531 		+(src)[X_M2])<<8)
4532 		+(src)[X_M1])<<8)
4533 		+(src)[X_M0])) & HI64) {
4534 				/* LINTED */
4535 				u.w |= ~(Elf64_Xword)LO63;
4536 				u.w = ~u.w + 1;
4537 				u.sw = -u.w;
4538 			}
4539 			*dst = u.sw;
4540 		}
4541 	}
4542 }
4543 
4544 
4545 
4546 
4547 
4548 static void
4549 xword_2L_tom(Elf64_Xword *dst, Byte *src, size_t cnt)
4550 {
4551 	Elf64_Xword	*end = dst;
4552 
4553 	dst += cnt;
4554 	src += cnt * X_sizeof;
4555 	while (dst-- > end) {
4556 		src -= X_sizeof;
4557 		*dst = (((((((((((Elf64_Xword)(src)[X_L7]<<8)
4558 		+(src)[X_L6]<<8)
4559 		+(src)[X_L5]<<8)
4560 		+(src)[X_L4]<<8)
4561 		+(src)[X_L3]<<8)
4562 		+(src)[X_L2])<<8)
4563 		+(src)[X_L1])<<8)
4564 		+(src)[X_L0]);
4565 	}
4566 }
4567 
4568 static void
4569 xword_2M_tom(Elf64_Xword *dst, Byte *src, size_t cnt)
4570 {
4571 	Elf64_Xword	*end = dst;
4572 
4573 	dst += cnt;
4574 	src += cnt * X_sizeof;
4575 	while (dst-- > end) {
4576 		src -= X_sizeof;
4577 		*dst = (((((((((((Elf64_Xword)(src)[X_M7]<<8)
4578 		+(src)[X_M6]<<8)
4579 		+(src)[X_M5]<<8)
4580 		+(src)[X_M4]<<8)
4581 		+(src)[X_M3]<<8)
4582 		+(src)[X_M2])<<8)
4583 		+(src)[X_M1])<<8)
4584 		+(src)[X_M0]);
4585 	}
4586 }
4587