diff --git a/dwarf.cabal b/dwarf.cabal
--- a/dwarf.cabal
+++ b/dwarf.cabal
@@ -1,5 +1,5 @@
 Name:          dwarf
-Version:       0.1
+Version:       0.2
 License:       BSD3
 License-file:  LICENSE
 Category:      Data
@@ -15,6 +15,6 @@
 Data-Files:    tests/Test.hs
 
 library
-    build-depends:   base, bytestring, containers, binary
+    build-depends:   base >= 2 && < 5, bytestring, containers, binary
     hs-source-dirs:  src
     exposed-modules: Data.Dwarf
diff --git a/src/Data/Dwarf.hs b/src/Data/Dwarf.hs
--- a/src/Data/Dwarf.hs
+++ b/src/Data/Dwarf.hs
@@ -216,14 +216,19 @@
     }
 
 getAbbrevList :: Get [(Word64, DW_ABBREV)]
-getAbbrevList = getWhile ((/=) 0 . fst) getAbbrev
-    where getAbbrev = do
-            abbrev    <- getULEB128
-            tag       <- getDW_TAG
-            children  <- liftM (== 1) getWord8
-            attrForms <- getAttrFormList
-            return (abbrev, DW_ABBREV abbrev tag children attrForms)
-          getAttrFormList = liftM (map (\(x,y) -> (dw_at x, dw_form y))) $ getWhile (/= (0,0)) (liftM2 (,) getULEB128 getULEB128)
+getAbbrevList =
+  do abbrev <- getULEB128
+     if abbrev == 0
+       then return []
+       else do tag       <- getDW_TAG
+               children  <- liftM (== 1) getWord8
+               attrForms <- getAttrFormList
+               xs <- getAbbrevList
+               return  ((abbrev, DW_ABBREV abbrev tag children attrForms) : xs)
+  where
+  getAttrFormList = liftM (map (\(x,y) -> (dw_at x, dw_form y)))
+                  $ getWhile (/= (0,0)) (liftM2 (,) getULEB128 getULEB128)
+
 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------
 -- DWARF information entry and .debug_info section parsing.
