From patchwork Mon Oct 29 11:36:25 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Ada] Incorrect sign extensions on IOCTL system constants From: Arnaud Charlet X-Patchwork-Id: 194979 Message-Id: <20121029113625.GA626@adacore.com> To: gcc-patches@gcc.gnu.org Cc: Thomas Quinot Date: Mon, 29 Oct 2012 07:36:25 -0400 This change fixes incorrect values in s-oscons.ads on x86_64-freebsd, which were caused by those values being processed as signed, instead of unsigned, integers. Tested on x86_64-pc-linux-gnu, committed on trunk 2012-10-29 Thomas Quinot * s-oscons-tmplt.c: Fix signedness of ioctl request identifiers for x86_64-freebsd. Index: s-oscons-tmplt.c =================================================================== --- s-oscons-tmplt.c (revision 192918) +++ s-oscons-tmplt.c (working copy) @@ -218,6 +218,14 @@ #define CST(name,comment) C(#name,String,name,comment) +/* ioctl(2) requests are "int" in UNIX, but "unsigned long" on FreeBSD */ + +#ifdef __FreeBSD__ +# define CNI CNU +#else +# define CNI CND +#endif + #define STR(x) STR1(x) #define STR1(x) #x @@ -373,12 +381,12 @@ #ifndef FIONBIO # define FIONBIO -1 #endif -CND(FIONBIO, "Set/clear non-blocking io") +CNI(FIONBIO, "Set/clear non-blocking io") #ifndef FIONREAD # define FIONREAD -1 #endif -CND(FIONREAD, "How many bytes to read") +CNI(FIONREAD, "How many bytes to read") /* @@ -1318,6 +1326,7 @@ #define SIZEOF_sigset (sizeof (sigset_t)) CND(SIZEOF_sigset, "sigset"); #endif + /* -- Fields of struct msghdr @@ -1399,7 +1408,7 @@ /* There's no clock_gettime or clock_id's on Darwin, generate a dummy value */ # define CLOCK_RT_Ada "-1" -#elif defined(FreeBSD) || defined(_AIX) +#elif defined(__FreeBSD__) || defined(_AIX) /** On these platforms use system provided monotonic clock instead of ** the default CLOCK_REALTIME. We then need to set up cond var attributes ** appropriately (see thread.c).