From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 91158 invoked by alias); 26 Jun 2017 15:38:06 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 91143 invoked by uid 89); 26 Jun 2017 15:38:05 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=grounds, leverage, H*c:HpplH, H*c:MHil X-HELO: smtp.eu.adacore.com Received: from mel.act-europe.fr (HELO smtp.eu.adacore.com) (194.98.77.210) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 26 Jun 2017 15:38:04 +0000 Received: from localhost (localhost [127.0.0.1]) by filtered-smtp.eu.adacore.com (Postfix) with ESMTP id CCD908133A; Mon, 26 Jun 2017 17:38:02 +0200 (CEST) Received: from smtp.eu.adacore.com ([127.0.0.1]) by localhost (smtp.eu.adacore.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2TUXTqlaVMmd; Mon, 26 Jun 2017 17:38:02 +0200 (CEST) Received: from idefix.act-europe.fr (idefix.act-europe.fr [10.10.1.101]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.eu.adacore.com (Postfix) with ESMTPSA id AD00681339; Mon, 26 Jun 2017 17:38:02 +0200 (CEST) From: Olivier Hainque Content-Type: multipart/mixed; boundary="Apple-Mail=_48FB0C6D-B86E-435D-9EFD-65A93666E3B4" Subject: common grounds for VxWorks 7 support Date: Mon, 26 Jun 2017 15:38:00 -0000 Message-Id: Cc: Olivier Hainque , Jerome Lambourg , Douglas B Rupp To: GCC Patches , Nathan Sidwell Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\)) X-SW-Source: 2017-06/txt/msg01939.txt.bz2 --Apple-Mail=_48FB0C6D-B86E-435D-9EFD-65A93666E3B4 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Content-length: 1614 Hello, This patch introduces common grounds for VxWorks 7 support. The main device is the introduction of a TARGET_VXWORKS7 macro which we leverage throughout the various vxworks.h / vxworks.c files, common or cpu specific. We have done several CPU specific ports already, and this scheme works pret= ty well. There's quite a bit of common material between Vx7 and the previous version= s. For the distinctions we need to make, the use of preprocessing doesn't impa= ir readability IMO, on the contrary, while the usual alternative with extra ta= rget files rapidly becomes subtle to handle right (getting the proper inclusion ordering while preventing code duplication is not always easy and may make maintenance harder or more error-prone). Nathan does this work for you ? If OK on principle, I'm not sure who is to approve the tiny config.gcc part. Thanks in advance for your feedback, With Kind Regards, Olivier 2017-06-26 Jerome Lambourg Olivier Hainque * config.gcc (tm_defines for VxWorks): Define TARGET_VXWORKS7 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. --Apple-Mail=_48FB0C6D-B86E-435D-9EFD-65A93666E3B4 Content-Disposition: attachment; filename=0002-common-vxworks7-support.patch Content-Type: application/octet-stream; name="0002-common-vxworks7-support.patch" Content-Transfer-Encoding: 7bit Content-length: 4135 diff --git a/gcc/config.gcc b/gcc/config.gcc index d5609c0..2912009 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -926,6 +926,11 @@ case ${target} in "" | yes | vxworks) thread_file='vxworks' ;; *) echo 'Unknown thread configuration for VxWorks'; exit 1 ;; esac + case $target in + *-*-vxworks7*) + tm_defines="$tm_defines TARGET_VXWORKS7=1" + ;; + esac ;; *-*-elf|arc*-*-elf*) # Assume that newlib is being used and so __cxa_atexit is provided. diff --git a/gcc/config/vxworks.h b/gcc/config/vxworks.h index d16c84d..11d811c 100644 --- a/gcc/config/vxworks.h +++ b/gcc/config/vxworks.h @@ -23,6 +23,11 @@ along with GCC; see the file COPYING3. If not see #undef TARGET_VXWORKS #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 the functionality of startup files, etc. In RTP mode, it behaves more 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 /* Since we provide a default -isystem, expand -isystem on the command 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 #define VXWORKS_ADDITIONAL_CPP_SPEC \ "%{!nostdinc: \ @@ -43,14 +65,30 @@ along with GCC; see the file COPYING3. If not see %{mrtp: %:getenv(WIND_USR /h) \ ;: %:getenv(WIND_BASE /target/h)}}" +#endif + /* The references to __init and __fini will be satisfied by 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 #define VXWORKS_LIB_SPEC \ "%{mrtp:%{shared:-u " USER_LABEL_PREFIX "__init -u " USER_LABEL_PREFIX "__fini} \ %{!shared:%{non-static:-u " USER_LABEL_PREFIX "_STI__6__rtld -ldl} \ - --start-group -lc -lgcc -lc_internal -lnet -ldsi \ - --end-group}}" + --start-group " VXWORKS_LIBS_RTP " --end-group} \ + " VXWORKS_LIBS_DIR_RTP "}" /* The no-op spec for "-shared" below is present because otherwise GCC will treat it as an unrecognized option. */ @@ -133,6 +171,17 @@ extern void vxworks_asm_out_destructor (rtx symbol, int priority); builtin_define ("_WRS_KERNEL"); \ builtin_define ("_VX_TOOL_FAMILY=gnu"); \ builtin_define ("_VX_TOOL=gnu"); \ + if (TARGET_VXWORKS7) \ + { \ + builtin_define ("_VSB_CONFIG_FILE="); \ + \ + /* _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) -- 1.7.10.4 --Apple-Mail=_48FB0C6D-B86E-435D-9EFD-65A93666E3B4--