2007-08-19 Pedro Alves * 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. --- bfd/elf.c | 50 +++++++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 21 deletions(-) Index: src/bfd/elf.c =================================================================== --- src.orig/bfd/elf.c 2007-08-19 15:25:42.000000000 +0100 +++ src/bfd/elf.c 2007-08-19 16:55:12.000000000 +0100 @@ -7561,7 +7561,6 @@ elfcore_grok_lwpstatus (bfd *abfd, Elf_I } #endif /* defined (HAVE_LWPSTATUS_T) */ -#if defined (HAVE_WIN32_PSTATUS_T) static bfd_boolean elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note) { @@ -7569,24 +7568,32 @@ elfcore_grok_win32pstatus (bfd *abfd, El char *name; size_t len; 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; - memcpy (&pstatus, note->descdata, sizeof (pstatus)); + if (! CONST_STRNEQ (note->namedata, "win32")) + return TRUE; + + type = bfd_get_32 (abfd, note->descdata); - switch (pstatus.data_type) + switch (type) { - case NOTE_INFO_PROCESS: + case 1 /* NOTE_INFO_PROCESS */: /* FIXME: need to add ->core_command. */ - elf_tdata (abfd)->core_signal = pstatus.data.process_info.signal; - elf_tdata (abfd)->core_pid = pstatus.data.process_info.pid; + /* 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; - case NOTE_INFO_THREAD: + case 2 /* NOTE_INFO_THREAD */: /* 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; name = bfd_alloc (abfd, len); @@ -7599,21 +7606,25 @@ elfcore_grok_win32pstatus (bfd *abfd, El if (sect == NULL) return FALSE; - sect->size = sizeof (pstatus.data.thread_info.thread_context); - sect->filepos = (note->descpos - + offsetof (struct win32_pstatus, - data.thread_info.thread_context)); + /* sizeof (thread_info.thread_context) */ + sect->size = 716; + /* offsetof (thread_info.thread_context) */ + sect->filepos = note->descpos + 12; 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)) return FALSE; break; - case NOTE_INFO_MODULE: + case 3 /* NOTE_INFO_MODULE */: /* Make a ".module/xxxxxxxx" section. */ - sprintf (buf, ".module/%08lx", - (long) pstatus.data.module_info.base_address); + /* module_info.base_address */ + base_addr = bfd_get_32 (abfd, note->descdata + 4); + sprintf (buf, ".module/%08lx", (long) base_addr); len = strlen (buf) + 1; name = bfd_alloc (abfd, len); @@ -7638,7 +7649,6 @@ elfcore_grok_win32pstatus (bfd *abfd, El return TRUE; } -#endif /* HAVE_WIN32_PSTATUS_T */ static bfd_boolean elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note) @@ -7673,10 +7683,8 @@ elfcore_grok_note (bfd *abfd, Elf_Intern case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG */ return elfcore_grok_prfpreg (abfd, note); -#if defined (HAVE_WIN32_PSTATUS_T) case NT_WIN32PSTATUS: return elfcore_grok_win32pstatus (abfd, note); -#endif case NT_PRXFPREG: /* Linux SSE extension */ if (note->namesz == 6