rs6000 patch for readonly EH sections, working -mrelocatable, etc.

Geoff Keating geoffk@geoffk.org
Sun May 13 15:24:00 GMT 2001


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
============================================================



More information about the Gcc-patches mailing list