[newlib-cygwin] Cygwin: Add a new win32_pstatus data type for modules on x86_64
Jon TURNEY
jturney@sourceware.org
Sun Jul 12 14:10:39 GMT 2020
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=7dd1b08836e8a7bb37d330995096540afce152a0
commit 7dd1b08836e8a7bb37d330995096540afce152a0
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date: Mon Jun 29 16:45:26 2020 +0100
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.
Diff:
---
winsup/cygwin/include/cygwin/core_dump.h | 16 ++++++++++++----
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);
More information about the Cygwin-cvs
mailing list