summaryrefslogtreecommitdiff
path: root/gcc/configure.ac
diff options
context:
space:
mode:
authornemet <nemet@138bc75d-0d04-0410-961f-82ee72b054a4>2009-09-19 20:23:55 +0000
committernemet <nemet@138bc75d-0d04-0410-961f-82ee72b054a4>2009-09-19 20:23:55 +0000
commitca30e0b9103fa278d11bfea902cb9e315e40817f (patch)
treeb83b530090d1d703cf6e9697e8b8bb94870ed94a /gcc/configure.ac
parente3a5ec37243de9e20a70e393d78d3a36db9bbb4a (diff)
downloadgcc-ca30e0b9103fa278d11bfea902cb9e315e40817f.tar.gz
* config/mips/mips.opt (mrelax-pic-calls): New option.
* config/mips/mips.c (mips_strip_unspec_address): Move it up in the file. (mips_unspec_call): Change "unspec_call" expander into this. (mips_strip_unspec_call): New function. (mips_got_load): Call mips_unspec_call instead of gen_unspec_call<mode>. (mips16_build_call_stub): Fix comment for fp_code. Adjust call to MIPS_CALL. (mips_cfg_in_reorg): New function. (mips16_lay_out_constants): Use it to decide whether to call CFG-aware insn splitting. (r10k_insert_cache_barriers): Move CFG set-up code from here to mips_reorg. Move DF set-up code from here ... (mips_df_reorg): ... to here. Call r10k_insert_cache_barriers from here. (mips_reorg): Call mips_df_reorg instead of r10k_insert_cache_barriers. Move CFG set-up code here from r10k_insert_cache_barriers. (mips_call_expr_from_insn): New function. (mips_pic_call_symbol_from_set): Likewise. (mips_find_pic_call_symbol): Likewise. (mips_annotate_pic_call_expr): Likewise. (mips_get_pic_call_symbol): Likewise. (mips_annotate_pic_calls): Likewise. (mips_override_options): Disable -mrelax-pic-calls unless PIC calls are used. (mips_set_mips16_mode): Disable -mrelax-pic-calls for MIPS16. * config/mips/mips-protos.h (mips_get_pic_call_symbol): Declare it. * config/mips/mips.h (MIPS_CALL): Use it to print the .reloc directive. * config/mips/mips.md (UNSPEC_CALL_ATTR): New unspec. (unspec_call<mode>): Remove it. (sibcall_internal, sibcall_value_internal, sibcall_value_multiple_internal, call_internal, call_split, call_value_internal, call_value_split, call_value_multiple_internal, call_value_multiple_split): Pass SIZE_OPNO to MIPS_CALL. (call_internal_direct, call_direct_split, call_value_internal_direct, call_value_direct_split): Pass -1 as SIZE_OPNO to MIPS_CALL. * configure.ac <mips*-*-*>: Add test for .reloc R_MIPS_JALR. * configure: Regenerate. * doc/invoke.texi (Option Summary): Add -mrelax-pic-calls and -mno-relax-pic-calls. (MIPS Options): Document -mrelax-pic-calls and -mno-relax-pic-calls. testsuite/ * gcc.target/mips/mips.exp: Add relax-pic-calls under -mfoo/-mno-foo options. (mips-dg-options): Make -mrelax-pic-calls imply -mno-plt, -mabicalls and -mexplicit-relocs. * gcc.target/mips/call-1.c: New test. * gcc.target/mips/call-2.c: New test. * gcc.target/mips/call-3.c: New test. * gcc.target/mips/lazy-binding-1.c: Add MIPS-specific dg-options. * gcc.dg/tree-ssa/loop-1.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@151890 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/configure.ac')
-rw-r--r--gcc/configure.ac36
1 files changed, 36 insertions, 0 deletions
diff --git a/gcc/configure.ac b/gcc/configure.ac
index ca6e3c2ac51..d1eed729e59 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -3279,6 +3279,42 @@ x:
.dtprelword x+0x8000],,
[AC_DEFINE(HAVE_AS_DTPRELWORD, 1,
[Define if your assembler supports .dtprelword.])])
+
+ AC_MSG_CHECKING(assembler and linker for explicit JALR relocation)
+ gcc_cv_as_ld_jalr_reloc=no
+ if test $gcc_cv_as_mips_explicit_relocs = yes; then
+ if test $in_tree_ld = yes ; then
+ if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 20 -o "$gcc_cv_gld_major_version" -gt 2 \
+ && test $in_tree_ld_is_elf = yes; then
+ gcc_cv_as_ld_jalr_reloc=yes
+ fi
+ elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x -a x$gcc_cv_objdump != x; then
+ echo ' .ent x' > conftest.s
+ echo 'x: ld $2,%got_disp(y)($3)' >> conftest.s
+ echo ' ld $25,%call16(y)($28)' >> conftest.s
+ echo ' .reloc 1f,R_MIPS_JALR,y' >> conftest.s
+ echo '1: jalr $25' >> conftest.s
+ echo ' .reloc 1f,R_MIPS_JALR,x' >> conftest.s
+ echo '1: jalr $25' >> conftest.s
+ echo ' .end x' >> conftest.s
+ if $gcc_cv_as -o conftest.o conftest.s >/dev/null 2>&AS_MESSAGE_LOG_FD \
+ && $gcc_cv_ld -shared -o conftest.so conftest.o >/dev/null 2>&AS_MESSAGE_LOG_FD; then
+ if $gcc_cv_objdump -d conftest.so | grep -q jalr \
+ && $gcc_cv_objdump -d conftest.so | grep -q "bal.*<x>"; then
+ gcc_cv_as_ld_jalr_reloc=yes
+ fi
+ fi
+ rm -f conftest.*
+ fi
+ fi
+ if test $gcc_cv_as_ld_jalr_reloc = yes; then
+ if test x$target_cpu_default = x; then
+ target_cpu_default=MASK_RELAX_PIC_CALLS
+ else
+ target_cpu_default="($target_cpu_default)|MASK_RELAX_PIC_CALLS"
+ fi
+ fi
+ AC_MSG_RESULT($gcc_cv_as_ld_jalr_reloc)
;;
esac