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
|
#ifndef _CYGWIN_CORE_DUMP_H
|
||||||
#define _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>
|
#include <windows.h>
|
||||||
|
|
||||||
#define NOTE_INFO_PROCESS 1
|
#define NOTE_INFO_PROCESS 1
|
||||||
#define NOTE_INFO_THREAD 2
|
#define NOTE_INFO_THREAD 2
|
||||||
#define NOTE_INFO_MODULE 3
|
#define NOTE_INFO_MODULE 3
|
||||||
|
#define NOTE_INFO_MODULE64 4
|
||||||
|
|
||||||
struct win32_core_process_info
|
struct win32_core_process_info
|
||||||
{
|
{
|
||||||
DWORD pid;
|
DWORD pid;
|
||||||
int signal;
|
DWORD signal;
|
||||||
int command_line_size;
|
DWORD command_line_size;
|
||||||
char command_line[1];
|
char command_line[1];
|
||||||
}
|
}
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
|
@ -40,10 +46,12 @@ struct win32_core_thread_info
|
||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
|
|
||||||
|
/* Used with data_type NOTE_INFO_MODULE or NOTE_INFO_MODULE64, depending on
|
||||||
|
arch */
|
||||||
struct win32_core_module_info
|
struct win32_core_module_info
|
||||||
{
|
{
|
||||||
void* base_address;
|
void* base_address;
|
||||||
int module_name_size;
|
DWORD module_name_size;
|
||||||
char module_name[1];
|
char module_name[1];
|
||||||
}
|
}
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
|
@ -53,7 +61,7 @@ struct win32_core_module_info
|
||||||
|
|
||||||
struct win32_pstatus
|
struct win32_pstatus
|
||||||
{
|
{
|
||||||
unsigned long data_type;
|
DWORD data_type;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
struct win32_core_process_info process_info;
|
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);
|
strncpy (header.elf_note_header.name, "win32module", NOTE_NAME_SIZE);
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
module_pstatus_ptr->data_type = NOTE_INFO_MODULE64;
|
||||||
|
#else
|
||||||
module_pstatus_ptr->data_type = NOTE_INFO_MODULE;
|
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.base_address = module->base_address;
|
||||||
module_pstatus_ptr->data.module_info.module_name_size = strlen (module->name) + 1;
|
module_pstatus_ptr->data.module_info.module_name_size = strlen (module->name) + 1;
|
||||||
strcpy (module_pstatus_ptr->data.module_info.module_name, module->name);
|
strcpy (module_pstatus_ptr->data.module_info.module_name, module->name);
|
||||||
|
|
Loading…
Reference in New Issue