diff options
| author | Sunil Nimmagadda <sunil@nimmagadda.net> | 2026-10-18 17:50:18 +0530 |
|---|---|---|
| committer | Sunil Nimmagadda <sunil@nimmagadda.net> | 2026-10-18 17:50:18 +0530 |
| commit | 3c73df3f35e6efb9cdc26eb30c56d05c3a57b1e5 (patch) | |
| tree | 748edc962c61b520f9e0c913bcc8cfcd614b250c | |
| parent | 13b1a45effa20ed51db56128ecd7ebefcbf593dd (diff) | |
Refactor for ease of test cases later.
| -rw-r--r-- | mkelf.lua | 59 |
1 files changed, 37 insertions, 22 deletions
@@ -169,35 +169,50 @@ local SegmentFlags <const> = { r = 0x4, } +---@param phdr ProgramHeader +---@param endian Endian +---@return string +---@nodiscard +local function ElfPHeader_pack32(phdr, endian) + return string.pack(efmt(endian) .. string.rep(szfmt(Class.bit32), 8), + phdr.type, + phdr.offset, + phdr.vaddr, + phdr.paddr, + phdr.filesz, + phdr.memsz, + phdr.flags, + phdr.align) +end + +---@param phdr ProgramHeader +---@param endian Endian +---@return string +---@nodiscard +local function ElfPHeader_pack64(phdr, endian) + return string.pack( + efmt(endian) .. "I4I4" .. string.rep(szfmt(Class.bit64), 6), + phdr.type, + phdr.flags, + phdr.offset, + phdr.vaddr, + phdr.paddr, + phdr.filesz, + phdr.memsz, + phdr.align) +end + ---@param phdrs ProgramHeader[] ---@param endian Endian ---@param class Class +---@return string ---@nodiscard local function ElfPHeader_pack(phdrs, endian, class) local p = {} for i, phdr in ipairs(phdrs) do - if class == Class.bit32 then - p[i] = string.pack(efmt(endian) .. string.rep(szfmt(class), 8), - phdr.type, - phdr.offset, - phdr.vaddr, - phdr.paddr, - phdr.filesz, - phdr.memsz, - phdr.flags, - phdr.align) - elseif class == Class.bit64 then - p[i] = string.pack( - efmt(endian) .. "I4I4" .. string.rep(szfmt(class), 6), - phdr.type, - phdr.flags, - phdr.offset, - phdr.vaddr, - phdr.paddr, - phdr.filesz, - phdr.memsz, - phdr.align) - end + p[i] = (class == Class.bit32) and + ElfPHeader_pack32(phdr, endian) or + ElfPHeader_pack64(phdr, endian) end return table.concat(p) end |
