Skip to content

Commit 67329ff

Browse files
committed
Fixes from PR
1. Fix CI: Fixed line number errors in output. 2. Remove unnecessary features 3. Fix uninteded downgrades on rebase in `Cargo.lock` 4. Use stack allocation for TCP4 transmit/receive 5. Remove unused files: a. library/std/src/sys/uefi/net/tcp6.rs b. library/std/src/sys_common/ucs2.rs 6. Fix Cargo.lock: Rollback unintentional upgrades. 7. Use UTF-16 for UEFI: Use Windows wtf8 implementation for UEFI. This was discussed in the PR and does not seem to cause any regressions. In face, it fixes some of the tests that were failing earlier. 8. Use Windows `std::os::ffi` for UEFI 9. Use Windows `std::sys::os_str` for UEFI Signed-off-by: Ayush Singh <ayushsingh1325@gmail.com>
1 parent 939e11e commit 67329ff

File tree

22 files changed

+117
-594
lines changed

22 files changed

+117
-594
lines changed

Cargo.lock

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1879,13 +1879,13 @@ dependencies = [
18791879

18801880
[[package]]
18811881
name = "im-rc"
1882-
version = "15.0.0"
1882+
version = "15.1.0"
18831883
source = "registry+https://github.com/rust-lang/crates.io-index"
1884-
checksum = "3ca8957e71f04a205cb162508f9326aea04676c8dfd0711220190d6b83664f3f"
1884+
checksum = "af1955a75fa080c677d3972822ec4bad316169ab1cfc6c257a942c2265dbe5fe"
18851885
dependencies = [
18861886
"bitmaps",
1887-
"rand_core 0.5.1",
1888-
"rand_xoshiro 0.4.0",
1887+
"rand_core 0.6.2",
1888+
"rand_xoshiro",
18891889
"sized-chunks",
18901890
"typenum",
18911891
"version_check",
@@ -2791,9 +2791,9 @@ dependencies = [
27912791

27922792
[[package]]
27932793
name = "pin-project-lite"
2794-
version = "0.2.9"
2794+
version = "0.2.8"
27952795
source = "registry+https://github.com/rust-lang/crates.io-index"
2796-
checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
2796+
checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
27972797

27982798
[[package]]
27992799
name = "pin-utils"
@@ -3033,15 +3033,6 @@ dependencies = [
30333033
"rand_core 0.5.1",
30343034
]
30353035

3036-
[[package]]
3037-
name = "rand_xoshiro"
3038-
version = "0.4.0"
3039-
source = "registry+https://github.com/rust-lang/crates.io-index"
3040-
checksum = "a9fcdd2e881d02f1d9390ae47ad8e5696a9e4be7b547a1da2afbc61973217004"
3041-
dependencies = [
3042-
"rand_core 0.5.1",
3043-
]
3044-
30453036
[[package]]
30463037
name = "rand_xoshiro"
30473038
version = "0.6.0"
@@ -3096,9 +3087,9 @@ dependencies = [
30963087

30973088
[[package]]
30983089
name = "regex"
3099-
version = "1.6.0"
3090+
version = "1.5.6"
31003091
source = "registry+https://github.com/rust-lang/crates.io-index"
3101-
checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
3092+
checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1"
31023093
dependencies = [
31033094
"aho-corasick",
31043095
"memchr",
@@ -3125,9 +3116,9 @@ dependencies = [
31253116

31263117
[[package]]
31273118
name = "regex-syntax"
3128-
version = "0.6.27"
3119+
version = "0.6.26"
31293120
source = "registry+https://github.com/rust-lang/crates.io-index"
3130-
checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
3121+
checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
31313122

31323123
[[package]]
31333124
name = "remote-test-client"
@@ -4829,9 +4820,9 @@ checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
48294820

48304821
[[package]]
48314822
name = "smallvec"
4832-
version = "1.9.0"
4823+
version = "1.8.1"
48334824
source = "registry+https://github.com/rust-lang/crates.io-index"
4834-
checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
4825+
checksum = "cc88c725d61fc6c3132893370cac4a0200e3fedf5da8331c570664b1987f5ca2"
48354826

48364827
[[package]]
48374828
name = "snap"

library/std/src/lib.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -243,18 +243,15 @@
243243
#![feature(c_unwind)]
244244
#![feature(cfg_target_thread_local)]
245245
#![feature(concat_idents)]
246-
#![feature(const_deref)]
247246
#![feature(const_mut_refs)]
248247
#![feature(const_trait_impl)]
249-
#![feature(const_try)]
250248
#![feature(decl_macro)]
251249
#![feature(deprecated_suggestion)]
252250
#![feature(doc_cfg)]
253251
#![feature(doc_cfg_hide)]
254252
#![feature(doc_masked)]
255253
#![feature(doc_notable_trait)]
256254
#![feature(dropck_eyepatch)]
257-
#![feature(exclusive_range_pattern)]
258255
#![feature(exhaustive_patterns)]
259256
#![feature(if_let_guard)]
260257
#![feature(intra_doc_pointers)]
@@ -282,7 +279,6 @@
282279
#![feature(atomic_mut_ptr)]
283280
#![feature(char_error_internals)]
284281
#![feature(char_internals)]
285-
#![feature(const_option)]
286282
#![feature(core_intrinsics)]
287283
#![feature(cstr_from_bytes_until_nul)]
288284
#![feature(cstr_internals)]
@@ -311,7 +307,6 @@
311307
#![feature(prelude_2024)]
312308
#![feature(provide_any)]
313309
#![feature(ptr_as_uninit)]
314-
#![feature(ptr_internals)]
315310
#![feature(raw_os_nonzero)]
316311
#![feature(slice_internals)]
317312
#![feature(slice_ptr_get)]
@@ -326,7 +321,6 @@
326321
#![feature(alloc_layout_extra)]
327322
#![feature(allocator_api)]
328323
#![feature(get_mut_unchecked)]
329-
#![feature(const_alloc_error)]
330324
#![feature(map_try_insert)]
331325
#![feature(new_uninit)]
332326
#![feature(thin_box)]

library/std/src/os/uefi/ffi.rs

Lines changed: 0 additions & 72 deletions
This file was deleted.

library/std/src/os/uefi/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
#![unstable(feature = "uefi_std", issue = "100499")]
44

55
pub mod env;
6+
#[path = "../windows/ffi.rs"]
67
pub mod ffi;

library/std/src/sys/uefi/common.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -479,15 +479,8 @@ pub(crate) fn get_runtime_services() -> Option<NonNull<r_efi::efi::RuntimeServic
479479

480480
// Create UCS-2 Vector from OsStr
481481
pub(crate) fn to_ffi_string(s: &OsStr) -> Vec<u16> {
482-
let mut v: Vec<u16> = s
483-
.encode_wide()
484-
.map(|x| match x {
485-
Ok(c) => c,
486-
Err(_) => u16::from(crate::sys_common::ucs2::Ucs2Char::REPLACEMENT_CHARACTER),
487-
})
488-
.collect();
482+
let mut v: Vec<u16> = s.encode_wide().collect();
489483
v.push(0);
490-
v.shrink_to_fit();
491484
v
492485
}
493486

library/std/src/sys/uefi/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ pub mod io;
2424
pub mod locks;
2525
pub mod net;
2626
pub mod os;
27+
#[path = "../windows/os_str.rs"]
2728
pub mod os_str;
2829
pub mod path;
2930
pub mod pipe;

library/std/src/sys/uefi/net/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
mod implementation;
22
mod tcp;
33
mod tcp4;
4-
mod tcp6;
54

65
pub use implementation::*;
76

library/std/src/sys/uefi/net/tcp4.rs

Lines changed: 39 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -123,30 +123,17 @@ impl Tcp4Protocol {
123123
fragment_buffer: buf.as_ptr() as *mut crate::ffi::c_void,
124124
};
125125

126-
let layout = unsafe {
127-
crate::alloc::Layout::from_size_align_unchecked(
128-
crate::mem::size_of::<tcp4::TransmitData>()
129-
+ crate::mem::size_of::<tcp4::FragmentData>(),
130-
POOL_ALIGNMENT,
131-
)
126+
let mut transmit_data = TransmitData {
127+
push: r_efi::efi::Boolean::TRUE,
128+
urgent: r_efi::efi::Boolean::FALSE,
129+
data_length: buf_size,
130+
fragment_count: 1,
131+
fragment_table: [fragment_table; 1],
132132
};
133-
let mut transmit_data = VariableBox::<tcp4::TransmitData>::new_uninit(layout);
134133

135-
// Initialize TransmitData
136-
unsafe {
137-
addr_of_mut!((*transmit_data.as_uninit_mut_ptr()).push)
138-
.write(r_efi::efi::Boolean::TRUE);
139-
addr_of_mut!((*transmit_data.as_uninit_mut_ptr()).urgent)
140-
.write(r_efi::efi::Boolean::FALSE);
141-
addr_of_mut!((*transmit_data.as_uninit_mut_ptr()).data_length).write(buf_size);
142-
addr_of_mut!((*transmit_data.as_uninit_mut_ptr()).fragment_count).write(1);
143-
addr_of_mut!((*transmit_data.as_uninit_mut_ptr()).fragment_table)
144-
.cast::<tcp4::FragmentData>()
145-
.copy_from_nonoverlapping([fragment_table].as_ptr(), 1);
134+
let packet = tcp4::IoTokenPacket {
135+
tx_data: &mut transmit_data as *mut TransmitData<1> as *mut tcp4::TransmitData,
146136
};
147-
let mut transmit_data = unsafe { transmit_data.assume_init() };
148-
149-
let packet = tcp4::IoTokenPacket { tx_data: transmit_data.as_mut_ptr() };
150137
let mut transmit_token = tcp4::IoToken { completion_token, packet };
151138
unsafe { Self::transmit_raw(self.protocol.as_ptr(), &mut transmit_token) }?;
152139

@@ -185,7 +172,7 @@ impl Tcp4Protocol {
185172
POOL_ALIGNMENT,
186173
)
187174
};
188-
let mut transmit_data = VariableBox::<tcp4::TransmitData>::new_uninit(layout);
175+
let mut transmit_data = VariableBox::<TransmitData<0>>::new_uninit(layout);
189176
let fragment_tables_len = fragment_tables.len();
190177

191178
// Initialize TransmitData
@@ -203,7 +190,7 @@ impl Tcp4Protocol {
203190
};
204191
let mut transmit_data = unsafe { transmit_data.assume_init() };
205192

206-
let packet = tcp4::IoTokenPacket { tx_data: transmit_data.as_mut_ptr() };
193+
let packet = tcp4::IoTokenPacket { tx_data: transmit_data.as_mut_ptr().cast() };
207194
let mut transmit_token = tcp4::IoToken { completion_token, packet };
208195
unsafe { Self::transmit_raw(self.protocol.as_ptr(), &mut transmit_token) }?;
209196

@@ -230,26 +217,16 @@ impl Tcp4Protocol {
230217
fragment_buffer: buf.as_mut_ptr().cast(),
231218
};
232219

233-
let layout = unsafe {
234-
crate::alloc::Layout::from_size_align_unchecked(
235-
crate::mem::size_of::<tcp4::ReceiveData>()
236-
+ crate::mem::size_of::<tcp4::FragmentData>(),
237-
POOL_ALIGNMENT,
238-
)
220+
let mut receive_data = ReceiveData {
221+
urgent_flag: r_efi::efi::Boolean::FALSE,
222+
data_length: buf_size,
223+
fragment_count: 1,
224+
fragment_table: [fragment_table; 1],
239225
};
240-
let mut receive_data = VariableBox::<tcp4::ReceiveData>::new_uninit(layout);
241-
unsafe {
242-
addr_of_mut!((*receive_data.as_uninit_mut_ptr()).urgent_flag)
243-
.write(r_efi::efi::Boolean::FALSE);
244-
addr_of_mut!((*receive_data.as_uninit_mut_ptr()).data_length).write(buf_size);
245-
addr_of_mut!((*receive_data.as_uninit_mut_ptr()).fragment_count).write(1);
246-
addr_of_mut!((*receive_data.as_uninit_mut_ptr()).fragment_table)
247-
.cast::<tcp4::FragmentData>()
248-
.copy_from_nonoverlapping([fragment_table].as_ptr(), 1);
249-
}
250-
let mut receive_data = unsafe { receive_data.assume_init() };
251226

252-
let packet = tcp4::IoTokenPacket { rx_data: receive_data.as_mut_ptr() };
227+
let packet = tcp4::IoTokenPacket {
228+
rx_data: &mut receive_data as *mut ReceiveData<1> as *mut tcp4::ReceiveData,
229+
};
253230
let completion_token =
254231
tcp4::CompletionToken { event: receive_event.as_raw_event(), status: Status::ABORTED };
255232
let mut receive_token = tcp4::IoToken { completion_token, packet };
@@ -290,7 +267,7 @@ impl Tcp4Protocol {
290267
POOL_ALIGNMENT,
291268
)
292269
};
293-
let mut receive_data = VariableBox::<tcp4::ReceiveData>::new_uninit(layout);
270+
let mut receive_data = VariableBox::<ReceiveData<0>>::new_uninit(layout);
294271
unsafe {
295272
addr_of_mut!((*receive_data.as_uninit_mut_ptr()).urgent_flag)
296273
.write(r_efi::efi::Boolean::FALSE);
@@ -303,7 +280,7 @@ impl Tcp4Protocol {
303280
}
304281
let mut receive_data = unsafe { receive_data.assume_init() };
305282

306-
let packet = tcp4::IoTokenPacket { rx_data: receive_data.as_mut_ptr() };
283+
let packet = tcp4::IoTokenPacket { rx_data: receive_data.as_mut_ptr().cast() };
307284
let completion_token =
308285
tcp4::CompletionToken { event: receive_event.as_raw_event(), status: Status::ABORTED };
309286
let mut receive_token = tcp4::IoToken { completion_token, packet };
@@ -473,3 +450,22 @@ unsafe impl Send for Tcp4Protocol {}
473450

474451
// Safety: There are no threads in UEFI
475452
unsafe impl Sync for Tcp4Protocol {}
453+
454+
#[repr(C)]
455+
#[derive(Clone, Copy, Debug)]
456+
pub struct TransmitData<const N: usize> {
457+
pub push: r_efi::efi::Boolean,
458+
pub urgent: r_efi::efi::Boolean,
459+
pub data_length: u32,
460+
pub fragment_count: u32,
461+
pub fragment_table: [tcp4::FragmentData; N],
462+
}
463+
464+
#[repr(C)]
465+
#[derive(Clone, Copy, Debug)]
466+
pub struct ReceiveData<const N: usize> {
467+
pub urgent_flag: r_efi::efi::Boolean,
468+
pub data_length: u32,
469+
pub fragment_count: u32,
470+
pub fragment_table: [tcp4::FragmentData; N],
471+
}

library/std/src/sys/uefi/net/tcp6.rs

Lines changed: 0 additions & 3 deletions
This file was deleted.

0 commit comments

Comments
 (0)