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.
This commit is contained in:
parent
38f8860146
commit
7dd1b08836
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue