[binutils-gdb] PR27723, Internal error in select_cie_for_fde

Alan Modra amodra@sourceware.org
Tue Apr 13 22:40:17 GMT 2021


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=c159f35225f7a11daa66895fd33923705f9c42e3

commit c159f35225f7a11daa66895fd33923705f9c42e3
Author: Alan Modra <amodra@gmail.com>
Date:   Tue Apr 13 23:21:04 2021 +0930

    PR27723, Internal error in select_cie_for_fde
    
            PR 27723
            * dw2gencfi.c (select_cie_for_fde): Handle DW_CFA_val_offset,
            DW_CFA_GNU_window_save and DW_CFA_restore_state.

Diff:
---
 gas/ChangeLog   | 6 ++++++
 gas/dw2gencfi.c | 4 ++++
 2 files changed, 10 insertions(+)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 40fedbbe802..07e5581119a 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2021-04-14  Alan Modra  <amodra@gmail.com>
+
+	PR 27723
+	* dw2gencfi.c (select_cie_for_fde): Handle DW_CFA_val_offset,
+	DW_CFA_GNU_window_save and DW_CFA_restore_state.
+
 2021-04-13  Alan Modra  <amodra@gmail.com>
 
 	* testsuite/gas/m68hc11/m68hc11.exp (gas_m68hc11_message): Don't
diff --git a/gas/dw2gencfi.c b/gas/dw2gencfi.c
index 84029940b2e..ffaef52cd59 100644
--- a/gas/dw2gencfi.c
+++ b/gas/dw2gencfi.c
@@ -2100,6 +2100,7 @@ select_cie_for_fde (struct fde_entry *fde, bool eh_frame,
 
 	    case DW_CFA_offset:
 	    case DW_CFA_def_cfa:
+	    case DW_CFA_val_offset:
 	      if (i->u.ri.reg != j->u.ri.reg)
 		goto fail;
 	      if (i->u.ri.offset != j->u.ri.offset)
@@ -2129,6 +2130,8 @@ select_cie_for_fde (struct fde_entry *fde, bool eh_frame,
 	    case CFI_escape:
 	    case CFI_val_encoded_addr:
 	    case CFI_label:
+	    case DW_CFA_restore_state:
+	    case DW_CFA_GNU_window_save:
 	      /* Don't bother matching these for now.  */
 	      goto fail;
 
@@ -2144,6 +2147,7 @@ select_cie_for_fde (struct fde_entry *fde, bool eh_frame,
 	  && (!j
 	      || j->insn == DW_CFA_advance_loc
 	      || j->insn == DW_CFA_remember_state
+	      || j->insn == DW_CFA_GNU_window_save
 	      || j->insn == CFI_escape
 	      || j->insn == CFI_val_encoded_addr
 	      || j->insn == CFI_label))


More information about the Binutils-cvs mailing list