/rust/registry/src/index.crates.io-1949cf8c6b5b557f/object-0.36.7/src/common.rs
Line | Count | Source |
1 | | /// A CPU architecture. |
2 | | #[allow(missing_docs)] |
3 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
4 | | #[non_exhaustive] |
5 | | pub enum Architecture { |
6 | | Unknown, |
7 | | Aarch64, |
8 | | #[allow(non_camel_case_types)] |
9 | | Aarch64_Ilp32, |
10 | | Arm, |
11 | | Avr, |
12 | | Bpf, |
13 | | Csky, |
14 | | E2K32, |
15 | | E2K64, |
16 | | I386, |
17 | | X86_64, |
18 | | #[allow(non_camel_case_types)] |
19 | | X86_64_X32, |
20 | | Hexagon, |
21 | | LoongArch64, |
22 | | M68k, |
23 | | Mips, |
24 | | Mips64, |
25 | | #[allow(non_camel_case_types)] |
26 | | Mips64_N32, |
27 | | Msp430, |
28 | | PowerPc, |
29 | | PowerPc64, |
30 | | Riscv32, |
31 | | Riscv64, |
32 | | S390x, |
33 | | Sbf, |
34 | | Sharc, |
35 | | Sparc, |
36 | | Sparc32Plus, |
37 | | Sparc64, |
38 | | Wasm32, |
39 | | Wasm64, |
40 | | Xtensa, |
41 | | } |
42 | | |
43 | | /// A CPU sub-architecture. |
44 | | #[allow(missing_docs)] |
45 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
46 | | #[non_exhaustive] |
47 | | pub enum SubArchitecture { |
48 | | Arm64E, |
49 | | Arm64EC, |
50 | | } |
51 | | |
52 | | impl Architecture { |
53 | | /// The size of an address value for this architecture. |
54 | | /// |
55 | | /// Returns `None` for unknown architectures. |
56 | 0 | pub fn address_size(self) -> Option<AddressSize> { |
57 | 0 | match self { |
58 | 0 | Architecture::Unknown => None, |
59 | 0 | Architecture::Aarch64 => Some(AddressSize::U64), |
60 | 0 | Architecture::Aarch64_Ilp32 => Some(AddressSize::U32), |
61 | 0 | Architecture::Arm => Some(AddressSize::U32), |
62 | 0 | Architecture::Avr => Some(AddressSize::U8), |
63 | 0 | Architecture::Bpf => Some(AddressSize::U64), |
64 | 0 | Architecture::Csky => Some(AddressSize::U32), |
65 | 0 | Architecture::E2K32 => Some(AddressSize::U32), |
66 | 0 | Architecture::E2K64 => Some(AddressSize::U64), |
67 | 0 | Architecture::I386 => Some(AddressSize::U32), |
68 | 0 | Architecture::X86_64 => Some(AddressSize::U64), |
69 | 0 | Architecture::X86_64_X32 => Some(AddressSize::U32), |
70 | 0 | Architecture::Hexagon => Some(AddressSize::U32), |
71 | 0 | Architecture::LoongArch64 => Some(AddressSize::U64), |
72 | 0 | Architecture::M68k => Some(AddressSize::U32), |
73 | 0 | Architecture::Mips => Some(AddressSize::U32), |
74 | 0 | Architecture::Mips64 => Some(AddressSize::U64), |
75 | 0 | Architecture::Mips64_N32 => Some(AddressSize::U32), |
76 | 0 | Architecture::Msp430 => Some(AddressSize::U16), |
77 | 0 | Architecture::PowerPc => Some(AddressSize::U32), |
78 | 0 | Architecture::PowerPc64 => Some(AddressSize::U64), |
79 | 0 | Architecture::Riscv32 => Some(AddressSize::U32), |
80 | 0 | Architecture::Riscv64 => Some(AddressSize::U64), |
81 | 0 | Architecture::S390x => Some(AddressSize::U64), |
82 | 0 | Architecture::Sbf => Some(AddressSize::U64), |
83 | 0 | Architecture::Sharc => Some(AddressSize::U32), |
84 | 0 | Architecture::Sparc => Some(AddressSize::U32), |
85 | 0 | Architecture::Sparc32Plus => Some(AddressSize::U32), |
86 | 0 | Architecture::Sparc64 => Some(AddressSize::U64), |
87 | 0 | Architecture::Wasm32 => Some(AddressSize::U32), |
88 | 0 | Architecture::Wasm64 => Some(AddressSize::U64), |
89 | 0 | Architecture::Xtensa => Some(AddressSize::U32), |
90 | | } |
91 | 0 | } |
92 | | } |
93 | | |
94 | | /// The size of an address value for an architecture. |
95 | | /// |
96 | | /// This may differ from the address size supported by the file format (such as for COFF). |
97 | | #[allow(missing_docs)] |
98 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
99 | | #[non_exhaustive] |
100 | | #[repr(u8)] |
101 | | pub enum AddressSize { |
102 | | U8 = 1, |
103 | | U16 = 2, |
104 | | U32 = 4, |
105 | | U64 = 8, |
106 | | } |
107 | | |
108 | | impl AddressSize { |
109 | | /// The size in bytes of an address value. |
110 | | #[inline] |
111 | 0 | pub fn bytes(self) -> u8 { |
112 | 0 | self as u8 |
113 | 0 | } |
114 | | } |
115 | | |
116 | | /// A binary file format. |
117 | | #[allow(missing_docs)] |
118 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
119 | | #[non_exhaustive] |
120 | | pub enum BinaryFormat { |
121 | | Coff, |
122 | | Elf, |
123 | | MachO, |
124 | | Pe, |
125 | | Wasm, |
126 | | Xcoff, |
127 | | } |
128 | | |
129 | | impl BinaryFormat { |
130 | | /// The target's native binary format for relocatable object files. |
131 | | /// |
132 | | /// Defaults to `Elf` for unknown platforms. |
133 | 0 | pub fn native_object() -> BinaryFormat { |
134 | 0 | if cfg!(target_os = "windows") { |
135 | 0 | BinaryFormat::Coff |
136 | 0 | } else if cfg!(target_os = "macos") { |
137 | 0 | BinaryFormat::MachO |
138 | | } else { |
139 | 0 | BinaryFormat::Elf |
140 | | } |
141 | 0 | } |
142 | | } |
143 | | |
144 | | /// The kind of a section. |
145 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
146 | | #[non_exhaustive] |
147 | | pub enum SectionKind { |
148 | | /// The section kind is unknown. |
149 | | Unknown, |
150 | | /// An executable code section. |
151 | | /// |
152 | | /// Example ELF sections: `.text` |
153 | | /// |
154 | | /// Example Mach-O sections: `__TEXT/__text` |
155 | | Text, |
156 | | /// A data section. |
157 | | /// |
158 | | /// Example ELF sections: `.data` |
159 | | /// |
160 | | /// Example Mach-O sections: `__DATA/__data` |
161 | | Data, |
162 | | /// A read only data section. |
163 | | /// |
164 | | /// Example ELF sections: `.rodata` |
165 | | /// |
166 | | /// Example Mach-O sections: `__TEXT/__const`, `__DATA/__const`, `__TEXT/__literal4` |
167 | | ReadOnlyData, |
168 | | /// A read only data section with relocations. |
169 | | /// |
170 | | /// This is the same as either `Data` or `ReadOnlyData`, depending on the file format. |
171 | | /// This value is only used in the API for writing files. It is never returned when reading files. |
172 | | ReadOnlyDataWithRel, |
173 | | /// A loadable string section. |
174 | | /// |
175 | | /// Example ELF sections: `.rodata.str` |
176 | | /// |
177 | | /// Example Mach-O sections: `__TEXT/__cstring` |
178 | | ReadOnlyString, |
179 | | /// An uninitialized data section. |
180 | | /// |
181 | | /// Example ELF sections: `.bss` |
182 | | /// |
183 | | /// Example Mach-O sections: `__DATA/__bss` |
184 | | UninitializedData, |
185 | | /// An uninitialized common data section. |
186 | | /// |
187 | | /// Example Mach-O sections: `__DATA/__common` |
188 | | Common, |
189 | | /// A TLS data section. |
190 | | /// |
191 | | /// Example ELF sections: `.tdata` |
192 | | /// |
193 | | /// Example Mach-O sections: `__DATA/__thread_data` |
194 | | Tls, |
195 | | /// An uninitialized TLS data section. |
196 | | /// |
197 | | /// Example ELF sections: `.tbss` |
198 | | /// |
199 | | /// Example Mach-O sections: `__DATA/__thread_bss` |
200 | | UninitializedTls, |
201 | | /// A TLS variables section. |
202 | | /// |
203 | | /// This contains TLS variable structures, rather than the variable initializers. |
204 | | /// |
205 | | /// Example Mach-O sections: `__DATA/__thread_vars` |
206 | | TlsVariables, |
207 | | /// A non-loadable string section. |
208 | | /// |
209 | | /// Example ELF sections: `.comment`, `.debug_str` |
210 | | OtherString, |
211 | | /// Some other non-loadable section. |
212 | | /// |
213 | | /// Example ELF sections: `.debug_info` |
214 | | Other, |
215 | | /// Debug information. |
216 | | /// |
217 | | /// Example Mach-O sections: `__DWARF/__debug_info` |
218 | | Debug, |
219 | | /// Debug strings. |
220 | | /// |
221 | | /// This is the same as either `Debug` or `OtherString`, depending on the file format. |
222 | | /// This value is only used in the API for writing files. It is never returned when reading files. |
223 | | DebugString, |
224 | | /// Information for the linker. |
225 | | /// |
226 | | /// Example COFF sections: `.drectve` |
227 | | Linker, |
228 | | /// ELF note section. |
229 | | Note, |
230 | | /// Metadata such as symbols or relocations. |
231 | | /// |
232 | | /// Example ELF sections: `.symtab`, `.strtab`, `.group` |
233 | | Metadata, |
234 | | /// Some other ELF section type. |
235 | | /// |
236 | | /// This is the `sh_type` field in the section header. |
237 | | /// The meaning may be dependent on the architecture. |
238 | | Elf(u32), |
239 | | } |
240 | | |
241 | | impl SectionKind { |
242 | | /// Return true if this section contains zerofill data. |
243 | 0 | pub fn is_bss(self) -> bool { |
244 | 0 | self == SectionKind::UninitializedData |
245 | 0 | || self == SectionKind::UninitializedTls |
246 | 0 | || self == SectionKind::Common |
247 | 0 | } |
248 | | } |
249 | | |
250 | | /// The selection kind for a COMDAT section group. |
251 | | /// |
252 | | /// This determines the way in which the linker resolves multiple definitions of the COMDAT |
253 | | /// sections. |
254 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
255 | | #[non_exhaustive] |
256 | | pub enum ComdatKind { |
257 | | /// The selection kind is unknown. |
258 | | Unknown, |
259 | | /// Multiple definitions are allowed. |
260 | | /// |
261 | | /// An arbitrary definition is selected, and the rest are removed. |
262 | | /// |
263 | | /// This is the only supported selection kind for ELF. |
264 | | Any, |
265 | | /// Multiple definitions are not allowed. |
266 | | /// |
267 | | /// This is used to group sections without allowing duplicates. |
268 | | NoDuplicates, |
269 | | /// Multiple definitions must have the same size. |
270 | | /// |
271 | | /// An arbitrary definition is selected, and the rest are removed. |
272 | | SameSize, |
273 | | /// Multiple definitions must match exactly. |
274 | | /// |
275 | | /// An arbitrary definition is selected, and the rest are removed. |
276 | | ExactMatch, |
277 | | /// Multiple definitions are allowed, and the largest is selected. |
278 | | /// |
279 | | /// An arbitrary definition with the largest size is selected, and the rest are removed. |
280 | | Largest, |
281 | | /// Multiple definitions are allowed, and the newest is selected. |
282 | | Newest, |
283 | | } |
284 | | |
285 | | /// The kind of a symbol. |
286 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
287 | | #[non_exhaustive] |
288 | | pub enum SymbolKind { |
289 | | /// The symbol kind is unknown. |
290 | | Unknown, |
291 | | /// The symbol is for executable code. |
292 | | Text, |
293 | | /// The symbol is for a data object. |
294 | | Data, |
295 | | /// The symbol is for a section. |
296 | | Section, |
297 | | /// The symbol is the name of a file. It precedes symbols within that file. |
298 | | File, |
299 | | /// The symbol is for a code label. |
300 | | Label, |
301 | | /// The symbol is for a thread local storage entity. |
302 | | Tls, |
303 | | } |
304 | | |
305 | | /// A symbol scope. |
306 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
307 | | pub enum SymbolScope { |
308 | | /// Unknown scope. |
309 | | Unknown, |
310 | | /// Symbol is visible to the compilation unit. |
311 | | Compilation, |
312 | | /// Symbol is visible to the static linkage unit. |
313 | | Linkage, |
314 | | /// Symbol is visible to dynamically linked objects. |
315 | | Dynamic, |
316 | | } |
317 | | |
318 | | /// The operation used to calculate the result of the relocation. |
319 | | /// |
320 | | /// The relocation descriptions use the following definitions. Note that |
321 | | /// these definitions probably don't match any ELF ABI. |
322 | | /// |
323 | | /// * A - The value of the addend. |
324 | | /// * G - The address of the symbol's entry within the global offset table. |
325 | | /// * L - The address of the symbol's entry within the procedure linkage table. |
326 | | /// * P - The address of the place of the relocation. |
327 | | /// * S - The address of the symbol. |
328 | | /// * GotBase - The address of the global offset table. |
329 | | /// * Image - The base address of the image. |
330 | | /// * Section - The address of the section containing the symbol. |
331 | | /// |
332 | | /// 'XxxRelative' means 'Xxx + A - P'. 'XxxOffset' means 'S + A - Xxx'. |
333 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
334 | | #[non_exhaustive] |
335 | | pub enum RelocationKind { |
336 | | /// The operation is unknown. |
337 | | Unknown, |
338 | | /// S + A |
339 | | Absolute, |
340 | | /// S + A - P |
341 | | Relative, |
342 | | /// G + A - GotBase |
343 | | Got, |
344 | | /// G + A - P |
345 | | GotRelative, |
346 | | /// GotBase + A - P |
347 | | GotBaseRelative, |
348 | | /// S + A - GotBase |
349 | | GotBaseOffset, |
350 | | /// L + A - P |
351 | | PltRelative, |
352 | | /// S + A - Image |
353 | | ImageOffset, |
354 | | /// S + A - Section |
355 | | SectionOffset, |
356 | | /// The index of the section containing the symbol. |
357 | | SectionIndex, |
358 | | } |
359 | | |
360 | | /// Information about how the result of the relocation operation is encoded in the place. |
361 | | /// |
362 | | /// This is usually architecture specific, such as specifying an addressing mode or |
363 | | /// a specific instruction. |
364 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
365 | | #[non_exhaustive] |
366 | | pub enum RelocationEncoding { |
367 | | /// The relocation encoding is unknown. |
368 | | Unknown, |
369 | | /// Generic encoding. |
370 | | Generic, |
371 | | |
372 | | /// x86 sign extension at runtime. |
373 | | /// |
374 | | /// Used with `RelocationKind::Absolute`. |
375 | | X86Signed, |
376 | | /// x86 rip-relative addressing. |
377 | | /// |
378 | | /// The `RelocationKind` must be PC relative. |
379 | | X86RipRelative, |
380 | | /// x86 rip-relative addressing in movq instruction. |
381 | | /// |
382 | | /// The `RelocationKind` must be PC relative. |
383 | | X86RipRelativeMovq, |
384 | | /// x86 branch instruction. |
385 | | /// |
386 | | /// The `RelocationKind` must be PC relative. |
387 | | X86Branch, |
388 | | |
389 | | /// s390x PC-relative offset shifted right by one bit. |
390 | | /// |
391 | | /// The `RelocationKind` must be PC relative. |
392 | | S390xDbl, |
393 | | |
394 | | /// AArch64 call target. |
395 | | /// |
396 | | /// The `RelocationKind` must be PC relative. |
397 | | AArch64Call, |
398 | | |
399 | | /// LoongArch branch offset with two trailing zeros. |
400 | | /// |
401 | | /// The `RelocationKind` must be PC relative. |
402 | | LoongArchBranch, |
403 | | |
404 | | /// SHARC+ 48-bit Type A instruction |
405 | | /// |
406 | | /// Represents these possible variants, each with a corresponding |
407 | | /// `R_SHARC_*` constant: |
408 | | /// |
409 | | /// * 24-bit absolute address |
410 | | /// * 32-bit absolute address |
411 | | /// * 6-bit relative address |
412 | | /// * 24-bit relative address |
413 | | /// * 6-bit absolute address in the immediate value field |
414 | | /// * 16-bit absolute address in the immediate value field |
415 | | SharcTypeA, |
416 | | |
417 | | /// SHARC+ 32-bit Type B instruction |
418 | | /// |
419 | | /// Represents these possible variants, each with a corresponding |
420 | | /// `R_SHARC_*` constant: |
421 | | /// |
422 | | /// * 6-bit absolute address in the immediate value field |
423 | | /// * 7-bit absolute address in the immediate value field |
424 | | /// * 16-bit absolute address |
425 | | /// * 6-bit relative address |
426 | | SharcTypeB, |
427 | | |
428 | | /// E2K 64-bit value stored in two LTS |
429 | | /// |
430 | | /// Memory representation: |
431 | | /// ```text |
432 | | /// 0: LTS1 = value[63:32] |
433 | | /// 4: LTS0 = value[31:0] |
434 | | /// ``` |
435 | | E2KLit, |
436 | | |
437 | | /// E2K 28-bit value stored in CS0 |
438 | | E2KDisp, |
439 | | } |
440 | | |
441 | | /// File flags that are specific to each file format. |
442 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
443 | | #[non_exhaustive] |
444 | | pub enum FileFlags { |
445 | | /// No file flags. |
446 | | None, |
447 | | /// ELF file flags. |
448 | | Elf { |
449 | | /// `os_abi` field in the ELF file header. |
450 | | os_abi: u8, |
451 | | /// `abi_version` field in the ELF file header. |
452 | | abi_version: u8, |
453 | | /// `e_flags` field in the ELF file header. |
454 | | e_flags: u32, |
455 | | }, |
456 | | /// Mach-O file flags. |
457 | | MachO { |
458 | | /// `flags` field in the Mach-O file header. |
459 | | flags: u32, |
460 | | }, |
461 | | /// COFF file flags. |
462 | | Coff { |
463 | | /// `Characteristics` field in the COFF file header. |
464 | | characteristics: u16, |
465 | | }, |
466 | | /// XCOFF file flags. |
467 | | Xcoff { |
468 | | /// `f_flags` field in the XCOFF file header. |
469 | | f_flags: u16, |
470 | | }, |
471 | | } |
472 | | |
473 | | /// Segment flags that are specific to each file format. |
474 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
475 | | #[non_exhaustive] |
476 | | pub enum SegmentFlags { |
477 | | /// No segment flags. |
478 | | None, |
479 | | /// ELF segment flags. |
480 | | Elf { |
481 | | /// `p_flags` field in the segment header. |
482 | | p_flags: u32, |
483 | | }, |
484 | | /// Mach-O segment flags. |
485 | | MachO { |
486 | | /// `flags` field in the segment header. |
487 | | flags: u32, |
488 | | /// `maxprot` field in the segment header. |
489 | | maxprot: u32, |
490 | | /// `initprot` field in the segment header. |
491 | | initprot: u32, |
492 | | }, |
493 | | /// COFF segment flags. |
494 | | Coff { |
495 | | /// `Characteristics` field in the segment header. |
496 | | characteristics: u32, |
497 | | }, |
498 | | } |
499 | | |
500 | | /// Section flags that are specific to each file format. |
501 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
502 | | #[non_exhaustive] |
503 | | pub enum SectionFlags { |
504 | | /// No section flags. |
505 | | None, |
506 | | /// ELF section flags. |
507 | | Elf { |
508 | | /// `sh_flags` field in the section header. |
509 | | sh_flags: u64, |
510 | | }, |
511 | | /// Mach-O section flags. |
512 | | MachO { |
513 | | /// `flags` field in the section header. |
514 | | flags: u32, |
515 | | }, |
516 | | /// COFF section flags. |
517 | | Coff { |
518 | | /// `Characteristics` field in the section header. |
519 | | characteristics: u32, |
520 | | }, |
521 | | /// XCOFF section flags. |
522 | | Xcoff { |
523 | | /// `s_flags` field in the section header. |
524 | | s_flags: u32, |
525 | | }, |
526 | | } |
527 | | |
528 | | /// Symbol flags that are specific to each file format. |
529 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
530 | | #[non_exhaustive] |
531 | | pub enum SymbolFlags<Section, Symbol> { |
532 | | /// No symbol flags. |
533 | | None, |
534 | | /// ELF symbol flags. |
535 | | Elf { |
536 | | /// `st_info` field in the ELF symbol. |
537 | | st_info: u8, |
538 | | /// `st_other` field in the ELF symbol. |
539 | | st_other: u8, |
540 | | }, |
541 | | /// Mach-O symbol flags. |
542 | | MachO { |
543 | | /// `n_desc` field in the Mach-O symbol. |
544 | | n_desc: u16, |
545 | | }, |
546 | | /// COFF flags for a section symbol. |
547 | | CoffSection { |
548 | | /// `Selection` field in the auxiliary symbol for the section. |
549 | | selection: u8, |
550 | | /// `Number` field in the auxiliary symbol for the section. |
551 | | associative_section: Option<Section>, |
552 | | }, |
553 | | /// XCOFF symbol flags. |
554 | | Xcoff { |
555 | | /// `n_sclass` field in the XCOFF symbol. |
556 | | n_sclass: u8, |
557 | | /// `x_smtyp` field in the CSECT auxiliary symbol. |
558 | | /// |
559 | | /// Only valid if `n_sclass` is `C_EXT`, `C_WEAKEXT`, or `C_HIDEXT`. |
560 | | x_smtyp: u8, |
561 | | /// `x_smclas` field in the CSECT auxiliary symbol. |
562 | | /// |
563 | | /// Only valid if `n_sclass` is `C_EXT`, `C_WEAKEXT`, or `C_HIDEXT`. |
564 | | x_smclas: u8, |
565 | | /// The containing csect for the symbol. |
566 | | /// |
567 | | /// Only valid if `x_smtyp` is `XTY_LD`. |
568 | | containing_csect: Option<Symbol>, |
569 | | }, |
570 | | } |
571 | | |
572 | | /// Relocation fields that are specific to each file format and architecture. |
573 | | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
574 | | #[non_exhaustive] |
575 | | pub enum RelocationFlags { |
576 | | /// Format independent representation. |
577 | | Generic { |
578 | | /// The operation used to calculate the result of the relocation. |
579 | | kind: RelocationKind, |
580 | | /// Information about how the result of the relocation operation is encoded in the place. |
581 | | encoding: RelocationEncoding, |
582 | | /// The size in bits of the place of relocation. |
583 | | size: u8, |
584 | | }, |
585 | | /// ELF relocation fields. |
586 | | Elf { |
587 | | /// `r_type` field in the ELF relocation. |
588 | | r_type: u32, |
589 | | }, |
590 | | /// Mach-O relocation fields. |
591 | | MachO { |
592 | | /// `r_type` field in the Mach-O relocation. |
593 | | r_type: u8, |
594 | | /// `r_pcrel` field in the Mach-O relocation. |
595 | | r_pcrel: bool, |
596 | | /// `r_length` field in the Mach-O relocation. |
597 | | r_length: u8, |
598 | | }, |
599 | | /// COFF relocation fields. |
600 | | Coff { |
601 | | /// `typ` field in the COFF relocation. |
602 | | typ: u16, |
603 | | }, |
604 | | /// XCOFF relocation fields. |
605 | | Xcoff { |
606 | | /// `r_rtype` field in the XCOFF relocation. |
607 | | r_rtype: u8, |
608 | | /// `r_rsize` field in the XCOFF relocation. |
609 | | r_rsize: u8, |
610 | | }, |
611 | | } |