mips.h (ENCODE_SECTION_INFO): Set SYMBOL_REF_FLAG for VAR_DECL's in gp addressable...
authorGavin Romig-Koch <gavin@cygnus.com>
Wed, 12 Aug 1998 09:42:55 +0000 (09:42 +0000)
committerGavin Romig-Koch <gavin@gcc.gnu.org>
Wed, 12 Aug 1998 09:42:55 +0000 (09:42 +0000)
* mips/mips.h (ENCODE_SECTION_INFO): Set SYMBOL_REF_FLAG for
VAR_DECL's in gp addressable sections.

From-SVN: r21681

gcc/ChangeLog
gcc/config/mips/mips.h

index 7922056a63df82cfbecad3ad585a00e612c6ac25..26cd943254ff6ec3841acc4c5543b66f62466514 100644 (file)
@@ -1,3 +1,8 @@
+Wed Aug 12 12:39:16 1998  Gavin Romig-Koch  <gavin@cygnus.com>
+
+       * mips/mips.h (ENCODE_SECTION_INFO): Set SYMBOL_REF_FLAG for
+       VAR_DECL's in gp addressable sections.
+
 Tue Aug 11 23:02:31 1998  John Carr  <jfc@mit.edu>
 
        * sparc.c: Change return <exp> to <exp>; return; in functions
index 27256e5919cdd3e31ac22b0477ef2a74207be142..8bf22c37aa64a0a2c73efbf227209fe64b10fb17 100644 (file)
@@ -3043,7 +3043,13 @@ typedef struct mips_args {
    constants which are put in the .text section.  We also record the
    total length of all such strings; this total is used to decide
    whether we need to split the constant table, and need not be
-   precisely correct.  */
+   precisely correct. 
+
+   When not mips16 code nor embedded PIC, if a symbol is in a
+   gp addresable section, SYMBOL_REF_FLAG is set prevent gcc from
+   splitting the reference so that gas can generate a gp relative
+   reference.
+ */
 
 #define ENCODE_SECTION_INFO(DECL)                                      \
 do                                                                     \
@@ -3070,6 +3076,16 @@ do                                                                       \
          SYMBOL_REF_FLAG (XEXP (TREE_CST_RTL (DECL), 0)) = 1;          \
       }                                                                        \
                                                                        \
+    else if (TREE_CODE (DECL) == VAR_DECL                              \
+             && DECL_SECTION_NAME (DECL) != NULL_TREE                   \
+             && (0 == strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (DECL)), \
+                              ".sdata")                                 \
+                || 0 == strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (DECL)),\
+                              ".sbss")))                                \
+      {                                                                        \
+        SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;               \
+      }                                                                        \
+                                                                       \
     else if (TARGET_GP_OPT && TREE_CODE (DECL) == VAR_DECL)            \
       {                                                                        \
        int size = int_size_in_bytes (TREE_TYPE (DECL));                \