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;
}