Esempio n. 1
0
 def parse(self, blocks):
     hd = HunkDebug()
     self.blocks = blocks
     for blk in blocks:
         blk_id = blk.blk_id
         if blk_id in loadseg_valid_begin_hunks:
             self.seg_blk = blk
         elif blk_id == HUNK_SYMBOL:
             if self.symbol_blk is None:
                 self.symbol_blk = blk
             else:
                 raise HunkParserError("duplicate symbols in hunk")
         elif blk_id == HUNK_DEBUG:
             if self.debug_blks is None:
                 self.debug_blks = []
             self.debug_blks.append(blk)
             # decode hunk debug info
             debug_info = hd.decode(blk.debug_data)
             if debug_info is not None:
                 if self.debug_infos is None:
                     self.debug_infos = []
                 self.debug_infos.append(debug_info)
         elif blk_id in (HUNK_ABSRELOC32, HUNK_RELOC32SHORT):
             if self.reloc_blk is None:
                 self.reloc_blk = blk
             else:
                 raise HunkParseError("duplicate relocs in hunk")
         else:
             raise HunkParseError("invalid hunk block")
Esempio n. 2
0
 def setup_debug(self, debug_info):
     if self.debug_infos is None:
         self.debug_infos = []
     self.debug_infos.append(debug_info)
     hd = HunkDebug()
     debug_data = hd.encode(debug_info)
     blk = HunkDebugBlock(debug_data)
     if self.debug_blks is None:
         self.debug_blks = []
     self.debug_blks.append(blk)