linux_loader/loader_gen/x86_64/
elf.rs

1// Copyright © 2020, Oracle and/or its affiliates.
2//
3// Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4//
5// Portions Copyright 2017 The Chromium OS Authors. All rights reserved.
6// Use of this source code is governed by a BSD-style license that can be
7// found in the LICENSE-BSD-3-Clause file.
8//
9// SPDX-License-Identifier: Apache-2.0 AND BSD-3-Clause
10
11/*
12 * automatically generated by rust-bindgen using:
13 *
14 * # bindgen --with-derive-default elf.h > elf.rs
15 *
16 * From upstream linux include/uapi/linux/elf.h at commit:
17 * 48b1320a674e1ff5de2fad8606bee38f724594dc
18 * and then edited to eliminate unnecessary definitions, add comments,
19 * and relocate definitions and tests for clarity.
20 */
21
22pub const PT_LOAD: u32 = 1;
23pub const PT_NOTE: u32 = 4;
24
25pub const EI_MAG0: u32 = 0;
26pub const EI_MAG1: u32 = 1;
27pub const EI_MAG2: u32 = 2;
28pub const EI_MAG3: u32 = 3;
29pub const EI_DATA: u32 = 5;
30
31pub const ELFMAG0: u32 = 127;
32
33// The values for the following definitions have been edited
34// to use their equivalent byte literal representations.
35pub const ELFMAG1: u8 = b'E';
36pub const ELFMAG2: u8 = b'L';
37pub const ELFMAG3: u8 = b'F';
38
39pub const ELFDATA2LSB: u32 = 1;
40
41pub type __s8 = ::std::os::raw::c_schar;
42pub type __u8 = ::std::os::raw::c_uchar;
43pub type __s16 = ::std::os::raw::c_short;
44pub type __u16 = ::std::os::raw::c_ushort;
45pub type __s32 = ::std::os::raw::c_int;
46pub type __u32 = ::std::os::raw::c_uint;
47pub type __s64 = ::std::os::raw::c_longlong;
48pub type __u64 = ::std::os::raw::c_ulonglong;
49
50pub type Elf64_Addr = __u64;
51pub type Elf64_Half = __u16;
52pub type Elf64_Off = __u64;
53pub type Elf64_Sword = __s32;
54pub type Elf64_Word = __u32;
55pub type Elf64_Xword = __u64;
56
57#[repr(C)]
58#[derive(Debug, Default, Copy, Clone)]
59pub struct elf64_hdr {
60    pub e_ident: [::std::os::raw::c_uchar; 16usize],
61    pub e_type: Elf64_Half,
62    pub e_machine: Elf64_Half,
63    pub e_version: Elf64_Word,
64    pub e_entry: Elf64_Addr,
65    pub e_phoff: Elf64_Off,
66    pub e_shoff: Elf64_Off,
67    pub e_flags: Elf64_Word,
68    pub e_ehsize: Elf64_Half,
69    pub e_phentsize: Elf64_Half,
70    pub e_phnum: Elf64_Half,
71    pub e_shentsize: Elf64_Half,
72    pub e_shnum: Elf64_Half,
73    pub e_shstrndx: Elf64_Half,
74}
75pub type Elf64_Ehdr = elf64_hdr;
76
77#[repr(C)]
78#[derive(Debug, Default, Copy, Clone)]
79pub struct elf64_phdr {
80    pub p_type: Elf64_Word,
81    pub p_flags: Elf64_Word,
82    pub p_offset: Elf64_Off,
83    pub p_vaddr: Elf64_Addr,
84    pub p_paddr: Elf64_Addr,
85    pub p_filesz: Elf64_Xword,
86    pub p_memsz: Elf64_Xword,
87    pub p_align: Elf64_Xword,
88}
89pub type Elf64_Phdr = elf64_phdr;
90
91#[repr(C)]
92#[derive(Debug, Default, Copy, Clone)]
93pub struct elf64_note {
94    pub n_namesz: Elf64_Word,
95    pub n_descsz: Elf64_Word,
96    pub n_type: Elf64_Word,
97}
98pub type Elf64_Nhdr = elf64_note;
99
100#[cfg(test)]
101mod tests {
102    use super::*;
103
104    #[test]
105    fn bindgen_test_layout_elf64_hdr() {
106        const UNINIT: ::std::mem::MaybeUninit<elf64_hdr> = ::std::mem::MaybeUninit::uninit();
107        let ptr = UNINIT.as_ptr();
108        assert_eq!(
109            ::std::mem::size_of::<elf64_hdr>(),
110            64usize,
111            concat!("Size of: ", stringify!(elf64_hdr))
112        );
113        assert_eq!(
114            ::std::mem::align_of::<elf64_hdr>(),
115            8usize,
116            concat!("Alignment of ", stringify!(elf64_hdr))
117        );
118        assert_eq!(
119            unsafe { ::std::ptr::addr_of!((*ptr).e_ident) as usize - ptr as usize },
120            0usize,
121            concat!(
122                "Offset of field: ",
123                stringify!(elf64_hdr),
124                "::",
125                stringify!(e_ident)
126            )
127        );
128        assert_eq!(
129            unsafe { ::std::ptr::addr_of!((*ptr).e_type) as usize - ptr as usize },
130            16usize,
131            concat!(
132                "Offset of field: ",
133                stringify!(elf64_hdr),
134                "::",
135                stringify!(e_type)
136            )
137        );
138        assert_eq!(
139            unsafe { ::std::ptr::addr_of!((*ptr).e_machine) as usize - ptr as usize },
140            18usize,
141            concat!(
142                "Offset of field: ",
143                stringify!(elf64_hdr),
144                "::",
145                stringify!(e_machine)
146            )
147        );
148        assert_eq!(
149            unsafe { ::std::ptr::addr_of!((*ptr).e_version) as usize - ptr as usize },
150            20usize,
151            concat!(
152                "Offset of field: ",
153                stringify!(elf64_hdr),
154                "::",
155                stringify!(e_version)
156            )
157        );
158        assert_eq!(
159            unsafe { ::std::ptr::addr_of!((*ptr).e_entry) as usize - ptr as usize },
160            24usize,
161            concat!(
162                "Offset of field: ",
163                stringify!(elf64_hdr),
164                "::",
165                stringify!(e_entry)
166            )
167        );
168        assert_eq!(
169            unsafe { ::std::ptr::addr_of!((*ptr).e_phoff) as usize - ptr as usize },
170            32usize,
171            concat!(
172                "Offset of field: ",
173                stringify!(elf64_hdr),
174                "::",
175                stringify!(e_phoff)
176            )
177        );
178        assert_eq!(
179            unsafe { ::std::ptr::addr_of!((*ptr).e_shoff) as usize - ptr as usize },
180            40usize,
181            concat!(
182                "Offset of field: ",
183                stringify!(elf64_hdr),
184                "::",
185                stringify!(e_shoff)
186            )
187        );
188        assert_eq!(
189            unsafe { ::std::ptr::addr_of!((*ptr).e_flags) as usize - ptr as usize },
190            48usize,
191            concat!(
192                "Offset of field: ",
193                stringify!(elf64_hdr),
194                "::",
195                stringify!(e_flags)
196            )
197        );
198        assert_eq!(
199            unsafe { ::std::ptr::addr_of!((*ptr).e_ehsize) as usize - ptr as usize },
200            52usize,
201            concat!(
202                "Offset of field: ",
203                stringify!(elf64_hdr),
204                "::",
205                stringify!(e_ehsize)
206            )
207        );
208        assert_eq!(
209            unsafe { ::std::ptr::addr_of!((*ptr).e_phentsize) as usize - ptr as usize },
210            54usize,
211            concat!(
212                "Offset of field: ",
213                stringify!(elf64_hdr),
214                "::",
215                stringify!(e_phentsize)
216            )
217        );
218        assert_eq!(
219            unsafe { ::std::ptr::addr_of!((*ptr).e_phnum) as usize - ptr as usize },
220            56usize,
221            concat!(
222                "Offset of field: ",
223                stringify!(elf64_hdr),
224                "::",
225                stringify!(e_phnum)
226            )
227        );
228        assert_eq!(
229            unsafe { ::std::ptr::addr_of!((*ptr).e_shentsize) as usize - ptr as usize },
230            58usize,
231            concat!(
232                "Offset of field: ",
233                stringify!(elf64_hdr),
234                "::",
235                stringify!(e_shentsize)
236            )
237        );
238        assert_eq!(
239            unsafe { ::std::ptr::addr_of!((*ptr).e_shnum) as usize - ptr as usize },
240            60usize,
241            concat!(
242                "Offset of field: ",
243                stringify!(elf64_hdr),
244                "::",
245                stringify!(e_shnum)
246            )
247        );
248        assert_eq!(
249            unsafe { ::std::ptr::addr_of!((*ptr).e_shstrndx) as usize - ptr as usize },
250            62usize,
251            concat!(
252                "Offset of field: ",
253                stringify!(elf64_hdr),
254                "::",
255                stringify!(e_shstrndx)
256            )
257        );
258    }
259
260    #[test]
261    fn bindgen_test_layout_elf64_phdr() {
262        const UNINIT: ::std::mem::MaybeUninit<elf64_phdr> = ::std::mem::MaybeUninit::uninit();
263        let ptr = UNINIT.as_ptr();
264        assert_eq!(
265            ::std::mem::size_of::<elf64_phdr>(),
266            56usize,
267            concat!("Size of: ", stringify!(elf64_phdr))
268        );
269        assert_eq!(
270            ::std::mem::align_of::<elf64_phdr>(),
271            8usize,
272            concat!("Alignment of ", stringify!(elf64_phdr))
273        );
274        assert_eq!(
275            unsafe { ::std::ptr::addr_of!((*ptr).p_type) as usize - ptr as usize },
276            0usize,
277            concat!(
278                "Offset of field: ",
279                stringify!(elf64_phdr),
280                "::",
281                stringify!(p_type)
282            )
283        );
284        assert_eq!(
285            unsafe { ::std::ptr::addr_of!((*ptr).p_flags) as usize - ptr as usize },
286            4usize,
287            concat!(
288                "Offset of field: ",
289                stringify!(elf64_phdr),
290                "::",
291                stringify!(p_flags)
292            )
293        );
294        assert_eq!(
295            unsafe { ::std::ptr::addr_of!((*ptr).p_offset) as usize - ptr as usize },
296            8usize,
297            concat!(
298                "Offset of field: ",
299                stringify!(elf64_phdr),
300                "::",
301                stringify!(p_offset)
302            )
303        );
304        assert_eq!(
305            unsafe { ::std::ptr::addr_of!((*ptr).p_vaddr) as usize - ptr as usize },
306            16usize,
307            concat!(
308                "Offset of field: ",
309                stringify!(elf64_phdr),
310                "::",
311                stringify!(p_vaddr)
312            )
313        );
314        assert_eq!(
315            unsafe { ::std::ptr::addr_of!((*ptr).p_paddr) as usize - ptr as usize },
316            24usize,
317            concat!(
318                "Offset of field: ",
319                stringify!(elf64_phdr),
320                "::",
321                stringify!(p_paddr)
322            )
323        );
324        assert_eq!(
325            unsafe { ::std::ptr::addr_of!((*ptr).p_filesz) as usize - ptr as usize },
326            32usize,
327            concat!(
328                "Offset of field: ",
329                stringify!(elf64_phdr),
330                "::",
331                stringify!(p_filesz)
332            )
333        );
334        assert_eq!(
335            unsafe { ::std::ptr::addr_of!((*ptr).p_memsz) as usize - ptr as usize },
336            40usize,
337            concat!(
338                "Offset of field: ",
339                stringify!(elf64_phdr),
340                "::",
341                stringify!(p_memsz)
342            )
343        );
344        assert_eq!(
345            unsafe { ::std::ptr::addr_of!((*ptr).p_align) as usize - ptr as usize },
346            48usize,
347            concat!(
348                "Offset of field: ",
349                stringify!(elf64_phdr),
350                "::",
351                stringify!(p_align)
352            )
353        );
354    }
355
356    #[test]
357    fn bindgen_test_layout_elf64_note() {
358        const UNINIT: ::std::mem::MaybeUninit<elf64_note> = ::std::mem::MaybeUninit::uninit();
359        let ptr = UNINIT.as_ptr();
360        assert_eq!(
361            ::std::mem::size_of::<elf64_note>(),
362            12usize,
363            concat!("Size of: ", stringify!(elf64_note))
364        );
365        assert_eq!(
366            ::std::mem::align_of::<elf64_note>(),
367            4usize,
368            concat!("Alignment of ", stringify!(elf64_note))
369        );
370        assert_eq!(
371            unsafe { ::std::ptr::addr_of!((*ptr).n_namesz) as usize - ptr as usize },
372            0usize,
373            concat!(
374                "Offset of field: ",
375                stringify!(elf64_note),
376                "::",
377                stringify!(n_namesz)
378            )
379        );
380        assert_eq!(
381            unsafe { ::std::ptr::addr_of!((*ptr).n_descsz) as usize - ptr as usize },
382            4usize,
383            concat!(
384                "Offset of field: ",
385                stringify!(elf64_note),
386                "::",
387                stringify!(n_descsz)
388            )
389        );
390        assert_eq!(
391            unsafe { ::std::ptr::addr_of!((*ptr).n_type) as usize - ptr as usize },
392            8usize,
393            concat!(
394                "Offset of field: ",
395                stringify!(elf64_note),
396                "::",
397                stringify!(n_type)
398            )
399        );
400    }
401}