PR29390, DW_CFA_AARCH64_negate_ra_state vs. DW_CFA_GNU_window_save

PR 29390
binutils/
	* dwarf.c (is_aarch64, DW_CFA_GNU_window_save_name): New.
	(display_debug_frames): Use them.
	(init_dwarf_regnames_aarch64): Set is_aarch64.
	(init_dwarf_regnames_by_elf_machine_code): Clear is_aarch64.
	(init_dwarf_regnames_by_bfd_arch_and_mach): Likewise.
gas/
	* testsuite/gas/aarch64/pac_ab_key.d: Adjust expected output.
	* testsuite/gas/aarch64/pac_negate_ra_state.d: Likewise.
This commit is contained in:
Alan Modra
2022-07-21 16:28:50 +09:30
parent e82295b23d
commit e4e340a3ff
3 changed files with 14 additions and 5 deletions

View File

@ -8404,7 +8404,7 @@ typedef const char *(*dwarf_regname_lookup_ftype) (unsigned int);
static dwarf_regname_lookup_ftype dwarf_regnames_lookup_func;
static const char *const *dwarf_regnames;
static unsigned int dwarf_regnames_count;
static bool is_aarch64;
/* A marker for a col_type that means this column was never referenced
in the frame info. */
@ -8523,6 +8523,12 @@ init_dwarf_regnames_iamcu (void)
dwarf_regnames_lookup_func = regname_internal_by_table_only;
}
static const char *const DW_CFA_GNU_window_save_name[] =
{
"DW_CFA_GNU_window_save",
"DW_CFA_AARCH64_negate_ra_state"
};
static const char *const dwarf_regnames_x86_64[] =
{
"rax", "rdx", "rcx", "rbx",
@ -8589,6 +8595,7 @@ init_dwarf_regnames_aarch64 (void)
dwarf_regnames = dwarf_regnames_aarch64;
dwarf_regnames_count = ARRAY_SIZE (dwarf_regnames_aarch64);
dwarf_regnames_lookup_func = regname_internal_by_table_only;
is_aarch64 = true;
}
static const char *const dwarf_regnames_s390[] =
@ -8678,6 +8685,7 @@ void
init_dwarf_regnames_by_elf_machine_code (unsigned int e_machine)
{
dwarf_regnames_lookup_func = NULL;
is_aarch64 = false;
switch (e_machine)
{
@ -8720,6 +8728,7 @@ init_dwarf_regnames_by_bfd_arch_and_mach (enum bfd_architecture arch,
unsigned long mach)
{
dwarf_regnames_lookup_func = NULL;
is_aarch64 = false;
switch (arch)
{
@ -9955,7 +9964,7 @@ display_debug_frames (struct dwarf_section *section,
case DW_CFA_GNU_window_save:
if (! do_debug_frames_interp)
printf (" DW_CFA_GNU_window_save\n");
printf (" %s\n", DW_CFA_GNU_window_save_name[is_aarch64]);
break;
case DW_CFA_GNU_args_size: