aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYufeng Zhang <yufeng.zhang@arm.com>2012-12-06 15:56:38 +0000
committerYufeng Zhang <yufeng.zhang@arm.com>2012-12-06 15:56:38 +0000
commitcd6fa7fd8801453ab5caef588fc772d14cb1ee9a (patch)
tree57f7c25d7a5dc99c261af63ab0d1ccefd9cd0e7e
parent67a324470a3774540b7fef7e02bdebf160e7a913 (diff)
downloadgdb-cd6fa7fd8801453ab5caef588fc772d14cb1ee9a.zip
gdb-cd6fa7fd8801453ab5caef588fc772d14cb1ee9a.tar.gz
gdb-cd6fa7fd8801453ab5caef588fc772d14cb1ee9a.tar.bz2
bfd/
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.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf64-aarch64.c36
2 files changed, 41 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 3b91a85..1b6e965 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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
diff --git a/bfd/elf64-aarch64.c b/bfd/elf64-aarch64.c
index 423fb9b..708b362 100644
--- a/bfd/elf64-aarch64.c
+++ b/bfd/elf64-aarch64.c
@@ -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.