| From 3d3424e9a8d6ad56160b98bf6e223c0346164468 Mon Sep 17 00:00:00 2001 |
| From: Matthew Fortune <matthew.fortune@imgtec.com> |
| Date: Thu, 29 Sep 2016 11:13:46 +0100 |
| Subject: [PATCH] Refine .cfi_sections check to only consider compact eh_frame |
| |
| The .cfi_sections directive can be safely used multiple times |
| with different sections named at any time unless the compact form |
| of exception handling is requested after CFI information has |
| been emitted. Only the compact form of CFI information changes |
| the way in which CFI is generated and therefore cannot be |
| retrospectively requested after generating CFI information. |
| |
| gas/ |
| |
| PR gas/20648 |
| * dw2gencfi.c (dot_cfi_sections): Refine the check for |
| inconsistent .cfi_sections to only consider compact vs non |
| compact forms. |
| * testsuite/gas/cfi/cfi-common-9.d: New file. |
| * testsuite/gas/cfi/cfi-common-9.s: New file. |
| * testsuite/gas/cfi/cfi.exp: Run new test. |
| --- |
| Upstream-Status: Backport |
| Signed-off-by: Khem Raj <raj.khem@gmail.com |
| |
| gas/ChangeLog | 10 ++++++++++ |
| gas/dw2gencfi.c | 5 ++++- |
| gas/testsuite/gas/cfi/cfi-common-9.d | 23 +++++++++++++++++++++++ |
| gas/testsuite/gas/cfi/cfi-common-9.s | 4 ++++ |
| gas/testsuite/gas/cfi/cfi.exp | 1 + |
| 5 files changed, 42 insertions(+), 1 deletion(-) |
| create mode 100644 gas/testsuite/gas/cfi/cfi-common-9.d |
| create mode 100644 gas/testsuite/gas/cfi/cfi-common-9.s |
| |
| Index: git/gas/dw2gencfi.c |
| =================================================================== |
| --- git.orig/gas/dw2gencfi.c |
| +++ git/gas/dw2gencfi.c |
| @@ -1244,7 +1244,10 @@ dot_cfi_sections (int ignored ATTRIBUTE_ |
| } |
| |
| demand_empty_rest_of_line (); |
| - if (cfi_sections_set && cfi_sections != sections) |
| + if (cfi_sections_set |
| + && (sections & (CFI_EMIT_eh_frame | CFI_EMIT_eh_frame_compact)) |
| + && (cfi_sections & (CFI_EMIT_eh_frame | CFI_EMIT_eh_frame_compact)) |
| + != (sections & (CFI_EMIT_eh_frame | CFI_EMIT_eh_frame_compact))) |
| as_bad (_("inconsistent uses of .cfi_sections")); |
| cfi_sections = sections; |
| } |
| Index: git/gas/testsuite/gas/cfi/cfi-common-9.d |
| =================================================================== |
| --- /dev/null |
| +++ git/gas/testsuite/gas/cfi/cfi-common-9.d |
| @@ -0,0 +1,23 @@ |
| +#objdump: -Wf |
| +#name: CFI common 9 |
| +#... |
| +Contents of the .eh_frame section: |
| + |
| +00000000 0+0010 0+0000 CIE |
| + Version: 1 |
| + Augmentation: "zR" |
| + Code alignment factor: .* |
| + Data alignment factor: .* |
| + Return address column: .* |
| + Augmentation data: [01]b |
| + |
| + DW_CFA_nop |
| + DW_CFA_nop |
| + DW_CFA_nop |
| + |
| +00000014 0+00(10|18|1c|20) 0+0018 FDE cie=0+0000 pc=.* |
| + |
| + DW_CFA_nop |
| + DW_CFA_nop |
| + DW_CFA_nop |
| +#... |
| Index: git/gas/testsuite/gas/cfi/cfi-common-9.s |
| =================================================================== |
| --- /dev/null |
| +++ git/gas/testsuite/gas/cfi/cfi-common-9.s |
| @@ -0,0 +1,4 @@ |
| + .cfi_sections .eh_frame |
| + .cfi_startproc simple |
| + .cfi_sections .debug_frame |
| + .cfi_endproc |
| Index: git/gas/testsuite/gas/cfi/cfi.exp |
| =================================================================== |
| --- git.orig/gas/testsuite/gas/cfi/cfi.exp |
| +++ git/gas/testsuite/gas/cfi/cfi.exp |
| @@ -135,4 +135,5 @@ if { ![istarget "hppa64*-*"] } then { |
| run_dump_test "cfi-common-6" |
| } |
| run_dump_test "cfi-common-7" |
| + run_dump_test "cfi-common-9" |
| } |