]> git.ipfire.org Git - thirdparty/gcc.git/commit
re PR target/34981 (Lazily-bound function called twice)
authorRichard Sandiford <rsandifo@nildram.co.uk>
Sat, 2 Feb 2008 09:55:42 +0000 (09:55 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sat, 2 Feb 2008 09:55:42 +0000 (09:55 +0000)
commit5e75160e52cc2e419732969ff621abb5a1582e0b
tree08d8a0202f3ae09873838de88842a358c344698a
parent0e2271bb1b43cf93cdc4d59aa3598edf902174a1
re PR target/34981 (Lazily-bound function called twice)

gcc/
PR target/34981
* config/mips/mips-protos.h (mips_expand_call): Return an rtx.
(build_mips16_call_stub): Likewise.
* config/mips/mips.h (FIRST_PSEUDO_REGISTER): Rename FAKE_CALL_REGNO
to GOT_VERSION_REGNUM.
(CALL_REALLY_USED_REGISTERS): Set the GOT_VERSION_REGNUM entry to 0.
(EPILOGUE_USES): Include GOT_VERSION_REGNUM if TARGET_ABICALLS.
* config/mips/mips.c (mips_emit_call_insn): New function.
(mips_call_tls_get_addr): Call mips_expand_call directly.
(mips_expand_call): Update the call to build_mips16_call_stub
and remove a redundant condition.  Assert that MIPS16 stubs do not
use lazy binding.  Use mips_emit_call_insn and return the call insn.
(override_options): Allow SImode for GOT_VERSION_REGNUM.
(build_mips16_call_stub): Use mips_emit_call_insn rather than
emit_call_insn.  Return the call insn or null.
(mips_avoid_hazard): Remove hazard_set handling.
(mips_extra_live_on_entry): Include GOT_VERSION_REGNUM if
TARGET_ABICALLS.
* config/mips/mips.md (UNSPEC_EH_RECEIVER): Rename to...
(UNSPEC_RESTORE_GP): ...this.
(UNSPEC_SET_GOT_VERSION, UNSPEC_UPDATE_GOT_VERSION): New constants.
(FAKE_CALL_REGNO): Rename to...
(GOT_VERSION_REGNUM): ...this.
(type): Add "ghost" value.  Add an associated insn reservation.
(hazard_set): Remove.
(exception_receiver): Rename to...
(restore_gp): ...this and update the unspec identifier accordingly.
(exception_receiver, nonlocal_got_receiver): New expanders.
(load_call<mode>): Use GOT_VERSION_REGNUM.  Don't set
FAKE_CALL_REGNO.  Remove hazard_set attribute.
(set_got_version, update_got_version): New patterns.

gcc/testsuite/
PR target/34981
* gcc.target/mips/lazy-binding-1.c: New test.
* gcc.target/mips/mips.exp (setup_mips_tests): Set mips_abi,
mips_forced_gp, mips_forced_no_abicalls, mips_forced_no_shared
and mips_forced_no_er.
(dg-mips-options): Avoid using -mips16 -mhard-float for ABIs
other than o32 and o64.  Avoid using -mabicalls with an implicit
-mabi=eabi.  Avoid using small data with -mabicalls.  Skip
-mabi=*, -G*, -mabicalls, -mshared and -mexplicit-relocs tests
if the multilib forces the an incompatible option.

From-SVN: r132067
gcc/ChangeLog
gcc/config/mips/mips-protos.h
gcc/config/mips/mips.c
gcc/config/mips/mips.h
gcc/config/mips/mips.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/mips/lazy-binding-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/mips/mips.exp