From 75b1b789dd6b3d3ad5c950a4911d49ed29a9cec4 Mon Sep 17 00:00:00 2001 From: Mike Stump Date: Sat, 3 Feb 2007 04:52:51 +0000 Subject: darwin9.h (DARWIN_LINKER_GENERATES_ISLANDS): Add. * 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/config/darwin9.h | 3 +++ gcc/config/rs6000/rs6000.c | 12 ++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'gcc/config') diff --git a/gcc/config/darwin9.h b/gcc/config/darwin9.h index 3f62677..7431cfb 100644 --- a/gcc/config/darwin9.h +++ b/gcc/config/darwin9.h @@ -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 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 8624c90..18c00e0 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -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; -- cgit v1.1