Add symbol entry header structure

This commit is contained in:
2024-09-01 21:40:08 +02:00
parent 7979c0cd23
commit a66365eef4
3 changed files with 44 additions and 4 deletions

View File

@ -6,6 +6,7 @@ module Language.Elna.Object.Elf
, Elf32_Sword
, Elf32_Ehdr(..)
, Elf32_Shdr(..)
, Elf32_Sym(..)
, ElfIdentification(..)
, ElfMachine(..)
, ElfVersion(..)
@ -19,12 +20,13 @@ module Language.Elna.Object.Elf
, elf32Sword
, elf32Word
, elf32Ehdr
, elf32Sym
, elfIdentification
) where
import qualified Data.ByteString.Builder as ByteString.Builder
import Data.Int (Int32)
import Data.Word (Word16, Word32)
import Data.Word (Word8, Word16, Word32)
import qualified Data.ByteString as ByteString
-- * Data types.
@ -190,6 +192,17 @@ instance Enum ElfType
fromEnum ET_LOPROC = 0xff00
fromEnum ET_HIPROC = 0xffff
data Elf32_Sym = Elf32_Sym
{ st_name :: Elf32_Word
, st_value :: Elf32_Addr
, st_size :: Elf32_Word
, st_info :: Word8
, st_other :: Word8
, st_shndx :: Elf32_Half
} deriving Eq
-- * Help types.
data ByteOrder = LSB | MSB
deriving Eq
@ -272,3 +285,12 @@ elf32Shdr byteOrder Elf32_Shdr{..}
<> elf32Word byteOrder sh_info
<> elf32Word byteOrder sh_addralign
<> elf32Word byteOrder sh_entsize
elf32Sym :: ByteOrder -> Elf32_Sym -> ByteString.Builder.Builder
elf32Sym byteOrder Elf32_Sym{..}
= elf32Word byteOrder st_name
<> elf32Addr byteOrder st_value
<> elf32Word byteOrder st_size
<> ByteString.Builder.word8 st_info
<> ByteString.Builder.word8 st_other
<> elf32Half byteOrder st_shndx