object/read/xcoff/
comdat.rs

1//! XCOFF doesn't support the COMDAT section.
2
3use core::fmt::Debug;
4
5use crate::read::{self, ComdatKind, ObjectComdat, ReadRef, Result, SectionIndex, SymbolIndex};
6use crate::xcoff;
7
8use super::{FileHeader, XcoffFile};
9
10/// An iterator for the COMDAT section groups in a [`XcoffFile32`](super::XcoffFile32).
11pub type XcoffComdatIterator32<'data, 'file, R = &'data [u8]> =
12    XcoffComdatIterator<'data, 'file, xcoff::FileHeader32, R>;
13/// An iterator for the COMDAT section groups in a [`XcoffFile64`](super::XcoffFile64).
14pub type XcoffComdatIterator64<'data, 'file, R = &'data [u8]> =
15    XcoffComdatIterator<'data, 'file, xcoff::FileHeader64, R>;
16
17/// An iterator for the COMDAT section groups in a [`XcoffFile`].
18///
19/// This is a stub that doesn't implement any functionality.
20#[derive(Debug)]
21pub struct XcoffComdatIterator<'data, 'file, Xcoff, R = &'data [u8]>
22where
23    Xcoff: FileHeader,
24    R: ReadRef<'data>,
25{
26    #[allow(unused)]
27    pub(crate) file: &'file XcoffFile<'data, Xcoff, R>,
28}
29
30impl<'data, 'file, Xcoff, R> Iterator for XcoffComdatIterator<'data, 'file, Xcoff, R>
31where
32    Xcoff: FileHeader,
33    R: ReadRef<'data>,
34{
35    type Item = XcoffComdat<'data, 'file, Xcoff, R>;
36
37    #[inline]
38    fn next(&mut self) -> Option<Self::Item> {
39        None
40    }
41}
42
43/// A COMDAT section group in a [`XcoffFile32`](super::XcoffFile32).
44pub type XcoffComdat32<'data, 'file, R = &'data [u8]> =
45    XcoffComdat<'data, 'file, xcoff::FileHeader32, R>;
46
47/// A COMDAT section group in a [`XcoffFile64`](super::XcoffFile64).
48pub type XcoffComdat64<'data, 'file, R = &'data [u8]> =
49    XcoffComdat<'data, 'file, xcoff::FileHeader64, R>;
50
51/// A COMDAT section group in a [`XcoffFile`].
52///
53/// This is a stub that doesn't implement any functionality.
54#[derive(Debug)]
55pub struct XcoffComdat<'data, 'file, Xcoff, R = &'data [u8]>
56where
57    Xcoff: FileHeader,
58    R: ReadRef<'data>,
59{
60    #[allow(unused)]
61    file: &'file XcoffFile<'data, Xcoff, R>,
62}
63
64impl<'data, 'file, Xcoff, R> read::private::Sealed for XcoffComdat<'data, 'file, Xcoff, R>
65where
66    Xcoff: FileHeader,
67    R: ReadRef<'data>,
68{
69}
70
71impl<'data, 'file, Xcoff, R> ObjectComdat<'data> for XcoffComdat<'data, 'file, Xcoff, R>
72where
73    Xcoff: FileHeader,
74    R: ReadRef<'data>,
75{
76    type SectionIterator = XcoffComdatSectionIterator<'data, 'file, Xcoff, R>;
77
78    #[inline]
79    fn kind(&self) -> ComdatKind {
80        unreachable!();
81    }
82
83    #[inline]
84    fn symbol(&self) -> SymbolIndex {
85        unreachable!();
86    }
87
88    #[inline]
89    fn name_bytes(&self) -> Result<&'data [u8]> {
90        unreachable!();
91    }
92
93    #[inline]
94    fn name(&self) -> Result<&'data str> {
95        unreachable!();
96    }
97
98    #[inline]
99    fn sections(&self) -> Self::SectionIterator {
100        unreachable!();
101    }
102}
103
104/// An iterator for the sections in a COMDAT section group in a [`XcoffFile32`](super::XcoffFile32).
105pub type XcoffComdatSectionIterator32<'data, 'file, R = &'data [u8]> =
106    XcoffComdatSectionIterator<'data, 'file, xcoff::FileHeader32, R>;
107/// An iterator for the sections in a COMDAT section group in a [`XcoffFile64`](super::XcoffFile64).
108pub type XcoffComdatSectionIterator64<'data, 'file, R = &'data [u8]> =
109    XcoffComdatSectionIterator<'data, 'file, xcoff::FileHeader64, R>;
110
111/// An iterator for the sections in a COMDAT section group in a [`XcoffFile`].
112///
113/// This is a stub that doesn't implement any functionality.
114#[derive(Debug)]
115pub struct XcoffComdatSectionIterator<'data, 'file, Xcoff, R = &'data [u8]>
116where
117    Xcoff: FileHeader,
118    R: ReadRef<'data>,
119{
120    #[allow(unused)]
121    file: &'file XcoffFile<'data, Xcoff, R>,
122}
123
124impl<'data, 'file, Xcoff, R> Iterator for XcoffComdatSectionIterator<'data, 'file, Xcoff, R>
125where
126    Xcoff: FileHeader,
127    R: ReadRef<'data>,
128{
129    type Item = SectionIndex;
130
131    fn next(&mut self) -> Option<Self::Item> {
132        None
133    }
134}