summaryrefslogtreecommitdiff
path: root/gcc/except.c
diff options
context:
space:
mode:
authorAndrew Dixie <andrewd@gentrack.com>2015-09-18 14:10:36 +0000
committerDavid Edelsohn <dje@gcc.gnu.org>2015-09-18 10:10:36 -0400
commit04218b3564e3462d2e68c11548299d7359ad8c17 (patch)
treea2da31202b08fdaf8e1ee8716ea6db02c1e77164 /gcc/except.c
parent8cd60b238b40e06647938ef44114da23b6d27391 (diff)
config.host (powerpc-ibm-aix*): Add crtdbase.o to extra_parts.
libgcc/ * config.host (powerpc-ibm-aix*): Add crtdbase.o to extra_parts. * config/rs6000/crtdbase.S: New file. * config/rs6000/t-aix-cxa: Build crtdbase.o. gcc/ * defaults.h (EH_FRAME_SECTION_NAME): Depend on EH_FRAME_THROUGH_COLLECT2. * dwarf2asm.c (dw2_asm_output_encoded_addr_rtx): Add case for DW_EH_PE_datarel. * dwarf2out.c (switch_to_eh_frame_section): Use a read-only section even if EH_FRAME_SECTION_NAME is undefined. Restrict special collect2 labels to EH_FRAME_THROUGH_COLLECT2. * except.c (switch_to_exception_section): Use a read-only section even if EH_FRAME_SECTION_NAME is undefined. * system.h (EH_FRAME_IN_DATA_SECTION): Poison. * collect2.c (write_c_file_stat): Provide dbase on AIX. (scan_prog_file): Don't export __dso_handle nor __gcc_unwind_dbase. * config/rs6000/aix.h (ASM_PREFERRED_EH_DATA_FORMAT): Define. (EH_TABLES_CAN_BE_READ_ONLY): Define. (ASM_OUTPUT_DWARF_PCREL): Define. (ASM_OUTPUT_DWARF_DATAREL): Define. (EH_FRAME_THROUGH_COLLECT2): Define. (EH_FRAME_IN_DATA_SECTION): Delete. * config/rs6000/rs6000.c (rs6000_aix_asm_output_dwarf_pcrel): New. (rs6000_aix_asm_output_dwarf_datarel): New. (rs6000_xcoff_asm_init_sections): Don't set exception_section. * config/spu/spu-elf.h (EH_FRAME_IN_DATA_SECTION): Delete. (EH_FRAME_THROUGH_COLLECT2): Define. * config/i386/i386-interix.h (EH_FRAME_IN_DATA_SECTION): Delete. (EH_FRAME_THROUGH_COLLECT2): Define. (EH_TABLES_CAN_BE_READ_ONLY): Define. * doc/tm.texi.in (EH_FRAME_IN_DATA_SECTION): Delete. (EH_FRAME_THROUGH_COLLECT2): New. (ASM_OUTPUT_DWARF_DATAREL): New. * doc/tm.texi: Regenerate. Co-Authored-By: David Edelsohn <dje.gcc@gmail.com> From-SVN: r227906
Diffstat (limited to 'gcc/except.c')
-rw-r--r--gcc/except.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/gcc/except.c b/gcc/except.c
index d59c5399087..86ad6bc4446 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -2838,24 +2838,24 @@ switch_to_exception_section (const char * ARG_UNUSED (fnname))
s = exception_section;
else
{
+ int flags;
+
+ if (EH_TABLES_CAN_BE_READ_ONLY)
+ {
+ int tt_format =
+ ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/1);
+ flags = ((! flag_pic
+ || ((tt_format & 0x70) != DW_EH_PE_absptr
+ && (tt_format & 0x70) != DW_EH_PE_aligned))
+ ? 0 : SECTION_WRITE);
+ }
+ else
+ flags = SECTION_WRITE;
+
/* Compute the section and cache it into exception_section,
unless it depends on the function name. */
if (targetm_common.have_named_sections)
{
- int flags;
-
- if (EH_TABLES_CAN_BE_READ_ONLY)
- {
- int tt_format =
- ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/1);
- flags = ((! flag_pic
- || ((tt_format & 0x70) != DW_EH_PE_absptr
- && (tt_format & 0x70) != DW_EH_PE_aligned))
- ? 0 : SECTION_WRITE);
- }
- else
- flags = SECTION_WRITE;
-
#ifdef HAVE_LD_EH_GC_SECTIONS
if (flag_function_sections
|| (DECL_COMDAT_GROUP (current_function_decl) && HAVE_COMDAT_GROUP))
@@ -2876,7 +2876,7 @@ switch_to_exception_section (const char * ARG_UNUSED (fnname))
}
else
exception_section
- = s = flag_pic ? data_section : readonly_data_section;
+ = s = flags == SECTION_WRITE ? data_section : readonly_data_section;
}
switch_to_section (s);