1#![allow(non_camel_case_types)]
2
3use core::ffi::{c_char, c_int, c_long, c_void};
4
5#[cfg_attr(
7 any(
8 esp32, esp32s2, esp32s3, esp32c2, esp32c3, esp32c5, esp32c6, esp32c61, esp32h2
9 ),
10 path = "v1.rs"
11)]
12pub(crate) mod chip_specific;
13
14pub type clock_t = c_long;
15
16#[repr(C)]
17#[derive(Debug, Copy, Clone)]
18pub struct tms {
19 _unused: [u8; 0],
20}
21
22#[repr(C)]
23#[derive(Debug, Copy, Clone)]
24pub struct timeval {
25 _unused: [u8; 0],
26}
27
28#[repr(C)]
29#[derive(Debug, Copy, Clone)]
30pub struct stat {
31 _unused: [u8; 0],
32}
33
34#[repr(C)]
35#[derive(Debug, Copy, Clone)]
36pub struct __lock {
37 _unused: [u8; 0],
38}
39
40pub type _LOCK_T = *mut __lock;
41
42pub type _lock_t = _LOCK_T;
43
44#[repr(C)]
45#[derive(Debug, Copy, Clone)]
46pub struct _iobuf {
47 pub _placeholder: *mut c_void,
48}
49
50#[allow(clippy::upper_case_acronyms)]
51pub type __FILE = _iobuf;
52
53#[allow(clippy::upper_case_acronyms)]
54pub type FILE = __FILE;
55
56pub type __tm = ();
57pub type _rand48 = ();
58pub type _misc_reent = ();
59pub type __locale_t = ();
60pub type _mprec = ();
61pub type _on_exit_args = ();
62
63#[repr(C)]
64#[derive(Copy, Clone)]
65pub struct _atexit {
66 pub _next: *mut _atexit,
67 pub _ind: c_int,
68 pub _fns: [Option<unsafe extern "C" fn()>; 32],
69 pub _on_exit_args_ptr: *mut _on_exit_args,
70}
71
72#[repr(C)]
73#[derive(Copy, Clone)]
74pub struct _glue {
75 pub _next: *mut _glue,
76 pub _niobs: c_int,
77 pub _iobs: *mut __FILE,
78}
79
80#[repr(C)]
82#[derive(Copy, Clone)]
83pub struct _reent {
84 _errno: c_int,
86 _stdin: *mut __FILE,
87 _stdout: *mut __FILE,
88 _stderr: *mut __FILE,
89 _inc: c_int,
90 _emergency: *mut c_char,
91 _reserved_0: c_int,
92 _reserved_1: c_int,
93 _locale: *mut __locale_t,
94 _mp: *mut _mprec,
95 __cleanup: Option<unsafe extern "C" fn(arg1: *mut _reent)>,
96 _gamma_signgam: c_int,
97 _cvtlen: c_int,
98 _cvtbuf: *mut c_char,
99 _r48: *mut _rand48,
100 _localtime_buf: *mut __tm,
101 _asctime_buf: *mut c_char,
102 _sig_func: *mut Option<unsafe extern "C" fn(arg1: c_int)>,
103 _reserved_6: *mut _atexit,
104 _reserved_7: _atexit,
105 _reserved_8: _glue,
106 __sf: *mut __FILE,
107 _misc: *mut _misc_reent,
108 _signal_buf: *mut c_char,
109}
110
111pub type va_list = *mut ::core::ffi::c_char;
112
113#[allow(clippy::missing_transmute_annotations)]
115pub static mut SYSCALL_TABLE: chip_specific::syscall_stub_table = unsafe {
116 chip_specific::syscall_stub_table {
117 __getreent: Some(core::mem::transmute(not_implemented as *const fn())),
118 _malloc_r: Some(core::mem::transmute(not_implemented as *const fn())),
119 _free_r: Some(core::mem::transmute(not_implemented as *const fn())),
120 _realloc_r: Some(core::mem::transmute(not_implemented as *const fn())),
121 _calloc_r: Some(core::mem::transmute(not_implemented as *const fn())),
122 _abort: Some(abort_wrapper),
123 _system_r: Some(core::mem::transmute(not_implemented as *const fn())),
124 _rename_r: Some(core::mem::transmute(not_implemented as *const fn())),
125 _times_r: Some(core::mem::transmute(not_implemented as *const fn())),
126 _gettimeofday_r: Some(core::mem::transmute(not_implemented as *const fn())),
127 _raise_r: Some(core::mem::transmute(not_implemented as *const fn())),
128 _unlink_r: Some(core::mem::transmute(not_implemented as *const fn())),
129 _link_r: Some(core::mem::transmute(not_implemented as *const fn())),
130 _stat_r: Some(core::mem::transmute(not_implemented as *const fn())),
131 _fstat_r: Some(core::mem::transmute(not_implemented as *const fn())),
132 _sbrk_r: Some(core::mem::transmute(not_implemented as *const fn())),
133 _getpid_r: Some(core::mem::transmute(not_implemented as *const fn())),
134 _kill_r: Some(core::mem::transmute(not_implemented as *const fn())),
135 _exit_r: Some(core::mem::transmute(not_implemented as *const fn())),
136 _close_r: Some(core::mem::transmute(not_implemented as *const fn())),
137 _open_r: Some(core::mem::transmute(not_implemented as *const fn())),
138 _write_r: Some(core::mem::transmute(not_implemented as *const fn())),
139 _lseek_r: Some(core::mem::transmute(not_implemented as *const fn())),
140 _read_r: Some(core::mem::transmute(not_implemented as *const fn())),
141 _retarget_lock_init: Some(core::mem::transmute(not_implemented as *const fn())),
142 _retarget_lock_init_recursive: Some(core::mem::transmute(not_implemented as *const fn())),
143 _retarget_lock_close: Some(core::mem::transmute(not_implemented as *const fn())),
144 _retarget_lock_close_recursive: Some(core::mem::transmute(not_implemented as *const fn())),
145 _retarget_lock_acquire: Some(core::mem::transmute(not_implemented as *const fn())),
146 _retarget_lock_acquire_recursive: Some(core::mem::transmute(
147 not_implemented as *const fn(),
148 )),
149 _retarget_lock_try_acquire: Some(core::mem::transmute(not_implemented as *const fn())),
150 _retarget_lock_try_acquire_recursive: Some(core::mem::transmute(
151 not_implemented as *const fn(),
152 )),
153 _retarget_lock_release: Some(core::mem::transmute(not_implemented as *const fn())),
154 _retarget_lock_release_recursive: Some(core::mem::transmute(
155 not_implemented as *const fn(),
156 )),
157 _printf_float: Some(core::mem::transmute(not_implemented as *const fn())),
158 _scanf_float: Some(core::mem::transmute(not_implemented as *const fn())),
159 __assert_func: Some(super::__assert_func),
160 __sinit: Some(core::mem::transmute(not_implemented as *const fn())),
161 _cleanup_r: Some(core::mem::transmute(not_implemented as *const fn())),
162 }
163};
164
165unsafe extern "C" fn not_implemented() {
166 panic!("Function called via syscall table is not implemented!");
167}
168
169unsafe extern "C" fn abort_wrapper() {
170 panic!("Abort called from ROM code!");
171}
172
173#[allow(clippy::missing_transmute_annotations)]
178pub unsafe fn init_syscall_table() {
179 cfg_if::cfg_if! {
180 if #[cfg(esp32)] {
181 unsafe extern "C" {
182 static mut syscall_table_ptr_pro: *const chip_specific::syscall_stub_table;
183 static mut syscall_table_ptr_app: *const chip_specific::syscall_stub_table;
184 }
185 unsafe {
186 syscall_table_ptr_pro = &raw const SYSCALL_TABLE;
187 syscall_table_ptr_app = &raw const SYSCALL_TABLE;
188 }
189 } else if #[cfg(esp32s2)] {
190 unsafe extern "C" {
191 static mut syscall_table_ptr_pro: *const chip_specific::syscall_stub_table;
192 }
193 unsafe { syscall_table_ptr_pro = &raw const SYSCALL_TABLE; }
194 } else {
195 unsafe extern "C" {
196 static mut syscall_table_ptr: *const chip_specific::syscall_stub_table;
197 }
198 unsafe { syscall_table_ptr = &raw const SYSCALL_TABLE; }
199 }
200 };
201}