From: Yufeng Zhang Date: Thu, 6 Dec 2012 15:56:38 +0000 (+0000) Subject: bfd/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cd6fa7fd8801453ab5caef588fc772d14cb1ee9a;p=binutils-gdb.git bfd/ 2012-12-06 Yufeng Zhang * elf64-aarch64.c (elf64_aarch64_grok_prstatus): New function. (elf_backend_grok_prstatus): Define to elf64_aarch64_grok_prstatus. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3b91a8556cc..1b6e9654cc2 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2012-12-06 Yufeng Zhang + + * elf64-aarch64.c (elf64_aarch64_grok_prstatus): New function. + (elf_backend_grok_prstatus): Define to elf64_aarch64_grok_prstatus. + 2012-12-06 Alan Modra * elfxx-mips.c (allocate_dynrelocs): Correct test for symbol diff --git a/bfd/elf64-aarch64.c b/bfd/elf64-aarch64.c index 423fb9b31e8..708b3628a3d 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.