From 3c73df3f35e6efb9cdc26eb30c56d05c3a57b1e5 Mon Sep 17 00:00:00 2001 From: Sunil Nimmagadda Date: Sun, 18 Oct 2026 17:50:18 +0530 Subject: Refactor for ease of test cases later. --- mkelf.lua | 59 +++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/mkelf.lua b/mkelf.lua index 1aea127..a811a57 100644 --- a/mkelf.lua +++ b/mkelf.lua @@ -169,35 +169,50 @@ local SegmentFlags = { 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 -- cgit v1.3