rs6000.c (current_file_function_operand): Return zero for weak functions.
authorDaniel Jacobowitz <drow@false.org>
Thu, 5 Aug 1999 07:17:35 +0000 (07:17 +0000)
committerJeff Law <law@gcc.gnu.org>
Thu, 5 Aug 1999 07:17:35 +0000 (01:17 -0600)
        * rs6000.c (current_file_function_operand): Return zero for
        weak functions.
        (rs6000_encode_section_info): Do not set SYMBOL_REF_FLAG for
        weak symbols.
        * rs6000.h (ENCODE_SECTION_NIFO): Do not set SYMBOL_REF_FLAG
        for weak symbols.

From-SVN: r28527

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h

index 7b37f795a3a93b216e9c45889ac23a361b6e5591..94bd0c9dc98ce2e0ec5adeb9bb90ac6084a338df 100644 (file)
@@ -1,3 +1,12 @@
+Thu Aug  5 01:14:13 1999  Daniel Jacobowitz <drow@false.org>
+
+       * rs6000.c (current_file_function_operand): Return zero for
+       weak functions.
+       (rs6000_encode_section_info): Do not set SYMBOL_REF_FLAG for
+       weak symbols.
+       * rs6000.h (ENCODE_SECTION_NIFO): Do not set SYMBOL_REF_FLAG
+       for weak symbols.
+
 Thu Aug  5 00:56:30 1999  Geoffrey Keating   <geoffk@cygnus.com>
 
        * rs6000.c (rs6000_stack_info): For ABI_V4/ABI_SOLARIS -fpic, always
index 2f49b37afb6d7c1ef8fb1dc4a405f0d26d2d848a..b3b6fa21015dafab4db65ee568b9aa5f86a0833b 100644 (file)
@@ -1117,7 +1117,7 @@ call_operand (op, mode)
 
 
 /* Return 1 if the operand is a SYMBOL_REF for a function known to be in
-   this file */
+   this file and the function is not weakly defined. */
 
 int
 current_file_function_operand (op, mode)
@@ -1126,7 +1126,8 @@ current_file_function_operand (op, mode)
 {
   return (GET_CODE (op) == SYMBOL_REF
          && (SYMBOL_REF_FLAG (op)
-             || op == XEXP (DECL_RTL (current_function_decl), 0)));
+             || (op == XEXP (DECL_RTL (current_function_decl), 0)
+                 && !DECL_WEAK (current_function_decl))));
 }
 
 
@@ -5900,7 +5901,8 @@ rs6000_encode_section_info (decl)
   if (TREE_CODE (decl) == FUNCTION_DECL)
     {
       rtx sym_ref = XEXP (DECL_RTL (decl), 0);
-      if (TREE_ASM_WRITTEN (decl) || ! TREE_PUBLIC (decl))
+      if ((TREE_ASM_WRITTEN (decl) || ! TREE_PUBLIC (decl))
+          && !DECL_WEAK (decl))
        SYMBOL_REF_FLAG (sym_ref) = 1;
 
       if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT)
index d5eb6f61e5693ed443390aa0886e68ed9a40edb8..3a86ec194e60123424ec1da184da179c621ea3b2 100644 (file)
@@ -2555,11 +2555,12 @@ extern int rs6000_trunc_used;
 /* If we are referencing a function that is static or is known to be
    in this file, make the SYMBOL_REF special.  We can use this to indicate
    that we can branch to this function without emitting a no-op after the
-   call.  */
+   call.  Do not set this flag if the function is weakly defined. */
 
 #define ENCODE_SECTION_INFO(DECL)  \
   if (TREE_CODE (DECL) == FUNCTION_DECL                        \
-      && (TREE_ASM_WRITTEN (DECL) || ! TREE_PUBLIC (DECL))) \
+      && (TREE_ASM_WRITTEN (DECL) || ! TREE_PUBLIC (DECL)) \
+      && !DECL_WEAK (DECL)) \
     SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;
 
 /* Indicate that jump tables go in the text section.  */