PR29390, DW_CFA_AARCH64_negate_ra_state vs. DW_CFA_GNU_window_save
authorAlan Modra <amodra@gmail.com>
Thu, 21 Jul 2022 06:58:50 +0000 (16:28 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 21 Jul 2022 07:07:06 +0000 (16:37 +0930)
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.

binutils/dwarf.c
gas/testsuite/gas/aarch64/pac_ab_key.d
gas/testsuite/gas/aarch64/pac_negate_ra_state.d

index 7d0a9ffefea34931d96156aec2101340f3230261..68104a737861053d4cc02f566650af639a5e07d0 100644 (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:
index ea9cf2fb38a132dd75a26d89c406a9952b8747e0..5e7496a86bd3f8cde42bc4e7a6e18d23027d67a4 100644 (file)
@@ -18,7 +18,7 @@ Contents of the .eh_frame section:
 
 0+14 0+18 0+18 FDE cie=0+ pc=0+\.\.0+8
   DW_CFA_advance_loc: 4 to 0+4
-  DW_CFA_GNU_window_save
+  DW_CFA_AARCH64_negate_ra_state
   DW_CFA_advance_loc: 4 to 0+8
   DW_CFA_def_cfa_offset: 16
   DW_CFA_offset: r29 \(x29\) at cfa-16
@@ -40,7 +40,7 @@ Contents of the .eh_frame section:
 
 0+48 0+1(c|8) 0+1c FDE cie=0+30 pc=0+8\.\.0+10
   DW_CFA_advance_loc: 4 to 0+c
-  DW_CFA_GNU_window_save
+  DW_CFA_AARCH64_negate_ra_state
   DW_CFA_advance_loc: 4 to 0+10
   DW_CFA_def_cfa_offset: 16
   DW_CFA_offset: r29 \(x29\) at cfa-16
index cef533a7343da54d2c63fa73e6e7a289ac37cf93..6271776760812f10ca9b3e929734c84ee8f6f5a7 100644 (file)
@@ -15,7 +15,7 @@ Contents of the .eh_frame section:
 
 0+14 0+18 0+18 FDE cie=0+ pc=0+\.\.0+8
   DW_CFA_advance_loc: 4 to 0+4
-  DW_CFA_GNU_window_save
+  DW_CFA_AARCH64_negate_ra_state
   DW_CFA_advance_loc: 4 to 0+8
   DW_CFA_def_cfa_offset: 16
   DW_CFA_offset: r29 \(x29\) at cfa-16