Skip to content

Commit 4ecba49

Browse files
committed
Merge #206 into next
2 parents 768f2a7 + 6423165 commit 4ecba49

14 files changed

+548
-56
lines changed

Cargo.lock

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ members = [
1818
"tests/test_kernels/default_settings",
1919
"tests/test_kernels/map_phys_mem",
2020
"tests/test_kernels/higher_half",
21+
"tests/test_kernels/pie",
2122
]
2223
exclude = ["examples/basic", "examples/test_framework"]
2324

common/src/level_4_entries.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,22 @@ impl UsedLevel4Entries {
1616
/// Initializes a new instance from the given ELF program segments.
1717
///
1818
/// Marks the virtual address range of all segments as used.
19-
pub fn new<'a>(segments: impl Iterator<Item = ProgramHeader<'a>>) -> Self {
19+
pub fn new<'a>(
20+
segments: impl Iterator<Item = ProgramHeader<'a>>,
21+
virtual_address_offset: u64,
22+
) -> Self {
2023
let mut used = UsedLevel4Entries {
2124
entry_state: [false; 512],
2225
};
2326

2427
used.entry_state[0] = true; // TODO: Can we do this dynamically?
2528

2629
for segment in segments {
27-
let start_page: Page = Page::containing_address(VirtAddr::new(segment.virtual_addr()));
30+
let start_page: Page = Page::containing_address(VirtAddr::new(
31+
segment.virtual_addr() + virtual_address_offset,
32+
));
2833
let end_page: Page = Page::containing_address(VirtAddr::new(
29-
segment.virtual_addr() + segment.mem_size(),
34+
segment.virtual_addr() + virtual_address_offset + segment.mem_size(),
3035
));
3136

3237
for p4_index in u64::from(start_page.p4_index())..=u64::from(end_page.p4_index()) {

0 commit comments

Comments
 (0)