From 4ee220358d068133b219d729f4c7ada5a41c106e Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Fri, 22 Aug 2014 14:40:10 -0700 Subject: [PATCH] aarch64: Decode dwarf2 register numbers * dwarf.h (init_dwarf_regnames_aarch64): Declare. * dwarf.c (dwarf_regnames_aarch64): New. (init_dwarf_regnames_aarch64): New. (init_dwarf_regnames): Call it. * objdump.c (dump_dwarf): Likewise. --- binutils/ChangeLog | 8 ++++++++ binutils/dwarf.c | 27 +++++++++++++++++++++++++++ binutils/dwarf.h | 1 + binutils/objdump.c | 4 ++++ 4 files changed, 40 insertions(+) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 782c2fd1177..19569d42baf 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,11 @@ +2014-08-22 Richard Henderson + + * dwarf.h (init_dwarf_regnames_aarch64): Declare. + * dwarf.c (dwarf_regnames_aarch64): New. + (init_dwarf_regnames_aarch64): New. + (init_dwarf_regnames): Call it. + * objdump.c (dump_dwarf): Likewise. + 2014-08-19 Alan Modra * configure: Regenerate. diff --git a/binutils/dwarf.c b/binutils/dwarf.c index a6986ad4045..348e20ff4a3 100644 --- a/binutils/dwarf.c +++ b/binutils/dwarf.c @@ -5093,6 +5093,29 @@ init_dwarf_regnames_x86_64 (void) dwarf_regnames_count = ARRAY_SIZE (dwarf_regnames_x86_64); } +static const char *const dwarf_regnames_aarch64[] = +{ + "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", + "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", + "x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23", + "x24", "x25", "x26", "x27", "x28", "x29", "x30", "sp", + NULL, "elr", NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", + "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", + "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", + "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", +}; + +void +init_dwarf_regnames_aarch64 (void) +{ + dwarf_regnames = dwarf_regnames_aarch64; + dwarf_regnames_count = ARRAY_SIZE (dwarf_regnames_aarch64); +} + void init_dwarf_regnames (unsigned int e_machine) { @@ -5109,6 +5132,10 @@ init_dwarf_regnames (unsigned int e_machine) init_dwarf_regnames_x86_64 (); break; + case EM_AARCH64: + init_dwarf_regnames_aarch64 (); + break; + default: break; } diff --git a/binutils/dwarf.h b/binutils/dwarf.h index db235a9112c..124d9d6d358 100644 --- a/binutils/dwarf.h +++ b/binutils/dwarf.h @@ -235,6 +235,7 @@ extern int dwarf_check; extern void init_dwarf_regnames (unsigned int); extern void init_dwarf_regnames_i386 (void); extern void init_dwarf_regnames_x86_64 (void); +extern void init_dwarf_regnames_aarch64 (void); extern int load_debug_section (enum dwarf_section_display_enum, void *); extern void free_debug_section (enum dwarf_section_display_enum); diff --git a/binutils/objdump.c b/binutils/objdump.c index 5086a15c190..413de5600cd 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -2407,6 +2407,10 @@ dump_dwarf (bfd *abfd) } break; + case bfd_arch_aarch64: + init_dwarf_regnames_aarch64(); + break; + default: break; } -- 2.30.2