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
This commit is contained in:
Jim Wilson 2000-08-24 20:44:04 +00:00 committed by Jim Wilson
parent 3f2b640a7a
commit 7c866fb522
2 changed files with 14 additions and 1 deletions

View File

@ -1,3 +1,8 @@
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>
* dwarf2out.c (AT_flag, AT_int, AT_unsigned, AT_string, AT_ref,

View File

@ -358,7 +358,15 @@
type of PIC address load. If this function gets deferred, we
may acquire information that changes the value of the
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]));
else
ia64_expand_load_address (operands[0], operands[1]);