44#![ test_runner( osdev_rust:: test_runner) ]
55#![ reexport_test_harness_main = "test_main" ]
66
7+ use alloc:: { boxed:: Box , rc:: Rc , vec, vec:: Vec } ;
78use bootloader:: { BootInfo , entry_point} ;
89use core:: panic:: PanicInfo ;
910use osdev_rust:: println;
1011
12+ extern crate alloc;
13+
1114entry_point ! ( kernel_main) ;
1215
1316fn kernel_main ( boot_info : & ' static BootInfo ) -> ! {
14- use osdev_rust:: memory ;
15- use osdev_rust:: memory:: BootInfoFrameAllocator ;
16- use x86_64:: { VirtAddr , structures :: paging :: Page } ;
17+ use osdev_rust:: allocator ;
18+ use osdev_rust:: memory:: { self , BootInfoFrameAllocator } ;
19+ use x86_64:: VirtAddr ;
1720
1821 println ! ( "Hello World!" ) ;
1922
@@ -23,14 +26,31 @@ fn kernel_main(boot_info: &'static BootInfo) -> ! {
2326 let mut mapper = unsafe { memory:: init ( phys_mem_offset) } ;
2427 let mut frame_allocator = unsafe { BootInfoFrameAllocator :: init ( & boot_info. memory_map ) } ;
2528
26- let page = Page :: containing_address ( VirtAddr :: new ( 0xdeadbeef000 ) ) ;
27- memory:: create_example_mapping ( page, & mut mapper, & mut frame_allocator) ;
29+ allocator:: init_heap ( & mut mapper, & mut frame_allocator) . expect ( "heap initialization failed" ) ;
30+
31+ let heap_value = Box :: new ( 42 ) ;
32+ println ! ( "heap_value at {:p}" , heap_value) ;
33+
34+ let mut vec = Vec :: new ( ) ;
2835
29- let page_ptr: * mut u64 = page. start_address ( ) . as_mut_ptr ( ) ;
30- unsafe {
31- page_ptr. offset ( 400 ) . write_volatile ( 0x_f021_f077_f065_f04e ) ;
36+ for i in 0 ..500 {
37+ vec. push ( i) ;
3238 }
3339
40+ println ! ( "vec at {:p}" , vec. as_slice( ) ) ;
41+
42+ let reference_counted = Rc :: new ( vec ! [ 1 , 2 , 3 ] ) ;
43+ let cloned_reference = reference_counted. clone ( ) ;
44+ println ! (
45+ "current reference count: {}" ,
46+ Rc :: strong_count( & cloned_reference) ,
47+ ) ;
48+ core:: mem:: drop ( reference_counted) ;
49+ println ! (
50+ "reference count is {} now" ,
51+ Rc :: strong_count( & cloned_reference)
52+ ) ;
53+
3454 #[ cfg( test) ]
3555 test_main ( ) ;
3656
0 commit comments