diff options
author | Petar Jovanovic <petar.jovanovic@rt-rk.com> | 2015-04-29 20:28:52 +0000 |
---|---|---|
committer | Catherine Moore <clm@gcc.gnu.org> | 2015-04-29 16:28:52 -0400 |
commit | 8d92d2743c400d2b0bf14954e14bc343e1953168 (patch) | |
tree | a41bdb0346a871eff002147ce7843828b3e88e17 | |
parent | 3c908a5b5c5bf5693dd2c5a3f1858867d1b96034 (diff) | |
download | gcc-8d92d2743c400d2b0bf14954e14bc343e1953168.zip gcc-8d92d2743c400d2b0bf14954e14bc343e1953168.tar.gz gcc-8d92d2743c400d2b0bf14954e14bc343e1953168.tar.bz2 |
mips.h (CRT_CALL_STATIC_FUNCTION): Fix the macro to use la/jalr instead of jal.
gcc/ChangeLog:
2015-04-21 Petar Jovanovic <petar.jovanovic@rt-rk.com>
* config/mips/mips.h (CRT_CALL_STATIC_FUNCTION): Fix the macro to use
la/jalr instead of jal.
gcc/testsuite/ChangeLog:
2015-04-21 Petar Jovanovic <petar.jovanovic@rt-rk.com>
* gcc.target/mips/call-from-init.c: New test.
* gcc.target/mips/mips.exp: Add section_start to mips_option_groups.
From-SVN: r222589
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/mips/mips.h | 23 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/mips/call-from-init.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/mips/mips.exp | 1 |
5 files changed, 42 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4c95a75..3b363b0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-04-29 Petar Jovanovic <petar.jovanovic@rt-rk.com> + + * config/mips/mips.h (CRT_CALL_STATIC_FUNCTION): Fix the macro to use + la/jalr instead of jal. + 2015-04-29 Uros Bizjak <ubizjak@gmail.com> PR target/65871 diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index ec69ed5..4bd83f5 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -3034,11 +3034,11 @@ while (0) nop\n\ 1: .cpload $31\n\ .set reorder\n\ - jal " USER_LABEL_PREFIX #FUNC "\n\ + la $25, " USER_LABEL_PREFIX #FUNC "\n\ + jalr $25\n\ .set pop\n\ " TEXT_SECTION_ASM_OP); -#elif ((defined _ABIN32 && _MIPS_SIM == _ABIN32) \ - || (defined _ABI64 && _MIPS_SIM == _ABI64)) +#elif (defined _ABIN32 && _MIPS_SIM == _ABIN32) #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ asm (SECTION_OP "\n\ .set push\n\ @@ -3048,7 +3048,22 @@ while (0) nop\n\ 1: .set reorder\n\ .cpsetup $31, $2, 1b\n\ - jal " USER_LABEL_PREFIX #FUNC "\n\ + la $25, " USER_LABEL_PREFIX #FUNC "\n\ + jalr $25\n\ + .set pop\n\ + " TEXT_SECTION_ASM_OP); +#elif (defined _ABI64 && _MIPS_SIM == _ABI64) +#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ + asm (SECTION_OP "\n\ + .set push\n\ + .set nomips16\n\ + .set noreorder\n\ + bal 1f\n\ + nop\n\ +1: .set reorder\n\ + .cpsetup $31, $2, 1b\n\ + dla $25, " USER_LABEL_PREFIX #FUNC "\n\ + jalr $25\n\ .set pop\n\ " TEXT_SECTION_ASM_OP); #endif diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9d428f8..7aebfec 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-04-29 Petar Jovanovic <petar.jovanovic@rt-rk.com> + + * gcc.target/mips/call-from-init.c: New test. + * gcc.target/mips/mips.exp: Add section_start to mips_option_groups. + 2015-04-29 Uros Bizjak <ubizjak@gmail.com> PR target/65871 diff --git a/gcc/testsuite/gcc.target/mips/call-from-init.c b/gcc/testsuite/gcc.target/mips/call-from-init.c new file mode 100644 index 0000000..9c6ac00 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/call-from-init.c @@ -0,0 +1,12 @@ +/* Check that __do_global_ctors_aux can be reached from .init section that + is in a different (256MB) region. */ +/* { dg-do run { target { "mips*-*-linux*" } } } */ +/* { dg-skip-if "" { "mips*-sde-elf mips*-mti-elf mips*-img-elf" } } */ +/* { dg-options "-Wl,--section-start=.init=0x0FFF0000" } */ +/* { dg-options "-Wl,--section-start=.text=0x10000000" } */ +/* { dg-options "-mips32r2" } */ + +int +main (void) { + return 0; +} diff --git a/gcc/testsuite/gcc.target/mips/mips.exp b/gcc/testsuite/gcc.target/mips/mips.exp index a0980a9..1dd4173 100644 --- a/gcc/testsuite/gcc.target/mips/mips.exp +++ b/gcc/testsuite/gcc.target/mips/mips.exp @@ -254,6 +254,7 @@ set mips_option_groups { madd "HAS_MADD" maddps "HAS_MADDPS" lsa "(|!)HAS_LSA" + section_start "-Wl,--section-start=.*" } for { set option 0 } { $option < 32 } { incr option } { |