+2016-02-11 Nick Clifton <nickc@redhat.com>
+
+ PR gas/19614
+ * dw2gencfi.c (cfi_sections_set): Delay setting this variable
+ until it is actually used.
+ (cfi_set_sections): Set cfi_sections_set to true.
+ (dot_cfi_startproc): Likewise.
+ (dot_cfi_endproc): Likewise.
+ (dot_cfi_fde_data): Likewise.
+ (cfi_finish): Likewise.
+ (dot_cfi_sections): Do not set cfi_sections_set.
+ * doc/as.texinfo (.cfi_sections): Note that targets can provide
+ their own cfi section name. Also note that the directive can be
+ reissued provided that CFI generation has not started.
+ * testsuite/gas/mips/compact-eh-err2.s: Add .cfi_startproc and
+ .cfi_endproc directives so that the redefinition of .cfi_sections
+ will trigger the generation of the error message.
+ * testsuite/gas/mips/compact-eh-err2.l: Update expected line
+ number of error message.
+
2016-02-10 Claudiu Zissulescu <claziss@synopsys.com>
Janek van Oirschot <jvanoirs@synopsys.com>
On targets that support compact unwinding tables these can be generated
by specifying @code{.eh_frame_entry} instead of @code{.eh_frame}.
+Some targets may support an additional name, such as @code{.c6xabi.exidx}
+which is used by the @value{TIC6X} target.
+
+The @code{.cfi_sections} directive can be repeated, with the same or different
+arguments, provided that CFI generation has not yet started. Once CFI
+generation has started however the section list is fixed and any attempts to
+redefine it will result in an error.
+
@subsection @code{.cfi_startproc [simple]}
@cindex @code{cfi_startproc} directive
@code{.cfi_startproc} is used at the beginning of each function that
cfi_set_sections (void)
{
frchain_now->frch_cfi_data->cur_fde_data->sections = all_cfi_sections;
+ cfi_sections_set = TRUE;
}
/* Universal functions to store new instructions. */
demand_empty_rest_of_line ();
if (cfi_sections_set && cfi_sections != sections)
as_bad (_("inconsistent uses of .cfi_sections"));
- cfi_sections_set = TRUE;
cfi_sections = sections;
}
}
demand_empty_rest_of_line ();
+ cfi_sections_set = TRUE;
all_cfi_sections |= cfi_sections;
cfi_set_sections ();
frchain_now->frch_cfi_data->cur_cfa_offset = 0;
demand_empty_rest_of_line ();
+ cfi_sections_set = TRUE;
if ((cfi_sections & CFI_EMIT_target) != 0)
tc_cfi_endproc (last_fde);
}
last_fde = frchain_now->frch_cfi_data->cur_fde_data;
+ cfi_sections_set = TRUE;
if ((cfi_sections & CFI_EMIT_target) != 0
|| (cfi_sections & CFI_EMIT_eh_frame_compact) != 0)
{
if (all_fde_data == 0)
return;
+ cfi_sections_set = TRUE;
if ((all_cfi_sections & CFI_EMIT_eh_frame) != 0
|| (all_cfi_sections & CFI_EMIT_eh_frame_compact) != 0)
{
flag_traditional_format = save_flag_traditional_format;
}
+ cfi_sections_set = TRUE;
if ((all_cfi_sections & CFI_EMIT_debug_frame) != 0)
{
int alignment = ffs (DWARF2_ADDR_SIZE (stdoutput)) - 1;
.*: Assembler messages:
-.*:7: Error: inconsistent uses of .cfi_sections
+.*:8: Error: inconsistent uses of .cfi_sections
.align 2
.globl _Z3fooi
.cfi_sections .eh_frame_entry
+ .cfi_startproc
.cfi_sections .eh_frame
+ .cfi_endproc
+