From: Andrew Pinski Date: Mon, 22 Mar 2004 15:04:27 +0000 (+0000) Subject: rs6000.c (symbol_ref_operand): Reject symbols who are not local for Darwin PIC. X-Git-Tag: releases/gcc-4.0.0~9216 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=aa6d25c99d99aef40d7df9e2157c8ec82fe39e96;p=thirdparty%2Fgcc.git rs6000.c (symbol_ref_operand): Reject symbols who are not local for Darwin PIC. 2004-03-22 Andrew Pinski * config/rs6000/rs6000.c (symbol_ref_operand): Reject symbols who are not local for Darwin PIC. From-SVN: r79830 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ede0742be4f0..d37485098b34 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-03-22 Andrew Pinski + + * config/rs6000/rs6000.c (symbol_ref_operand): Reject symbols + who are not local for Darwin PIC. + 2004-03-22 Ulrich Weigand * regrename.c (regrename_optimize): Set regs_ever_live for all diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index e046aa4dd071..8fa0ae6ab035 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -2260,6 +2260,23 @@ symbol_ref_operand (rtx op, enum machine_mode mode) if (mode != VOIDmode && GET_MODE (op) != mode) return 0; +#if TARGET_MACHO + if (GET_CODE (op) == SYMBOL_REF && TARGET_MACHO && MACHOPIC_INDIRECT) + { + /* Macho says it has to go through a stub or be local + when indirect mode. Stubs are considered local. */ + const char *t = XSTR (op, 0); + /* "&" means that it is it a local defined symbol + so it is okay to call to. */ + if (t[0] == '&') + return true; + + /* "!T" means that the function is local defined. */ + return (t[0] == '!' && t[1] == 'T'); + } +#endif + + return (GET_CODE (op) == SYMBOL_REF && (DEFAULT_ABI != ABI_AIX || SYMBOL_REF_FUNCTION_P (op))); }