From patchwork Sun Dec 8 20:55:47 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Korb X-Patchwork-Id: 298869 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 90F692C0086 for ; Mon, 9 Dec 2013 08:53:15 +1100 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:subject:content-type; q= dns; s=default; b=EWltFdVbOwD9gfBeS6fBL44STQWdtlf6pnUsUK7+opX0xo PFTEmc9Y3ojxbqhhiX+mePFIZaUhOWFH5z5qzT9Kpp+Vai4AUyNRev8z7812fnCS MIDdeoBIIeFZoU0nc3QvroIknUYhr+F9pJ2IkmW4GCFOIPFscbYIDT9cCiLIc= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:subject:content-type; s= default; bh=nAMLK67jCUKnBA5rOCxlU73suKw=; b=LxXFjaVWB2gXWxgf7w/u 8T7vODOaM+c535lw8WGCWj/Dk5i6s1kUDYLX5JCQ64EfIatKfJrZ0uW0U2RqxTtw +cldMEvBJwDFSrRnzAG051iDaxGP2YSfvKzzwmCoIio4C/fstNkjgkjCmK5HJSsu MlEafVh7EzmFPaf2i7cDom8= Received: (qmail 8569 invoked by alias); 8 Dec 2013 21:53:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 8558 invoked by uid 89); 8 Dec 2013 21:53:07 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL, BAYES_00, SPF_PASS autolearn=ham version=3.3.2 X-HELO: fencepost.gnu.org Received: from Unknown (HELO fencepost.gnu.org) (208.118.235.10) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Sun, 08 Dec 2013 21:53:04 +0000 Received: from adsl-99-170-144-182.dsl.pltn13.sbcglobal.net ([99.170.144.182]:35887 helo=[192.168.10.2]) by fencepost.gnu.org with esmtpsa (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1VpmHX-0007Z3-6s for gcc-patches@gcc.gnu.org; Sun, 08 Dec 2013 16:52:56 -0500 Message-ID: <52A4DCD3.8030005@gnu.org> Date: Sun, 08 Dec 2013 12:55:47 -0800 From: Bruce Korb User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130922 Icedove/17.0.9 MIME-Version: 1.0 To: GCC Patches Subject: fixinclude patch for fenv.h on Ubuntu Adjusted for Richard Biener's patch Index: fixincludes/ChangeLog =================================================================== --- fixincludes/ChangeLog (revision 205790) +++ fixincludes/ChangeLog (working copy) @@ -1,3 +1,14 @@ +2013-12-07 Bruce Korb + + * inclhack.def: many of the headers found under "bits/" are + often stashed under architecture directories. Apply fixes + to those, too. Also, re-ordered misordered fixes. + * tests/base/linux/vt.h: 80 columns in .def file limitation + * tests/base/iso/math_c99.h: adjust ordering + * tests/base/rtldef/string.h: likewise + * tests/base/bits/fenv.h: likewise + * tests/base/pthread.h: likewise + 2013-12-06 Richard Biener * inclhack.def (suse_linux_vt_cxx): New fix for linux/vt.h Index: fixincludes/fixincl.x =================================================================== --- fixincludes/fixincl.x (revision 205790) [[generated]] Index: fixincludes/tests/base/iso/math_c99.h =================================================================== --- fixincludes/tests/base/iso/math_c99.h (revision 205790) +++ fixincludes/tests/base/iso/math_c99.h (working copy) @@ -20,6 +20,13 @@ #endif /* SOLARIS_MATH_1_CHECK */ +#if defined( SOLARIS_MATH_10_CHECK ) +#pragma ident "@(#)math_c99.h 1.12 07/01/21 SMI" +#undef isinf +#define isinf(x) __builtin_isinf(x) +#endif /* SOLARIS_MATH_10_CHECK */ + + #if defined( SOLARIS_MATH_2_CHECK ) #ident "@(#)math_c99.h 1.9 04/11/01 SMI" #undef INFINITY @@ -68,10 +75,3 @@ #undef isunordered #define isunordered(x, y) __builtin_isunordered(x, y) #endif /* SOLARIS_MATH_9_CHECK */ - - -#if defined( SOLARIS_MATH_10_CHECK ) -#pragma ident "@(#)math_c99.h 1.12 07/01/21 SMI" -#undef isinf -#define isinf(x) __builtin_isinf(x) -#endif /* SOLARIS_MATH_10_CHECK */ Index: fixincludes/tests/base/bits/fenv.h =================================================================== --- fixincludes/tests/base/bits/fenv.h (revision 205790) +++ fixincludes/tests/base/bits/fenv.h (working copy) @@ -9,6 +9,16 @@ +#if defined( FERAISEEXCEPT_NOSSE_DIVBYZERO_CHECK ) +# ifdef __SSE_MATH__ + __asm__ __volatile__ ("divss %1, %0" : : "x" (__f), "x" (__g)); +# else + __asm__ __volatile__ ("fdivp %%st, %%st(1); fwait" + : "=t" (__f) : "0" (__f), "u" (__g) : "st(1)"); +# endif +#endif /* FERAISEEXCEPT_NOSSE_DIVBYZERO_CHECK */ + + #if defined( FERAISEEXCEPT_NOSSE_INVALID_CHECK ) # ifdef __SSE_MATH__ __asm__ __volatile__ ("divss %0, %0" : : "x" (__f)); @@ -17,13 +27,3 @@ : "=t" (__f) : "0" (__f)); # endif #endif /* FERAISEEXCEPT_NOSSE_INVALID_CHECK */ - - -#if defined( FERAISEEXCEPT_NOSSE_DIVBYZERO_CHECK ) -# ifdef __SSE_MATH__ - __asm__ __volatile__ ("divss %1, %0" : : "x" (__f), "x" (__g)); -# else - __asm__ __volatile__ ("fdivp %%st, %%st(1); fwait" - : "=t" (__f) : "0" (__f), "u" (__g) : "st(1)"); -# endif -#endif /* FERAISEEXCEPT_NOSSE_DIVBYZERO_CHECK */ Index: fixincludes/tests/base/rtldef/string.h =================================================================== --- fixincludes/tests/base/rtldef/string.h (revision 205790) +++ fixincludes/tests/base/rtldef/string.h (working copy) @@ -9,13 +9,13 @@ +#if defined( VMS_DECC_BUILTIN_CHECK ) +define FD_ZERO(__p) memset((__p), 0, sizeof(*(__p))) + +#endif /* VMS_DECC_BUILTIN_CHECK */ + + #if defined( VMS_DISABLE_DECC_STRING_BUILTINS_CHECK ) #if !defined(__VAX) && !defined(__GNUC__) #endif /* VMS_DISABLE_DECC_STRING_BUILTINS_CHECK */ - - -#if defined( VMS_DECC_BUILTIN_CHECK ) -define FD_ZERO(__p) memset((__p), 0, sizeof(*(__p))) - -#endif /* VMS_DECC_BUILTIN_CHECK */ Index: fixincludes/tests/base/linux/vt.h =================================================================== --- fixincludes/tests/base/linux/vt.h (revision 205790) +++ fixincludes/tests/base/linux/vt.h (working copy) @@ -10,5 +10,5 @@ #if defined( SUSE_LINUX_VT_CXX_CHECK ) -unsigned int newev; /* New console (if changing) */ +unsigned int newev; /* New console (if changing) */ #endif /* SUSE_LINUX_VT_CXX_CHECK */ Index: fixincludes/tests/base/pthread.h =================================================================== --- fixincludes/tests/base/pthread.h (revision 205790) +++ fixincludes/tests/base/pthread.h (working copy) @@ -125,16 +125,6 @@ #endif /* SOLARIS_MUTEX_INIT_2_CHECK */ -#if defined( SOLARIS_RWLOCK_INIT_1_CHECK ) -#ident "@(#)pthread.h 1.26 98/04/12 SMI" -#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG) -#define PTHREAD_RWLOCK_INITIALIZER {0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}} -#else -#define PTHREAD_RWLOCK_INITIALIZER {0, 0, 0, {{0}, {0}, {0}}, {{0}, {0}}, {{0}, {0}}} -#endif -#endif /* SOLARIS_RWLOCK_INIT_1_CHECK */ - - #if defined( SOLARIS_ONCE_INIT_1_CHECK ) #pragma ident "@(#)pthread.h 1.37 04/09/28 SMI" #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG) @@ -156,6 +146,16 @@ #endif /* SOLARIS_ONCE_INIT_2_CHECK */ +#if defined( SOLARIS_RWLOCK_INIT_1_CHECK ) +#ident "@(#)pthread.h 1.26 98/04/12 SMI" +#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG) +#define PTHREAD_RWLOCK_INITIALIZER {0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}} +#else +#define PTHREAD_RWLOCK_INITIALIZER {0, 0, 0, {{0}, {0}, {0}}, {{0}, {0}}, {{0}, {0}}} +#endif +#endif /* SOLARIS_RWLOCK_INIT_1_CHECK */ + + #if defined( THREAD_KEYWORD_CHECK ) extern int pthread_create (pthread_t *__restrict __thr, extern int pthread_kill (pthread_t __thr, int __signo); Index: fixincludes/inclhack.def =================================================================== --- fixincludes/inclhack.def (revision 205790) +++ fixincludes/inclhack.def (working copy) @@ -11,7 +11,7 @@ pattern='^/\*$' \ trailer='^/\*EOF\*[/]' \ input=inclhack.def \ - key='hackname[ ]*=[ ]*(.*);' + key=$'hackname[ \t]*=[ \t]*(.*);' Set up a debug test so we can make the templates emit special code while debugging these fixes: */ @@ -1140,6 +1140,20 @@ }; /* + * Old Linux kernel's header breaks Traditional CPP + */ +fix = { + hackname = complier_h_tradcpp; + files = linux/compiler.h; + + select = "#define __builtin_warning\\(x, y\\.\\.\\.\\) \\(1\\)"; + c_fix = format; + c_fix_arg = "/* __builtin_warning(x, y...) is obsolete */"; + + test_text = "#define __builtin_warning(x, y...) (1)"; +}; + +/* * Fix various macros used to define ioctl numbers. * The traditional syntax was: * @@ -1509,6 +1523,60 @@ }; /* + * Incorrect feraiseexcept extern inline in bits/fenv.h on x86_64 + * that fails when compiling for SSE-less 32-bit x86. + */ +fix = { + hackname = feraiseexcept_nosse_divbyzero; + mach = 'i[34567]86-*-linux*', 'x86*-linux*', 'amd64-*-linux*'; + files = bits/fenv.h, '*/bits/fenv.h'; + select = "^([\t ]*)__asm__ __volatile__ \\(\"divss %1, %0 *\" : " + ": \"x\" \\(__f\\), \"x\" \\(__g\\)\\);$"; + bypass = "\"fdivp .*; fwait\""; + + c_fix = format; + c_fix_arg = <<- _EOText_ + # ifdef __SSE_MATH__ + %0 + # else + %1__asm__ __volatile__ ("fdivp %%%%st, %%%%st(1); fwait" + %1 : "=t" (__f) : "0" (__f), "u" (__g) : "st(1)"); + # endif + _EOText_; + + test_text = <<- _EOText_ + __asm__ __volatile__ ("divss %1, %0" : : "x" (__f), "x" (__g)); + _EOText_; +}; + +/* + * Incorrect feraiseexcept extern inline in bits/fenv.h on x86_64 + * that fails when compiling for SSE-less 32-bit x86. + */ +fix = { + hackname = feraiseexcept_nosse_invalid; + mach = 'i[34567]86-*-linux*', 'x86*-linux*', 'amd64-*-linux*'; + files = bits/fenv.h, '*/bits/fenv.h'; + select = "^([\t ]*)__asm__ __volatile__ \\(\"divss %0, %0 *\" : " + ": \"x\" \\(__f\\)\\);$"; + bypass = "\"fdiv .*; fwait\""; + + c_fix = format; + c_fix_arg = <<- _EOText_ + # ifdef __SSE_MATH__ + %0 + # else + %1__asm__ __volatile__ ("fdiv %%%%st, %%%%st(0); fwait" + %1 : "=t" (__f) : "0" (__f)); + # endif + _EOText_; + + test_text = <<- _EOText_ + __asm__ __volatile__ ("divss %0, %0" : : "x" (__f)); + _EOText_; +}; + +/* * Between 8/24/1998 and 2/17/2001, FreeBSD system headers presume * neither the existence of GCC 3 nor its exact feature set yet break * (by design?) when __GNUC__ is set beyond 2. @@ -1738,7 +1806,7 @@ versions. */ fix = { hackname = glibc_strncpy; - files = bits/string2.h; + files = bits/string2.h, '*/bits/string2.h'; bypass = "__builtin_strncpy"; c_fix = format; c_fix_arg = "# define strncpy(dest, src, n) __builtin_strncpy (dest, src, n)"; @@ -2007,6 +2075,34 @@ }; /* + * hpux sendfile() + */ +fix = { + hackname = hpux11_extern_sendfile; + mach = "*-hp-hpux11.[12]*"; + files = sys/socket.h; + select = "^[ \t]*extern sbsize_t sendfile.*\n.*, int\\)\\);\n"; + c_fix = format; + c_fix_arg = "#ifndef _APP32_64BIT_OFF_T\n%0#endif\n"; + test_text = " extern sbsize_t sendfile __((int, int, off_t, bsize_t,\n" + " const struct iovec *, int));\n"; +}; + +/* + * hpux sendpath() + */ +fix = { + hackname = hpux11_extern_sendpath; + mach = "*-hp-hpux11.[12]*"; + files = sys/socket.h; + select = "^[ \t]*extern sbsize_t sendpath.*\n.*, int\\)\\);\n"; + c_fix = format; + c_fix_arg = "#ifndef _APP32_64BIT_OFF_T\n%0#endif\n"; + test_text = " extern sbsize_t sendpath __((int, int, off_t, bsize_t,\n" + " const struct iovec *, int));\n"; +}; + +/* * Keep HP-UX 11 from stomping on C++ math namespace * with defines for fabsf. */ @@ -2107,6 +2203,76 @@ }; /* + * hpux intptr + */ +fix = { + hackname = hpux_c99_intptr; + mach = "*-hp-hpux11.3*"; + files = stdint-hpux11.h, stdint.h; + sed = "s@^[ \t]*#[ \t]*define[ \t]*PTRDIFF_MAX[ \t]*" + "INT32_MAX[ \t]*$@#define PTRDIFF_MAX (2147483647l)@"; + sed = "s@^[ \t]*#[ \t]*define[ \t]*PTRDIFF_MIN[ \t]*" + "INT32_MIN[ \t]*$@#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)@"; + sed = "s@^[ \t]*#[ \t]*define[ \t]*INTPTR_MAX[ \t]*" + "INT32_MAX[ \t]*$@#define INTPTR_MAX (2147483647l)@"; + sed = "s@^[ \t]*#[ \t]*define[ \t]*INTPTR_MIN[ \t]*" + "INT32_MIN[ \t]*$@#define INTPTR_MIN (-INTPTR_MAX - 1)@"; + sed = "s@^[ \t]*#[ \t]*define[ \t]*UINTPTR_MAX[ \t]*" + "UINT32_MAX[ \t]*$@#define UINTPTR_MAX (4294967295ul)@"; + sed = "s@^[ \t]*#[ \t]*define[ \t]*SIZE_MAX[ \t]*" + "UINT32_MAX[ \t]*$@#define SIZE_MAX (4294967295ul)@"; + test_text = "#define PTRDIFF_MAX INT32_MAX\n" + "#define PTRDIFF_MIN INT32_MIN\n" + "#define INTPTR_MAX INT32_MAX\n" + "#define INTPTR_MIN INT32_MIN\n" + "#define UINTPTR_MAX UINT32_MAX\n" + "#define SIZE_MAX UINT32_MAX\n"; +}; + +/* + * These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31. + */ +fix = { + hackname = hpux_c99_inttypes; + mach = "*-hp-hpux11.[23]*"; + files = inttypes.h; + files = stdint-hpux11.h, stdint.h; + sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT8_C(__c)[ \t]*" + "__CONCAT_U__(__c)[ \t]*$@#define UINT8_C(__c) (__c)@"; + sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT16_C(__c)[ \t]*" + "__CONCAT_U__(__c)[ \t]*$@#define UINT16_C(__c) (__c)@"; + sed = "s@^[ \t]*#[ \t]*define[ \t]*INT32_C(__c)[ \t]*" + "__CONCAT__(__c,l)[ \t]*$@#define INT32_C(__c) (__c)@"; + sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT32_C(__c)[ \t].*$@" + "#define UINT32_C(__c) __CONCAT__(__c,u)@"; + test_text = "#define UINT8_C(__c) __CONCAT_U__(__c)\n" + "#define UINT16_C(__c) __CONCAT_U__(__c)\n" + "#define INT32_C(__c) __CONCAT__(__c,l)\n" + "#define UINT32_C(__c) __CONCAT__(__c,ul)\n"; +}; + +/* + * These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31. + */ +fix = { + hackname = hpux_c99_inttypes2; + mach = "*-hp-hpux11.2*"; + files = stdint-hpux11.h, stdint.h; + sed = "s@^[ \t]*#[ \t]*define[ \t]*INT8_C(__c)[ \t]*" + "((signed char)(__c))[ \t]*$@#define INT8_C(__c) (__c)@"; + sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT8_C(__c)[ \t]*" + "((unsigned char)(__c))[ \t]*$@#define UINT8_C(__c) (__c)@"; + sed = "s@^[ \t]*#[ \t]*define[ \t]*INT16_C(__c)[ \t]*" + "((short)(__c))[ \t]*$@#define INT16_C(__c) (__c)@"; + sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT16_C(__c)[ \t]*" + "((unsigned short)(__c))[ \t]*$@#define UINT16_C(__c) (__c)@"; + test_text = "# define INT8_C(__c) ((signed char)(__c))\n" + "# define UINT8_C(__c) ((unsigned char)(__c))\n" + "# define INT16_C(__c) ((short)(__c))\n" + "# define UINT16_C(__c) ((unsigned short)(__c))\n"; +}; + +/* * Fix hpux broken ctype macros */ fix = { @@ -2122,6 +2288,26 @@ }; /* + * hpux errno() + */ +fix = { + hackname = hpux_extern_errno; + mach = "*-hp-hpux10.*"; + mach = "*-hp-hpux11.[0-2]*"; + files = errno.h; + select = "^[ \t]*extern int errno;$"; + c_fix = format; + c_fix_arg = "#ifdef __cplusplus\n" + "extern \"C\" {\n" + "#endif\n" + "%0\n" + "#ifdef __cplusplus\n" + "}\n" + "#endif"; + test_text = " extern int errno;\n"; +}; + +/* * Fix hpux broken #ifndef _XOPEN_SOURCE_EXTENDED conditional on htonl etc. */ fix = { @@ -2149,6 +2335,33 @@ }; /* + * These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31. + */ +fix = { + hackname = hpux_imaginary_i; + mach = "ia64-hp-hpux11.*"; + files = complex.h; + select = "^[ \t]*#[ \t]*define[ \t]*_Complex_I.*"; + c_fix = format; + c_fix_arg = "#define _Complex_I (__extension__ 1.0iF)"; + test_text = "#define _Complex_I (0.f+_Imaginary_I)\n"; +}; + +/* + * These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31. + */ +fix = { + hackname = hpux_inttype_int8_t; + mach = "*-hp-hpux1[01].*"; + files = sys/_inttypes.h; + select = "^[ \t]*typedef[ \t]*char[ \t]*int(_least){0,1}8_t.*"; + c_fix = format; + c_fix_arg = "typedef signed char int%18_t;"; + test_text = "typedef char int_least8_t;\n" + "typedef char int8_t;\n"; +}; + +/* * HP-UX long_double */ fix = { @@ -2170,10 +2383,10 @@ "extern long_double strtold(const char *, char **);\n"; }; - /* - * We cannot use the above rule on 11.31 because it removes the strtold - * definition. ia64 is OK with no hack, PA needs some help. - */ +/* + * We cannot use the above rule on 11.31 because it removes the strtold + * definition. ia64 is OK with no hack, PA needs some help. + */ fix = { hackname = hpux_long_double_2; mach = "hppa*-*-hpux11.3*"; @@ -2190,82 +2403,6 @@ }; /* - * Fix hpux10.20 to avoid invalid forward decl - */ -fix = { - hackname = hpux_systime; - files = sys/time.h; - select = "^extern struct sigevent;"; - - c_fix = format; - c_fix_arg = "struct sigevent;"; - - test_text = 'extern struct sigevent;'; -}; - -/* - * Wrap spu_info in ifdef _KERNEL. GCC cannot handle an array of unknown - * type and mpinfou is only defined when _KERNEL is set. - */ -fix = { - hackname = hpux_spu_info; - mach = "*-hp-hpux*"; - /* - * It is tempting to omit the first "files" entry. Do not. - * The testing machinery will take the first "files" entry as the name - * of a test file to play with. It would be a nuisance to have a directory - * with the name "*". - */ - files = "ia64/sys/getppdp.h"; - files = "*/sys/getppdp.h"; - select = "^.*extern.*spu_info.*"; - - c_fix = format; - c_fix_arg = "#ifdef _KERNEL\n%0\n#endif"; - - test_text = "extern union mpinfou spu_info[];"; -}; - -fix = { - hackname = hpux11_extern_sendfile; - mach = "*-hp-hpux11.[12]*"; - files = sys/socket.h; - select = "^[ \t]*extern sbsize_t sendfile.*\n.*, int\\)\\);\n"; - c_fix = format; - c_fix_arg = "#ifndef _APP32_64BIT_OFF_T\n%0#endif\n"; - test_text = " extern sbsize_t sendfile __((int, int, off_t, bsize_t,\n" - " const struct iovec *, int));\n"; -}; - -fix = { - hackname = hpux11_extern_sendpath; - mach = "*-hp-hpux11.[12]*"; - files = sys/socket.h; - select = "^[ \t]*extern sbsize_t sendpath.*\n.*, int\\)\\);\n"; - c_fix = format; - c_fix_arg = "#ifndef _APP32_64BIT_OFF_T\n%0#endif\n"; - test_text = " extern sbsize_t sendpath __((int, int, off_t, bsize_t,\n" - " const struct iovec *, int));\n"; -}; - -fix = { - hackname = hpux_extern_errno; - mach = "*-hp-hpux10.*"; - mach = "*-hp-hpux11.[0-2]*"; - files = errno.h; - select = "^[ \t]*extern int errno;$"; - c_fix = format; - c_fix_arg = "#ifdef __cplusplus\n" - "extern \"C\" {\n" - "#endif\n" - "%0\n" - "#ifdef __cplusplus\n" - "}\n" - "#endif"; - test_text = " extern int errno;\n"; -}; - -/* * Add missing braces to pthread initializer defines. */ fix = { @@ -2307,72 +2444,33 @@ "}\n"; }; +/* + * Wrap spu_info in ifdef _KERNEL. GCC cannot handle an array of unknown + * type and mpinfou is only defined when _KERNEL is set. + */ fix = { - hackname = hpux_c99_intptr; - mach = "*-hp-hpux11.3*"; - files = stdint-hpux11.h, stdint.h; - sed = "s@^[ \t]*#[ \t]*define[ \t]*PTRDIFF_MAX[ \t]*" - "INT32_MAX[ \t]*$@#define PTRDIFF_MAX (2147483647l)@"; - sed = "s@^[ \t]*#[ \t]*define[ \t]*PTRDIFF_MIN[ \t]*" - "INT32_MIN[ \t]*$@#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)@"; - sed = "s@^[ \t]*#[ \t]*define[ \t]*INTPTR_MAX[ \t]*" - "INT32_MAX[ \t]*$@#define INTPTR_MAX (2147483647l)@"; - sed = "s@^[ \t]*#[ \t]*define[ \t]*INTPTR_MIN[ \t]*" - "INT32_MIN[ \t]*$@#define INTPTR_MIN (-INTPTR_MAX - 1)@"; - sed = "s@^[ \t]*#[ \t]*define[ \t]*UINTPTR_MAX[ \t]*" - "UINT32_MAX[ \t]*$@#define UINTPTR_MAX (4294967295ul)@"; - sed = "s@^[ \t]*#[ \t]*define[ \t]*SIZE_MAX[ \t]*" - "UINT32_MAX[ \t]*$@#define SIZE_MAX (4294967295ul)@"; - test_text = "#define PTRDIFF_MAX INT32_MAX\n" - "#define PTRDIFF_MIN INT32_MIN\n" - "#define INTPTR_MAX INT32_MAX\n" - "#define INTPTR_MIN INT32_MIN\n" - "#define UINTPTR_MAX UINT32_MAX\n" - "#define SIZE_MAX UINT32_MAX\n"; + hackname = hpux_spu_info; + mach = "*-hp-hpux*"; + /* + * It is tempting to omit the first "files" entry. Do not. + * The testing machinery will take the first "files" entry as the name + * of a test file to play with. It would be a nuisance to have a directory + * with the name "*". + */ + files = "ia64/sys/getppdp.h"; + files = "*/sys/getppdp.h"; + select = "^.*extern.*spu_info.*"; + + c_fix = format; + c_fix_arg = "#ifdef _KERNEL\n%0\n#endif"; + + test_text = "extern union mpinfou spu_info[];"; }; /* * These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31. */ - fix = { - hackname = hpux_c99_inttypes; - mach = "*-hp-hpux11.[23]*"; - files = inttypes.h; - files = stdint-hpux11.h, stdint.h; - sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT8_C(__c)[ \t]*" - "__CONCAT_U__(__c)[ \t]*$@#define UINT8_C(__c) (__c)@"; - sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT16_C(__c)[ \t]*" - "__CONCAT_U__(__c)[ \t]*$@#define UINT16_C(__c) (__c)@"; - sed = "s@^[ \t]*#[ \t]*define[ \t]*INT32_C(__c)[ \t]*" - "__CONCAT__(__c,l)[ \t]*$@#define INT32_C(__c) (__c)@"; - sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT32_C(__c)[ \t].*$@" - "#define UINT32_C(__c) __CONCAT__(__c,u)@"; - test_text = "#define UINT8_C(__c) __CONCAT_U__(__c)\n" - "#define UINT16_C(__c) __CONCAT_U__(__c)\n" - "#define INT32_C(__c) __CONCAT__(__c,l)\n" - "#define UINT32_C(__c) __CONCAT__(__c,ul)\n"; -}; - -fix = { - hackname = hpux_c99_inttypes2; - mach = "*-hp-hpux11.2*"; - files = stdint-hpux11.h, stdint.h; - sed = "s@^[ \t]*#[ \t]*define[ \t]*INT8_C(__c)[ \t]*" - "((signed char)(__c))[ \t]*$@#define INT8_C(__c) (__c)@"; - sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT8_C(__c)[ \t]*" - "((unsigned char)(__c))[ \t]*$@#define UINT8_C(__c) (__c)@"; - sed = "s@^[ \t]*#[ \t]*define[ \t]*INT16_C(__c)[ \t]*" - "((short)(__c))[ \t]*$@#define INT16_C(__c) (__c)@"; - sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT16_C(__c)[ \t]*" - "((unsigned short)(__c))[ \t]*$@#define UINT16_C(__c) (__c)@"; - test_text = "# define INT8_C(__c) ((signed char)(__c))\n" - "# define UINT8_C(__c) ((unsigned char)(__c))\n" - "# define INT16_C(__c) ((short)(__c))\n" - "# define UINT16_C(__c) ((unsigned short)(__c))\n"; -}; - -fix = { hackname = hpux_stdint_least_fast; mach = "*-hp-hpux11.2*"; files = stdint-hpux11.h, stdint.h; @@ -2385,25 +2483,18 @@ _EOFix_; }; +/* + * Fix hpux10.20 to avoid invalid forward decl + */ fix = { - hackname = hpux_inttype_int8_t; - mach = "*-hp-hpux1[01].*"; - files = sys/_inttypes.h; - select = "^[ \t]*typedef[ \t]*char[ \t]*int(_least){0,1}8_t.*"; + hackname = hpux_systime; + files = sys/time.h; + select = "^extern struct sigevent;"; + c_fix = format; - c_fix_arg = "typedef signed char int%18_t;"; - test_text = "typedef char int_least8_t;\n" - "typedef char int8_t;\n"; -}; + c_fix_arg = "struct sigevent;"; -fix = { - hackname = hpux_imaginary_i; - mach = "ia64-hp-hpux11.*"; - files = complex.h; - select = "^[ \t]*#[ \t]*define[ \t]*_Complex_I.*"; - c_fix = format; - c_fix_arg = "#define _Complex_I (__extension__ 1.0iF)"; - test_text = "#define _Complex_I (0.f+_Imaginary_I)\n"; + test_text = 'extern struct sigevent;'; }; /* @@ -2411,7 +2502,7 @@ */ fix = { hackname = huge_val_hex; - files = bits/huge_val.h; + files = bits/huge_val.h, '*/bits/huge_val.h'; select = "^#[ \t]*define[ \t]*HUGE_VAL[ \t].*0x1\\.0p.*"; bypass = "__builtin_huge_val"; @@ -2426,7 +2517,7 @@ */ fix = { hackname = huge_valf_hex; - files = bits/huge_val.h; + files = bits/huge_val.h, '*/bits/huge_val.h'; select = "^#[ \t]*define[ \t]*HUGE_VALF[ \t].*0x1\\.0p.*"; bypass = "__builtin_huge_valf"; @@ -2441,7 +2532,7 @@ */ fix = { hackname = huge_vall_hex; - files = bits/huge_val.h; + files = bits/huge_val.h, '*/bits/huge_val.h'; select = "^#[ \t]*define[ \t]*HUGE_VALL[ \t].*0x1\\.0p.*"; bypass = "__builtin_huge_vall"; @@ -2579,7 +2670,8 @@ test_text = "#define __CONCAT__(a,b) a/**/b"; }; -/* The /usr/include/sys/ucontext.h on ia64-*linux-gnu systems defines +/* + * The /usr/include/sys/ucontext.h on ia64-*linux-gnu systems defines * an _SC_GR0_OFFSET macro using an idiom that isn't a compile time * constant on recent versions of g++. */ @@ -2792,9 +2884,11 @@ test_text = "#define __END_DECLS };"; }; -/* newlib's stdint.h has several failures to conform to C99. The fix - for these removed a comment that can be matched to identify unfixed - versions. */ +/* + * newlib's stdint.h has several failures to conform to C99. The fix + * for these removed a comment that can be matched to identify unfixed + * versions. + */ fix = { hackname = newlib_stdint_1; files = stdint-newlib.h, stdint.h; @@ -3242,6 +3336,98 @@ }; /* + * Sun Solaris 2 has a version of sys/int_const.h that defines + * UINT8_C and UINT16_C to unsigned constants. + */ +fix = { + hackname = solaris_int_const; + files = sys/int_const.h; + mach = '*-*-solaris2*'; + c_fix = format; + c_fix_arg = "#define\tUINT8_C(c)\t(c)\n" + "%1\n" + "#define\tUINT16_C(c)\t(c)"; + select = "^#define[ \t]+UINT8_C\\(c\\)[ \t]+__CONCAT__.*\n" + "(/\*.*\*/)\n" + "#define[ \t]+UINT16_C\\(c\\)[ \t]+__CONCAT__.*"; + test_text = + "#define UINT8_C(c) __CONCAT__(c,u)\n" + "/* CSTYLED */\n" + "#define UINT16_C(c) __CONCAT__(c,u)"; +}; + +/* + * Sun Solaris 2 has a version of sys/int_limits.h that defines + * UINT8_MAX and UINT16_MAX to unsigned constants. + */ +fix = { + hackname = solaris_int_limits_1; + files = sys/int_limits.h; + mach = '*-*-solaris2*'; + c_fix = format; + c_fix_arg = "#define\tUINT8_MAX\t(255)\n" + "#define\tUINT16_MAX\t(65535)"; + select = "^#define[ \t]+UINT8_MAX[ \t]+\\(255U\\)\n" + "#define[ \t]+UINT16_MAX[ \t]+\\(65535U\\)"; + test_text = + "#define UINT8_MAX (255U)\n" + "#define UINT16_MAX (65535U)"; +}; + +/* + * Sun Solaris 2 has a version of sys/int_limits.h that defines + * INT_FAST16 limits to wrong values for sys/int_types.h. + */ +fix = { + hackname = solaris_int_limits_2; + files = sys/int_limits.h; + mach = '*-*-solaris2*'; + c_fix = format; + c_fix_arg = "#define\t%1_FAST16_%2 %132_%2"; + select = "^#define[ \t]+(INT|UINT)_FAST16_(MAX|MIN)[ \t](INT|UINT)16.*"; + test_text = + "#define INT_FAST16_MAX INT16_MAX\n" + "#define UINT_FAST16_MAX UINT16_MAX\n" + "#define INT_FAST16_MIN INT16_MIN"; +}; + +/* + * Sun Solaris 2 has a version of sys/int_limits.h that defines + * SIZE_MAX as unsigned long. + */ +fix = { + hackname = solaris_int_limits_3; + files = sys/int_limits.h; + mach = '*-*-solaris2*'; + c_fix = format; + c_fix_arg = "#define\tSIZE_MAX\t4294967295U"; + select = "^#define[ \t]+SIZE_MAX[ \t]+4294967295UL"; + test_text = + "#define SIZE_MAX 4294967295UL"; +}; + +/* + * Sun Solaris up to 9 has a version of sys/int_types.h that forbids use + * of Standard C99 64-bit types in 32-bit mode. + */ +fix = { + hackname = solaris_int_types; + select = "__STDC__ - 0 == 0"; + bypass = "_LONGLONG_TYPE"; + files = sys/int_types.h; + c_fix = format; + c_fix_arg = + "(defined(_STDC_C99) || !defined(_STRICT_STDC) || defined(__GNUC__))"; + test_text = + "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n" + "typedef long long int64_t;\n" + "#endif\n\n" + "#if defined(_LP64) || (__STDC__ - 0 == 0 && !defined(_NO_LONGLONG))\n" + "typedef int64_t intmax_t;\n" + "#endif"; +}; + +/* * Before Solaris 10, doesn't mark longjump noreturn. */ fix = { @@ -3279,7 +3465,36 @@ "#define HUGE_VALL __builtin_huge_vall"; }; +/* + * On Solaris 11, if you do isinf(NaN) you'll get a floating point + * exception. Provide an alternative using GCC's builtin. + */ fix = { + hackname = solaris_math_10; + select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; + files = iso/math_c99.h; + c_fix = format; + c_fix_arg = "#define\tisinf(x) __builtin_isinf(x)"; + c_fix_arg = "^#define[ \t]+isinf\\(x\\)[ \t]+__extension__\\([ \t]*\\\\\n" + "[ \t]*\\{[ \t]*__typeof\\(x\\)[ \t]*__x_i[ \t]*=[ \t]*\\(x\\);" + "[ \t]*\\\\\n" + "[ \t]*__x_i[ \t]*==[ \t]*\\(__typeof\\(__x_i\\)\\)[ \t]*" + "INFINITY[ \t]*\\|\\|[ \t]*\\\\\n" + "[ \t]*__x_i[ \t]*==[ \t]*\\(__typeof\\(__x_i\\)\\)[ \t]*" + "\\(-INFINITY\\);[ \t]*\\}\\)"; + test_text = + '#pragma ident "@(#)math_c99.h 1.12 07/01/21 SMI"'"\n" + "#undef isinf\n" + "#define isinf(x) __extension__( \\\\\n" + " { __typeof(x) __x_i = (x); \\\\\n" + " __x_i == (__typeof(__x_i)) INFINITY || \\\\\n" + " __x_i == (__typeof(__x_i)) (-INFINITY); })"; +}; + +/* + * Solaris math INFINITY + */ +fix = { hackname = solaris_math_2; select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; bypass = "__GNUC__"; @@ -3293,6 +3508,9 @@ "#define INFINITY __builtin_infinity"; }; +/* + * Solaris math NAN + */ fix = { hackname = solaris_math_3; select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; @@ -3307,6 +3525,9 @@ "#define NAN __builtin_nan"; }; +/* + * Solaris math fpclassify + */ fix = { hackname = solaris_math_4; select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; @@ -3323,6 +3544,9 @@ "#define fpclassify(x) __builtin_fpclassify(x)"; }; +/* + * Solaris math signbit + */ fix = { hackname = solaris_math_8; select = '@\(#\)math_c99\.h' "[ \t]+1\\.[0-9]+[ \t]+[0-9/]+ SMI"; @@ -3342,6 +3566,9 @@ _EOText_; }; +/* + * Solaris math comparison macros + */ fix = { hackname = solaris_math_9; select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; @@ -3368,33 +3595,6 @@ }; /* - * On Solaris 11, if you do isinf(NaN) you'll get a floating point - * exception. Provide an alternative using GCC's builtin. - */ - -fix = { - hackname = solaris_math_10; - select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; - files = iso/math_c99.h; - c_fix = format; - c_fix_arg = "#define\tisinf(x) __builtin_isinf(x)"; - c_fix_arg = "^#define[ \t]+isinf\\(x\\)[ \t]+__extension__\\([ \t]*\\\\\n" - "[ \t]*\\{[ \t]*__typeof\\(x\\)[ \t]*__x_i[ \t]*=[ \t]*\\(x\\);" - "[ \t]*\\\\\n" - "[ \t]*__x_i[ \t]*==[ \t]*\\(__typeof\\(__x_i\\)\\)[ \t]*" - "INFINITY[ \t]*\\|\\|[ \t]*\\\\\n" - "[ \t]*__x_i[ \t]*==[ \t]*\\(__typeof\\(__x_i\\)\\)[ \t]*" - "\\(-INFINITY\\);[ \t]*\\}\\)"; - test_text = - '#pragma ident "@(#)math_c99.h 1.12 07/01/21 SMI"'"\n" - "#undef isinf\n" - "#define isinf(x) __extension__( \\\\\n" - " { __typeof(x) __x_i = (x); \\\\\n" - " __x_i == (__typeof(__x_i)) INFINITY || \\\\\n" - " __x_i == (__typeof(__x_i)) (-INFINITY); })"; -}; - -/* * Sun Solaris defines PTHREAD_MUTEX_INITIALIZER with a trailing * "0" for the last field of the pthread_mutex_t structure, which is * of type upad64_t, which itself is typedef'd to int64_t, but with @@ -3433,49 +3633,6 @@ }; /* - * The pow overloads with int were removed in C++ 2011 DR 550. - */ -fix = { - hackname = solaris_pow_int_overload; - mach = '*-*-solaris2*'; - files = "iso/math_iso.h"; - select = "^[ \t]*inline [a-z ]* pow\\([^()]*, int [^()]*\\)" - " *\\{[^{}]*\n[^{}]*\\}"; - c_fix = format; - c_fix_arg = "#if __cplusplus < 201103L\n%0\n#endif"; - - test_text = - " inline long double pow(long double __X, int __Y) { return\n" - " __powl(__X, (long double) (__Y)); }"; -}; - -/* - * Sun Solaris defines PTHREAD_RWLOCK_INITIALIZER with a "0" for some - * fields of the pthread_rwlock_t structure, which are of type - * upad64_t, which itself is typedef'd to int64_t, but with __STDC__ - * defined (e.g. by -ansi) it is a union. So change the initializer - * to "{0}" instead. - */ -fix = { - hackname = solaris_rwlock_init_1; - select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; - files = pthread.h; - mach = '*-*-solaris*'; - c_fix = format; - c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n" - "%0\n" - "#else\n" - "%1{0, 0, 0, {{0}, {0}, {0}}, {{0}, {0}}, {{0}, {0}}}\n" - "#endif"; - c_fix_arg = "(^#define[ \t]+PTHREAD_RWLOCK_INITIALIZER[ \t]+)" - "\\{0, 0, 0, \\{0, 0, 0\\}, \\{0, 0\\}, \\{0, 0\\}\\}[ \t]*$"; - - test_text = - '#ident "@(#)pthread.h 1.26 98/04/12 SMI"'"\n" - "#define PTHREAD_RWLOCK_INITIALIZER\t{0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}}"; -}; - -/* * Sun Solaris defines PTHREAD_ONCE_INIT as an array containing a * structure. As such, it need two levels of brackets, but only * contains one. Wrap the macro definition in an extra layer. @@ -3526,114 +3683,65 @@ }; /* - * Sun Solaris 2 has a version of sys/int_const.h that defines - * UINT8_C and UINT16_C to unsigned constants. + * Solaris 10+ uses char *const argv[_RESTRICT_KYWD] in the + * posix_spawn declarations, which doesn't work with C++. */ fix = { - hackname = solaris_int_const; - files = sys/int_const.h; + hackname = solaris_posix_spawn_restrict; + files = spawn.h; mach = '*-*-solaris2*'; c_fix = format; - c_fix_arg = "#define\tUINT8_C(c)\t(c)\n" - "%1\n" - "#define\tUINT16_C(c)\t(c)"; - select = "^#define[ \t]+UINT8_C\\(c\\)[ \t]+__CONCAT__.*\n" - "(/\*.*\*/)\n" - "#define[ \t]+UINT16_C\\(c\\)[ \t]+__CONCAT__.*"; + c_fix_arg = "%1*_RESTRICT_KYWD %2%3"; + select = "(.*[ \t]+)([a-z]+)\\[_RESTRICT_KYWD\\](.*)"; test_text = - "#define UINT8_C(c) __CONCAT__(c,u)\n" - "/* CSTYLED */\n" - "#define UINT16_C(c) __CONCAT__(c,u)"; + "char *const argv[_RESTRICT_KYWD],\n" + "char *const envp[_RESTRICT_KYWD]);"; }; /* - * Sun Solaris 2 has a version of sys/int_limits.h that defines - * UINT8_MAX and UINT16_MAX to unsigned constants. + * The pow overloads with int were removed in C++ 2011 DR 550. */ fix = { - hackname = solaris_int_limits_1; - files = sys/int_limits.h; + hackname = solaris_pow_int_overload; mach = '*-*-solaris2*'; + files = "iso/math_iso.h"; + select = "^[ \t]*inline [a-z ]* pow\\([^()]*, int [^()]*\\)" + " *\\{[^{}]*\n[^{}]*\\}"; c_fix = format; - c_fix_arg = "#define\tUINT8_MAX\t(255)\n" - "#define\tUINT16_MAX\t(65535)"; - select = "^#define[ \t]+UINT8_MAX[ \t]+\\(255U\\)\n" - "#define[ \t]+UINT16_MAX[ \t]+\\(65535U\\)"; - test_text = - "#define UINT8_MAX (255U)\n" - "#define UINT16_MAX (65535U)"; -}; + c_fix_arg = "#if __cplusplus < 201103L\n%0\n#endif"; -/* - * Sun Solaris 2 has a version of sys/int_limits.h that defines - * INT_FAST16 limits to wrong values for sys/int_types.h. - */ -fix = { - hackname = solaris_int_limits_2; - files = sys/int_limits.h; - mach = '*-*-solaris2*'; - c_fix = format; - c_fix_arg = "#define\t%1_FAST16_%2 %132_%2"; - select = "^#define[ \t]+(INT|UINT)_FAST16_(MAX|MIN)[ \t](INT|UINT)16.*"; test_text = - "#define INT_FAST16_MAX INT16_MAX\n" - "#define UINT_FAST16_MAX UINT16_MAX\n" - "#define INT_FAST16_MIN INT16_MIN"; + " inline long double pow(long double __X, int __Y) { return\n" + " __powl(__X, (long double) (__Y)); }"; }; /* - * Sun Solaris 2 has a version of sys/int_limits.h that defines - * SIZE_MAX as unsigned long. + * Sun Solaris defines PTHREAD_RWLOCK_INITIALIZER with a "0" for some + * fields of the pthread_rwlock_t structure, which are of type + * upad64_t, which itself is typedef'd to int64_t, but with __STDC__ + * defined (e.g. by -ansi) it is a union. So change the initializer + * to "{0}" instead. */ fix = { - hackname = solaris_int_limits_3; - files = sys/int_limits.h; - mach = '*-*-solaris2*'; - c_fix = format; - c_fix_arg = "#define\tSIZE_MAX\t4294967295U"; - select = "^#define[ \t]+SIZE_MAX[ \t]+4294967295UL"; - test_text = - "#define SIZE_MAX 4294967295UL"; -}; + hackname = solaris_rwlock_init_1; + select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; + files = pthread.h; + mach = '*-*-solaris*'; + c_fix = format; + c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n" + "%0\n" + "#else\n" + "%1{0, 0, 0, {{0}, {0}, {0}}, {{0}, {0}}, {{0}, {0}}}\n" + "#endif"; + c_fix_arg = "(^#define[ \t]+PTHREAD_RWLOCK_INITIALIZER[ \t]+)" + "\\{0, 0, 0, \\{0, 0, 0\\}, \\{0, 0\\}, \\{0, 0\\}\\}[ \t]*$"; -/* - * Sun Solaris up to 9 has a version of sys/int_types.h that forbids use - * of Standard C99 64-bit types in 32-bit mode. - */ -fix = { - hackname = solaris_int_types; - select = "__STDC__ - 0 == 0"; - bypass = "_LONGLONG_TYPE"; - files = sys/int_types.h; - c_fix = format; - c_fix_arg = - "(defined(_STDC_C99) || !defined(_STRICT_STDC) || defined(__GNUC__))"; test_text = - "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n" - "typedef long long int64_t;\n" - "#endif\n\n" - "#if defined(_LP64) || (__STDC__ - 0 == 0 && !defined(_NO_LONGLONG))\n" - "typedef int64_t intmax_t;\n" - "#endif"; + '#ident "@(#)pthread.h 1.26 98/04/12 SMI"'"\n" + "#define PTHREAD_RWLOCK_INITIALIZER\t{0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}}"; }; /* - * Solaris 10+ uses char *const argv[_RESTRICT_KYWD] in the - * posix_spawn declarations, which doesn't work with C++. - */ -fix = { - hackname = solaris_posix_spawn_restrict; - files = spawn.h; - mach = '*-*-solaris2*'; - c_fix = format; - c_fix_arg = "%1*_RESTRICT_KYWD %2%3"; - select = "(.*[ \t]+)([a-z]+)\\[_RESTRICT_KYWD\\](.*)"; - test_text = - "char *const argv[_RESTRICT_KYWD],\n" - "char *const envp[_RESTRICT_KYWD]);"; -}; - -/* * Before Solaris 10, lacks declarations of std::__filbuf and * std::__flsbuf, but uses them. */ @@ -4076,7 +4184,7 @@ c_fix = format; c_fix_arg = "unsigned int newev;"; - test_text = " unsigned int new; /* New console (if changing) */"; + test_text = " unsigned int new; /* New console (if changing) */"; }; /* @@ -4240,7 +4348,7 @@ fix = { hackname = thread_keyword; files = "pthread.h"; - files = "bits/sigthread.h"; + files = bits/sigthread.h, '*/bits/sigthread.h'; select = "([* ])__thread([,)])"; c_fix = format; c_fix_arg = "%1__thr%2"; @@ -4326,6 +4434,41 @@ }; /* + * On VMS, add missing braces around sigset_t constants. + */ +fix = { + hackname = vms_add_missing_braces; + select = "(_SIG_[A-Z]+_SET[ \t]+= \\{)(0x[0F]+, 0x[0F]+)"; + mach = "*-*-*vms*"; + files = "rtldef/signal.h"; + c_fix = format; + + c_fix_arg = '%1 {%2} '; + + test_text = "static const __sigset_t _SIG_EMPTY_SET = " + "{0x00000000, 0x00000000},\n" + " _SIG_FULL_SET = {0xFFFFFFFF, 0xFFFFFFFF};\n"; +}; + +/* + * On VMS, some DEC-C builtins are directly used. + */ +fix = { + hackname = vms_decc_builtin; + select = "(__MEMSET|__MEMMOVE|__MEMCPY|__STRLEN|__STRCPY)"; + mach = "*-*-*vms*"; + files = rtldef/string.h, rtldef/time.h, rtldef/strings.h, + rtldef/socket.h; + sed = "s@__MEMSET@memset@"; + sed = "s@__MEMMOVE@memmove@"; + sed = "s@__MEMCPY@memcpy@"; + sed = "s@__STRLEN@strlen@"; + sed = "s@__STRCPY@strcpy@"; + + test_text = "define FD_ZERO(__p) __MEMSET((__p), 0, sizeof(*(__p)))\n"; +}; + +/* * Define __CAN_USE_EXTERN_PREFIX on vms. */ fix = { @@ -4349,27 +4492,6 @@ }; /* - * On VMS, use pragma extern_model instead of VAX-C keywords. - */ -fix = { - hackname = vms_use_pragma_extern_model; - select = "#if defined\\(__DECC\\) \\|\\| defined\\(__DECCXX\\)\n" - "# pragma extern_model __save\n"; - mach = "*-*-*vms*"; - c_fix = format; - - c_fix_arg = "#if defined(__DECC) || defined(__DECCXX) || defined(__GNUC__)\n" - "# pragma extern_model __save\n"; - - test_text = "#if defined(__DECC) || defined(__DECCXX)\n" - "# pragma extern_model __save\n" - "# pragma extern_model strict_refdef\n" - " extern struct x zz$yy;\n" - "# pragma extern_model __restore\n" - "#endif\n"; -}; - -/* * On VMS, disable the use of dec-c string builtins */ fix = { @@ -4385,39 +4507,6 @@ }; /* - * On VMS, change to to avoid a - * conflict while building gcc. Likewise for - */ -fix = { - hackname = vms_use_quoted_include; - select = "(#[ \t]*include[ \t]+)<(resource|builtins)\\.h>"; - mach = "*-*-*vms*"; - files = rtldef/wait.h, starlet_c/pthread.h; - c_fix = format; - - c_fix_arg = '%1'; - - test_text = "# include "; -}; - -/* - * On VMS, add missing braces around sigset_t constants. - */ -fix = { - hackname = vms_add_missing_braces; - select = "(_SIG_[A-Z]+_SET[ \t]+= \\{)(0x[0F]+, 0x[0F]+)"; - mach = "*-*-*vms*"; - files = "rtldef/signal.h"; - c_fix = format; - - c_fix_arg = '%1 {%2} '; - - test_text = "static const __sigset_t _SIG_EMPTY_SET = " - "{0x00000000, 0x00000000},\n" - " _SIG_FULL_SET = {0xFFFFFFFF, 0xFFFFFFFF};\n"; -}; - -/* * On VMS, fix incompatible redeclaration of hostalias. */ fix = { @@ -4436,21 +4525,23 @@ }; /* - * On VMS, some DEC-C builtins are directly used. + * On VMS, forward declare structure before referencing them in prototypes. */ fix = { - hackname = vms_decc_builtin; - select = "(__MEMSET|__MEMMOVE|__MEMCPY|__STRLEN|__STRCPY)"; + hackname = vms_forward_declare_struct; + select = "(/\\* forward decls for C\\+\\+ \\*/\n)" + "#ifdef __cplusplus\n"; mach = "*-*-*vms*"; - files = rtldef/string.h, rtldef/time.h, rtldef/strings.h, - rtldef/socket.h; - sed = "s@__MEMSET@memset@"; - sed = "s@__MEMMOVE@memmove@"; - sed = "s@__MEMCPY@memcpy@"; - sed = "s@__STRLEN@strlen@"; - sed = "s@__STRCPY@strcpy@"; + files = rtldef/if.h; + c_fix = format; - test_text = "define FD_ZERO(__p) __MEMSET((__p), 0, sizeof(*(__p)))\n"; + c_fix_arg = "%1" + "#if defined (__cplusplus) || defined (__GNUC__)\n"; + + test_text = "/* forward decls for C++ */\n" + "#ifdef __cplusplus\n" + "struct foo;\n" + "#endif\n"; }; /* @@ -4474,42 +4565,59 @@ }; /* - * On VMS, forward declare structure before referencing them in prototypes. + * On VMS, force the use of fast setjmp, as the normal setjmp uses conditions + * which is not yet fully supported by gcc. */ fix = { - hackname = vms_forward_declare_struct; - select = "(/\\* forward decls for C\\+\\+ \\*/\n)" - "#ifdef __cplusplus\n"; + hackname = vms_use_fast_setjmp; + select = "(#[ \t]*if[ \t]*defined\\(__FAST_SETJMP\\)[ \t]*\\|\\|)"; mach = "*-*-*vms*"; - files = rtldef/if.h; + files = rtldef/setjmp.h; c_fix = format; - c_fix_arg = "%1" - "#if defined (__cplusplus) || defined (__GNUC__)\n"; + c_fix_arg = "%0 defined (__GNUC__) ||"; - test_text = "/* forward decls for C++ */\n" - "#ifdef __cplusplus\n" - "struct foo;\n" - "#endif\n"; + test_text = "# if defined(__FAST_SETJMP) || defined(__UNIX_SETJMP)"; }; /* - * On VMS, force the use of fast setjmp, as the normal setjmp uses conditions - * which is not yet fully supported by gcc. + * On VMS, use pragma extern_model instead of VAX-C keywords. */ fix = { - hackname = vms_use_fast_setjmp; - select = "(#[ \t]*if[ \t]*defined\\(__FAST_SETJMP\\)[ \t]*\\|\\|)"; + hackname = vms_use_pragma_extern_model; + select = "#if defined\\(__DECC\\) \\|\\| defined\\(__DECCXX\\)\n" + "# pragma extern_model __save\n"; mach = "*-*-*vms*"; - files = rtldef/setjmp.h; c_fix = format; - c_fix_arg = "%0 defined (__GNUC__) ||"; + c_fix_arg = "#if defined(__DECC) || defined(__DECCXX) || defined(__GNUC__)\n" + "# pragma extern_model __save\n"; - test_text = "# if defined(__FAST_SETJMP) || defined(__UNIX_SETJMP)"; + test_text = "#if defined(__DECC) || defined(__DECCXX)\n" + "# pragma extern_model __save\n" + "# pragma extern_model strict_refdef\n" + " extern struct x zz$yy;\n" + "# pragma extern_model __restore\n" + "#endif\n"; }; /* + * On VMS, change to to avoid a + * conflict while building gcc. Likewise for + */ +fix = { + hackname = vms_use_quoted_include; + select = "(#[ \t]*include[ \t]+)<(resource|builtins)\\.h>"; + mach = "*-*-*vms*"; + files = rtldef/wait.h, starlet_c/pthread.h; + c_fix = format; + + c_fix_arg = '%1'; + + test_text = "# include "; +}; + +/* * AIX and Interix headers define NULL to be cast to a void pointer, * which is illegal in ANSI C++. */ @@ -4773,73 +4881,4 @@ test_text = "extern char *\tsprintf();"; }; - -/* - * Incorrect feraiseexcept extern inline in bits/fenv.h on x86_64 - * that fails when compiling for SSE-less 32-bit x86. - */ -fix = { - hackname = feraiseexcept_nosse_invalid; - mach = 'i[34567]86-*-linux*', 'x86*-linux*', 'amd64-*-linux*'; - files = bits/fenv.h; - select = "^([\t ]*)__asm__ __volatile__ \\(\"divss %0, %0 *\" : " - ": \"x\" \\(__f\\)\\);$"; - bypass = "\"fdiv .*; fwait\""; - - c_fix = format; - c_fix_arg = <<- _EOText_ - # ifdef __SSE_MATH__ - %0 - # else - %1__asm__ __volatile__ ("fdiv %%%%st, %%%%st(0); fwait" - %1 : "=t" (__f) : "0" (__f)); - # endif - _EOText_; - - test_text = <<- _EOText_ - __asm__ __volatile__ ("divss %0, %0" : : "x" (__f)); - _EOText_; -}; - -/* - * Incorrect feraiseexcept extern inline in bits/fenv.h on x86_64 - * that fails when compiling for SSE-less 32-bit x86. - */ -fix = { - hackname = feraiseexcept_nosse_divbyzero; - mach = 'i[34567]86-*-linux*', 'x86*-linux*', 'amd64-*-linux*'; - files = bits/fenv.h; - select = "^([\t ]*)__asm__ __volatile__ \\(\"divss %1, %0 *\" : " - ": \"x\" \\(__f\\), \"x\" \\(__g\\)\\);$"; - bypass = "\"fdivp .*; fwait\""; - - c_fix = format; - c_fix_arg = <<- _EOText_ - # ifdef __SSE_MATH__ - %0 - # else - %1__asm__ __volatile__ ("fdivp %%%%st, %%%%st(1); fwait" - %1 : "=t" (__f) : "0" (__f), "u" (__g) : "st(1)"); - # endif - _EOText_; - - test_text = <<- _EOText_ - __asm__ __volatile__ ("divss %1, %0" : : "x" (__f), "x" (__g)); - _EOText_; -}; - -/* - * Old Linux kernel's header breaks Traditional CPP - */ -fix = { - hackname = complier_h_tradcpp; - files = linux/compiler.h; - - select = "#define __builtin_warning\\(x, y\\.\\.\\.\\) \\(1\\)"; - c_fix = format; - c_fix_arg = "/* __builtin_warning(x, y...) is obsolete */"; - - test_text = "#define __builtin_warning(x, y...) (1)"; -}; - /*EOF*/