Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2000-08-24 23:03:12 +0400
committerChristopher Faylor <me@cgf.cx>2000-08-24 23:03:12 +0400
commit0ad10c0f96c86c1727559b91efe347484c3c1fa1 (patch)
tree4a1f932fa596fbb8571bb1d4a524a5438f4cf0e6 /winsup/utils/dumper.h
parent199359f062fbe9028de9de4741d365f932672241 (diff)
* Makefile.in: Add dumper.exe target and associated mechanisms for building it.
* dumper.cc: New file. * dumper.h: New file. * module_info.cc: New file. * parse_pe.cc: New file.
Diffstat (limited to 'winsup/utils/dumper.h')
-rw-r--r--winsup/utils/dumper.h131
1 files changed, 131 insertions, 0 deletions
diff --git a/winsup/utils/dumper.h b/winsup/utils/dumper.h
new file mode 100644
index 000000000..673a0037e
--- /dev/null
+++ b/winsup/utils/dumper.h
@@ -0,0 +1,131 @@
+/* dumper.h
+
+ Copyright 1999 Cygnus Solutions.
+
+ Written by Egor Duda <deo@logos-m.ru>
+
+This file is part of Cygwin.
+
+This software is a copyrighted work licensed under the terms of the
+Cygwin license. Please consult the file "CYGWIN_LICENSE" for
+details. */
+
+#ifndef _DUMPER_H_
+#define _DUMPER_H_
+
+#include <windows.h>
+
+typedef struct
+{
+ LPBYTE base;
+ DWORD size;
+} process_mem_region;
+
+typedef struct
+{
+ DWORD tid;
+ HANDLE hThread;
+ CONTEXT context;
+} process_thread;
+
+typedef struct
+{
+ LPVOID base_address;
+ char* name;
+} process_module;
+
+enum process_entity_type
+{
+ pr_ent_memory,
+ pr_ent_thread,
+ pr_ent_module
+};
+
+typedef struct _process_entity
+{
+ process_entity_type type;
+ union
+ {
+ process_thread thread;
+ process_mem_region memory;
+ process_module module;
+ } u;
+ asection* section;
+ struct _process_entity* next;
+} process_entity;
+
+class exclusion
+{
+public:
+ int last;
+ int size;
+ int step;
+ process_mem_region* region;
+
+ exclusion ( int step ) { last = size = 0;
+ this->step = step;
+ region = NULL; }
+ ~exclusion () { free ( region ); }
+ int add ( LPBYTE mem_base, DWORD mem_size );
+ int sort_and_check ();
+};
+
+#define PAGE_BUFFER_SIZE 4096
+
+class dumper
+{
+ DWORD pid;
+ DWORD tid; /* thread id of active thread */
+ HANDLE hProcess;
+ process_entity* list;
+ process_entity* last;
+ exclusion* excl_list;
+
+ char* file_name;
+ bfd* core_bfd;
+
+ asection* status_section;
+
+ int memory_num;
+ int module_num;
+ int thread_num;
+
+ void close ();
+ void dumper_abort ();
+
+ process_entity* add_process_entity_to_list ( process_entity_type type );
+ int add_thread ( DWORD tid, HANDLE hThread );
+ int add_mem_region ( LPBYTE base, DWORD size );
+
+ /* break mem_region by excl_list and add add all subregions */
+ int split_add_mem_region ( LPBYTE base, DWORD size );
+
+ int add_module ( LPVOID base_address );
+
+ int collect_memory_sections ();
+ int dump_memory_region ( asection* to, process_mem_region* memory );
+ int dump_thread ( asection* to, process_thread* thread );
+ int dump_module ( asection* to, process_module* module );
+
+public:
+ int sane ();
+
+ int collect_process_information ();
+
+ dumper ( DWORD pid, DWORD tid, const char* name );
+ ~dumper ();
+
+ int init_core_dump ();
+ int prepare_core_dump ();
+ int write_core_dump ();
+};
+
+extern int deb_printf ( const char* format, ... );
+
+extern char* psapi_get_module_name ( HANDLE hProcess, DWORD BaseAddress );
+
+extern int parse_pe ( const char* file_name, exclusion* excl_list );
+
+extern BOOL verbose;
+
+#endif