From 9f2e34e1eb08cf02cb454edb67fc3dacb8b1b555 Mon Sep 17 00:00:00 2001 From: Alan Modra <amodra@gmail.com> Date: Thu, 23 Sep 2010 20:20:48 +0930 Subject: [PATCH] rs6000.c (toc_relative_ok): Delete. * config/rs6000/rs6000.c (toc_relative_ok): Delete. (rs6000_emit_move): Use SYMBOL_REF_LOCAL_P instead. From-SVN: r164553 --- gcc/ChangeLog | 5 +++++ gcc/config/rs6000/rs6000.c | 42 +------------------------------------- 2 files changed, 6 insertions(+), 41 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 156f09c78c7d..3f2e66fdebe7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-09-23 Alan Modra <amodra@gmail.com> + + * config/rs6000/rs6000.c (toc_relative_ok): Delete. + (rs6000_emit_move): Use SYMBOL_REF_LOCAL_P instead. + 2010-09-23 Bernd Schmidt <bernds@codesourcery.com> PR rtl-optimization/44374 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 4dc7b80a3c0c..55cb92fa4ad8 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -7032,46 +7032,6 @@ rs6000_eliminate_indexed_memrefs (rtx operands[2]) copy_addr_to_reg (XEXP (operands[1], 0))); } -/* Return true if OP, a SYMBOL_REF, should be considered local when - generating -mcmodel=medium code. */ - -static bool -toc_relative_ok (rtx op) -{ - tree decl; - - if (!SYMBOL_REF_LOCAL_P (op)) - return false; - - /* This is a bit hard to explain. When building shared libraries, - you are supposed to pass -fpic or -fPIC to the compiler. - -fpic/-fPIC not only generate position independent code but also - generate code that supports ELF shared library global function - or variable overriding. ppc64 is always PIC and at least some of - the ELF shared libaray semantics of global variables happen to be - supported without -fpic/-fPIC. So people may not be careful - about using -fPIC for shared libs. - With -mcmodel=medium this situation changes. A shared library - built without -fpic/-fPIC requires text relocs for global var - access (and would fail to load since glibc ld.so doesn't support - the required dynamic relocs). So avoid this potential - problem by using -mcmodel=large access for global vars, unless - we know we are compiling for an executable. */ - if (flag_pie) - return true; - - decl = SYMBOL_REF_DECL (op); - if (!decl || !DECL_P (decl)) - return true; - if (!TREE_PUBLIC (decl)) - return true; - if (DECL_VISIBILITY (decl) != VISIBILITY_DEFAULT) - return true; - - /* If we get here we must have a global var. See binds_local_p. */ - return flag_whole_program; -} - /* Return true if memory accesses to DECL are known to never straddle a 32k boundary. */ @@ -7427,7 +7387,7 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode) || (TARGET_CMODEL == CMODEL_MEDIUM && GET_CODE (operands[1]) == SYMBOL_REF && !CONSTANT_POOL_ADDRESS_P (operands[1]) - && toc_relative_ok (operands[1]) + && SYMBOL_REF_LOCAL_P (operands[1]) && offsettable_ok_by_alignment (SYMBOL_REF_DECL (operands[1])))) { rtx reg = NULL_RTX; -- GitLab