* elf.c (elfcore_grok_win32pstatus): Remove HAVE_WIN32_PSTATUS_T
guard. Make it host independent. (elfcore_grok_note): Remove HAVE_WIN32_PSTATUS_T guard around NT_WIN32PSTATUS.
This commit is contained in:
parent
dd1093aa2c
commit
4a6636fbb5
2 changed files with 36 additions and 21 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2007-08-24 Pedro Alves <pedro_alves@portugalmail.pt>
|
||||||
|
|
||||||
|
* elf.c (elfcore_grok_win32pstatus): Remove HAVE_WIN32_PSTATUS_T
|
||||||
|
guard. Make it host independent.
|
||||||
|
(elfcore_grok_note): Remove HAVE_WIN32_PSTATUS_T guard around
|
||||||
|
NT_WIN32PSTATUS.
|
||||||
|
|
||||||
2007-08-24 Jan Kratochvil <jan.kratochvil@redhat.com>
|
2007-08-24 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
* elf-bfd.h (struct elf_obj_tdata): New BUILD_ID_SIZE, BUILD_ID.
|
* elf-bfd.h (struct elf_obj_tdata): New BUILD_ID_SIZE, BUILD_ID.
|
||||||
|
|
50
bfd/elf.c
50
bfd/elf.c
|
@ -7585,7 +7585,6 @@ elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
|
||||||
}
|
}
|
||||||
#endif /* defined (HAVE_LWPSTATUS_T) */
|
#endif /* defined (HAVE_LWPSTATUS_T) */
|
||||||
|
|
||||||
#if defined (HAVE_WIN32_PSTATUS_T)
|
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
|
elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
|
||||||
{
|
{
|
||||||
|
@ -7593,24 +7592,32 @@ elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
|
||||||
char *name;
|
char *name;
|
||||||
size_t len;
|
size_t len;
|
||||||
asection *sect;
|
asection *sect;
|
||||||
win32_pstatus_t pstatus;
|
int type;
|
||||||
|
int is_active_thread;
|
||||||
|
bfd_vma base_addr;
|
||||||
|
|
||||||
if (note->descsz < sizeof (pstatus))
|
if (note->descsz < 728)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
memcpy (&pstatus, note->descdata, sizeof (pstatus));
|
if (! CONST_STRNEQ (note->namedata, "win32"))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
switch (pstatus.data_type)
|
type = bfd_get_32 (abfd, note->descdata);
|
||||||
|
|
||||||
|
switch (type)
|
||||||
{
|
{
|
||||||
case NOTE_INFO_PROCESS:
|
case 1 /* NOTE_INFO_PROCESS */:
|
||||||
/* FIXME: need to add ->core_command. */
|
/* FIXME: need to add ->core_command. */
|
||||||
elf_tdata (abfd)->core_signal = pstatus.data.process_info.signal;
|
/* process_info.pid */
|
||||||
elf_tdata (abfd)->core_pid = pstatus.data.process_info.pid;
|
elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 8);
|
||||||
|
/* process_info.signal */
|
||||||
|
elf_tdata (abfd)->core_signal = bfd_get_32 (abfd, note->descdata + 12);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NOTE_INFO_THREAD:
|
case 2 /* NOTE_INFO_THREAD */:
|
||||||
/* Make a ".reg/999" section. */
|
/* Make a ".reg/999" section. */
|
||||||
sprintf (buf, ".reg/%ld", (long) pstatus.data.thread_info.tid);
|
/* thread_info.tid */
|
||||||
|
sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 8));
|
||||||
|
|
||||||
len = strlen (buf) + 1;
|
len = strlen (buf) + 1;
|
||||||
name = bfd_alloc (abfd, len);
|
name = bfd_alloc (abfd, len);
|
||||||
|
@ -7623,21 +7630,25 @@ elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
|
||||||
if (sect == NULL)
|
if (sect == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
sect->size = sizeof (pstatus.data.thread_info.thread_context);
|
/* sizeof (thread_info.thread_context) */
|
||||||
sect->filepos = (note->descpos
|
sect->size = 716;
|
||||||
+ offsetof (struct win32_pstatus,
|
/* offsetof (thread_info.thread_context) */
|
||||||
data.thread_info.thread_context));
|
sect->filepos = note->descpos + 12;
|
||||||
sect->alignment_power = 2;
|
sect->alignment_power = 2;
|
||||||
|
|
||||||
if (pstatus.data.thread_info.is_active_thread)
|
/* thread_info.is_active_thread */
|
||||||
|
is_active_thread = bfd_get_32 (abfd, note->descdata + 8);
|
||||||
|
|
||||||
|
if (is_active_thread)
|
||||||
if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
|
if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NOTE_INFO_MODULE:
|
case 3 /* NOTE_INFO_MODULE */:
|
||||||
/* Make a ".module/xxxxxxxx" section. */
|
/* Make a ".module/xxxxxxxx" section. */
|
||||||
sprintf (buf, ".module/%08lx",
|
/* module_info.base_address */
|
||||||
(long) pstatus.data.module_info.base_address);
|
base_addr = bfd_get_32 (abfd, note->descdata + 4);
|
||||||
|
sprintf (buf, ".module/%08lx", (long) base_addr);
|
||||||
|
|
||||||
len = strlen (buf) + 1;
|
len = strlen (buf) + 1;
|
||||||
name = bfd_alloc (abfd, len);
|
name = bfd_alloc (abfd, len);
|
||||||
|
@ -7662,7 +7673,6 @@ elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
#endif /* HAVE_WIN32_PSTATUS_T */
|
|
||||||
|
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
|
elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
|
||||||
|
@ -7697,10 +7707,8 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
|
||||||
case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG */
|
case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG */
|
||||||
return elfcore_grok_prfpreg (abfd, note);
|
return elfcore_grok_prfpreg (abfd, note);
|
||||||
|
|
||||||
#if defined (HAVE_WIN32_PSTATUS_T)
|
|
||||||
case NT_WIN32PSTATUS:
|
case NT_WIN32PSTATUS:
|
||||||
return elfcore_grok_win32pstatus (abfd, note);
|
return elfcore_grok_win32pstatus (abfd, note);
|
||||||
#endif
|
|
||||||
|
|
||||||
case NT_PRXFPREG: /* Linux SSE extension */
|
case NT_PRXFPREG: /* Linux SSE extension */
|
||||||
if (note->namesz == 6
|
if (note->namesz == 6
|
||||||
|
|
Loading…
Reference in a new issue