MCPcopy Create free account
hub / github.com/Bananymous/banan-os / read_program_headers

Function read_program_headers

kernel/kernel/ELF.cpp:82–104  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

80
81 return file_header;
82 }
83
84 static BAN::ErrorOr<BAN::Vector<ElfW(Phdr)>> read_program_headers(BAN::RefPtr<Inode> inode, const ElfW(Ehdr)& file_header)
85 {
86 BAN::Vector<uint8_t> program_header_buffer;
87 TRY(program_header_buffer.resize(file_header.e_phnum * file_header.e_phentsize));
88 TRY(inode->read(file_header.e_phoff, BAN::ByteSpan(program_header_buffer.span())));
89
90 BAN::Vector<ElfW(Phdr)> program_headers;
91 TRY(program_headers.reserve(file_header.e_phnum));
92
93 for (size_t i = 0; i < file_header.e_phnum; i++)
94 {
95 const auto& pheader = *reinterpret_cast<ElfW(Phdr)*>(program_header_buffer.data() + i * file_header.e_phentsize);
96 if (pheader.p_memsz < pheader.p_filesz)
97 {
98 dprintln("Invalid program header, memsz less than filesz");
99 return BAN::Error::from_errno(EINVAL);
100 }
101
102 MUST(program_headers.emplace_back(pheader));
103 }
104
105 return BAN::move(program_headers);
106 }
107

Callers 1

load_from_inodeFunction · 0.85

Calls 6

resizeMethod · 0.45
readMethod · 0.45
spanMethod · 0.45
reserveMethod · 0.45
dataMethod · 0.45
emplace_backMethod · 0.45

Tested by

no test coverage detected