From: Richard Sandiford Date: Tue, 19 Aug 2003 06:15:09 +0000 (+0000) Subject: re PR target/11924 (mips64-linux o32 accesses to certain file-local data incorrectly... X-Git-Tag: releases/gcc-3.4.0~4210 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4b8174ff7aa7e610985d6eb0e54b1c1256121723;p=thirdparty%2Fgcc.git re PR target/11924 (mips64-linux o32 accesses to certain file-local data incorrectly generated) PR target/11924 * config/mips/mips.c (INTERNAL_SYMBOL_P): New macro. (mips_classify_symbol, m16_usym8_4, m16_usym5_4): Use it. From-SVN: r70556 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b62d2c98a2ee..039df7454c30 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-08-19 Richard Sandiford + + PR target/11924 + * config/mips/mips.c (INTERNAL_SYMBOL_P): New macro. + (mips_classify_symbol, m16_usym8_4, m16_usym5_4): Use it. + 2003-08-18 Matt Kraai PR c/11207 diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 7e7bcc3f9a30..e90282161509 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -75,6 +75,9 @@ enum internal_test { #define SINGLE_WORD_MODE_P(MODE) \ ((MODE) != BLKmode && GET_MODE_SIZE (MODE) <= UNITS_PER_WORD) +/* True if the given SYMBOL_REF is for an internally-generated symbol. */ +#define INTERNAL_SYMBOL_P(SYM) \ + (XSTR (SYM, 0)[0] == '*' && XSTR (SYM, 0)[1] == LOCAL_LABEL_PREFIX[0]) /* Classifies a non-literal integer constant. @@ -857,9 +860,7 @@ mips_classify_symbol (rtx x) return SYMBOL_GENERAL; } - if (XSTR (x, 0)[0] == '*' - && strncmp (XSTR (x, 0) + 1, LOCAL_LABEL_PREFIX, - sizeof LOCAL_LABEL_PREFIX - 1) == 0) + if (INTERNAL_SYMBOL_P (x)) { /* The symbol is a local label. For TARGET_MIPS16, SYMBOL_REF_FLAG will be set if the symbol refers to a string in the current @@ -2086,9 +2087,7 @@ m16_usym8_4 (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) if (GET_CODE (op) == SYMBOL_REF && SYMBOL_REF_FLAG (op) && cfun->machine->insns_len > 0 - && XSTR (op, 0)[0] == '*' - && strncmp (XSTR (op, 0) + 1, LOCAL_LABEL_PREFIX, - sizeof LOCAL_LABEL_PREFIX - 1) == 0 + && INTERNAL_SYMBOL_P (op) && (cfun->machine->insns_len + get_pool_size () + mips_string_length < 4 * 0x100)) { @@ -2111,9 +2110,7 @@ m16_usym5_4 (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) if (GET_CODE (op) == SYMBOL_REF && SYMBOL_REF_FLAG (op) && cfun->machine->insns_len > 0 - && XSTR (op, 0)[0] == '*' - && strncmp (XSTR (op, 0) + 1, LOCAL_LABEL_PREFIX, - sizeof LOCAL_LABEL_PREFIX - 1) == 0 + && INTERNAL_SYMBOL_P (op) && (cfun->machine->insns_len + get_pool_size () + mips_string_length < 4 * 0x20)) {