|
| 1 | +class Caotral::Linker::ELF::SectionHeader |
| 2 | + include Caotral::Assembler::ELF::Utils |
| 3 | + def initialize |
| 4 | + @name = nil |
| 5 | + @type = nil |
| 6 | + @flags = nil |
| 7 | + @addr = nil |
| 8 | + @offset = nil |
| 9 | + @size = nil |
| 10 | + @link = nil |
| 11 | + @info = nil |
| 12 | + @addralign = nil |
| 13 | + @entsize = nil |
| 14 | + end |
| 15 | + |
| 16 | + def build = bytes.flatten.pack("C*") |
| 17 | + |
| 18 | + def set!(name: nil, type: nil, flags: nil, addr: nil, |
| 19 | + offset: nil, size: nil, link: nil, info: nil, |
| 20 | + addralign: nil, entsize: nil) |
| 21 | + @name = num2bytes(name, 4) if check(name, 4) |
| 22 | + @type = num2bytes(type, 4) if check(type, 4) |
| 23 | + @flags = num2bytes(flags, 8) if check(flags, 8) |
| 24 | + @addr = num2bytes(addr, 8) if check(addr, 8) |
| 25 | + @offset = num2bytes(offset, 8) if check(offset, 8) |
| 26 | + @size = num2bytes(size, 8) if check(size, 8) |
| 27 | + @link = num2bytes(link, 4) if check(link, 4) |
| 28 | + @info = num2bytes(info, 4) if check(info, 4) |
| 29 | + @addralign = num2bytes(addralign, 8) if check(addralign, 8) |
| 30 | + @entsize = num2bytes(entsize, 8) if check(entsize, 8) |
| 31 | + self |
| 32 | + end |
| 33 | + |
| 34 | + def null! = set!(name: 0, type: 0, flags: 0, addr: 0, offset: 0, size: 0, link: 0, info: 0, addralign: 0, entsize: 0) |
| 35 | + |
| 36 | + private def bytes = [@name, @type, @flags, @addr, @offset, @size, @link, @info, @addralign, @entsize] |
| 37 | +end |
0 commit comments