starnix_uapi/
x64.rs

1// Copyright 2023 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#![allow(non_camel_case_types)]
6
7use crate::uref;
8use zerocopy::{FromBytes, Immutable, IntoBytes, KnownLayout};
9
10#[repr(C)]
11#[derive(Debug, Copy, Clone, IntoBytes, KnownLayout, FromBytes, Immutable)]
12pub struct user_fpregs_struct {
13    pub cwd: std::os::raw::c_ushort,
14    pub swd: std::os::raw::c_ushort,
15    pub ftw: std::os::raw::c_ushort,
16    pub fop: std::os::raw::c_ushort,
17    pub rip: std::os::raw::c_ulong,
18    pub rdp: std::os::raw::c_ulong,
19    pub mxcsr: std::os::raw::c_uint,
20    pub mxcr_mask: std::os::raw::c_uint,
21    pub st_space: [std::os::raw::c_uint; 32usize],
22    pub xmm_space: [std::os::raw::c_uint; 64usize],
23    pub padding: [std::os::raw::c_uint; 24usize],
24}
25
26impl Default for user_fpregs_struct {
27    fn default() -> Self {
28        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
29        #[allow(
30            clippy::undocumented_unsafe_blocks,
31            reason = "Force documented unsafe blocks in Starnix"
32        )]
33        unsafe {
34            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
35            s.assume_init()
36        }
37    }
38}
39
40#[repr(C)]
41#[derive(Debug, Default, Copy, Clone, IntoBytes, KnownLayout, FromBytes, Immutable)]
42pub struct user_regs_struct {
43    pub r15: std::os::raw::c_ulong,
44    pub r14: std::os::raw::c_ulong,
45    pub r13: std::os::raw::c_ulong,
46    pub r12: std::os::raw::c_ulong,
47    pub rbp: std::os::raw::c_ulong,
48    pub rbx: std::os::raw::c_ulong,
49    pub r11: std::os::raw::c_ulong,
50    pub r10: std::os::raw::c_ulong,
51    pub r9: std::os::raw::c_ulong,
52    pub r8: std::os::raw::c_ulong,
53    pub rax: std::os::raw::c_ulong,
54    pub rcx: std::os::raw::c_ulong,
55    pub rdx: std::os::raw::c_ulong,
56    pub rsi: std::os::raw::c_ulong,
57    pub rdi: std::os::raw::c_ulong,
58    pub orig_rax: std::os::raw::c_ulong,
59    pub rip: std::os::raw::c_ulong,
60    pub cs: std::os::raw::c_ulong,
61    pub eflags: std::os::raw::c_ulong,
62    pub rsp: std::os::raw::c_ulong,
63    pub ss: std::os::raw::c_ulong,
64    pub fs_base: std::os::raw::c_ulong,
65    pub gs_base: std::os::raw::c_ulong,
66    pub ds: std::os::raw::c_ulong,
67    pub es: std::os::raw::c_ulong,
68    pub fs: std::os::raw::c_ulong,
69    pub gs: std::os::raw::c_ulong,
70}
71
72#[repr(C)]
73#[derive(Debug, Copy, Clone, IntoBytes, KnownLayout, FromBytes, Immutable)]
74pub struct user {
75    pub regs: user_regs_struct,
76    pub u_fpvalid: std::os::raw::c_int,
77    pub pad0: std::os::raw::c_int,
78    pub i387: user_fpregs_struct,
79    pub u_tsize: std::os::raw::c_ulong,
80    pub u_dsize: std::os::raw::c_ulong,
81    pub u_ssize: std::os::raw::c_ulong,
82    pub start_code: std::os::raw::c_ulong,
83    pub start_stack: std::os::raw::c_ulong,
84    pub signal: std::os::raw::c_long,
85    pub reserved: std::os::raw::c_int,
86    pub pad1: std::os::raw::c_int,
87    pub u_ar0: uref<user_regs_struct>,
88    pub u_fpstate: uref<user_fpregs_struct>,
89    pub magic: std::os::raw::c_ulong,
90    pub u_comm: [std::os::raw::c_char; 32usize],
91    pub u_debugreg: [std::os::raw::c_ulong; 8usize],
92    pub error_code: std::os::raw::c_ulong,
93    pub fault_address: std::os::raw::c_ulong,
94}
95
96impl Default for user {
97    fn default() -> Self {
98        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
99        #[allow(
100            clippy::undocumented_unsafe_blocks,
101            reason = "Force documented unsafe blocks in Starnix"
102        )]
103        unsafe {
104            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
105            s.assume_init()
106        }
107    }
108}