From 8f1b829ed295b4b834cd8fde9f3aa84932b86942 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Thu, 5 Aug 1999 07:17:35 +0000 Subject: [PATCH] rs6000.c (current_file_function_operand): Return zero for weak functions. * 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 | 9 +++++++++ gcc/config/rs6000/rs6000.c | 8 +++++--- gcc/config/rs6000/rs6000.h | 5 +++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7b37f795a3a..94bd0c9dc98 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +Thu Aug 5 01:14:13 1999 Daniel Jacobowitz + + * 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 * rs6000.c (rs6000_stack_info): For ABI_V4/ABI_SOLARIS -fpic, always diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 2f49b37afb6..b3b6fa21015 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -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) diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index d5eb6f61e56..3a86ec194e6 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -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. */