2
2
3
3
use crate :: {
4
4
kmem:: {
5
- ebss_addr , erodata_addr , etext_addr , from_ptr_to_physaddr, from_virt_to_physaddr ,
6
- physaddr_as_ptr_mut , physaddr_as_virt , text_addr ,
5
+ boottext_range , bss_range , data_range , from_ptr_to_physaddr, physaddr_as_ptr_mut ,
6
+ physaddr_as_virt , rodata_range , text_range ,
7
7
} ,
8
8
pagealloc,
9
9
registers:: rpi_mmio,
@@ -48,6 +48,10 @@ impl Page4K {
48
48
core:: intrinsics:: volatile_set_memory ( & mut self . 0 , 0u8 , 1 ) ;
49
49
}
50
50
}
51
+
52
+ pub fn data ( & mut self ) -> & mut [ u8 ] {
53
+ & mut self . 0
54
+ }
51
55
}
52
56
53
57
#[ derive( Debug , IntoPrimitive , FromPrimitive ) ]
@@ -485,24 +489,16 @@ pub unsafe fn init(kpage_table: &mut PageTable, dtb_range: PhysRange, available_
485
489
486
490
// TODO leave the first page unmapped to catch null pointer dereferences in unsafe code
487
491
let custom_map = {
488
- let text_range =
489
- PhysRange ( from_virt_to_physaddr ( text_addr ( ) ) ..from_virt_to_physaddr ( etext_addr ( ) ) ) ;
490
- let data_range = PhysRange :: with_len (
491
- from_virt_to_physaddr ( etext_addr ( ) ) . addr ( ) ,
492
- erodata_addr ( ) - etext_addr ( ) ,
493
- ) ;
494
- let bss_range = PhysRange :: with_len (
495
- from_virt_to_physaddr ( erodata_addr ( ) ) . addr ( ) ,
496
- ebss_addr ( ) - erodata_addr ( ) ,
497
- ) ;
498
-
492
+ let text_range = boottext_range ( ) . add ( & text_range ( ) ) ;
493
+ let data_range = rodata_range ( ) . add ( & data_range ( ) ) ;
494
+ let bss_range = bss_range ( ) ;
499
495
let mmio_range = rpi_mmio ( ) . expect ( "mmio base detect failed" ) ;
500
496
501
497
let mut map = [
502
498
( "DTB" , dtb_range, Entry :: ro_kernel_data ( ) , PageSize :: Page4K ) ,
503
- ( "Kernel Text" , text_range, Entry :: ro_kernel_text ( ) , PageSize :: Page2M ) ,
504
- ( "Kernel Data" , data_range, Entry :: ro_kernel_data ( ) , PageSize :: Page2M ) ,
505
- ( "Kernel BSS" , bss_range, Entry :: rw_kernel_data ( ) , PageSize :: Page2M ) ,
499
+ ( "Kernel Text" , text_range, Entry :: ro_kernel_text ( ) , PageSize :: Page4K ) ,
500
+ ( "Kernel Data" , data_range, Entry :: rw_kernel_data ( ) , PageSize :: Page4K ) ,
501
+ ( "Kernel BSS" , bss_range, Entry :: rw_kernel_data ( ) , PageSize :: Page4K ) ,
506
502
( "MMIO" , mmio_range, Entry :: ro_kernel_device ( ) , PageSize :: Page2M ) ,
507
503
] ;
508
504
map. sort_by_key ( |a| a. 1 . start ( ) ) ;
@@ -515,14 +511,8 @@ pub unsafe fn init(kpage_table: &mut PageTable, dtb_range: PhysRange, available_
515
511
kpage_table. map_phys_range ( range, * flags, * page_size) . expect ( "init mapping failed" ) ;
516
512
517
513
println ! (
518
- " {:14}{:#018x}..{:#018x} to {:#018x}..{:#018x} flags: {:?} page_size: {:?}" ,
519
- name,
520
- range. start( ) . addr( ) ,
521
- range. end( ) . addr( ) ,
522
- mapped_range. 0 ,
523
- mapped_range. 1 ,
524
- flags,
525
- page_size
514
+ " {:14}{} to {:#018x}..{:#018x} flags: {:?} page_size: {:?}" ,
515
+ name, range, mapped_range. 0 , mapped_range. 1 , flags, page_size
526
516
) ;
527
517
}
528
518
0 commit comments