Skip to content

Commit a951a7e

Browse files
committed
Run rustfmt
1 parent 1aa9575 commit a951a7e

File tree

5 files changed

+176
-106
lines changed

5 files changed

+176
-106
lines changed

src/boot_info.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
use core::slice;
22

3-
use x86_64::VirtAddr;
3+
use os_bootinfo::{E820MemoryRegion, MemoryMap, MemoryRegion};
44
use usize_conversions::usize_from;
5-
use os_bootinfo::{MemoryMap, MemoryRegion, E820MemoryRegion};
5+
use x86_64::VirtAddr;
66

77
pub(crate) fn create_from(memory_map_addr: VirtAddr, entry_count: u64) -> MemoryMap {
88
let memory_map_start_ptr = usize_from(memory_map_addr.as_u64()) as *const E820MemoryRegion;
9-
let e820_memory_map = unsafe {
10-
slice::from_raw_parts(memory_map_start_ptr, usize_from(entry_count))
11-
};
9+
let e820_memory_map =
10+
unsafe { slice::from_raw_parts(memory_map_start_ptr, usize_from(entry_count)) };
1211

1312
let mut memory_map = MemoryMap::new();
1413
for region in e820_memory_map {

src/frame_allocator.rs

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use x86_64::structures::paging::{PAGE_SIZE, PhysFrame};
21
use os_bootinfo::{MemoryMap, MemoryRegion, MemoryRegionType};
2+
use x86_64::structures::paging::{PhysFrame, PAGE_SIZE};
33

44
pub(crate) struct FrameAllocator<'a> {
55
pub memory_map: &'a mut MemoryMap,
@@ -16,8 +16,12 @@ impl<'a> FrameAllocator<'a> {
1616
if region.len < page_size {
1717
continue;
1818
}
19-
assert_eq!(0, region.start_addr.as_u64() & 0xfff,
20-
"Region start address is not page aligned: {:?}", region);
19+
assert_eq!(
20+
0,
21+
region.start_addr.as_u64() & 0xfff,
22+
"Region start address is not page aligned: {:?}",
23+
region
24+
);
2125

2226
frame = Some(PhysFrame::containing_address(region.start_addr));
2327
region.start_addr += page_size;
@@ -28,7 +32,7 @@ impl<'a> FrameAllocator<'a> {
2832
self.add_region(MemoryRegion {
2933
start_addr: frame.start_address(),
3034
len: page_size,
31-
region_type
35+
region_type,
3236
});
3337
Some(frame)
3438
} else {
@@ -38,26 +42,32 @@ impl<'a> FrameAllocator<'a> {
3842

3943
pub(crate) fn deallocate_frame(&mut self, frame: PhysFrame) {
4044
let page_size = u64::from(PAGE_SIZE);
41-
self.add_region_overwrite(MemoryRegion {
42-
start_addr: frame.start_address(),
43-
len: page_size,
44-
region_type: MemoryRegionType::Usable,
45-
}, true);
45+
self.add_region_overwrite(
46+
MemoryRegion {
47+
start_addr: frame.start_address(),
48+
len: page_size,
49+
region_type: MemoryRegionType::Usable,
50+
},
51+
true,
52+
);
4653
}
4754

4855
/// Adds the passed region to the memory map.
4956
///
5057
/// This function automatically adjusts the existing regions so that no overlap occurs.
5158
///
5259
/// Panics if a non-usable region (e.g. a reserved region) overlaps with the passed region.
53-
pub(crate) fn add_region(&mut self, region: MemoryRegion)
54-
{
60+
pub(crate) fn add_region(&mut self, region: MemoryRegion) {
5561
self.add_region_overwrite(region, false);
5662
}
5763

5864
fn add_region_overwrite(&mut self, region: MemoryRegion, overwrite: bool) {
59-
assert_eq!(0, region.start_addr.as_u64() & 0xfff,
60-
"Region start address is not page aligned: {:?}", region);
65+
assert_eq!(
66+
0,
67+
region.start_addr.as_u64() & 0xfff,
68+
"Region start address is not page aligned: {:?}",
69+
region
70+
);
6171

6272
let mut region_already_inserted = false;
6373
let mut split_region = None;
@@ -69,12 +79,16 @@ impl<'a> FrameAllocator<'a> {
6979
match r.region_type {
7080
MemoryRegionType::Usable => {
7181
if region.region_type == MemoryRegionType::Usable {
72-
panic!("region {:?} overlaps with other usable region {:?}", region, r)
82+
panic!(
83+
"region {:?} overlaps with other usable region {:?}",
84+
region, r
85+
)
7386
}
7487
}
75-
MemoryRegionType::InUse => {},
76-
MemoryRegionType::Bootloader | MemoryRegionType::Kernel
77-
| MemoryRegionType::PageTable if overwrite => {}
88+
MemoryRegionType::InUse => {}
89+
MemoryRegionType::Bootloader
90+
| MemoryRegionType::Kernel
91+
| MemoryRegionType::PageTable if overwrite => {}
7892
_ => {
7993
panic!("can't override region {:?} with {:?}", r, region);
8094
}
@@ -84,7 +98,10 @@ impl<'a> FrameAllocator<'a> {
8498
// ----rrrrrrrrrrr----
8599
// ------RRRR---------
86100
r.len = region.start_addr() - r.start_addr();
87-
assert!(split_region.is_none(), "area overlaps with multiple regions");
101+
assert!(
102+
split_region.is_none(),
103+
"area overlaps with multiple regions"
104+
);
88105
split_region = Some(MemoryRegion {
89106
start_addr: region.end_addr(),
90107
len: r.end_addr() - region.end_addr(),
@@ -94,8 +111,8 @@ impl<'a> FrameAllocator<'a> {
94111
// Case: (r = `r`, R = `region`)
95112
// ----rrrrrrrrrrr----
96113
// --RRRR-------------
97-
r.len -= region.end_addr() - r.start_addr();
98-
r.start_addr = region.end_addr();
114+
r.len -= region.end_addr() - r.start_addr();
115+
r.start_addr = region.end_addr();
99116
} else if region.end_addr() >= r.end_addr() {
100117
// Case: (r = `r`, R = `region`)
101118
// ----rrrrrrrrrrr----

src/main.rs

Lines changed: 75 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,26 @@
88
#![feature(pointer_methods)]
99
#![feature(const_fn)]
1010
#![feature(nll)]
11-
1211
#![no_std]
1312
#![no_main]
1413

15-
extern crate xmas_elf;
16-
extern crate x86_64;
17-
extern crate usize_conversions;
1814
extern crate os_bootinfo;
1915
extern crate spin;
16+
extern crate usize_conversions;
17+
extern crate x86_64;
18+
extern crate xmas_elf;
2019
#[macro_use]
2120
extern crate fixedvec;
2221

22+
use core::slice;
23+
use os_bootinfo::BootInfo;
24+
use usize_conversions::usize_from;
2325
pub use x86_64::PhysAddr;
2426
use x86_64::VirtAddr;
25-
use x86_64::ux::u9;
26-
use x86_64::structures::paging::{PAGE_SIZE, PageTableFlags, Page};
27-
use x86_64::structures::paging::RecursivePageTable;
2827
use x86_64::instructions::tlb;
29-
use core::slice;
30-
use usize_conversions::usize_from;
31-
use os_bootinfo::BootInfo;
28+
use x86_64::structures::paging::RecursivePageTable;
29+
use x86_64::structures::paging::{Page, PageTableFlags, PAGE_SIZE};
30+
use x86_64::ux::u9;
3231

3332
global_asm!(include_str!("boot.s"));
3433
global_asm!(include_str!("second_stage.s"));
@@ -40,8 +39,8 @@ extern "C" {
4039
}
4140

4241
mod boot_info;
43-
mod page_table;
4442
mod frame_allocator;
43+
mod page_table;
4544
mod printer;
4645

4746
pub struct IdentityMappedAddr(PhysAddr);
@@ -61,15 +60,19 @@ impl IdentityMappedAddr {
6160
}
6261

6362
#[no_mangle]
64-
pub extern "C" fn load_elf(kernel_start: IdentityMappedAddr, kernel_size: u64,
65-
memory_map_addr: VirtAddr, memory_map_entry_count: u64,
66-
page_table_start: PhysAddr, page_table_end: PhysAddr,
67-
bootloader_start: PhysAddr, bootloader_end: PhysAddr,
68-
) -> !
69-
{
63+
pub extern "C" fn load_elf(
64+
kernel_start: IdentityMappedAddr,
65+
kernel_size: u64,
66+
memory_map_addr: VirtAddr,
67+
memory_map_entry_count: u64,
68+
page_table_start: PhysAddr,
69+
page_table_end: PhysAddr,
70+
bootloader_start: PhysAddr,
71+
bootloader_end: PhysAddr,
72+
) -> ! {
7073
use fixedvec::FixedVec;
71-
use xmas_elf::program::{ProgramHeader, ProgramHeader64};
7274
use os_bootinfo::{MemoryRegion, MemoryRegionType};
75+
use xmas_elf::program::{ProgramHeader, ProgramHeader64};
7376

7477
let mut memory_map = boot_info::create_from(memory_map_addr, memory_map_entry_count);
7578

@@ -87,9 +90,9 @@ pub extern "C" fn load_elf(kernel_start: IdentityMappedAddr, kernel_size: u64,
8790

8891
for program_header in elf_file.program_iter() {
8992
match program_header {
90-
ProgramHeader::Ph64(header) => {
91-
segments.push(*header).expect("does not support more than 32 program segments")
92-
},
93+
ProgramHeader::Ph64(header) => segments
94+
.push(*header)
95+
.expect("does not support more than 32 program segments"),
9396
ProgramHeader::Ph32(_) => panic!("does not support 32 bit elf files"),
9497
}
9598
}
@@ -100,14 +103,20 @@ pub extern "C" fn load_elf(kernel_start: IdentityMappedAddr, kernel_size: u64,
100103

101104
// Create a RecursivePageTable
102105
let recursive_index = u9::new(511);
103-
let recursive_page_table_addr = Page::from_page_table_indices(recursive_index,
104-
recursive_index, recursive_index, recursive_index);
106+
let recursive_page_table_addr = Page::from_page_table_indices(
107+
recursive_index,
108+
recursive_index,
109+
recursive_index,
110+
recursive_index,
111+
);
105112
let page_table = unsafe { &mut *(recursive_page_table_addr.start_address().as_mut_ptr()) };
106-
let mut rec_page_table = RecursivePageTable::new(page_table)
107-
.expect("recursive page table creation failed");
113+
let mut rec_page_table =
114+
RecursivePageTable::new(page_table).expect("recursive page table creation failed");
108115

109116
// Create a frame allocator, which marks allocated frames as used in the memory map.
110-
let mut frame_allocator = frame_allocator::FrameAllocator{ memory_map:&mut memory_map };
117+
let mut frame_allocator = frame_allocator::FrameAllocator {
118+
memory_map: &mut memory_map,
119+
};
111120

112121
// Mark already used memory areas in frame allocator.
113122
{
@@ -117,15 +126,18 @@ pub extern "C" fn load_elf(kernel_start: IdentityMappedAddr, kernel_size: u64,
117126
region_type: MemoryRegionType::Kernel,
118127
});
119128
frame_allocator.add_region(MemoryRegion {
120-
start_addr: page_table_start, len: page_table_end - page_table_start,
129+
start_addr: page_table_start,
130+
len: page_table_end - page_table_start,
121131
region_type: MemoryRegionType::PageTable,
122132
});
123133
frame_allocator.add_region(MemoryRegion {
124-
start_addr: bootloader_start, len: bootloader_end - bootloader_start,
134+
start_addr: bootloader_start,
135+
len: bootloader_end - bootloader_start,
125136
region_type: MemoryRegionType::Bootloader,
126137
});
127138
frame_allocator.add_region(MemoryRegion {
128-
start_addr: PhysAddr::new(0), len: u64::from(PAGE_SIZE),
139+
start_addr: PhysAddr::new(0),
140+
len: u64::from(PAGE_SIZE),
129141
region_type: MemoryRegionType::FrameZero,
130142
});
131143
}
@@ -134,25 +146,37 @@ pub extern "C" fn load_elf(kernel_start: IdentityMappedAddr, kernel_size: u64,
134146
let kernel_start_page = Page::containing_address(kernel_start.virt());
135147
let kernel_end_page = Page::containing_address(kernel_start.virt() + kernel_size - 1u64);
136148
for page in Page::range_inclusive(kernel_start_page, kernel_end_page).step_by(512) {
137-
rec_page_table.unmap(page, &mut |frame| {
138-
frame_allocator.deallocate_frame(frame);
139-
}).expect("dealloc error");
149+
rec_page_table
150+
.unmap(page, &mut |frame| {
151+
frame_allocator.deallocate_frame(frame);
152+
})
153+
.expect("dealloc error");
140154
}
141155
// Flush the translation lookaside buffer since we changed the active mapping.
142156
tlb::flush_all();
143157

144158
// Map kernel segments.
145-
let stack_end = page_table::map_kernel(kernel_start.phys(), &segments, &mut rec_page_table,
146-
&mut frame_allocator).expect("kernel mapping failed");
159+
let stack_end = page_table::map_kernel(
160+
kernel_start.phys(),
161+
&segments,
162+
&mut rec_page_table,
163+
&mut frame_allocator,
164+
).expect("kernel mapping failed");
147165

148166
// Map a page for the boot info structure
149167
let boot_info_page = {
150168
let page = Page::containing_address(VirtAddr::new(0xb0071f0000));
151-
let frame = frame_allocator.allocate_frame(MemoryRegionType::Bootloader)
169+
let frame = frame_allocator
170+
.allocate_frame(MemoryRegionType::Bootloader)
152171
.expect("frame allocation failed");
153172
let flags = PageTableFlags::PRESENT | PageTableFlags::WRITABLE;
154-
page_table::map_page(page, frame, flags,
155-
&mut rec_page_table, &mut frame_allocator).expect("Mapping of bootinfo page failed");
173+
page_table::map_page(
174+
page,
175+
frame,
176+
flags,
177+
&mut rec_page_table,
178+
&mut frame_allocator,
179+
).expect("Mapping of bootinfo page failed");
156180
page
157181
};
158182

@@ -162,7 +186,7 @@ pub extern "C" fn load_elf(kernel_start: IdentityMappedAddr, kernel_size: u64,
162186

163187
// Write boot info to boot info page.
164188
let boot_info_addr = boot_info_page.start_address();
165-
unsafe {boot_info_addr.as_mut_ptr::<BootInfo>().write(boot_info)};
189+
unsafe { boot_info_addr.as_mut_ptr::<BootInfo>().write(boot_info) };
166190

167191
// Make sure that the kernel respects the write-protection bits, even when in ring 0.
168192
enable_write_protect_bit();
@@ -175,7 +199,7 @@ pub extern "C" fn load_elf(kernel_start: IdentityMappedAddr, kernel_size: u64,
175199

176200
fn enable_nxe_bit() {
177201
use x86_64::registers::control::{Efer, EferFlags};
178-
unsafe { Efer::update(|efer| *efer |= EferFlags::NO_EXECUTE_ENABLE)}
202+
unsafe { Efer::update(|efer| *efer |= EferFlags::NO_EXECUTE_ENABLE) }
179203
}
180204

181205
fn enable_write_protect_bit() {
@@ -185,10 +209,12 @@ fn enable_write_protect_bit() {
185209

186210
#[lang = "panic_fmt"]
187211
#[no_mangle]
188-
pub extern fn rust_begin_panic(msg: core::fmt::Arguments,
189-
_file: &'static str,
190-
_line: u32,
191-
_column: u32) -> ! {
212+
pub extern "C" fn rust_begin_panic(
213+
msg: core::fmt::Arguments,
214+
_file: &'static str,
215+
_line: u32,
216+
_column: u32,
217+
) -> ! {
192218
use core::fmt::Write;
193219
write!(printer::PRINTER.lock(), "PANIC: {}", msg).unwrap();
194220

@@ -197,7 +223,11 @@ pub extern fn rust_begin_panic(msg: core::fmt::Arguments,
197223

198224
#[lang = "eh_personality"]
199225
#[no_mangle]
200-
pub extern fn eh_personality() { loop {} }
226+
pub extern "C" fn eh_personality() {
227+
loop {}
228+
}
201229

202230
#[no_mangle]
203-
pub extern fn _Unwind_Resume() { loop {} }
231+
pub extern "C" fn _Unwind_Resume() {
232+
loop {}
233+
}

0 commit comments

Comments
 (0)