Commit 7c866fb5 by Jim Wilson Committed by Jim Wilson

Fix bfd/archive.c miscompilation.

	* config/ia64/ia64.md (movdi): Don't call gen_movdi_symbolic if
	we have a SYMBOL_REF with SYMBOL_REF_FLAG set.

From-SVN: r35955
parent 3f2b640a
2000-08-24 Jim Wilson <wilson@cygnus.com>
* config/ia64/ia64.md (movdi): Don't call gen_movdi_symbolic if
we have a SYMBOL_REF with SYMBOL_REF_FLAG set.
2000-08-24 Jason Merrill <jason@redhat.com> 2000-08-24 Jason Merrill <jason@redhat.com>
* dwarf2out.c (AT_flag, AT_int, AT_unsigned, AT_string, AT_ref, * dwarf2out.c (AT_flag, AT_int, AT_unsigned, AT_string, AT_ref,
......
...@@ -358,7 +358,15 @@ ...@@ -358,7 +358,15 @@
type of PIC address load. If this function gets deferred, we type of PIC address load. If this function gets deferred, we
may acquire information that changes the value of the may acquire information that changes the value of the
sdata_symbolic_operand predicate. */ sdata_symbolic_operand predicate. */
if (rtx_equal_function_value_matters) /* But don't delay for function pointers. Loading a function address
actually loads the address of the descriptor not the function.
If we represent these as SYMBOL_REFs, then they get cse'd with
calls, and we end up with calls to the descriptor address instead of
calls to the function address. Functions are not candidates for
sdata anyways. */
if (rtx_equal_function_value_matters
&& ! (GET_CODE (operands[1]) == SYMBOL_REF
&& SYMBOL_REF_FLAG (operands[1])))
emit_insn (gen_movdi_symbolic (operands[0], operands[1])); emit_insn (gen_movdi_symbolic (operands[0], operands[1]));
else else
ia64_expand_load_address (operands[0], operands[1]); ia64_expand_load_address (operands[0], operands[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