components/gdb/patches/gdb.bfd.elf32-i386.c.patch
changeset 6522 aa2a5fa92400
parent 6521 7759c923339e
child 6523 c9a4ec7f76d7
--- a/components/gdb/patches/gdb.bfd.elf32-i386.c.patch	Fri Jul 29 10:16:41 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,175 +0,0 @@
-# Solaris-specific ELF information.
-# Will contribute upstream if possible.
-
---- gdb-7.11-orig/bfd/elf32-i386.c	Wed Feb 24 01:55:15 2016
-+++ gdb-7.11/bfd/elf32-i386.c	Thu Mar 10 13:12:46 2016
-@@ -442,6 +442,45 @@
-       offset = 28;
-       size = bfd_get_32 (abfd, note->descdata + 8);
-     }
-+  else if (note->namesz == 5 && strncmp (note->namedata, "CORE", 4) == 0)
-+  {
-+    if (note->descsz == 432) /* sizeof(prstatus_t) Solaris Intel 32 */
-+    {
-+      /* pr_cursig */
-+      elf_tdata (abfd)->core->signal =
-+        bfd_get_16 (abfd, note->descdata + 136);
-+
-+      /* pr_pid */
-+      elf_tdata (abfd)->core->pid =
-+        bfd_get_32 (abfd, note->descdata + 216);
-+
-+      /* pr_lwpid */
-+      elf_tdata (abfd)->core->lwpid =
-+        bfd_get_32 (abfd, note->descdata + 308);
-+
-+      /* pr_reg */
-+      offset = 356;
-+      size = 76;
-+    }
-+    else if (note->descsz == 824) /* sizeof(prstatus_t) Solaris Intel 64 */
-+    {
-+      /* pr_cursig */
-+      elf_tdata (abfd)->core->signal =
-+        bfd_get_16 (abfd, note->descdata + 264);
-+
-+      /* pr_pid */
-+      elf_tdata (abfd)->core->pid =
-+        bfd_get_32 (abfd, note->descdata + 360);
-+
-+      /* pr_lwpid */
-+      elf_tdata (abfd)->core->lwpid =
-+        bfd_get_32 (abfd, note->descdata + 520);
-+
-+      /* pr_reg */
-+      offset = 600;
-+      size = 224;
-+    }
-+  }
-   else
-     {
-       switch (note->descsz)
-@@ -484,6 +523,31 @@
-       elf_tdata (abfd)->core->command
- 	= _bfd_elfcore_strndup (abfd, note->descdata + 25, 81);
-     }
-+  else if (note->namesz == 5 && strncmp (note->namedata, "CORE", 4) == 0)
-+  {
-+    switch (note->descsz)
-+    {
-+      default:
-+        return FALSE;
-+        break;
-+      case 260: /* sizeof(prpsinfo_t) on 32-bit Solaris */
-+        elf_tdata (abfd)->core->pid =
-+          bfd_get_32 (abfd, note->descdata + 16);
-+        elf_tdata (abfd)->core->program =
-+          _bfd_elfcore_strndup (abfd, note->descdata + 84, 16);
-+        elf_tdata (abfd)->core->command =
-+          _bfd_elfcore_strndup (abfd, note->descdata + 100, 80);
-+        break;
-+      case 328: /* sizeof(prpsinfo_t) on 64-bit Solaris */
-+        elf_tdata (abfd)->core->pid =
-+          bfd_get_32 (abfd, note->descdata + 16);
-+        elf_tdata (abfd)->core->program =
-+          _bfd_elfcore_strndup (abfd, note->descdata + 120, 16);
-+        elf_tdata (abfd)->core->command =
-+          _bfd_elfcore_strndup (abfd, note->descdata + 136, 80);
-+        break;
-+    }
-+  }
-   else
-     {
-       switch (note->descsz)
-@@ -515,6 +579,83 @@
-   return TRUE;
- }
- 
-+static bfd_boolean
-+elf_i386_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
-+{
-+  asection *sect;
-+  char reg2_section_name[16];
-+  size_t gregset_size;
-+  size_t fpregset_size;
-+
-+  /* Solaris */
-+  if (note->namesz == 5 && strncmp (note->namedata, "CORE", 4) == 0)
-+  {
-+    switch (note->descsz)
-+    {
-+      default:
-+        return FALSE;
-+        break;
-+      case 800: /* sizeof(lwpstatus_t) on Intel 32-bit */
-+        gregset_size = 76;
-+        fpregset_size = 380;
-+
-+        (void) snprintf (reg2_section_name, 16, "%s/%i", ".reg2", 1);
-+        sect = bfd_get_section_by_name (abfd, reg2_section_name);
-+        if (sect != NULL)
-+        {
-+          sect->size = fpregset_size;
-+          sect->filepos = note->descpos + 420;
-+          sect->alignment_power = 2;
-+        }
-+        else
-+          return _bfd_elfcore_make_pseudosection (abfd, reg2_section_name,
-+              fpregset_size, note->descpos + 420);
-+
-+        sect = bfd_get_section_by_name (abfd, ".reg");
-+        if (sect != NULL)
-+        {
-+          sect->size = gregset_size;
-+          sect->filepos = note->descpos + 344;
-+          sect->alignment_power = 2;
-+        }
-+        else
-+          return _bfd_elfcore_make_pseudosection (abfd, ".reg",
-+              gregset_size, note->descpos + 344);
-+        break;
-+      case 1296: /* sizeof(lwpstatus_t) on Intel 64-bit */
-+        gregset_size = 224;
-+        fpregset_size = 528;
-+
-+        (void) snprintf (reg2_section_name, 16, "%s/%i", ".reg2", 1);
-+        sect = bfd_get_section_by_name (abfd, reg2_section_name);
-+        if (sect != NULL)
-+        {
-+          sect->size = fpregset_size;
-+          sect->filepos = note->descpos + 420;
-+          sect->alignment_power = 2;
-+        }
-+        else
-+          return _bfd_elfcore_make_pseudosection (abfd, reg2_section_name,
-+              fpregset_size, note->descpos + 420);
-+
-+        sect = bfd_get_section_by_name (abfd, ".reg");
-+        if (sect != NULL)
-+        {
-+          sect->size = gregset_size;
-+          sect->filepos = note->descpos + 344;
-+          sect->alignment_power = 2;
-+        }
-+        else
-+          return _bfd_elfcore_make_pseudosection (abfd, ".reg",
-+              gregset_size, note->descpos + 344);
-+        break;
-+    }
-+  }
-+  return TRUE;
-+}
-+
-+
-+
- /* Functions for the i386 ELF linker.
- 
-    In order to gain some understanding of code in this file without
-@@ -5790,6 +5931,7 @@
- #define elf_backend_gc_mark_hook	      elf_i386_gc_mark_hook
- #define elf_backend_gc_sweep_hook	      elf_i386_gc_sweep_hook
- #define elf_backend_grok_prstatus	      elf_i386_grok_prstatus
-+#define elf_backend_grok_lwpstatus	      elf_i386_grok_lwpstatus
- #define elf_backend_grok_psinfo		      elf_i386_grok_psinfo
- #define elf_backend_reloc_type_class	      elf_i386_reloc_type_class
- #define elf_backend_relocate_section	      elf_i386_relocate_section