Commit ff0b6b99 by Franz Sirl Committed by Franz Sirl

rtl.h (SYMBOL_REF_WEAK): New macro.

        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
parent 6f221402
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> 2001-05-13 Mark Mitchell <mark@codesourcery.com>
* Makefile.in (STAMP): New macro. * Makefile.in (STAMP): New macro.
...@@ -446,7 +454,7 @@ Mon May 7 09:30:14 2001 Jeffrey A Law (law@cygnus.com) ...@@ -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 * simplify-rtx.c (simplify_binary_operation): Simplify ~a + 1
into -a. 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 * config/rs6000/rs6000.md (ashldi3 splits): Guard with
TARGET_POWERPC64. TARGET_POWERPC64.
......
...@@ -2008,13 +2008,6 @@ clutter the program with a cast to @code{void} whenever the value isn't ...@@ -2008,13 +2008,6 @@ clutter the program with a cast to @code{void} whenever the value isn't
useful. useful.
@item @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. Making @samp{-fshort-enums} the default.
This would cause storage layout to be incompatible with most other C This would cause storage layout to be incompatible with most other C
......
...@@ -162,7 +162,8 @@ typedef struct rtx_def ...@@ -162,7 +162,8 @@ typedef struct rtx_def
unsigned int used : 1; unsigned int used : 1;
/* Nonzero if this rtx came from procedure integration. /* Nonzero if this rtx came from procedure integration.
In a REG, nonzero means this reg refers to the return value 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; unsigned integrated : 1;
/* 1 in an INSN or a SET if this rtx is related to the call frame, /* 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 either changing how we compute the frame address or saving and
...@@ -934,6 +935,9 @@ extern unsigned int subreg_regno PARAMS ((rtx)); ...@@ -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. */ /* 1 means a SYMBOL_REF has been the library function in emit_library_call. */
#define SYMBOL_REF_USED(RTX) ((RTX)->used) #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, /* Define a macro to look for REG_INC notes,
but save time on machines where they never exist. */ but save time on machines where they never exist. */
......
...@@ -496,6 +496,13 @@ once. Stored in the @code{used} field. ...@@ -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. 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}. 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 @findex LABEL_OUTSIDE_LOOP_P
@cindex @code{label_ref} and @samp{/s} @cindex @code{label_ref} and @samp{/s}
@cindex @code{in_struct}, in @code{label_ref} @cindex @code{in_struct}, in @code{label_ref}
......
...@@ -207,11 +207,9 @@ rtx_addr_can_trap_p (x) ...@@ -207,11 +207,9 @@ rtx_addr_can_trap_p (x)
switch (code) switch (code)
{ {
case SYMBOL_REF: case SYMBOL_REF:
return SYMBOL_REF_WEAK (x);
case LABEL_REF: 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; return 0;
case REG: case REG:
......
...@@ -747,6 +747,7 @@ make_decl_rtl (decl, asmspec) ...@@ -747,6 +747,7 @@ make_decl_rtl (decl, asmspec)
SET_DECL_RTL (decl, gen_rtx_MEM (DECL_MODE (decl), SET_DECL_RTL (decl, gen_rtx_MEM (DECL_MODE (decl),
gen_rtx_SYMBOL_REF (Pmode, name))); gen_rtx_SYMBOL_REF (Pmode, name)));
SYMBOL_REF_WEAK (XEXP (DECL_RTL (decl), 0)) = DECL_WEAK (decl);
if (TREE_CODE (decl) != FUNCTION_DECL) if (TREE_CODE (decl) != FUNCTION_DECL)
set_mem_attributes (DECL_RTL (decl), decl, 1); set_mem_attributes (DECL_RTL (decl), decl, 1);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment