Skip to content

Commit aadcf8b

Browse files
committed
multiboot2: improved debug formatting for EFIMemoryMapTag
1 parent b95b735 commit aadcf8b

File tree

3 files changed

+42
-2
lines changed

3 files changed

+42
-2
lines changed

multiboot2/Changelog.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# CHANGELOG for crate `multiboot2`
22

3+
## Unreleased
4+
5+
- Improve debug formatting for EFIMemoryMapTag
6+
37
## v0.22.1 (2024-08-20)
48

59
Minor documentation fixes.

multiboot2/src/efi.rs

+24
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,8 @@ impl Tag for EFIBootServicesNotExitedTag {
214214
#[cfg(all(test, feature = "builder"))]
215215
mod tests {
216216
use super::{EFIImageHandle32Tag, EFIImageHandle64Tag, EFISdt32Tag, EFISdt64Tag};
217+
use crate::{EFIMemoryDesc, EFIMemoryMapTag};
218+
use uefi_raw::table::boot::{MemoryAttribute, MemoryType};
217219

218220
const ADDR: usize = 0xABCDEF;
219221

@@ -240,4 +242,26 @@ mod tests {
240242
let tag = EFIImageHandle64Tag::new(ADDR.try_into().unwrap());
241243
assert_eq!(tag.image_handle(), ADDR);
242244
}
245+
246+
#[test]
247+
fn test_construct_efi_mmap_tag() {
248+
let tag = EFIMemoryMapTag::new_from_descs(&[
249+
EFIMemoryDesc {
250+
ty: MemoryType::BOOT_SERVICES_CODE,
251+
phys_start: 0x1000,
252+
virt_start: 0x1000,
253+
page_count: 1,
254+
att: MemoryAttribute::WRITE_COMBINE,
255+
},
256+
EFIMemoryDesc {
257+
ty: MemoryType::LOADER_DATA,
258+
phys_start: 0x2000,
259+
virt_start: 0x2000,
260+
page_count: 2,
261+
att: MemoryAttribute::NON_VOLATILE,
262+
},
263+
]);
264+
// Test for Miri
265+
dbg!(tag);
266+
}
243267
}

multiboot2/src/memory_map.rs

+14-2
Original file line numberDiff line numberDiff line change
@@ -384,9 +384,10 @@ impl Debug for EFIMemoryMapTag {
384384
.field("typ", &self.header.typ)
385385
.field("size", &self.header.size)
386386
.field("desc_size", &self.desc_size)
387+
.field("desc_version", &self.desc_version)
387388
.field("buf", &self.memory_map.as_ptr())
388389
.field("buf_len", &self.memory_map.len())
389-
.field("entries", &self.memory_areas().len())
390+
.field("entries", &self.memory_areas())
390391
.finish()
391392
}
392393
}
@@ -409,7 +410,7 @@ impl Tag for EFIMemoryMapTag {
409410
}
410411

411412
/// An iterator over the EFI memory areas emitting [`EFIMemoryDesc`] items.
412-
#[derive(Clone, Debug)]
413+
#[derive(Clone)]
413414
pub struct EFIMemoryAreaIter<'a> {
414415
mmap_tag: &'a EFIMemoryMapTag,
415416
i: usize,
@@ -460,6 +461,17 @@ impl<'a> ExactSizeIterator for EFIMemoryAreaIter<'a> {
460461
}
461462
}
462463

464+
impl<'a> Debug for EFIMemoryAreaIter<'a> {
465+
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
466+
let mut debug = f.debug_list();
467+
let iter = self.clone();
468+
for elem in iter {
469+
debug.entry(elem);
470+
}
471+
debug.finish()
472+
}
473+
}
474+
463475
#[cfg(all(test, feature = "builder"))]
464476
mod tests {
465477
use super::*;

0 commit comments

Comments
 (0)