[Bug target/34981] [4.2/4.3 Regression] Lazily-bound function called twice

rsandifo at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Sat Jan 26 11:36:00 GMT 2008



------- Comment #2 from rsandifo at gcc dot gnu dot org  2008-01-26 10:22 -------
Subject: Bug 34981

Author: rsandifo
Date: Sat Jan 26 10:22:14 2008
New Revision: 131860

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=131860
Log:
gcc/
        PR target/34981
        * config/mips/mips-protos.h (mips_expand_call): Return an rtx.
        * 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_USE_GOT.
        * config/mips/mips.c (mips_emit_call_insn): New function.
        (mips_call_tls_get_addr): Call mips_expand_call directly.
        (mips16_copy_fpr_return_value): Use mips_emit_call_insn rather than
        emit_call_insn.
        (mips16_build_call_stub): Likewise.  Return the call insn or null.
        (mips_expand_call): Update the call to mips16_build_call_stub
        accordingly and a remove redundant condition.  Assert that MIPS16
        stubs do not use lazy binding.  Use mips_emit_call_insn and return
        the call insn.
        (mips_extra_live_on_entry): Include GOT_VERSION_REGNUM if
        TARGET_USE_GOT.
        (mips_hard_regno_mode_ok_p): Allow SImode for GOT_VERSION_REGNUM.
        (mips_avoid_hazard): Remove hazard_set handling.
        * 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_forced_no_abicalls and mips_forced_no_shared.
        (dg-mips-options): Avoid using -mabicalls with an implicit -mabi=eabi.
        Avoid using small data with -mabicalls.  Don't make -G0 force
        -mn-abicalls.  Skip -mabicalls and -mshared tests if the multilib
        forces the opposite option.

Added:
    trunk/gcc/testsuite/gcc.target/mips/lazy-binding-1.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/mips/mips-protos.h
    trunk/gcc/config/mips/mips.c
    trunk/gcc/config/mips/mips.h
    trunk/gcc/config/mips/mips.md
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.target/mips/mips.exp


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34981



More information about the Gcc-bugs mailing list