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.
This commit is contained in:
Matthew Fortune 2016-09-29 11:13:46 +01:00
parent ee8da4b839
commit 3d3424e9a8
5 changed files with 42 additions and 1 deletions

View File

@ -1,3 +1,13 @@
2016-10-06 Matthew Fortune <matthew.fortune@imgtec.com>
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.
2016-10-06 Alan Modra <amodra@gmail.com>
* app.c: Add missing fall through comments.

View File

@ -1269,7 +1269,10 @@ dot_cfi_sections (int ignored ATTRIBUTE_UNUSED)
}
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;
}

View File

@ -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
#...

View File

@ -0,0 +1,4 @@
.cfi_sections .eh_frame
.cfi_startproc simple
.cfi_sections .debug_frame
.cfi_endproc

View File

@ -136,4 +136,5 @@ if { ![istarget "hppa64*-*"] } then {
}
run_dump_test "cfi-common-7"
run_dump_test "cfi-common-8"
run_dump_test "cfi-common-9"
}