diff options
| -rw-r--r-- | mkelf.lua | 34 |
1 files changed, 20 insertions, 14 deletions
@@ -17,21 +17,27 @@ local function loadconfig(fn) local header_mt = { __index = elf.header } local segments_mt = { __index = elf.segment } local sections_mt = { __index = elf.section } - local env = { - -- Keep in sync with types/elf.d.lua - Class = elf.Class, - Endian = elf.Endian, - Osabi = elf.Osabi, - Type = elf.Type, - Machine = elf.Machine, - SegmentType = elf.SegmentType, - SegmentFlags = elf.SegmentFlags, - ELFVERSION = elf.VERSION, + local env = setmetatable({}, { + __index = { + -- Keep in sync with types/elf.d.lua + Class = elf.Class, + Endian = elf.Endian, + Osabi = elf.Osabi, + Type = elf.Type, + Machine = elf.Machine, + SegmentType = elf.SegmentType, + SegmentFlags = elf.SegmentFlags, + ELFVERSION = elf.VERSION, - header = function(t) header = setmetatable(t, header_mt) end, - segments = function(t) segments = setmetatable(t, segments_mt) end, - sections = function(t) sections = setmetatable(t, sections_mt) end, - } + header = function(t) header = setmetatable(t, header_mt) end, + segments = function(t) segments = setmetatable(t, segments_mt) end, + sections = function(t) sections = setmetatable(t, sections_mt) end, + }, + __newindex = function(_, name) + error(("may not define global %q"):format(name), 2) + end, + __metatable = false, + }) -- TODO error check for multiple headers local chunk, err = loadfile(fn, "t", env) if not chunk then die("%s", err) end |
