@@ -58,7 +58,7 @@ pub use framebuffer::{FramebufferColor, FramebufferField, FramebufferTag, Frameb
58
58
pub use image_load_addr:: ImageLoadPhysAddr ;
59
59
pub use memory_map:: {
60
60
BasicMemoryInfoTag , EFIBootServicesNotExited , EFIMemoryAreaType , EFIMemoryDesc ,
61
- EFIMemoryMapTag , MemoryArea , MemoryAreaIter , MemoryAreaType , MemoryMapTag ,
61
+ EFIMemoryMapTag , MemoryArea , MemoryAreaType , MemoryMapTag ,
62
62
} ;
63
63
pub use module:: { ModuleIter , ModuleTag } ;
64
64
pub use rsdp:: { RsdpV1Tag , RsdpV2Tag } ;
@@ -514,7 +514,10 @@ impl fmt::Debug for BootInformation {
514
514
/// This crate uses the [`Pointee`]-abstraction of the [`ptr_meta`] crate to
515
515
/// create fat pointers.
516
516
pub trait TagTrait : Pointee {
517
- /// Returns
517
+ /// Returns the amount of items in the dynamically sized portion of the
518
+ /// DST. Note that this is not the amount of bytes. So if the dynamically
519
+ /// sized portion is 16 bytes in size and each element is 4 bytes big, then
520
+ /// this function must return 4.
518
521
fn dst_size ( base_tag : & Tag ) -> Self :: Metadata ;
519
522
520
523
/// Creates a reference to a (dynamically sized) tag type in a safe way.
@@ -706,16 +709,16 @@ mod tests {
706
709
FramebufferType :: RGB {
707
710
red: FramebufferField {
708
711
position: 16 ,
709
- size: 8
712
+ size: 8 ,
710
713
} ,
711
714
green: FramebufferField {
712
715
position: 8 ,
713
- size: 8
716
+ size: 8 ,
714
717
} ,
715
718
blue: FramebufferField {
716
719
position: 0 ,
717
- size: 8
718
- }
720
+ size: 8 ,
721
+ } ,
719
722
}
720
723
) ;
721
724
}
@@ -767,22 +770,22 @@ mod tests {
767
770
FramebufferColor {
768
771
red: 255 ,
769
772
green: 0 ,
770
- blue: 0
773
+ blue: 0 ,
771
774
} ,
772
775
FramebufferColor {
773
776
red: 0 ,
774
777
green: 255 ,
775
- blue: 0
778
+ blue: 0 ,
776
779
} ,
777
780
FramebufferColor {
778
781
red: 0 ,
779
782
green: 0 ,
780
- blue: 255
783
+ blue: 255 ,
781
784
} ,
782
785
FramebufferColor {
783
786
red: 0 ,
784
787
green: 0 ,
785
- blue: 0
788
+ blue: 0 ,
786
789
}
787
790
]
788
791
) ,
@@ -915,28 +918,28 @@ mod tests {
915
918
vbe. mode_info. red_field,
916
919
VBEField {
917
920
position: 16 ,
918
- size: 8
921
+ size: 8 ,
919
922
}
920
923
) ;
921
924
assert_eq ! (
922
925
vbe. mode_info. green_field,
923
926
VBEField {
924
927
position: 8 ,
925
- size: 8
928
+ size: 8 ,
926
929
}
927
930
) ;
928
931
assert_eq ! (
929
932
vbe. mode_info. blue_field,
930
933
VBEField {
931
934
position: 0 ,
932
- size: 8
935
+ size: 8 ,
933
936
}
934
937
) ;
935
938
assert_eq ! (
936
939
vbe. mode_info. reserved_field,
937
940
VBEField {
938
941
position: 24 ,
939
- size: 8
942
+ size: 8 ,
940
943
}
941
944
) ;
942
945
assert_eq ! (
@@ -1218,27 +1221,33 @@ mod tests {
1218
1221
let addr = bytes. 0 . as_ptr ( ) as usize ;
1219
1222
let bi = unsafe { load ( addr) } ;
1220
1223
let bi = bi. unwrap ( ) ;
1221
- test_grub2_boot_info ( bi, addr, string_addr, & bytes. 0 , & string_bytes. 0 ) ;
1224
+
1225
+ test_grub2_boot_info ( & bi, addr, string_addr, & bytes. 0 , & string_bytes. 0 ) ;
1222
1226
let bi = unsafe { load_with_offset ( addr, 0 ) } ;
1223
1227
let bi = bi. unwrap ( ) ;
1224
- test_grub2_boot_info ( bi, addr, string_addr, & bytes. 0 , & string_bytes. 0 ) ;
1228
+ test_grub2_boot_info ( & bi, addr, string_addr, & bytes. 0 , & string_bytes. 0 ) ;
1225
1229
let offset = 8usize ;
1226
1230
for i in 0 ..8 {
1227
1231
bytes. 0 [ 796 + i] = ( ( string_addr - offset as u64 ) >> ( i * 8 ) ) as u8 ;
1228
1232
}
1229
1233
let bi = unsafe { load_with_offset ( addr - offset, offset) } ;
1230
1234
let bi = bi. unwrap ( ) ;
1231
1235
test_grub2_boot_info (
1232
- bi,
1236
+ & bi,
1233
1237
addr,
1234
1238
string_addr - offset as u64 ,
1235
1239
& bytes. 0 ,
1236
1240
& string_bytes. 0 ,
1237
1241
) ;
1242
+
1243
+ // Check that the MBI's debug output can be printed without SEGFAULT.
1244
+ // If this works, it is a good indicator than transitively a lot of
1245
+ // stuff works.
1246
+ println ! ( "{bi:#?}" ) ;
1238
1247
}
1239
1248
1240
1249
fn test_grub2_boot_info (
1241
- bi : BootInformation ,
1250
+ bi : & BootInformation ,
1242
1251
addr : usize ,
1243
1252
string_addr : u64 ,
1244
1253
bytes : & [ u8 ] ,
@@ -1317,7 +1326,12 @@ mod tests {
1317
1326
assert_eq ! ( ElfSectionFlags :: empty( ) , s8. flags( ) ) ;
1318
1327
assert_eq ! ( ElfSectionType :: StringTable , s8. section_type( ) ) ;
1319
1328
assert ! ( es. next( ) . is_none( ) ) ;
1320
- let mut mm = bi. memory_map_tag ( ) . unwrap ( ) . available_memory_areas ( ) ;
1329
+ let mut mm = bi
1330
+ . memory_map_tag ( )
1331
+ . unwrap ( )
1332
+ . memory_areas ( )
1333
+ . iter ( )
1334
+ . filter ( |area| area. typ ( ) == MemoryAreaType :: Available ) ;
1321
1335
let mm1 = mm. next ( ) . unwrap ( ) ;
1322
1336
assert_eq ! ( 0x00000000 , mm1. start_address( ) ) ;
1323
1337
assert_eq ! ( 0x009_FC00 , mm1. end_address( ) ) ;
0 commit comments