diff options
author | mrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-02-03 04:52:51 +0000 |
---|---|---|
committer | mrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-02-03 04:52:51 +0000 |
commit | a15a1b518debb23e76370968264408fd2277c4d1 (patch) | |
tree | 54c17e9fc5a50d361ede340d400a56a854c64726 /gcc/config | |
parent | 771b60860b0d3f91c0d93eb61efc95bc8e8f2227 (diff) | |
download | gcc-a15a1b518debb23e76370968264408fd2277c4d1.tar.gz |
* 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
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121534 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/darwin9.h | 3 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 12 |
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/config/darwin9.h b/gcc/config/darwin9.h index 3f62677141a..7431cfb1ed7 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 8624c90a889..18c00e0fafa 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; |