private long ReadEncodedValue(DwarfBinaryReader reader, int encoding) { long base_addr; switch (encoding & 0x70) { case 0: base_addr = 0; break; case (byte) DW_EH_PE.pcrel: base_addr = vma + reader.Position; break; default: throw new DwarfException ( reader.Bfd, "Unknown encoding `{0:x}' in CIE", encoding); } long value; switch (encoding & 0x0f) { case (byte) DW_EH_PE.udata4: value = reader.ReadUInt32 (); break; case (byte) DW_EH_PE.sdata4: value = reader.ReadInt32 (); break; default: throw new DwarfException ( reader.Bfd, "Unknown encoding `{0:x}' in CIE", encoding); } return base_addr + value; }