mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-11 18:20:43 +09:00
LibELF: Make sure the mmap() regions are large enough
Sometimes we'd end up requesting a smaller range for .text and .data than was actually necessary.
This commit is contained in:
parent
2eb025b2ea
commit
811f9d562d
Notes:
sideshowbarker
2024-07-18 11:20:28 +09:00
Author: https://github.com/gunnarbeutner
Commit: 811f9d562d
Pull-request: https://github.com/SerenityOS/serenity/pull/8317
1 changed files with 4 additions and 2 deletions
|
@ -320,7 +320,7 @@ void DynamicLoader::load_program_headers()
|
|||
|
||||
for (auto& text_region : text_regions) {
|
||||
FlatPtr ph_text_base = text_region.desired_load_address().page_base().get();
|
||||
FlatPtr ph_text_end = round_up_to_power_of_two(text_region.desired_load_address().offset(text_region.size_in_memory()).get(), PAGE_SIZE);
|
||||
FlatPtr ph_text_end = ph_text_base + round_up_to_power_of_two(text_region.size_in_memory() + (size_t)(text_region.desired_load_address().as_ptr() - ph_text_base), PAGE_SIZE);
|
||||
size_t text_segment_size = ph_text_end - ph_text_base;
|
||||
|
||||
auto text_segment_offset = ph_text_base - ph_load_base;
|
||||
|
@ -358,7 +358,7 @@ void DynamicLoader::load_program_headers()
|
|||
|
||||
for (auto& data_region : data_regions) {
|
||||
FlatPtr ph_data_base = data_region.desired_load_address().page_base().get();
|
||||
FlatPtr ph_data_end = round_up_to_power_of_two(data_region.desired_load_address().offset(data_region.size_in_memory()).get(), PAGE_SIZE);
|
||||
FlatPtr ph_data_end = ph_data_base + round_up_to_power_of_two(data_region.size_in_memory() + (size_t)(data_region.desired_load_address().as_ptr() - ph_data_base), PAGE_SIZE);
|
||||
size_t data_segment_size = ph_data_end - ph_data_base;
|
||||
|
||||
auto data_segment_offset = ph_data_base - ph_load_base;
|
||||
|
@ -385,6 +385,8 @@ void DynamicLoader::load_program_headers()
|
|||
else
|
||||
data_segment_start = data_region.desired_load_address();
|
||||
|
||||
VERIFY(data_segment_start.as_ptr() + data_region.size_in_memory() <= data_segment + data_segment_size);
|
||||
|
||||
memcpy(data_segment_start.as_ptr(), (u8*)m_file_data + data_region.offset(), data_region.size_in_image());
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue