diff --git a/LibELF/LibELF/ELF.cpp b/LibELF/LibELF/ELF.cpp index 7751f4af25..2ff99467e9 100644 --- a/LibELF/LibELF/ELF.cpp +++ b/LibELF/LibELF/ELF.cpp @@ -23,21 +23,12 @@ namespace LibELF #ifdef __is_kernel BAN::ErrorOr> ELF::load_from_file(BAN::RefPtr inode) { - PageTable::current().lock(); - size_t page_count = BAN::Math::div_round_up(inode->size(), PAGE_SIZE); - vaddr_t vaddr = PageTable::current().get_free_contiguous_pages(page_count, (vaddr_t)g_kernel_end); - auto virtual_range = BAN::UniqPtr::adopt( - VirtualRange::create( - PageTable::current(), - vaddr, page_count * PAGE_SIZE, - PageTable::Flags::ReadWrite | PageTable::Flags::Present - ) - ); - PageTable::current().unlock(); + BAN::Vector buffer; + TRY(buffer.resize(inode->size())); - TRY(inode->read(0, (void*)vaddr, inode->size())); + TRY(inode->read(0, buffer.data(), inode->size())); - ELF* elf_ptr = new ELF(BAN::move(virtual_range), inode->size()); + ELF* elf_ptr = new ELF(BAN::move(buffer)); if (elf_ptr == nullptr) return BAN::Error::from_errno(ENOMEM); diff --git a/LibELF/include/LibELF/ELF.h b/LibELF/include/LibELF/ELF.h index 39faec2cd4..eda87e929f 100644 --- a/LibELF/include/LibELF/ELF.h +++ b/LibELF/include/LibELF/ELF.h @@ -57,16 +57,16 @@ namespace LibELF bool is_x86_64() const; private: -#ifdef __is_kernel - ELF(BAN::UniqPtr&& storage, size_t size) - : m_storage(BAN::move(storage)) - , m_data((const uint8_t*)m_storage->vaddr(), size) - {} -#else +//#ifdef __is_kernel +// ELF(BAN::UniqPtr&& storage, size_t size) +// : m_storage(BAN::move(storage)) +// , m_data((const uint8_t*)m_storage->vaddr(), size) +// {} +//#else ELF(BAN::Vector&& data) : m_data(BAN::move(data)) {} -#endif +//#endif BAN::ErrorOr load(); bool parse_elf64_file_header(const Elf64FileHeader&); @@ -78,12 +78,12 @@ namespace LibELF bool parse_elf32_section_header(const Elf32SectionHeader&); private: -#ifdef __is_kernel - BAN::UniqPtr m_storage; - BAN::Span m_data; -#else +//#ifdef __is_kernel +// BAN::UniqPtr m_storage; +// BAN::Span m_data; +//#else const BAN::Vector m_data; -#endif +//#endif }; } \ No newline at end of file