config.gcc (sh-wrs-vxworks): Don't include dbxelf.h.
gcc/ * config.gcc (sh-wrs-vxworks): Don't include dbxelf.h. Include sh/elf.h, vx-common.h and vxworks.h. * config/sh/sh.h: Include config/vxworks-dummy.h. (SUBTARGET_OVERRIDE_OPTIONS): Define. (OVERRIDE_OPTIONS): Use it. * config/sh/sh.md (GOTaddr2picreg): Add suport for VxWorks RTPs. (vxworks_picreg): New pattern. * config/sh/vxworks.h (TARGET_OS_CPP_BUILTINS): Use VXWORKS_OS_CPP_BUILTINS. (LIB_SPEC, LINK_SPEC, STARTFILE_SPEC, ENDFILE_SPEC): Redefine to their VXWORKS_* equivalents. (SUBTARGET_OVERRIDE_OPTIONS, SUBTARGET_CPP_SPEC): Define. (SUBTARGET_LINK_EMUL_SUFFIX, FUNCTION_PROFILER): Define. * config/sh/lib1funcs.asm (NO_FPSCR_VALUES): Define for VxWorks PIC. (set_fpscr, ic_invalidate): Add VxWorks PIC sequences. * config/sh/t-vxworks (MULTILIB_OPTIONS): Add m4a, -mrtp and -mrtp/-fPIC multilibs. (MULTILIB_EXCEPTIONS): Generalize globs accordingly. (MULTILIB_MATCHES, EXTRA_MULTILIB_PARTS): Define. (MULTILIB_OSDIRNAMES): Delete. From-SVN: r124145
This commit is contained in:
parent
3a35ee02c8
commit
f5c7290e1e
|
@ -1,3 +1,26 @@
|
||||||
|
2007-04-25 Richard Sandiford <richard@codesourcery.com>
|
||||||
|
|
||||||
|
* config.gcc (sh-wrs-vxworks): Don't include dbxelf.h. Include
|
||||||
|
sh/elf.h, vx-common.h and vxworks.h.
|
||||||
|
* config/sh/sh.h: Include config/vxworks-dummy.h.
|
||||||
|
(SUBTARGET_OVERRIDE_OPTIONS): Define.
|
||||||
|
(OVERRIDE_OPTIONS): Use it.
|
||||||
|
* config/sh/sh.md (GOTaddr2picreg): Add suport for VxWorks RTPs.
|
||||||
|
(vxworks_picreg): New pattern.
|
||||||
|
* config/sh/vxworks.h (TARGET_OS_CPP_BUILTINS): Use
|
||||||
|
VXWORKS_OS_CPP_BUILTINS.
|
||||||
|
(LIB_SPEC, LINK_SPEC, STARTFILE_SPEC, ENDFILE_SPEC): Redefine
|
||||||
|
to their VXWORKS_* equivalents.
|
||||||
|
(SUBTARGET_OVERRIDE_OPTIONS, SUBTARGET_CPP_SPEC): Define.
|
||||||
|
(SUBTARGET_LINK_EMUL_SUFFIX, FUNCTION_PROFILER): Define.
|
||||||
|
* config/sh/lib1funcs.asm (NO_FPSCR_VALUES): Define for VxWorks PIC.
|
||||||
|
(set_fpscr, ic_invalidate): Add VxWorks PIC sequences.
|
||||||
|
* config/sh/t-vxworks (MULTILIB_OPTIONS): Add m4a, -mrtp and
|
||||||
|
-mrtp/-fPIC multilibs.
|
||||||
|
(MULTILIB_EXCEPTIONS): Generalize globs accordingly.
|
||||||
|
(MULTILIB_MATCHES, EXTRA_MULTILIB_PARTS): Define.
|
||||||
|
(MULTILIB_OSDIRNAMES): Delete.
|
||||||
|
|
||||||
2007-04-25 Anatoly Sokolov <aesok@post.ru>
|
2007-04-25 Anatoly Sokolov <aesok@post.ru>
|
||||||
|
|
||||||
PR target/18989
|
PR target/18989
|
||||||
|
|
|
@ -2236,7 +2236,7 @@ sh-*-rtems*)
|
||||||
;;
|
;;
|
||||||
sh-wrs-vxworks)
|
sh-wrs-vxworks)
|
||||||
tmake_file="$tmake_file sh/t-sh sh/t-elf sh/t-vxworks"
|
tmake_file="$tmake_file sh/t-sh sh/t-elf sh/t-vxworks"
|
||||||
tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/embed-elf.h sh/vxworks.h"
|
tm_file="${tm_file} elfos.h svr4.h sh/elf.h sh/embed-elf.h vx-common.h vxworks.h sh/vxworks.h"
|
||||||
;;
|
;;
|
||||||
sh-*-*)
|
sh-*-*)
|
||||||
tm_file="${tm_file} dbxcoff.h sh/coff.h"
|
tm_file="${tm_file} dbxcoff.h sh/coff.h"
|
||||||
|
|
|
@ -40,6 +40,13 @@ Boston, MA 02110-1301, USA. */
|
||||||
|
|
||||||
#include "lib1funcs.h"
|
#include "lib1funcs.h"
|
||||||
|
|
||||||
|
/* t-vxworks needs to build both PIC and non-PIC versions of libgcc,
|
||||||
|
so it is more convenient to define NO_FPSCR_VALUES here than to
|
||||||
|
define it on the command line. */
|
||||||
|
#if defined __vxworks && defined __PIC__
|
||||||
|
#define NO_FPSCR_VALUES
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ! __SH5__
|
#if ! __SH5__
|
||||||
#ifdef L_ashiftrt
|
#ifdef L_ashiftrt
|
||||||
.global GLOBAL(ashiftrt_r4_0)
|
.global GLOBAL(ashiftrt_r4_0)
|
||||||
|
@ -1967,9 +1974,16 @@ GLOBAL(set_fpscr):
|
||||||
lds r4,fpscr
|
lds r4,fpscr
|
||||||
#ifdef __PIC__
|
#ifdef __PIC__
|
||||||
mov.l r12,@-r15
|
mov.l r12,@-r15
|
||||||
|
#ifdef __vxworks
|
||||||
|
mov.l LOCAL(set_fpscr_L0_base),r12
|
||||||
|
mov.l LOCAL(set_fpscr_L0_index),r0
|
||||||
|
mov.l @r12,r12
|
||||||
|
mov.l @(r0,r12),r12
|
||||||
|
#else
|
||||||
mova LOCAL(set_fpscr_L0),r0
|
mova LOCAL(set_fpscr_L0),r0
|
||||||
mov.l LOCAL(set_fpscr_L0),r12
|
mov.l LOCAL(set_fpscr_L0),r12
|
||||||
add r0,r12
|
add r0,r12
|
||||||
|
#endif
|
||||||
mov.l LOCAL(set_fpscr_L1),r0
|
mov.l LOCAL(set_fpscr_L1),r0
|
||||||
mov.l @(r0,r12),r1
|
mov.l @(r0,r12),r1
|
||||||
mov.l @r15+,r12
|
mov.l @r15+,r12
|
||||||
|
@ -2004,8 +2018,15 @@ GLOBAL(set_fpscr):
|
||||||
#endif
|
#endif
|
||||||
.align 2
|
.align 2
|
||||||
#ifdef __PIC__
|
#ifdef __PIC__
|
||||||
|
#ifdef __vxworks
|
||||||
|
LOCAL(set_fpscr_L0_base):
|
||||||
|
.long ___GOTT_BASE__
|
||||||
|
LOCAL(set_fpscr_L0_index):
|
||||||
|
.long ___GOTT_INDEX__
|
||||||
|
#else
|
||||||
LOCAL(set_fpscr_L0):
|
LOCAL(set_fpscr_L0):
|
||||||
.long _GLOBAL_OFFSET_TABLE_
|
.long _GLOBAL_OFFSET_TABLE_
|
||||||
|
#endif
|
||||||
LOCAL(set_fpscr_L1):
|
LOCAL(set_fpscr_L1):
|
||||||
.long GLOBAL(fpscr_values@GOT)
|
.long GLOBAL(fpscr_values@GOT)
|
||||||
#else
|
#else
|
||||||
|
@ -2080,12 +2101,22 @@ GLOBAL(ic_invalidate):
|
||||||
.global GLOBAL(ic_invalidate)
|
.global GLOBAL(ic_invalidate)
|
||||||
HIDDEN_FUNC(GLOBAL(ic_invalidate))
|
HIDDEN_FUNC(GLOBAL(ic_invalidate))
|
||||||
GLOBAL(ic_invalidate):
|
GLOBAL(ic_invalidate):
|
||||||
mov.l 0f,r1
|
|
||||||
#ifdef __pic__
|
#ifdef __pic__
|
||||||
mova 0f,r0
|
#ifdef __vxworks
|
||||||
mov.l 1f,r2
|
mov.l 1f,r1
|
||||||
|
mov.l 2f,r0
|
||||||
|
mov.l @r1,r1
|
||||||
|
mov.l 0f,r2
|
||||||
|
mov.l @(r0,r1),r0
|
||||||
|
#else
|
||||||
|
mov.l 1f,r1
|
||||||
|
mova 1f,r0
|
||||||
|
mov.l 0f,r2
|
||||||
add r1,r0
|
add r1,r0
|
||||||
|
#endif
|
||||||
mov.l @(r0,r2),r1
|
mov.l @(r0,r2),r1
|
||||||
|
#else
|
||||||
|
mov.l 0f,r1
|
||||||
#endif
|
#endif
|
||||||
ocbwb @r4
|
ocbwb @r4
|
||||||
mov.l @(8,r1),r0
|
mov.l @(8,r1),r0
|
||||||
|
@ -2098,9 +2129,13 @@ GLOBAL(ic_invalidate):
|
||||||
0: .long GLOBAL(ic_invalidate_array)
|
0: .long GLOBAL(ic_invalidate_array)
|
||||||
#else /* __pic__ */
|
#else /* __pic__ */
|
||||||
.global GLOBAL(ic_invalidate_array)
|
.global GLOBAL(ic_invalidate_array)
|
||||||
/* ??? Why won't the assembler allow to add these two constants? */
|
0: .long GLOBAL(ic_invalidate_array)@GOT
|
||||||
0: .long _GLOBAL_OFFSET_TABLE_
|
#ifdef __vxworks
|
||||||
1: .long GLOBAL(ic_invalidate_array)@GOT
|
1: .long ___GOTT_BASE__
|
||||||
|
2: .long ___GOTT_INDEX__
|
||||||
|
#else
|
||||||
|
1: .long _GLOBAL_OFFSET_TABLE_
|
||||||
|
#endif
|
||||||
ENDFUNC(GLOBAL(ic_invalidate))
|
ENDFUNC(GLOBAL(ic_invalidate))
|
||||||
#endif /* __pic__ */
|
#endif /* __pic__ */
|
||||||
#endif /* SH4 */
|
#endif /* SH4 */
|
||||||
|
|
|
@ -24,6 +24,8 @@ Boston, MA 02110-1301, USA. */
|
||||||
#ifndef GCC_SH_H
|
#ifndef GCC_SH_H
|
||||||
#define GCC_SH_H
|
#define GCC_SH_H
|
||||||
|
|
||||||
|
#include "config/vxworks-dummy.h"
|
||||||
|
|
||||||
#define TARGET_VERSION \
|
#define TARGET_VERSION \
|
||||||
fputs (" (Hitachi SH)", stderr);
|
fputs (" (Hitachi SH)", stderr);
|
||||||
|
|
||||||
|
@ -530,10 +532,13 @@ extern enum sh_divide_strategy_e sh_div_strategy;
|
||||||
#define SH_DIV_STRATEGY_DEFAULT SH_DIV_CALL
|
#define SH_DIV_STRATEGY_DEFAULT SH_DIV_CALL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define SUBTARGET_OVERRIDE_OPTIONS (void) 0
|
||||||
|
|
||||||
#define OVERRIDE_OPTIONS \
|
#define OVERRIDE_OPTIONS \
|
||||||
do { \
|
do { \
|
||||||
int regno; \
|
int regno; \
|
||||||
\
|
\
|
||||||
|
SUBTARGET_OVERRIDE_OPTIONS; \
|
||||||
if (flag_finite_math_only == 2) \
|
if (flag_finite_math_only == 2) \
|
||||||
flag_finite_math_only \
|
flag_finite_math_only \
|
||||||
= !flag_signaling_nans && TARGET_SH2E && ! TARGET_IEEE; \
|
= !flag_signaling_nans && TARGET_SH2E && ! TARGET_IEEE; \
|
||||||
|
|
|
@ -8288,6 +8288,14 @@ label:
|
||||||
(set (match_dup 0) (plus:SI (match_dup 0) (reg:SI R0_REG)))]
|
(set (match_dup 0) (plus:SI (match_dup 0) (reg:SI R0_REG)))]
|
||||||
"" "
|
"" "
|
||||||
{
|
{
|
||||||
|
if (TARGET_VXWORKS_RTP)
|
||||||
|
{
|
||||||
|
rtx gott_base = gen_rtx_SYMBOL_REF (Pmode, VXWORKS_GOTT_BASE);
|
||||||
|
rtx gott_index = gen_rtx_SYMBOL_REF (Pmode, VXWORKS_GOTT_INDEX);
|
||||||
|
emit_insn (gen_vxworks_picreg (gott_base, gott_index));
|
||||||
|
DONE;
|
||||||
|
}
|
||||||
|
|
||||||
operands[0] = gen_rtx_REG (Pmode, PIC_REG);
|
operands[0] = gen_rtx_REG (Pmode, PIC_REG);
|
||||||
operands[1] = gen_rtx_SYMBOL_REF (VOIDmode, GOT_SYMBOL_NAME);
|
operands[1] = gen_rtx_SYMBOL_REF (VOIDmode, GOT_SYMBOL_NAME);
|
||||||
|
|
||||||
|
@ -8330,6 +8338,21 @@ label:
|
||||||
}
|
}
|
||||||
")
|
")
|
||||||
|
|
||||||
|
;; A helper for GOTaddr2picreg to finish up the initialization of the
|
||||||
|
;; PIC register.
|
||||||
|
|
||||||
|
(define_expand "vxworks_picreg"
|
||||||
|
[(set (reg:SI PIC_REG)
|
||||||
|
(const:SI (unspec:SI [(match_operand:SI 0 "" "")] UNSPEC_PIC)))
|
||||||
|
(set (reg:SI R0_REG)
|
||||||
|
(const:SI (unspec:SI [(match_operand:SI 1 "" "")] UNSPEC_PIC)))
|
||||||
|
(set (reg:SI PIC_REG)
|
||||||
|
(mem:SI (reg:SI PIC_REG)))
|
||||||
|
(set (reg:SI PIC_REG)
|
||||||
|
(mem:SI (plus:SI (reg:SI PIC_REG)
|
||||||
|
(reg:SI R0_REG))))]
|
||||||
|
"TARGET_VXWORKS_RTP")
|
||||||
|
|
||||||
(define_insn "*ptb"
|
(define_insn "*ptb"
|
||||||
[(set (match_operand 0 "target_reg_operand" "=b")
|
[(set (match_operand 0 "target_reg_operand" "=b")
|
||||||
(const (unspec [(match_operand 1 "" "Csy")]
|
(const (unspec [(match_operand 1 "" "Csy")]
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
# Multilibs for VxWorks.
|
# Multilibs for VxWorks.
|
||||||
|
|
||||||
MULTILIB_OPTIONS = m2/m3/m4 ml
|
MULTILIB_OPTIONS = mrtp fPIC m2/m3/m4/m4a ml
|
||||||
|
# Don't build -fPIC without -mrtp, or -ml without -m3/-m4.
|
||||||
MULTILIB_EXCEPTIONS = ml m2/ml
|
MULTILIB_EXCEPTIONS = fPIC* ml* mrtp/ml* mrtp/fPIC/ml* *m2/ml*
|
||||||
|
MULTILIB_MATCHES = m2=m4-nofpu fPIC=fpic
|
||||||
MULTILIB_OSDIRNAMES = \
|
|
||||||
m2=!SH7600gnu \
|
|
||||||
m3=!SH7700gnu m3/ml=!SH7700gnule \
|
|
||||||
m4=!SH7750gnu m4/ml=!SH7750gnule
|
|
||||||
|
|
||||||
|
# Restore a variable from t-vxworks clobbered by t-elf.
|
||||||
|
EXTRA_MULTILIB_PARTS =
|
||||||
|
|
|
@ -22,29 +22,36 @@ Boston, MA 02110-1301, USA. */
|
||||||
|
|
||||||
|
|
||||||
#define TARGET_OS_CPP_BUILTINS() \
|
#define TARGET_OS_CPP_BUILTINS() \
|
||||||
do { \
|
do \
|
||||||
builtin_define ("__vxworks"); \
|
{ \
|
||||||
builtin_define ("CPU=SH7000"); \
|
builtin_define ("CPU=SH7000"); \
|
||||||
} while (0)
|
VXWORKS_OS_CPP_BUILTINS (); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
#undef SUBTARGET_OVERRIDE_OPTIONS
|
||||||
|
#define SUBTARGET_OVERRIDE_OPTIONS VXWORKS_OVERRIDE_OPTIONS
|
||||||
|
|
||||||
|
#undef SUBTARGET_CPP_SPEC
|
||||||
|
#define SUBTARGET_CPP_SPEC VXWORKS_ADDITIONAL_CPP_SPEC
|
||||||
|
|
||||||
|
#undef SUBTARGET_LINK_EMUL_SUFFIX
|
||||||
|
#define SUBTARGET_LINK_EMUL_SUFFIX "_vxworks"
|
||||||
|
|
||||||
/* VxWorks does all the library stuff itself. */
|
|
||||||
#undef LIB_SPEC
|
#undef LIB_SPEC
|
||||||
#define LIB_SPEC ""
|
#define LIB_SPEC VXWORKS_LIB_SPEC
|
||||||
|
|
||||||
/* VxWorks uses object files, not loadable images. Make the linker just
|
|
||||||
combine objects. */
|
|
||||||
#undef LINK_SPEC
|
#undef LINK_SPEC
|
||||||
#define LINK_SPEC "-r"
|
#define LINK_SPEC VXWORKS_LINK_SPEC " " SH_LINK_SPEC
|
||||||
|
|
||||||
/* VxWorks provides the functionality of crt0.o and friends itself. */
|
|
||||||
#undef STARTFILE_SPEC
|
#undef STARTFILE_SPEC
|
||||||
#define STARTFILE_SPEC ""
|
#define STARTFILE_SPEC VXWORKS_STARTFILE_SPEC
|
||||||
|
|
||||||
#undef ENDFILE_SPEC
|
#undef ENDFILE_SPEC
|
||||||
#define ENDFILE_SPEC ""
|
#define ENDFILE_SPEC VXWORKS_ENDFILE_SPEC
|
||||||
|
|
||||||
#undef TARGET_VERSION
|
#undef TARGET_VERSION
|
||||||
#define TARGET_VERSION fputs (" (SH/VxWorks)", stderr);
|
#define TARGET_VERSION fputs (" (SH/VxWorks)", stderr);
|
||||||
|
|
||||||
/* There is no default multilib. */
|
/* There is no default multilib. */
|
||||||
#undef MULTILIB_DEFAULTS
|
#undef MULTILIB_DEFAULTS
|
||||||
|
|
||||||
|
#undef FUNCTION_PROFILER
|
||||||
|
#define FUNCTION_PROFILER VXWORKS_FUNCTION_PROFILER
|
||||||
|
|
Loading…
Reference in New Issue