rtl.h (SYMBOL_REF_WEAK): New macro.
authorFranz Sirl <Franz.Sirl-kernel@lauterbach.com>
Sun, 13 May 2001 21:16:58 +0000 (21:16 +0000)
committerFranz Sirl <sirl@gcc.gnu.org>
Sun, 13 May 2001 21:16:58 +0000 (21:16 +0000)
        2001-05-13  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

        * rtl.h (SYMBOL_REF_WEAK): New macro.
        * rtlanal.h (rtx_addr_can_trap): Use it, a weak SYMBOL_REF can trap.
        * varasm.c (make_decl_rtl): Mark SYMBOL_REF weak if necessary.
        * rtl.texi (SYMBOL_REF_WEAK): Document it.
        * gcc.texi: Remove wrong description.

From-SVN: r42046

gcc/ChangeLog
gcc/gcc.texi
gcc/rtl.h
gcc/rtl.texi
gcc/rtlanal.c
gcc/varasm.c

index 5f11b1091a5cde2d96b5fc9aadfd66e7e0a8f695..6a7e6bc615e842b1691364ea3797049772fe66ec 100644 (file)
@@ -1,3 +1,11 @@
+2001-05-13  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
+
+       * rtl.h (SYMBOL_REF_WEAK): New macro.
+       * rtlanal.h (rtx_addr_can_trap): Use it, a weak SYMBOL_REF can trap.
+       * varasm.c (make_decl_rtl): Mark SYMBOL_REF weak if necessary.
+       * rtl.texi (SYMBOL_REF_WEAK): Document it.
+       * gcc.texi: Remove wrong description.
+
 2001-05-13  Mark Mitchell  <mark@codesourcery.com>
 
        * Makefile.in (STAMP): New macro.
@@ -446,7 +454,7 @@ Mon May  7 09:30:14 2001  Jeffrey A Law  (law@cygnus.com)
        * simplify-rtx.c (simplify_binary_operation): Simplify ~a + 1
        into -a.
 
-2000-05-04  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
+2001-05-04  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>
 
        * config/rs6000/rs6000.md (ashldi3 splits): Guard with
        TARGET_POWERPC64.
index 81b6bd5c2060d81757158d0d0c4d86e56d03c7ce..a2b90f1e217af7316291f129f271ad41e3d8e3e5 100644 (file)
@@ -2007,13 +2007,6 @@ return values which some callers may find useful; it makes no sense to
 clutter the program with a cast to @code{void} whenever the value isn't
 useful.
 
-@item
-Assuming (for optimization) that the address of an external symbol is
-never zero.
-
-This assumption is false on certain systems when @samp{#pragma weak} is
-used.
-
 @item
 Making @samp{-fshort-enums} the default.
 
index 4b1051c0b53cbe3434f39b9ffb9481fcab3e08cb..a9252105f5e2e2174a4530332d279df0fdec5b52 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -162,7 +162,8 @@ typedef struct rtx_def
   unsigned int used : 1;
   /* Nonzero if this rtx came from procedure integration.
      In a REG, nonzero means this reg refers to the return value
-     of the current function.  */
+     of the current function.
+     1 in a SYMBOL_REF if the symbol is weak.  */
   unsigned integrated : 1;
   /* 1 in an INSN or a SET if this rtx is related to the call frame,
      either changing how we compute the frame address or saving and
@@ -934,6 +935,9 @@ extern unsigned int subreg_regno    PARAMS ((rtx));
 /* 1 means a SYMBOL_REF has been the library function in emit_library_call.  */
 #define SYMBOL_REF_USED(RTX) ((RTX)->used)
 
+/* 1 means a SYMBOL_REF is weak.  */
+#define SYMBOL_REF_WEAK(RTX) ((RTX)->integrated)
+
 /* Define a macro to look for REG_INC notes,
    but save time on machines where they never exist.  */
 
index 4e1dd218ff7506afca90314f76b76178165334c8..6c256b4ed2f5d9192a25a41c919bbfd11e92c740 100644 (file)
@@ -496,6 +496,13 @@ once.  Stored in the @code{used} field.
 In a @code{symbol_ref}, this is used as a flag for machine-specific purposes.
 Stored in the @code{volatil} field and printed as @samp{/v}.
 
+@findex SYMBOL_REF_WEAK
+@cindex @code{symbol_ref} and @samp{/i}
+@cindex @code{integrated}, in @code{symbol_ref}
+@item SYMBOL_REF_WEAK (@var{x})
+In a @code{symbol_ref}, indicates that @var{x} has been declared weak.
+Stored in the @code{integrated} field and printed as @samp{/i}.
+
 @findex LABEL_OUTSIDE_LOOP_P
 @cindex @code{label_ref} and @samp{/s}
 @cindex @code{in_struct}, in @code{label_ref}
index 121b8791314de4f8a6d288e5bd6eca25ab1bb78e..b0e2f4eeb0f0c5559e4853bf908dee37f3610901 100644 (file)
@@ -207,11 +207,9 @@ rtx_addr_can_trap_p (x)
   switch (code)
     {
     case SYMBOL_REF:
+      return SYMBOL_REF_WEAK (x);
+
     case LABEL_REF:
-      /* SYMBOL_REF is problematic due to the possible presence of
-        a #pragma weak, but to say that loads from symbols can trap is
-        *very* costly.  It's not at all clear what's best here.  For
-        now, we ignore the impact of #pragma weak.  */
       return 0;
 
     case REG:
index 690098792ca2403901004943e7faee77edc0c757..9b2744a3fa5a28619e5e35154a88f6219e5c5c96 100644 (file)
@@ -747,6 +747,7 @@ make_decl_rtl (decl, asmspec)
 
   SET_DECL_RTL (decl, gen_rtx_MEM (DECL_MODE (decl),
                                   gen_rtx_SYMBOL_REF (Pmode, name)));
+  SYMBOL_REF_WEAK (XEXP (DECL_RTL (decl), 0)) = DECL_WEAK (decl);
   if (TREE_CODE (decl) != FUNCTION_DECL)
     set_mem_attributes (DECL_RTL (decl), decl, 1);