Commit b269e899 by Jerome Lambourg Committed by Olivier Hainque

config.gcc (*-*-vxworks*): Add TARGET_VXWORKS7=1 to tm_defines for all vxworks7 targets.

2017-06-26  Jerome Lambourg  <lambourg@adacore.com>
            Olivier Hainque  <hainque@adacore.com>

	* config.gcc (*-*-vxworks*): Add TARGET_VXWORKS7=1 to tm_defines
	for all vxworks7 targets.
	* config/vxworks.h (TARGET_VXWORKS7): If not defined, define to 0.
	(VXWORKS_ADDITIONAL_CPP_SPEC): Alternative definition for VXWORKS7.
	(VXWORKS_LIBS_RTP, VXWORKS_LIBS_RTP_DIR): New macros, allowing
	variations for VX6/VX7 and 32/64bits later on in ...
	(VXWORKS_LIB_SPEC): Leverage new macros.
	(VXWORKS_OS_CPP_BUILTINS): Define _VSB_CONFIG_FILE for VXWORKS7,
	as well as _ALLOW_KEYWORD_MACROS when "inline" is not a keyword.


Co-Authored-By: Olivier Hainque <hainque@adacore.com>

From-SVN: r249659
parent d6ef53f2
gcc/ChangeLog: gcc/ChangeLog:
2017-06-26 Jerome Lambourg <lambourg@adacore.com> 2017-06-26 Jerome Lambourg <lambourg@adacore.com>
Olivier Hainque <hainque@adacore.com>
* config.gcc (*-*-vxworks*): Add TARGET_VXWORKS7=1 to tm_defines
for all vxworks7 targets.
* config/vxworks.h (TARGET_VXWORKS7): If not defined, define to 0.
(VXWORKS_ADDITIONAL_CPP_SPEC): Alternative definition for VXWORKS7.
(VXWORKS_LIBS_RTP, VXWORKS_LIBS_RTP_DIR): New macros, allowing
variations for VX6/VX7 and 32/64bits later on in ...
(VXWORKS_LIB_SPEC): Leverage new macros.
(VXWORKS_OS_CPP_BUILTINS): Define _VSB_CONFIG_FILE for VXWORKS7,
as well as _ALLOW_KEYWORD_MACROS when "inline" is not a keyword.
2017-06-26 Jerome Lambourg <lambourg@adacore.com>
* config/vxworks.h (VXWORKS_OS_CPP_BUILTINS): builtin_define * config/vxworks.h (VXWORKS_OS_CPP_BUILTINS): builtin_define
_VX_TOOL_FAMILY and _VX_TOOL to gnu. _VX_TOOL_FAMILY and _VX_TOOL to gnu.
......
...@@ -926,6 +926,11 @@ case ${target} in ...@@ -926,6 +926,11 @@ case ${target} in
"" | yes | vxworks) thread_file='vxworks' ;; "" | yes | vxworks) thread_file='vxworks' ;;
*) echo 'Unknown thread configuration for VxWorks'; exit 1 ;; *) echo 'Unknown thread configuration for VxWorks'; exit 1 ;;
esac esac
case $target in
*-*-vxworks7*)
tm_defines="$tm_defines TARGET_VXWORKS7=1"
;;
esac
;; ;;
*-*-elf|arc*-*-elf*) *-*-elf|arc*-*-elf*)
# Assume that newlib is being used and so __cxa_atexit is provided. # Assume that newlib is being used and so __cxa_atexit is provided.
......
...@@ -23,6 +23,11 @@ along with GCC; see the file COPYING3. If not see ...@@ -23,6 +23,11 @@ along with GCC; see the file COPYING3. If not see
#undef TARGET_VXWORKS #undef TARGET_VXWORKS
#define TARGET_VXWORKS 1 #define TARGET_VXWORKS 1
/* If TARGET_VXWORKS7 is undefined, then we're not targeting it. */
#ifndef TARGET_VXWORKS7
#define TARGET_VXWORKS7 0
#endif
/* In kernel mode, VxWorks provides all the libraries itself, as well as /* In kernel mode, VxWorks provides all the libraries itself, as well as
the functionality of startup files, etc. In RTP mode, it behaves more the functionality of startup files, etc. In RTP mode, it behaves more
like a traditional Unix, with more external files. Most of our specs like a traditional Unix, with more external files. Most of our specs
...@@ -36,6 +41,23 @@ along with GCC; see the file COPYING3. If not see ...@@ -36,6 +41,23 @@ along with GCC; see the file COPYING3. If not see
/* Since we provide a default -isystem, expand -isystem on the command /* Since we provide a default -isystem, expand -isystem on the command
line early. */ line early. */
#if TARGET_VXWORKS7
#undef VXWORKS_ADDITIONAL_CPP_SPEC
#define VXWORKS_ADDITIONAL_CPP_SPEC \
"%{!nostdinc: \
%{isystem*} \
%{mrtp: -idirafter %:getenv(VSB_DIR /h) \
-idirafter %:getenv(VSB_DIR /share/h) \
-idirafter %:getenv(VSB_DIR /usr/h/public) \
-idirafter %:getenv(VSB_DIR /usr/h) \
;: -idirafter %:getenv(VSB_DIR /h) \
-idirafter %:getenv(VSB_DIR /share/h) \
-idirafter %:getenv(VSB_DIR /krnl/h/system) \
-idirafter %:getenv(VSB_DIR /krnl/h/public)}}"
#else /* TARGET_VXWORKS7 */
#undef VXWORKS_ADDITIONAL_CPP_SPEC #undef VXWORKS_ADDITIONAL_CPP_SPEC
#define VXWORKS_ADDITIONAL_CPP_SPEC \ #define VXWORKS_ADDITIONAL_CPP_SPEC \
"%{!nostdinc: \ "%{!nostdinc: \
...@@ -43,14 +65,30 @@ along with GCC; see the file COPYING3. If not see ...@@ -43,14 +65,30 @@ along with GCC; see the file COPYING3. If not see
%{mrtp: %:getenv(WIND_USR /h) \ %{mrtp: %:getenv(WIND_USR /h) \
;: %:getenv(WIND_BASE /target/h)}}" ;: %:getenv(WIND_BASE /target/h)}}"
#endif
/* The references to __init and __fini will be satisfied by /* The references to __init and __fini will be satisfied by
libc_internal.a. */ libc_internal.a. */
#define VXWORKS_LIBS_RTP "-lc -lgcc -lc_internal -lnet -ldsi"
/* On Vx6 and previous, the libraries to pick up depends on the architecture,
so cannot be defined for all archs at once. On Vx7, a VSB is always needed
and its structure is fixed and does not depend on the arch. We can thus
tell gcc where to look for when linking with RTP libraries. */
#if TARGET_VXWORKS7
#define VXWORKS_LIBS_DIR_RTP "-L%:getenv(VSB_DIR /usr/lib/common)"
#else
#define VXWORKS_LIBS_DIR_RTP ""
#endif
#undef VXWORKS_LIB_SPEC #undef VXWORKS_LIB_SPEC
#define VXWORKS_LIB_SPEC \ #define VXWORKS_LIB_SPEC \
"%{mrtp:%{shared:-u " USER_LABEL_PREFIX "__init -u " USER_LABEL_PREFIX "__fini} \ "%{mrtp:%{shared:-u " USER_LABEL_PREFIX "__init -u " USER_LABEL_PREFIX "__fini} \
%{!shared:%{non-static:-u " USER_LABEL_PREFIX "_STI__6__rtld -ldl} \ %{!shared:%{non-static:-u " USER_LABEL_PREFIX "_STI__6__rtld -ldl} \
--start-group -lc -lgcc -lc_internal -lnet -ldsi \ --start-group " VXWORKS_LIBS_RTP " --end-group} \
--end-group}}" " VXWORKS_LIBS_DIR_RTP "}"
/* The no-op spec for "-shared" below is present because otherwise GCC /* The no-op spec for "-shared" below is present because otherwise GCC
will treat it as an unrecognized option. */ will treat it as an unrecognized option. */
...@@ -133,6 +171,17 @@ extern void vxworks_asm_out_destructor (rtx symbol, int priority); ...@@ -133,6 +171,17 @@ extern void vxworks_asm_out_destructor (rtx symbol, int priority);
builtin_define ("_WRS_KERNEL"); \ builtin_define ("_WRS_KERNEL"); \
builtin_define ("_VX_TOOL_FAMILY=gnu"); \ builtin_define ("_VX_TOOL_FAMILY=gnu"); \
builtin_define ("_VX_TOOL=gnu"); \ builtin_define ("_VX_TOOL=gnu"); \
if (TARGET_VXWORKS7) \
{ \
builtin_define ("_VSB_CONFIG_FILE=<config/vsbConfig.h>"); \
\
/* _ALLOW_KEYWORD_MACROS is needed on VxWorks 7 to \
prevent compilation failures triggered by our \
definition of "inline" in ansidecl when "inline" \
is not a keyword. */ \
if (!flag_isoc99 && !c_dialect_cxx()) \
builtin_define ("_ALLOW_KEYWORD_MACROS"); \
} \
} \ } \
while (0) while (0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment