elf 0.25 → 0.26
raw patch · 2 files changed
+29/−14 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- elf.cabal +2/−2
- src/Data/Elf.hs +27/−12
elf.cabal view
@@ -1,5 +1,5 @@ Name: elf -Version: 0.25 +Version: 0.26 License: BSD3 License-file: LICENSE Category: Data @@ -8,7 +8,7 @@ Maintainer: Erik Charlebois <erikcharlebois@gmail.com> Stability: unstable Cabal-Version: >= 1.6 -Homepage: http://code.fac9.com/elf/ +Homepage: http://github.com/erikcharlebois/elf Build-Depends: base Build-Type: Custom Synopsis: Parser for ELF object format.
src/Data/Elf.hs view
@@ -576,15 +576,16 @@ parseElfSegmentEntry :: ElfClass -> ElfReader -> B.ByteString -> Get ElfSegment-parseElfSegmentEntry elf_class er elf_file =- do p_type <- parseElfSegmentType `fmap` getWord32 er+parseElfSegmentEntry elf_class er elf_file = case elf_class of+ ELFCLASS64 -> do+ p_type <- parseElfSegmentType `fmap` getWord32 er p_flags <- parseElfSegmentFlags `fmap` getWord32 er- p_offset <- getWord- p_vaddr <- getWord- p_paddr <- getWord- p_filesz <- getWord- p_memsz <- getWord- p_align <- getWord+ p_offset <- getWord64 er+ p_vaddr <- getWord64 er+ p_paddr <- getWord64 er+ p_filesz <- getWord64 er+ p_memsz <- getWord64 er+ p_align <- getWord64 er return ElfSegment { elfSegmentType = p_type , elfSegmentFlags = p_flags@@ -595,10 +596,24 @@ , elfSegmentMemSize = p_memsz } - where getWord = case elf_class of- ELFCLASS64 -> getWord64 er- ELFCLASS32 -> fromIntegral `fmap` getWord32 er-+ ELFCLASS32 -> do+ p_type <- parseElfSegmentType `fmap` getWord32 er+ p_offset <- fromIntegral `fmap` getWord32 er+ p_vaddr <- fromIntegral `fmap` getWord32 er+ p_paddr <- fromIntegral `fmap` getWord32 er+ p_filesz <- fromIntegral `fmap` getWord32 er+ p_memsz <- fromIntegral `fmap` getWord32 er+ p_flags <- parseElfSegmentFlags `fmap` getWord32 er+ p_align <- fromIntegral `fmap` getWord32 er+ return ElfSegment+ { elfSegmentType = p_type+ , elfSegmentFlags = p_flags+ , elfSegmentVirtAddr = p_vaddr+ , elfSegmentPhysAddr = p_paddr+ , elfSegmentAlign = p_align+ , elfSegmentData = B.take (fromIntegral p_filesz) $ B.drop (fromIntegral p_offset) elf_file+ , elfSegmentMemSize = p_memsz+ } data ElfSegmentFlag = PF_X -- ^ Execute permission