From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2201) id 240CB3858D37; Sun, 12 Jul 2020 14:10:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 240CB3858D37 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Jon TURNEY To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: Add a new win32_pstatus data type for modules on x86_64 X-Act-Checkin: newlib-cygwin X-Git-Author: Jon Turney X-Git-Refname: refs/heads/master X-Git-Oldrev: 38f88601469f4a6ab7cf42e1f076775c99eb17f2 X-Git-Newrev: 7dd1b08836e8a7bb37d330995096540afce152a0 Message-Id: <20200712141039.240CB3858D37@sourceware.org> Date: Sun, 12 Jul 2020 14:10:39 +0000 (GMT) X-BeenThere: cygwin-cvs@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component git logs List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Jul 2020 14:10:39 -0000 https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=7dd1b08836e8a7bb37d330995096540afce152a0 commit 7dd1b08836e8a7bb37d330995096540afce152a0 Author: Jon Turney 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 #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);