From: Richard Sandiford Date: Sun, 29 Oct 2006 11:00:08 +0000 (+0000) Subject: mips.c (mips_classify_symbol): Test DECL_WEAK as well as TREE_PUBLIC when deciding... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5f687d19e06bbdeccc7a0b6d831ae884d177b522;p=gcc.git mips.c (mips_classify_symbol): Test DECL_WEAK as well as TREE_PUBLIC when deciding whether to return... gcc/ * config/mips/mips.c (mips_classify_symbol): Test DECL_WEAK as well as TREE_PUBLIC when deciding whether to return SYMBOL_GOT_GLOBAL. From-SVN: r118137 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 670536c1b15..20b251ce597 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-10-29 Richard Sandiford + + * config/mips/mips.c (mips_classify_symbol): Test DECL_WEAK as well + as TREE_PUBLIC when deciding whether to return SYMBOL_GOT_GLOBAL. + 2006-10-29 Kazu Hirata * config/darwin.c, config/darwin.opt, config/ia64/itanium1.md, diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index ea5ec26f45b..5fe1b505cb7 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -1198,6 +1198,8 @@ struct gcc_target targetm = TARGET_INITIALIZER; static enum mips_symbol_type mips_classify_symbol (rtx x) { + tree decl; + if (GET_CODE (x) == LABEL_REF) { if (TARGET_MIPS16) @@ -1229,7 +1231,8 @@ mips_classify_symbol (rtx x) if (TARGET_ABICALLS) { - if (SYMBOL_REF_DECL (x) == 0) + decl = SYMBOL_REF_DECL (x); + if (decl == 0) { if (!SYMBOL_REF_LOCAL_P (x)) return SYMBOL_GOT_GLOBAL; @@ -1257,11 +1260,15 @@ mips_classify_symbol (rtx x) In the third case we have more freedom since both forms of access will work for any kind of symbol. However, there seems - little point in doing things differently. */ - if (DECL_P (SYMBOL_REF_DECL (x)) - && TREE_PUBLIC (SYMBOL_REF_DECL (x)) - && !(TARGET_ABSOLUTE_ABICALLS - && targetm.binds_local_p (SYMBOL_REF_DECL (x)))) + little point in doing things differently. + + Note that weakref symbols are not TREE_PUBLIC, but their + targets are global or weak symbols. Relocations in the + object file will be against the target symbol, so it's + that symbol's binding that matters here. */ + if (DECL_P (decl) + && (TREE_PUBLIC (decl) || DECL_WEAK (decl)) + && !(TARGET_ABSOLUTE_ABICALLS && targetm.binds_local_p (decl))) return SYMBOL_GOT_GLOBAL; }