summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSunil Nimmagadda <sunil@nimmagadda.net>2026-10-18 17:50:18 +0530
committerSunil Nimmagadda <sunil@nimmagadda.net>2026-10-18 17:50:18 +0530
commit3c73df3f35e6efb9cdc26eb30c56d05c3a57b1e5 (patch)
tree748edc962c61b520f9e0c913bcc8cfcd614b250c
parent13b1a45effa20ed51db56128ecd7ebefcbf593dd (diff)
Refactor for ease of test cases later.
-rw-r--r--mkelf.lua59
1 files 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 <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