aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2019-11-18 12:09:04 +0000
committerAndrew Burgess <andrew.burgess@embecosm.com>2019-11-28 00:03:03 +0000
commit229a22cfd2fd3c82a1b57d4af104f361cb0b0a33 (patch)
treeba37b7607875260926a21347a499d1ba03c46f78 /binutils
parent955ff7fcf8ddc90200819a184380c64c27b76e91 (diff)
downloadgdb-229a22cfd2fd3c82a1b57d4af104f361cb0b0a33.zip
gdb-229a22cfd2fd3c82a1b57d4af104f361cb0b0a33.tar.gz
gdb-229a22cfd2fd3c82a1b57d4af104f361cb0b0a33.tar.bz2
binutils: Add a new function to initialise DWARF register name state
Adds a new API function init_dwarf_regnames_by_bfd_arch_and_mach to initialise the register name state from a BFD architecture and machine type. There should be no user visible changes after this commit. binutils/ChangeLog: * dwarf.c (init_dwarf_regnames_by_bfd_arch_and_mach): New function. * dwarf.h (init_dwarf_regnames_by_bfd_arch_and_mach): Declare. * objdump.c (dump_dwarf): Call new function instead of calling specific initialization routines. Restrucure so that eh_addr_size is still calculated correctly. Change-Id: I346d665d2079a18ec4d04bd41893d0e9dc05e4b3
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog9
-rw-r--r--binutils/dwarf.c48
-rw-r--r--binutils/dwarf.h2
-rw-r--r--binutils/objdump.c40
4 files changed, 63 insertions, 36 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 3aba2f2..c7cb68c 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,5 +1,14 @@
2019-11-22 Andrew Burgess <andrew.burgess@embecosm.com>
+ * dwarf.c (init_dwarf_regnames_by_bfd_arch_and_mach): New
+ function.
+ * dwarf.h (init_dwarf_regnames_by_bfd_arch_and_mach): Declare.
+ * objdump.c (dump_dwarf): Call new function instead of calling
+ specific initialization routines. Restrucure so that eh_addr_size
+ is still calculated correctly.
+
+2019-11-22 Andrew Burgess <andrew.burgess@embecosm.com>
+
* dwarf.c (init_dwarf_regnames): Renamed to...
(init_dwarf_regnames_by_elf_machine_code): ...this.
* dwarf.h (init_dwarf_regnames): Renamed to...
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index c888aad..a770c57 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -7625,6 +7625,54 @@ init_dwarf_regnames_by_elf_machine_code (unsigned int e_machine)
}
}
+/* Initialize the DWARF register name lookup state based on the
+ architecture and specific machine type of a BFD. */
+
+void
+init_dwarf_regnames_by_bfd_arch_and_mach (enum bfd_architecture arch,
+ unsigned long mach)
+{
+ switch (arch)
+ {
+ case bfd_arch_i386:
+ switch (mach)
+ {
+ case bfd_mach_x86_64:
+ case bfd_mach_x86_64_intel_syntax:
+ case bfd_mach_x86_64_nacl:
+ case bfd_mach_x64_32:
+ case bfd_mach_x64_32_intel_syntax:
+ case bfd_mach_x64_32_nacl:
+ init_dwarf_regnames_x86_64 ();
+ break;
+
+ default:
+ init_dwarf_regnames_i386 ();
+ break;
+ }
+ break;
+
+ case bfd_arch_iamcu:
+ init_dwarf_regnames_iamcu ();
+ break;
+
+ case bfd_arch_aarch64:
+ init_dwarf_regnames_aarch64();
+ break;
+
+ case bfd_arch_s390:
+ init_dwarf_regnames_s390 ();
+ break;
+
+ case bfd_arch_riscv:
+ init_dwarf_regnames_riscv ();
+ break;
+
+ default:
+ break;
+ }
+}
+
static const char *
regname (unsigned int regno, int row)
{
diff --git a/binutils/dwarf.h b/binutils/dwarf.h
index 204f00e..8272de8 100644
--- a/binutils/dwarf.h
+++ b/binutils/dwarf.h
@@ -226,6 +226,8 @@ extern unsigned long dwarf_start_die;
extern int dwarf_check;
extern void init_dwarf_regnames_by_elf_machine_code (unsigned int);
+extern void init_dwarf_regnames_by_bfd_arch_and_mach (enum bfd_architecture arch,
+ unsigned long mach);
extern void init_dwarf_regnames_i386 (void);
extern void init_dwarf_regnames_iamcu (void);
extern void init_dwarf_regnames_x86_64 (void);
diff --git a/binutils/objdump.c b/binutils/objdump.c
index 115f1fc..6a1f142 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -2975,44 +2975,8 @@ dump_dwarf (bfd *abfd)
return;
}
- eh_addr_size = bfd_arch_bits_per_address (abfd) / 8;
-
switch (bfd_get_arch (abfd))
{
- case bfd_arch_i386:
- switch (bfd_get_mach (abfd))
- {
- case bfd_mach_x86_64:
- case bfd_mach_x86_64_intel_syntax:
- case bfd_mach_x86_64_nacl:
- case bfd_mach_x64_32:
- case bfd_mach_x64_32_intel_syntax:
- case bfd_mach_x64_32_nacl:
- init_dwarf_regnames_x86_64 ();
- break;
-
- default:
- init_dwarf_regnames_i386 ();
- break;
- }
- break;
-
- case bfd_arch_iamcu:
- init_dwarf_regnames_iamcu ();
- break;
-
- case bfd_arch_aarch64:
- init_dwarf_regnames_aarch64();
- break;
-
- case bfd_arch_s390:
- init_dwarf_regnames_s390 ();
- break;
-
- case bfd_arch_riscv:
- init_dwarf_regnames_riscv ();
- break;
-
case bfd_arch_s12z:
/* S12Z has a 24 bit address space. But the only known
producer of dwarf_info encodes addresses into 32 bits. */
@@ -3020,9 +2984,13 @@ dump_dwarf (bfd *abfd)
break;
default:
+ eh_addr_size = bfd_arch_bits_per_address (abfd) / 8;
break;
}
+ init_dwarf_regnames_by_bfd_arch_and_mach (bfd_get_arch (abfd),
+ bfd_get_mach (abfd));
+
bfd_map_over_sections (abfd, dump_dwarf_section, NULL);
}