bfd/
authorYufeng Zhang <yufeng.zhang@arm.com>
Thu, 6 Dec 2012 15:56:38 +0000 (15:56 +0000)
committerYufeng Zhang <yufeng.zhang@arm.com>
Thu, 6 Dec 2012 15:56:38 +0000 (15:56 +0000)
2012-12-06  Yufeng Zhang  <yufeng.zhang@arm.com>

* elf64-aarch64.c (elf64_aarch64_grok_prstatus): New function.
(elf_backend_grok_prstatus): Define to elf64_aarch64_grok_prstatus.

bfd/ChangeLog
bfd/elf64-aarch64.c

index 3b91a8556cca6a6adfe77349a58789f7197cc7af..1b6e9654cc2da8f3129ffd9a381b4713b185abae 100644 (file)
@@ -1,3 +1,8 @@
+2012-12-06  Yufeng Zhang  <yufeng.zhang@arm.com>
+
+       * elf64-aarch64.c (elf64_aarch64_grok_prstatus): New function.
+       (elf_backend_grok_prstatus): Define to elf64_aarch64_grok_prstatus.
+
 2012-12-06  Alan Modra  <amodra@gmail.com>
 
        * elfxx-mips.c (allocate_dynrelocs): Correct test for symbol
index 423fb9b31e858ead7d0dca79f4dafff52fdbbc40..708b3628a3d70c2c01d1a16820b985313f27a42a 100644 (file)
@@ -1516,11 +1516,47 @@ elf64_aarch64_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
   return NULL;
 }
 
+/* Support for core dump NOTE sections.  */
+
+static bfd_boolean
+elf64_aarch64_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
+{
+  int offset;
+  size_t size;
+
+  switch (note->descsz)
+    {
+      default:
+       return FALSE;
+
+      case 408:                /* sizeof(struct elf_prstatus) on Linux/arm64.  */
+       /* pr_cursig */
+       elf_tdata (abfd)->core_signal
+         = bfd_get_16 (abfd, note->descdata + 12);
+
+       /* pr_pid */
+       elf_tdata (abfd)->core_lwpid
+         = bfd_get_32 (abfd, note->descdata + 32);
+
+       /* pr_reg */
+       offset = 112;
+       size = 288;
+
+       break;
+    }
+
+  /* Make a ".reg/999" section.  */
+  return _bfd_elfcore_make_pseudosection (abfd, ".reg",
+                                         size, note->descpos + offset);
+}
+
 #define TARGET_LITTLE_SYM               bfd_elf64_littleaarch64_vec
 #define TARGET_LITTLE_NAME              "elf64-littleaarch64"
 #define TARGET_BIG_SYM                  bfd_elf64_bigaarch64_vec
 #define TARGET_BIG_NAME                 "elf64-bigaarch64"
 
+#define elf_backend_grok_prstatus      elf64_aarch64_grok_prstatus
+
 typedef unsigned long int insn32;
 
 /* The linker script knows the section names for placement.