diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7922056a63df..26cd943254ff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Wed Aug 12 12:39:16 1998 Gavin Romig-Koch + + * 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 * sparc.c: Change return to ; return; in functions diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 27256e5919cd..8bf22c37aa64 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -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)); \