protected CoreFile(ThreadManager manager, ProcessStart start)
: base(manager, start)
{
info = Inferior.GetTargetMemoryInfo (manager.AddressDomain);
bfd = (Bfd) NativeLanguage.OperatingSystem.LoadExecutable (
info, start.TargetApplication, true);
core_file = start.CoreFile;
core_bfd = bfd.OpenCoreFile (core_file);
#if FIXME
string crash_program = core_bfd.CrashProgram;
string[] crash_program_args = crash_program.Split (' ');
if (crash_program_args [0] != application)
throw new TargetException (
TargetError.CannotStartTarget,
"Core file (generated from {0}) doesn't match executable {1}.",
crash_program, application);
bool ok;
try {
DateTime core_date = Directory.GetLastWriteTime (core_file);
DateTime app_date = Directory.GetLastWriteTime (application);
ok = app_date < core_date;
} catch {
ok = false;
}
if (!ok)
throw new TargetException (
TargetError.CannotStartTarget,
"Executable {0} is more recent than core file {1}.",
application, core_file);
#endif
read_note_section ();
main_thread = (CoreFileThread) threads [0];
TargetMemoryAccess target_access = ((CoreFileThread) threads [0]).TargetAccess;
// bfd.UpdateSharedLibraryInfo (null, target_access);
TargetAddress mdb_debug_info = bfd.GetSectionAddress (".mdb_debug_info");
if (!mdb_debug_info.IsNull) {
mdb_debug_info = main_thread.ReadAddress (mdb_debug_info);
debugger_info = MonoDebuggerInfo.Create (target_access, mdb_debug_info);
read_thread_table ();
CreateMonoLanguage (debugger_info);
mono_language.InitializeCoreFile (target_access);
mono_language.Update (target_access);
}
}