* dumper.h: Update copyright notice.
* dumper.cc: Ditto. * dumper.cc: (dumper::print_core_section_list): New function. * dumper.h: (dumper::print_core_section_list): Declare it. * dumper.cc (print_section_name): New function. (dumper::collect_process_information): Augment debugging output. Stop debugee processing if it posts double exception. (usage): Fix typo in option name.
This commit is contained in:
parent
4208d592f3
commit
33bc82476e
|
@ -1,3 +1,14 @@
|
||||||
|
2001-08-30 Egor Duda <deo@logos-m.ru>
|
||||||
|
|
||||||
|
* dumper.h: Update copyright notice.
|
||||||
|
* dumper.cc: Ditto.
|
||||||
|
* dumper.cc: (dumper::print_core_section_list): New function.
|
||||||
|
* dumper.h: (dumper::print_core_section_list): Declare it.
|
||||||
|
* dumper.cc (print_section_name): New function.
|
||||||
|
(dumper::collect_process_information): Augment debugging output.
|
||||||
|
Stop debugee processing if it posts double exception.
|
||||||
|
(usage): Fix typo in option name.
|
||||||
|
|
||||||
Tue Aug 28 14:45:02 2001 Christopher Faylor <cgf@cygnus.com>
|
Tue Aug 28 14:45:02 2001 Christopher Faylor <cgf@cygnus.com>
|
||||||
|
|
||||||
* mount.cc (main): Issue correct warning for 'not enough arguments'.
|
* mount.cc (main): Issue correct warning for 'not enough arguments'.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* dumper.cc
|
/* dumper.cc
|
||||||
|
|
||||||
Copyright 1999 Cygnus Solutions.
|
Copyright 1999,2001 Red Hat Inc.
|
||||||
|
|
||||||
Written by Egor Duda <deo@logos-m.ru>
|
Written by Egor Duda <deo@logos-m.ru>
|
||||||
|
|
||||||
|
@ -114,6 +114,20 @@ dumper::sane ()
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
print_section_name (bfd* abfd, asection* sect, PTR obj)
|
||||||
|
{
|
||||||
|
deb_printf ( " %s", bfd_get_section_name (abfd, sect));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
dumper::print_core_section_list ()
|
||||||
|
{
|
||||||
|
deb_printf ("current sections:");
|
||||||
|
bfd_map_over_sections (core_bfd, &print_section_name, NULL);
|
||||||
|
deb_printf ("\n");
|
||||||
|
}
|
||||||
|
|
||||||
process_entity *
|
process_entity *
|
||||||
dumper::add_process_entity_to_list (process_entity_type type)
|
dumper::add_process_entity_to_list (process_entity_type type)
|
||||||
{
|
{
|
||||||
|
@ -476,6 +490,8 @@ out:
|
||||||
int
|
int
|
||||||
dumper::collect_process_information ()
|
dumper::collect_process_information ()
|
||||||
{
|
{
|
||||||
|
int exception_level = 0;
|
||||||
|
|
||||||
if (!sane ())
|
if (!sane ())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -496,6 +512,8 @@ dumper::collect_process_information ()
|
||||||
if (!WaitForDebugEvent (¤t_event, 20000))
|
if (!WaitForDebugEvent (¤t_event, 20000))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
deb_printf ("got debug event %d\n", current_event.dwDebugEventCode);
|
||||||
|
|
||||||
switch (current_event.dwDebugEventCode)
|
switch (current_event.dwDebugEventCode)
|
||||||
{
|
{
|
||||||
case CREATE_THREAD_DEBUG_EVENT:
|
case CREATE_THREAD_DEBUG_EVENT:
|
||||||
|
@ -535,6 +553,12 @@ dumper::collect_process_information ()
|
||||||
|
|
||||||
case EXCEPTION_DEBUG_EVENT:
|
case EXCEPTION_DEBUG_EVENT:
|
||||||
|
|
||||||
|
exception_level++;
|
||||||
|
if (exception_level == 2)
|
||||||
|
break;
|
||||||
|
else if (exception_level > 2)
|
||||||
|
return 0;
|
||||||
|
|
||||||
collect_memory_sections ();
|
collect_memory_sections ();
|
||||||
|
|
||||||
/* got all info. time to dump */
|
/* got all info. time to dump */
|
||||||
|
@ -670,14 +694,22 @@ dumper::prepare_core_dump ()
|
||||||
deb_printf ("creating section (type%u) %s(%u), flags=%08x\n",
|
deb_printf ("creating section (type%u) %s(%u), flags=%08x\n",
|
||||||
p->type, sect_name, sect_size, sect_flags);
|
p->type, sect_name, sect_size, sect_flags);
|
||||||
|
|
||||||
|
bfd_set_error (bfd_error_no_error);
|
||||||
char *buf = strdup (sect_name);
|
char *buf = strdup (sect_name);
|
||||||
new_section = bfd_make_section (core_bfd, buf);
|
new_section = bfd_make_section (core_bfd, buf);
|
||||||
|
if (new_section == NULL)
|
||||||
|
{
|
||||||
|
if (bfd_get_error () == bfd_error_no_error)
|
||||||
|
fprintf (stderr, "error creating new section (%s), section already exists.\n", buf);
|
||||||
|
else
|
||||||
|
bfd_perror ("creating section");
|
||||||
|
goto failed;
|
||||||
|
}
|
||||||
|
|
||||||
if (new_section == NULL ||
|
if (!bfd_set_section_flags (core_bfd, new_section, sect_flags) ||
|
||||||
!bfd_set_section_flags (core_bfd, new_section, sect_flags) ||
|
|
||||||
!bfd_set_section_size (core_bfd, new_section, sect_size))
|
!bfd_set_section_size (core_bfd, new_section, sect_size))
|
||||||
{
|
{
|
||||||
bfd_perror ("creating section");
|
bfd_perror ("setting section attributes");
|
||||||
goto failed;
|
goto failed;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -736,7 +768,7 @@ dumper::write_core_dump ()
|
||||||
static void
|
static void
|
||||||
usage ()
|
usage ()
|
||||||
{
|
{
|
||||||
fprintf (stderr, "Usage: dumper [-v] [-c filename] pid\n");
|
fprintf (stderr, "Usage: dumper [-d] [-c filename] pid\n");
|
||||||
fprintf (stderr, "-c filename -- dump core to filename.core\n");
|
fprintf (stderr, "-c filename -- dump core to filename.core\n");
|
||||||
fprintf (stderr, "-d -- print some debugging info while dumping\n");
|
fprintf (stderr, "-d -- print some debugging info while dumping\n");
|
||||||
fprintf (stderr, "pid -- win32-pid of process to dump\n");
|
fprintf (stderr, "pid -- win32-pid of process to dump\n");
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* dumper.h
|
/* dumper.h
|
||||||
|
|
||||||
Copyright 1999 Cygnus Solutions.
|
Copyright 1999,2001 Red Hat Inc.
|
||||||
|
|
||||||
Written by Egor Duda <deo@logos-m.ru>
|
Written by Egor Duda <deo@logos-m.ru>
|
||||||
|
|
||||||
|
@ -111,6 +111,7 @@ public:
|
||||||
int sane ();
|
int sane ();
|
||||||
|
|
||||||
int collect_process_information ();
|
int collect_process_information ();
|
||||||
|
void print_core_section_list ();
|
||||||
|
|
||||||
dumper ( DWORD pid, DWORD tid, const char* name );
|
dumper ( DWORD pid, DWORD tid, const char* name );
|
||||||
~dumper ();
|
~dumper ();
|
||||||
|
|
Loading…
Reference in New Issue