@@ -198,7 +198,7 @@ where
198198 let kernel_slice_start = kernel. start_address as u64 ;
199199 let kernel_slice_len = u64:: try_from ( kernel. len ) . unwrap ( ) ;
200200
201- let ( entry_point, tls_template) = load_kernel:: load_kernel (
201+ let ( kernel_image_offset , entry_point, tls_template) = load_kernel:: load_kernel (
202202 kernel,
203203 kernel_page_table,
204204 frame_allocator,
@@ -402,6 +402,8 @@ where
402402
403403 kernel_slice_start,
404404 kernel_slice_len,
405+ kernel_image_offset : kernel_image_offset. as_u64 ( ) ,
406+
405407 ramdisk_slice_start,
406408 ramdisk_slice_len,
407409 }
@@ -429,6 +431,8 @@ pub struct Mappings {
429431 pub kernel_slice_start : u64 ,
430432 /// Size of the kernel slice allocation in memory.
431433 pub kernel_slice_len : u64 ,
434+ /// Start address of the kernel image relocated in memory.
435+ pub kernel_image_offset : u64 ,
432436 pub ramdisk_slice_start : Option < VirtAddr > ,
433437 pub ramdisk_slice_len : u64 ,
434438}
@@ -543,6 +547,9 @@ where
543547 . map ( |addr| addr. as_u64 ( ) )
544548 . into ( ) ;
545549 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 ;
546553 info. _test_sentinel = boot_config. _test_sentinel ;
547554 info
548555 } ) ;
0 commit comments