diff options
author | Jon Turney <jon.turney@dronecode.org.uk> | 2020-06-29 16:45:26 +0100 |
---|---|---|
committer | Jon Turney <jon.turney@dronecode.org.uk> | 2020-07-12 15:09:40 +0100 |
commit | 7dd1b08836e8a7bb37d330995096540afce152a0 (patch) | |
tree | aadefdc799bf9a011105d9c5d9df38164e29752f | |
parent | 38f88601469f4a6ab7cf42e1f076775c99eb17f2 (diff) | |
download | cygnal-7dd1b08836e8a7bb37d330995096540afce152a0.tar.gz cygnal-7dd1b08836e8a7bb37d330995096540afce152a0.tar.bz2 cygnal-7dd1b08836e8a7bb37d330995096540afce152a0.zip |
Cygwin: Add a new win32_pstatus data type for modules on x86_64
Also take a bit more care with sizes in other data types to ensure they
are the same on x86 and x86_64.
Add some explanatory comments.
-rw-r--r-- | winsup/cygwin/include/cygwin/core_dump.h | 16 | ||||
-rw-r--r-- | winsup/utils/dumper.cc | 4 |
2 files changed, 16 insertions, 4 deletions
diff --git a/winsup/cygwin/include/cygwin/core_dump.h b/winsup/cygwin/include/cygwin/core_dump.h index 92ecae7ab..cd218ac45 100644 --- a/winsup/cygwin/include/cygwin/core_dump.h +++ b/winsup/cygwin/include/cygwin/core_dump.h @@ -11,17 +11,23 @@ details. */ #ifndef _CYGWIN_CORE_DUMP_H #define _CYGWIN_CORE_DUMP_H +/* + Note that elfcore_grok_win32pstatus() in libbfd relies on the precise layout + of these structures. +*/ + #include <windows.h> #define NOTE_INFO_PROCESS 1 #define NOTE_INFO_THREAD 2 #define NOTE_INFO_MODULE 3 +#define NOTE_INFO_MODULE64 4 struct win32_core_process_info { DWORD pid; - int signal; - int command_line_size; + DWORD signal; + DWORD command_line_size; char command_line[1]; } #ifdef __GNUC__ @@ -40,10 +46,12 @@ struct win32_core_thread_info #endif ; +/* Used with data_type NOTE_INFO_MODULE or NOTE_INFO_MODULE64, depending on + arch */ struct win32_core_module_info { void* base_address; - int module_name_size; + DWORD module_name_size; char module_name[1]; } #ifdef __GNUC__ @@ -53,7 +61,7 @@ struct win32_core_module_info struct win32_pstatus { - unsigned long data_type; + DWORD data_type; union { struct win32_core_process_info process_info; diff --git a/winsup/utils/dumper.cc b/winsup/utils/dumper.cc index e16d80a36..dcf01e800 100644 --- a/winsup/utils/dumper.cc +++ b/winsup/utils/dumper.cc @@ -502,7 +502,11 @@ dumper::dump_module (asection * to, process_module * module) strncpy (header.elf_note_header.name, "win32module", NOTE_NAME_SIZE); #pragma GCC diagnostic pop +#ifdef __x86_64__ + module_pstatus_ptr->data_type = NOTE_INFO_MODULE64; +#else module_pstatus_ptr->data_type = NOTE_INFO_MODULE; +#endif module_pstatus_ptr->data.module_info.base_address = module->base_address; module_pstatus_ptr->data.module_info.module_name_size = strlen (module->name) + 1; strcpy (module_pstatus_ptr->data.module_info.module_name, module->name); |