mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-08 19:57:37 +08:00
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:
parent
3f2b640a7a
commit
7c866fb522
@ -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,
|
||||
|
@ -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]);
|
||||
|
Loading…
Reference in New Issue
Block a user