aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/gen-sframe.c49
-rw-r--r--gas/testsuite/gas/cfi-sframe/common-empty-1.d2
-rw-r--r--gas/testsuite/gas/cfi-sframe/common-empty-2.d2
3 files changed, 50 insertions, 3 deletions
diff --git a/gas/gen-sframe.c b/gas/gen-sframe.c
index 25b858e..d9c5f66 100644
--- a/gas/gen-sframe.c
+++ b/gas/gen-sframe.c
@@ -1199,6 +1199,46 @@ sframe_xlate_do_gnu_window_save (struct sframe_xlate_ctx *xlate_ctx,
return SFRAME_XLATE_OK;
}
+/* Returns the DWARF call frame instruction name or fake CFI name for the
+ specified CFI opcode, or NULL if the value is not recognized. */
+
+static const char *
+sframe_get_cfi_name (int cfi_opc)
+{
+ const char *cfi_name;
+
+ switch (cfi_opc)
+ {
+ /* Fake CFI type; outside the byte range of any real CFI insn. */
+ /* See gas/dw2gencfi.h. */
+ case CFI_adjust_cfa_offset:
+ cfi_name = "CFI_adjust_cfa_offset";
+ break;
+ case CFI_return_column:
+ cfi_name = "CFI_return_column";
+ break;
+ case CFI_rel_offset:
+ cfi_name = "CFI_rel_offset";
+ break;
+ case CFI_escape:
+ cfi_name = "CFI_escape";
+ break;
+ case CFI_signal_frame:
+ cfi_name = "CFI_signal_frame";
+ break;
+ case CFI_val_encoded_addr:
+ cfi_name = "CFI_val_encoded_addr";
+ break;
+ case CFI_label:
+ cfi_name = "CFI_label";
+ break;
+ default:
+ cfi_name = get_DW_CFA_name (cfi_opc);
+ }
+
+ return cfi_name;
+}
+
/* Process CFI_INSN and update the translation context with the FRE
information.
@@ -1274,7 +1314,14 @@ sframe_do_cfi_insn (struct sframe_xlate_ctx *xlate_ctx,
/* An error here will cause no SFrame FDE later. Warn the user because this
will affect the overall coverage and hence, asynchronicity. */
if (err)
- as_warn (_("skipping SFrame FDE due to DWARF CFI op %#x"), op);
+ {
+ const char *cfi_name = sframe_get_cfi_name (op);
+
+ if (!cfi_name)
+ cfi_name = _("(unknown)");
+ as_warn (_("skipping SFrame FDE due to DWARF CFI op %s (%#x)"),
+ cfi_name, op);
+ }
return err;
}
diff --git a/gas/testsuite/gas/cfi-sframe/common-empty-1.d b/gas/testsuite/gas/cfi-sframe/common-empty-1.d
index 125612f..d775630 100644
--- a/gas/testsuite/gas/cfi-sframe/common-empty-1.d
+++ b/gas/testsuite/gas/cfi-sframe/common-empty-1.d
@@ -1,5 +1,5 @@
#as: --gsframe
-#warning: skipping SFrame FDE due to DWARF CFI op 0xa
+#warning: skipping SFrame FDE due to DWARF CFI op DW_CFA_remember_state \(0xa\)
#objdump: --sframe=.sframe
#name: Uninteresting cfi directives generate an empty SFrame section
#...
diff --git a/gas/testsuite/gas/cfi-sframe/common-empty-2.d b/gas/testsuite/gas/cfi-sframe/common-empty-2.d
index 59328fc..20282c7 100644
--- a/gas/testsuite/gas/cfi-sframe/common-empty-2.d
+++ b/gas/testsuite/gas/cfi-sframe/common-empty-2.d
@@ -1,5 +1,5 @@
#as: --gsframe
-#warning: skipping SFrame FDE due to DWARF CFI op 0xe
+#warning: skipping SFrame FDE due to DWARF CFI op DW_CFA_def_cfa_offset \(0xe\)
#objdump: --sframe=.sframe
#name: SFrame supports only FP/SP based CFA
#...