@@ -198,7 +198,7 @@ where
198
198
let kernel_slice_start = kernel. start_address as u64 ;
199
199
let kernel_slice_len = u64:: try_from ( kernel. len ) . unwrap ( ) ;
200
200
201
- let ( entry_point, tls_template) = load_kernel:: load_kernel (
201
+ let ( kernel_image_offset , entry_point, tls_template) = load_kernel:: load_kernel (
202
202
kernel,
203
203
kernel_page_table,
204
204
frame_allocator,
@@ -402,6 +402,8 @@ where
402
402
403
403
kernel_slice_start,
404
404
kernel_slice_len,
405
+ kernel_image_offset : kernel_image_offset. as_u64 ( ) ,
406
+
405
407
ramdisk_slice_start,
406
408
ramdisk_slice_len,
407
409
}
@@ -429,6 +431,8 @@ pub struct Mappings {
429
431
pub kernel_slice_start : u64 ,
430
432
/// Size of the kernel slice allocation in memory.
431
433
pub kernel_slice_len : u64 ,
434
+ /// Start address of the kernel image relocated in memory.
435
+ pub kernel_image_offset : u64 ,
432
436
pub ramdisk_slice_start : Option < VirtAddr > ,
433
437
pub ramdisk_slice_len : u64 ,
434
438
}
@@ -543,6 +547,9 @@ where
543
547
. map ( |addr| addr. as_u64 ( ) )
544
548
. into ( ) ;
545
549
info. ramdisk_len = mappings. ramdisk_slice_len ;
550
+ info. kernel_addr = mappings. kernel_slice_start as _ ;
551
+ info. kernel_len = mappings. kernel_slice_len as _ ;
552
+ info. kernel_image_offset = mappings. kernel_image_offset ;
546
553
info. _test_sentinel = boot_config. _test_sentinel ;
547
554
info
548
555
} ) ;
0 commit comments