This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
rs6000 patch for readonly EH sections, working -mrelocatable, etc.
- To: gcc-patches at gcc dot gnu dot org
- Subject: rs6000 patch for readonly EH sections, working -mrelocatable, etc.
- From: Geoff Keating <geoffk at geoffk dot org>
- Date: Sun, 13 May 2001 15:23:29 -0700
- Reply-to: Geoff Keating <geoffk at redhat dot com>
This patch:
- Fixes the powerpc-eabisim build problem;
- Makes EH sections readonly under ELF; and
- Stops putting everything in .data under -fpic.
I hope there will be a further patch that uses the PLTREL32 reloc
with -fpic to save even more relocs. Even just this patch should
significantly improve startup time for C++ applications.
--
- Geoffrey Keating <geoffk@geoffk.org>
===File ~/patches/cygnus/rs6000-eh-readonly.patch===========
2001-05-13 Geoff Keating <geoffk@redhat.com>
* config/rs6000/rs6000.h (EXCEPTION_SECTION): Move to...
* config/rs6000/aix.h (EXCEPTION_SECTION): ... here.
* config/rs6000/sysv4.h (CONST_SECTION_ASM_OP): Delete.
(ASM_PREFERRED_EH_DATA_FORMAT): Define.
(EXCEPTION_SECTION): Define.
Index: config/rs6000/aix.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/aix.h,v
retrieving revision 1.18
diff -p -u -u -p -r1.18 aix.h
--- config/rs6000/aix.h 2001/04/16 18:30:46 1.18
+++ config/rs6000/aix.h 2001/05/13 22:12:00
@@ -594,6 +594,12 @@ toc_section () \
putc ('\n', ASM_OUT_FILE); \
} while (0)
+/* Define the name of the section to use for the exception tables.
+ TODO: test and see if we can use read_only_data_section, if so,
+ remove this. */
+
+#define EXCEPTION_SECTION data_section
+
/* __throw will restore its own return address to be the same as the
return address of the function that the throw is being made to.
This is unfortunate, because we want to check the original
Index: config/rs6000/rs6000.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.h,v
retrieving revision 1.111
diff -p -u -u -p -r1.111 rs6000.h
--- config/rs6000/rs6000.h 2001/05/04 15:06:35 1.111
+++ config/rs6000/rs6000.h 2001/05/13 22:12:02
@@ -2318,12 +2318,6 @@ extern int rs6000_compare_fp_p;
#define TARGET_MEM_FUNCTIONS
-/* Define the name of the section to use for the exception tables.
- TODO: test and see if we can use read_only_data_section, if so,
- remove this. */
-
-#define EXCEPTION_SECTION data_section
-
/* Flag to say the TOC is initialized */
extern int toc_initialized;
Index: config/rs6000/sysv4.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/sysv4.h,v
retrieving revision 1.46
diff -p -u -u -p -r1.46 sysv4.h
--- config/rs6000/sysv4.h 2001/03/03 02:17:06 1.46
+++ config/rs6000/sysv4.h 2001/05/13 22:12:04
@@ -433,13 +433,6 @@ do { \
#define MINIMAL_TOC_SECTION_ASM_OP \
((TARGET_RELOCATABLE || flag_pic) ? "\t.section\t\".got2\",\"aw\"" : "\t.section\t\".got1\",\"aw\"")
-/* Put relocatable data in .data, not .rodata so initialized pointers can be updated. */
-/* Override elfos.h definition. */
-#undef CONST_SECTION_ASM_OP
-#define CONST_SECTION_ASM_OP \
- ((TARGET_RELOCATABLE || flag_pic) ? "\t.section\t\".data\"\t# .rodata" : "\t.section\t\".rodata\"")
-
-
#define SDATA_SECTION_ASM_OP "\t.section\t\".sdata\",\"aw\""
#define SDATA2_SECTION_ASM_OP "\t.section\t\".sdata2\",\"a\""
#define SBSS_SECTION_ASM_OP \
@@ -1602,3 +1595,13 @@ do { \
= init_one_libfunc (SQRTTF_LIBCALL); \
} \
} while (0)
+
+/* Select a format to encode pointers in exception handling data. CODE
+ is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
+ true if the symbol may be affected by dynamic relocations. */
+#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
+ (flag_pic \
+ ? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4) \
+ : DW_EH_PE_absptr)
+
+#define EXCEPTION_SECTION readonly_data_section
============================================================