darwin9.h (DARWIN_LINKER_GENERATES_ISLANDS): Add.
authorMike Stump <mrs@apple.com>
Sat, 3 Feb 2007 04:52:51 +0000 (04:52 +0000)
committerMike Stump <mrs@gcc.gnu.org>
Sat, 3 Feb 2007 04:52:51 +0000 (04:52 +0000)
* 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.
Radar 4967371

From-SVN: r121534

gcc/ChangeLog
gcc/config/darwin9.h
gcc/config/rs6000/rs6000.c

index 73626e6e689ae2a4a6b12547edc7342dbf6958ea..9ef2c72d73c4660ba68867f3d5b8e1736d199eab 100644 (file)
@@ -1,3 +1,10 @@
+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.
+
 2007-02-02  Bob Wilson  <bob.wilson@acm.org>
 
        * config/xtensa/xtensa.c (smalloffset_mem_p): Use BASE_REG_P.
index 3f62677141a8fcf7991236d8f594d0e26e6d5fa5..7431cfb1ed76faf89d6c78dc5707d6cc50e31075 100644 (file)
@@ -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
index 8624c90a889cdb8ed96f3b5d1aa3e9a486d57b65..18c00e0fafaa80f86c1bf43c13d38b798641eb1b 100644 (file)
@@ -797,7 +797,6 @@ static int rs6000_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode,
 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, int dest_operand_number,
             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;