def decode(elf, info, abbrev, str, idx_abbroff)
super(elf, abbrev)
return if @index == 0
@attributes = []
loop {
a = Attribute.decode(elf, abbrev)
break if a.attr == 0 and a.form == 0
if a.form == 'INDIRECT'
a.form = elf.decode_leb(info)
a.form = DWARF_FORM[a.form] || a.form
end
a.data = case a.form
when 'ADDR'; elf.decode_xword(info)
when 'DATA1', 'REF1', 'BLOCK1', 'FLAG'; elf.decode_byte(info)
when 'DATA2', 'REF2', 'BLOCK2'; elf.decode_half(info)
when 'DATA4', 'REF4', 'BLOCK4'; elf.decode_word(info)
when 'DATA8', 'REF8', 'BLOCK8'; elf.decode_word(info) | (elf.decode_word(info) << 32)
when 'SDATA', 'UDATA', 'REF_UDATA', 'BLOCK'; elf.decode_leb(info)
when 'STRING'; elf.decode_strz(info)
when 'STRP'; str.ptr = elf.decode_word(info) ; elf.decode_strz(str)
end
case a.form
when /^REF/
when /^BLOCK/; a.data = info.read(a.data)
end
@attributes << a
}
end