internal TargetAddress ReadDynamicInfo(Inferior inferior)
{
Section section = GetSectionByName (".dynamic", false);
if (section == null)
return TargetAddress.Null;
TargetAddress vma = new TargetAddress (info.AddressDomain, section.vma);
int size = (int) section.size;
byte[] dynamic = inferior.ReadBuffer (vma, size);
IntPtr data = IntPtr.Zero;
try {
data = Marshal.AllocHGlobal (size);
Marshal.Copy (dynamic, 0, data, size);
long base_ptr = bfd_glue_elfi386_locate_base (bfd, data, size);
if (base_ptr == 0)
return TargetAddress.Null;
else
return new TargetAddress (info.AddressDomain, base_ptr);
} finally {
if (data != IntPtr.Zero)
Marshal.FreeHGlobal (data);
}
}