+ if (EH_FRAME_LINKONCE)
+ for (fde = all_fde_data; fde ; fde = fde->next)
+ SET_HANDLED (fde, 0);
+
+#if SUPPORT_COMPACT_EH
+ if (compact_eh)
+ {
+ /* Create remaining out of line table entries. */
+ do
+ {
+ ccseg = NULL;
+ seek_next_seg = 0;
+
+ for (fde = all_fde_data; fde ; fde = fde->next)
+ {
+ if ((fde->sections & CFI_EMIT_eh_frame) == 0
+ && (fde->sections & CFI_EMIT_eh_frame_compact) == 0)
+ continue;
+
+ if (fde->eh_header_type != EH_COMPACT_OUTLINE)
+ continue;
+ if (HANDLED (fde))
+ continue;
+ if (seek_next_seg && CUR_SEG (fde) != ccseg)
+ {
+ seek_next_seg = 2;
+ continue;
+ }
+ if (!seek_next_seg)
+ {
+ ccseg = CUR_SEG (fde);
+ /* Open .gnu_extab section. */
+ get_cfi_seg (ccseg, ".gnu_extab",
+ (SEC_ALLOC | SEC_LOAD | SEC_DATA
+ | DWARF2_EH_FRAME_READ_ONLY),
+ 1);
+ seek_next_seg = 1;
+ }
+ SET_HANDLED (fde, 1);
+
+ frag_align (1, 0, 0);
+ record_alignment (now_seg, 1);
+ output_compact_unwind_data (fde, 1);
+ }
+ }
+ while (EH_FRAME_LINKONCE && seek_next_seg == 2);
+
+ for (fde = all_fde_data; fde ; fde = fde->next)
+ SET_HANDLED (fde, 0);
+
+ /* Create index table fragments. */
+ do
+ {
+ ccseg = NULL;
+ seek_next_seg = 0;
+
+ for (fde = all_fde_data; fde ; fde = fde->next)
+ {
+ if ((fde->sections & CFI_EMIT_eh_frame) == 0
+ && (fde->sections & CFI_EMIT_eh_frame_compact) == 0)
+ continue;
+
+ if (HANDLED (fde))
+ continue;
+ if (seek_next_seg && CUR_SEG (fde) != ccseg)
+ {
+ seek_next_seg = 2;
+ continue;
+ }
+ if (!seek_next_seg)
+ {
+ ccseg = CUR_SEG (fde);
+ /* Open .eh_frame_entry section. */
+ cfi_seg = get_cfi_seg (ccseg, ".eh_frame_entry",
+ (SEC_ALLOC | SEC_LOAD | SEC_DATA
+ | DWARF2_EH_FRAME_READ_ONLY),
+ 2);
+ seek_next_seg = 1;
+ }
+ SET_HANDLED (fde, 1);
+
+ output_eh_header (fde);
+ }
+ }
+ while (seek_next_seg == 2);
+
+ for (fde = all_fde_data; fde ; fde = fde->next)
+ SET_HANDLED (fde, 0);
+ }
+#endif /* SUPPORT_COMPACT_EH */