Don't generate branch islands on ppc darwin9

Mike Stump mrs@apple.com
Sat Feb 3 04:47:00 GMT 2007


We don't need to generate branch islands for ppc-darwin9 any more as
the linker will now do this for us.  Kernel extensions still need
islands as the kernel loader won't generate them.

Checked into mainline.  I want to put this into 4.2, but it looks like
I'll have to drag just a little more work to get it to fit in.

For those with darwin9, I'm using 9A357.


2007-02-02  Mike Stump  <mrs@apple.com>

	* config/darwin9.h (DARWIN_LINKER_GENERATES_ISLANDS): Add.
	* config/rs6000/rs6000.c (DARWIN_GENERATE_ISLANDS): Add.
	(output_call): Use DARWIN_GENERATE_ISLANDS to decide when to
	generate a branch island.

Doing diffs in .:
--- ./config/darwin9.h.~1~	2006-12-20 14:03:35.000000000 -0800
+++ ./config/darwin9.h	2007-02-02 15:24:04.000000000 -0800
@@ -17,3 +17,6 @@
 %{!fdump=*:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
     %{.c|.cc|.C|.cpp|.c++|.CPP|.m|.mm: \
     %{g*:%{!gstabs*:%{!g0: dsymutil %{o*:%*}%{!o:a.out}}}}}}}}}}}}"
+
+/* The linker can generate branch islands.  */
+#define DARWIN_LINKER_GENERATES_ISLANDS 1
--- ./config/rs6000/rs6000.c.~1~	2007-02-02 13:53:09.000000000 -0800
+++ ./config/rs6000/rs6000.c	2007-02-02 16:03:37.000000000 -0800
@@ -797,7 +797,6 @@ static int rs6000_arg_partial_bytes (CUM
 static const char *invalid_arg_for_unprototyped_fn (tree, tree, tree);
 #if TARGET_MACHO
 static void macho_branch_islands (void);
-static void add_compiler_branch_island (tree, tree, int);
 static int no_previous_def (tree function_name);
 static tree get_prev_label (tree function_name);
 static void rs6000_darwin_file_start (void);
@@ -19076,6 +19075,14 @@ get_prev_label (tree function_name)
   return 0;
 }
 
+#ifndef DARWIN_LINKER_GENERATES_ISLANDS
+#define DARWIN_LINKER_GENERATES_ISLANDS 0
+#endif
+
+/* KEXTs still need branch islands.  */
+#define DARWIN_GENERATE_ISLANDS (!DARWIN_LINKER_GENERATES_ISLANDS \
+				 || flag_mkernel || flag_apple_kext)
+
 /* INSN is either a function call or a millicode call.  It may have an
    unconditional jump in its delay slot.
 
@@ -19086,7 +19093,8 @@ output_call (rtx insn, rtx *operands, in
 	     int cookie_operand_number)
 {
   static char buf[256];
-  if (GET_CODE (operands[dest_operand_number]) == SYMBOL_REF
+  if (DARWIN_GENERATE_ISLANDS
+      && GET_CODE (operands[dest_operand_number]) == SYMBOL_REF
       && (INTVAL (operands[cookie_operand_number]) & CALL_LONG))
     {
       tree labelname;
--------------



More information about the Gcc-patches mailing list