Commit bd9131c0 by Richard Sandiford Committed by Richard Sandiford

mips.c (mips_symbolic_constant_p): Don't allow out-of-bounds accesses to string constants.

	* config/mips/mips.c (mips_symbolic_constant_p): Don't allow
	out-of-bounds accesses to string constants.  Simplify mips16
	case accordingly.

From-SVN: r75670
parent 6732ee60
2004-01-11 Richard Sandiford <rsandifo@redhat.com>
* config/mips/mips.c (mips_symbolic_constant_p): Don't allow
out-of-bounds accesses to string constants. Simplify mips16
case accordingly.
2004-01-11 Richard Sandiford <rsandifo@redhat.com>
PR optimization/13469
* toplev.c (rest_of_compilation): Call purge_all_dead_edges after
reload_cse_regs (-fnon-call-exceptions only).
......
......@@ -902,6 +902,16 @@ mips_symbolic_constant_p (rtx x, enum mips_symbol_type *symbol_type)
if (offset == 0)
return true;
/* If X refers to a string constant, and that constant is put into a
mergeable section, the linker will need to know which string is
being accessed. It has no way of distinguishing an out-of-bounds
access to X from an in-bounds access to a later or earlier string. */
if (GET_CODE (x) == SYMBOL_REF
&& SYMBOL_REF_DECL (x) != 0
&& TREE_CODE (SYMBOL_REF_DECL (x)) == STRING_CST
&& !(offset > 0 && offset < TREE_STRING_LENGTH (SYMBOL_REF_DECL (x))))
return false;
/* Check whether a nonzero offset is valid for the underlying
relocations. */
switch (*symbol_type)
......@@ -917,11 +927,9 @@ mips_symbolic_constant_p (rtx x, enum mips_symbol_type *symbol_type)
return (offset > 0 && offset < mips_section_threshold);
case SYMBOL_CONSTANT_POOL:
/* Similarly check the range of offsets for mips16 constant
pool entries. */
return (CONSTANT_POOL_ADDRESS_P (x)
&& offset > 0
&& offset < (int) GET_MODE_SIZE (get_pool_mode (x)));
/* We don't generate out-of-bounds accesses to normal constant
pool entries. String constants were handled above. */
return true;
case SYMBOL_GOT_LOCAL:
case SYMBOL_GOTOFF_PAGE:
......
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