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: */
_EOArg_;
};
+/* On AIX when _LARGE_FILES is defined fcntl.h defines open to
+ * open64 and creat to creat64. This fixes fcntl.h to
+ * undef those defines and use __asm__ to alias the symbols if
+ * building with g++ and -D_LARGE_FILES
+ */
+fix = {
+ hackname = AAB_aix_fcntl;
+ files = fcntl.h;
+ select = "define open[ \t]open64";
+ mach = "*-*-aix*";
+ test-text = ''; /* no way to test */
+
+ c_fix = wrap;
+
+ c_fix_arg = "";
+
+ c_fix_arg = <<- _EOArg_
+
+ #if defined __GNUG__ && defined _LARGE_FILES && defined __cplusplus
+ #define __need__aix_fcntl_h_fix
+ #ifdef __need__aix_fcntl_h_fix
+ #undef open
+ #undef creat
+ #undef openat
+ /* Alias the symbols using asm */
+ extern "C" {
+ extern int open(const char *, int, ...) __asm__("open64");
+ extern int creat(const char *, mode_t) __asm__("creat64");
+ #if (_XOPEN_SOURCE >= 700)
+ extern int openat(int, const char *, int, ...) __asm__("open64at");
+ #endif
+ }
+ #endif
+ #endif
+
+ _EOArg_;
+};
/*
* On Mac OS 10.3.9, the 'long double' functions are available in
_EndOfHeader_;
};
-
-/*
- * ... and for the previous fix to be useful, you have to not use ""
- * includes.
- */
-fix = {
- hackname = AAB_darwin7_9_long_double_funcs_2;
- mach = "*-*-darwin7.9*";
- files = math.h;
- select = '#include[ \t]+\"';
- c_fix = format;
- c_fix_arg = "%1<%2.h>";
-
- c_fix_arg = '([ \t]*#[ \t]*include[ \t]+)"([a-z0-9/]+)\.h"';
-
- test_text = '#include "architecture/ppc/math.h"';
-};
-
-
/*
* This fixes __FD_ZERO bug for linux 2.x.y (x <= 2 && y <= some n)
*/
_EndOfHeader_;
};
-
/*
* This fixes __FD_ZERO bug for glibc-1.x
*/
_EndOfHeader_;
};
-
/*
* This fixes __FD_ZERO bug for glibc-2.0.x
*/
_EndOfHeader_;
};
-
/*
* Solaris <sys/varargs.h> is a DDK (aka kernel-land) header providing
* the same interface as <stdarg.h>. No idea why they couldn't have just
_EndOfHeader_;
};
-
/*
* Fix non-ANSI memcpy declaration that conflicts with gcc's builtin
* declaration on Sun OS 4.x. We must only fix this on Sun OS 4.x, because
_EndOfHeader_;
};
+/*
+ * Fix assert.h on VxWorks:
+ */
+fix = {
+ hackname = AAB_vxworks_assert;
+ files = assert.h;
+ mach = "*-*-vxworks*";
+
+ replace = <<- _EndOfHeader_
+ #ifndef _ASSERT_H
+ #define _ASSERT_H
+
+ #ifdef assert
+ #undef assert
+ #endif
+
+ #if defined(__STDC__) || defined(__cplusplus)
+ extern void __assert (const char*);
+ #else
+ extern void __assert ();
+ #endif
+
+ #ifdef NDEBUG
+ #define assert(ign) ((void)0)
+ #else
+
+ #define ASSERT_STRINGIFY(str) ASSERT_STRINGIFY_HELPER(str)
+ #define ASSERT_STRINGIFY_HELPER(str) #str
+
+ #define assert(test) ((void) \
+ ((test) ? ((void)0) : \
+ __assert("Assertion failed: " ASSERT_STRINGIFY(test) ", file " \
+ __FILE__ ", line " ASSERT_STRINGIFY(__LINE__) "\n")))
+
+ #endif
+
+ #endif
+ _EndOfHeader_;
+};
+
+/*
+ * Add needed include to regs.h (NOT the gcc header) on VxWorks
+ */
+
+fix = {
+ hackname = AAB_vxworks_regs_vxtypes;
+ files = regs.h;
+ mach = "*-*-vxworks*";
+
+ replace = <<- _EndOfHeader_
+ #ifndef _REGS_H
+ #define _REGS_H
+ #include <types/vxTypesOld.h>
+ #include_next <arch/../regs.h>
+ #endif
+ _EndOfHeader_;
+};
+
+/*
+ * Make VxWorks stdint.h a bit more compliant - add typedefs
+ */
+fix = {
+ hackname = AAB_vxworks_stdint;
+ files = stdint.h;
+ mach = "*-*-vxworks*";
+
+ replace = <<- _EndOfHeader_
+ #ifndef _STDINT_H
+ #define _STDINT_H
+ /* get int*_t, uint*_t */
+ #include <types/vxTypes.h>
+
+ /* get legacy vxworks types for compatibility */
+ #include <types/vxTypesOld.h>
+
+ typedef long intptr_t;
+ typedef unsigned long uintptr_t;
+
+ typedef int64_t intmax_t;
+ typedef uint64_t uintmax_t;
+
+ typedef int8_t int_least8_t;
+ typedef int16_t int_least16_t;
+ typedef int32_t int_least32_t;
+ typedef int64_t int_least64_t;
+
+ typedef uint8_t uint_least8_t;
+ typedef uint16_t uint_least16_t;
+ typedef uint32_t uint_least32_t;
+ typedef uint64_t uint_least64_t;
+
+ typedef int8_t int_fast8_t;
+ typedef int int_fast16_t;
+ typedef int32_t int_fast32_t;
+ typedef int64_t int_fast64_t;
+
+ typedef uint8_t uint_fast8_t;
+ typedef unsigned int uint_fast16_t;
+ typedef uint32_t uint_fast32_t;
+ typedef uint64_t uint_fast64_t;
+
+ /* Ranges */
+ #define UINT8_MAX (~(uint8_t)0)
+ #define UINT8_MIN 0
+ #define UINT16_MAX (~(uint16_t)0)
+ #define UINT16_MIN 0
+ #define UINT32_MAX (~(uint32_t)0)
+ #define UINT32_MIN 0
+ #define UINT64_MAX (~(uint64_t)0)
+ #define UINT64_MIN 0
+
+ #define UINTPTR_MAX (~(uintptr_t)0)
+ #define UINTPTR_MIN 0
+
+ /* Need to do int_fast16_t as well, as type
+ size may be architecture dependent */
+ #define UINT_FAST16_MAX (~(uint_fast16_t)0)
+ #define UINT_FAST16_MAX 0
+
+ #define INT8_MAX (UINT8_MAX>>1)
+ #define INT8_MIN (INT8_MAX+1)
+ #define INT16_MAX (UINT16_MAX>>1)
+ #define INT16_MIN (INT16_MAX+1)
+ #define INT32_MAX (UINT32_MAX>>1)
+ #define INT32_MIN (INT32_MAX+1)
+ #define INT64_MAX (UINT64_MAX>>1)
+ #define INT64_MIN (INT64_MAX+1)
+
+ #define INTPTR_MAX (UINTPTR_MAX>>1)
+ #define INTPTR_MIN (INTPTR_MAX+1)
+
+ #define INT_FAST16_MAX (UINT_FAST16_MAX>>1)
+ #define INT_FAST16_MIN (INT_FAST16_MAX+1)
+
+ /* now define equiv. constants */
+ #define UINT_FAST8_MAX UINT8_MAX
+ #define UINT_FAST8_MIN UINT_FAST8_MIN
+ #define INT_FAST8_MAX INT8_MAX
+ #define INT_FAST8_MIN INT8_MIN
+ #define UINT_FAST32_MAX UINT32_MAX
+ #define UINT_FAST32_MIN UINT32_MIN
+ #define INT_FAST32_MAX INT32_MAX
+ #define INT_FAST32_MIN INT32_MIN
+ #define UINT_FAST64_MAX UINT64_MAX
+ #define UINT_FAST64_MIN UINT64_MIN
+ #define INT_FAST64_MAX INT64_MAX
+ #define INT_FAST64_MIN INT64_MIN
+
+ #define UINT_LEAST8_MAX UINT8_MAX
+ #define UINT_LEAST8_MIN UINT8_MIN
+ #define INT_LEAST8_MAX INT8_MAX
+ #define INT_LEAST8_MIN INT8_MIN
+ #define UINT_LEAST16_MAX UINT16_MAX
+ #define UINT_LEAST16_MIN UINT16_MIN
+ #define INT_LEAST16_MAX INT16_MAX
+ #define INT_LEAST16_MIN INT16_MIN
+ #define UINT_LEAST32_MAX UINT32_MAX
+ #define UINT_LEAST32_MIN UINT32_MIN
+ #define INT_LEAST32_MAX INT32_MAX
+ #define INT_LEAST32_MIN INT32_MIN
+ #define UINT_LEAST64_MAX UINT64_MAX
+ #define UINT_LEAST64_MIN UINT64_MIN
+ #define INT_LEAST64_MAX INT64_MAX
+ #define INT_LEAST64_MIN INT64_MIN
+
+ #define UINTMAX_MAX UINT64_MAX
+ #define UINTMAX_MIN UINT64_MIN
+ #define INTMAX_MAX INT64_MAX
+ #define INTMAX_MIN INT64_MIN
+
+ #endif
+ _EndOfHeader_;
+};
+
+/*
+ * This hack makes makes unistd.h more POSIX-compliant on VxWorks
+ */
+fix = {
+ hackname = AAB_vxworks_unistd;
+ files = unistd.h;
+ mach = "*-*-vxworks*";
+
+ replace = <<- _EndOfHeader_
+ #ifndef _UNISTD_H
+ #define _UNISTD_H
+ #include_next <unistd.h>
+ #include <ioLib.h>
+ #ifndef STDIN_FILENO
+ #define STDIN_FILENO 0
+ #endif
+ #ifndef STDOUT_FILENO
+ #define STDOUT_FILENO 1
+ #endif
+ #ifndef STDERR_FILENO
+ #define STDERR_FILENO 2
+ #endif
+ #endif /* _UNISTD_H */
+ _EndOfHeader_;
+};
+
+/*
+ * assert.h on AIX 7 redefines static_assert as _Static_assert without
+ * protecting C++.
+ */
+fix = {
+ hackname = aix_assert;
+ mach = "*-*-aix*";
+ files = assert.h;
+ select = "#define[ \t]static_assert[ \t]_Static_assert";
+ c_fix = format;
+ c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
+ test_text = "#define static_assert _Static_assert";
+};
/*
* complex.h on AIX 5 and AIX 6 define _Complex_I and I in terms of __I,
test_text = "struct fc_softc {\n int a;\n};";
};
+/*
+ * Fix AIX definition of NULL for G++.
+ */
+fix = {
+ hackname = aix_null;
+ mach = "*-*-aix*";
+ files = curses.h, dbm.h, locale.h, stdio.h, stdlib.h, string.h,
+ time.h, unistd.h, wchar.h, sys/dir.h, sys/param.h, sys/types.h;
+ bypass = __null;
+ select = "#define[ \t]+NULL[ \t]+\\(*0L*\\)*";
+ c_fix = format;
+ c_fix_arg = <<- _EOFix_
+ #ifndef NULL
+ #ifdef __cplusplus
+ #ifdef __GNUG__
+ #define NULL __null
+ #else /* ! __GNUG__ */
+ #define NULL 0L
+ #endif /* __GNUG__ */
+ #else /* ! __cplusplus */
+ #define NULL ((void *)0)
+ #endif /* __cplusplus */
+ #endif /* !NULL */
+ _EOFix_;
+ test_text = "# define\tNULL \t(0L) /* typed NULL */";
+};
+
/*
* pthread.h on AIX defines PTHREAD_ONCE_INIT, PTHREAD_MUTEX_INITIALIZER,
* PTHREAD_COND_INITIALIZER and PTHREAD_RWLOCK_INITIALIZER without enough
fix = {
hackname = aix_pthread;
files = "pthread.h";
- select = "(#define [A-Za-z_0-9]+)(\\\\\n[^A-Za-z_0-9 \t\n(])";
+ select = "(#define[\t ][A-Za-z_0-9]+)(\\\\\n[^A-Za-z_0-9 \t\n(])";
c_fix = format;
c_fix_arg = "%1 %2";
test_text = "#define PTHREAD_MUTEX_INITIALIZER\\\\\n"
"{...init stuff...}";
};
-
/*
* AIX stdint.h fixes.
*/
"#define UINT16_MAX (65535U)";
};
-
+/*
+ * aix_stdint_2
+ */
fix = {
hackname = aix_stdint_2;
mach = "*-*-aix*";
"#define UINTPTR_MAX UINT32_MAX";
};
-
+/*
+ * aix_stdint_3
+ */
fix = {
hackname = aix_stdint_3;
mach = "*-*-aix*";
"#define PTRDIFF_MAX INT32_MAX";
};
-
+/*
+ * aix_stdint_4
+ */
fix = {
hackname = aix_stdint_4;
mach = "*-*-aix*";
"#define SIZE_MAX UINT32_MAX";
};
-
+/*
+ * aix_stdint_5
+ */
fix = {
hackname = aix_stdint_5;
mach = "*-*-aix*";
"#define UINT16_C(c) __CONCAT__(c,U)";
};
+/*
+ * stdlib.h on AIX 4.3 declares strtof() with a non-const first argument.
+ */
+fix = {
+ hackname = aix_strtof_const;
+ files = stdlib.h;
+ select = "((extern[ \t]+)?float[ \t]+strtof)\\(char \\*, char \\*\\*\\);";
+ c_fix = format;
+ c_fix_arg = "%1(const char *, char **);";
+ test_text = "extern float strtof(char *, char **);";
+};
/*
* sys/machine.h on AIX 4.3.3 puts whitespace between a \ and a newline
" bar \\ \n baz \\ \n bat";
};
-
/*
* sys/wait.h on AIX 5.2 defines macros that have both signed and
* unsigned types in conditional expressions.
select = '\? (\(\(\(\(unsigned[^)]*\)[^)]*\) >> [^)]*\) \& 0xff\) : -1)';
c_fix = format;
c_fix_arg = "? (int)%1";
- test_text = "#define WSTOPSIG(__x) (int)(WIFSTOPPED(__x) ? ((((unsigned int)__x) >> 8) & 0xff) : -1)";
+ test_text = "#define WSTOPSIG(__x) "
+ "(int)(WIFSTOPPED(__x) ? ((((unsigned int)__x) >> 8) & 0xff) : -1)";
};
-
/*
* sys/signal.h on some versions of AIX uses volatile in the typedef of
* sig_atomic_t, which causes gcc to generate a warning about duplicate
test_text = "typedef volatile int sig_atomic_t;";
};
-
/*
* Fix __assert declaration in assert.h on Alpha OSF/1.
*/
test_text = 'extern void __assert(char *, char *, int);';
};
-
/*
* Fix assert macro in assert.h on Alpha OSF/1.
* The superfluous int cast breaks C++.
': __assert(#EX, __FILE__, __LINE__))';
};
-
/*
* Fix getopt declarations in stdio.h and stdlib.h on Alpha OSF/1 and AIX.
*/
test_text = 'extern int getopt(int, char *[], char *);';
};
-
/*
* Fix missing semicolon on Alpha OSF/4 in <net/if.h>
*/
test_text = ' struct sockaddr vmif_paddr /* protocol address */';
};
-
/*
* Remove erroneous parentheses in sym.h on Alpha OSF/1.
*/
test_text = "#ifndef(__mips64) /* bogus */\nextern int foo;\n#endif";
};
-
/*
* Fix return value of sbrk in unistd.h on Alpha OSF/1 V2.0
* And OpenBSD.
test_text = "extern char* sbrk(ptrdiff_t increment);";
};
-
/*
* For C++, avoid any typedef or macro definition of bool,
* and use the built in type instead.
test_text = "# define bool\t char \n";
};
-
+/*
+ * avoid_bool_type
+ */
fix = {
hackname = avoid_bool_type;
files = curses.h;
test_text = "typedef unsigned int\tbool \t; /* bool\n type */";
};
-
/*
* For C++, avoid any typedef definition of wchar_t,
* and use the built in type instead.
test_text = "typedef unsigned short\twchar_t \t; /* wchar_t\n type */";
};
-
/*
* Fix `typedef struct term;' on hppa1.1-hp-hpux9.
*/
test_text = 'typedef struct term;';
};
-
/*
* Fix one other error in this file:
* a mismatched quote not inside a C comment.
test_text = "/* doesn't have matched single quotes */";
};
-
/*
* check for broken assert.h that needs stdio.h
*/
test_text = "extern FILE* stderr;";
};
-
/*
* check for broken assert.h that needs stdlib.h
*/
test_text = "extern void exit ( int );";
};
-
/*
* Remove `extern double cabs' declarations from math.h.
* This conflicts with C99. Discovered on AIX.
"extern double cabs ( _Complex z );";
};
-
/*
* Fixup Darwin's broken check for __builtin_nanf.
*/
*/
files = "architecture/ppc/math.h";
files = "architecture/*/math.h";
- select = "#if defined(__APPLE_CC__) && (__APPLE_CC__ >= 1345)";
+ select = '#if defined\(__APPLE_CC__\) && \(__APPLE_CC__ >= 1345\)';
bypass = "powl";
c_fix = format;
c_fix_arg = "#if 1";
test_text = "#if defined(__APPLE_CC__) && (__APPLE_CC__ >= 1345)";
};
-
/*
* Various systems derived from BSD4.4 contain a macro definition
* for vfscanf that interacts badly with requirements of builtin-attrs.def.
test_text = '#define vfscanf __svfscanf';
};
-/*
- * 'g++ -std=c++11' defines __cplusplus to 201103L, which suggests
- * that it conforms to ISO/IEC 14882:2011. It currently does
- * not support the [[noreturn]] procedure attribute.
- * When it does, this hack should be removed.
- * SEE: gcc.gnu.org/bugzilla/show_bug.cgi?id=51776
- */
-fix = {
- hackname = cdef_cplusplus;
- files = sys/cdefs.h;
- select = '\[\[noreturn\]\]';
- c_fix = format;
- c_fix_arg = '__attribute__((__noreturn__))';
- test_text = "#define _Noreturn [[noreturn]]";
-};
-
/*
* Fix various macros used to define ioctl numbers.
* The traditional syntax was:
test_text = "#define _CTRL(c) ('c'&037)";
};
+/*
+ * Fix various macros used to define ioctl numbers.
+ */
fix = {
hackname = ctrl_quotes_use;
select = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+CTRL[ \t]*\\( *[^,']";
test_text = "#define TCTRLFOO BSD43_CTRL(T, 1)";
};
-
/*
* sys/mman.h on HP/UX is not C++ ready,
* even though NO_IMPLICIT_EXTERN_C is defined on HP/UX.
test_text = "extern void* malloc( size_t );";
};
+/*
+ * For the AAB_darwin7_9_long_double_funcs fix to be useful,
+ * you have to not use "" includes.
+ */
+fix = {
+ hackname = darwin_9_long_double_funcs_2;
+ mach = "*-*-darwin7.9*";
+ files = math.h;
+ select = '#include[ \t]+\"';
+ c_fix = format;
+ c_fix_arg = "%1<%2.h>";
+
+ c_fix_arg = '([ \t]*#[ \t]*include[ \t]+)"([a-z0-9/]+)\.h"';
+
+ test_text = '#include "architecture/ppc/math.h"';
+};
/*
* On darwin8 and earlier, mach-o/swap.h isn't properly guarded
test_text = "extern void swap_fat_header();\n";
};
-
/*
* AvailabilityMacros.h on Darwin breaks with GCC 4.0, because of
* bad __GNUC__ tests.
*/
-
fix = {
hackname = darwin_gcc4_breakage;
mach = "*-*-darwin*";
"(__GNUC_MINOR__ >= 1)\n";
};
-
/*
* __private_extern__ doesn't exist in FSF GCC. Even if it did,
* why would you ever put it in a system header file?
"unsigned long *address);\n";
};
-
/*
* Darwin headers have a stdint.h that defines UINT8_C and UINT16_C to
* unsigned constants.
"#define UINT16_C(v) (v ## U)";
};
-
/*
* Darwin headers have a stdint.h that defines INTPTR_MIN and INTPTR_MAX
* with wrong types.
"#endif";
};
-
/*
* Darwin headers have a stdint.h that defines UINTPTR_MAX with a wrong type.
*/
"#endif";
};
-
/*
* Darwin headers have a stdint.h that defines SIZE_MAX with a wrong type.
*/
"#endif";
};
-
/*
* Darwin headers have a stdint.h that defines {U,}INTMAX_{MIN,MAX}
* with a wrong type.
"#define UINTMAX_MAX UINT64_MAX";
};
-
/*
* Darwin headers have a stdint.h that defines {U,}INTMAX_C
* with a wrong type.
"#endif";
};
-
/*
* Darwin headers have a stdint.h that defines {U,}INTMAX_C
* with a wrong type.
"#define UINTMAX_C(v) (v ## ULL)";
};
-
/*
* Fix <c_asm.h> on Digital UNIX V4.0:
* It contains a prototype for a DEC C internal asm() function,
"};\n#pragma intrinsic( dasm )\n/* END ASM TEST*/";
};
-
/*
* Fix typo in <wchar.h> on DJGPP 2.03.
*/
"extern __DJ_wint_t x;\n";
};
-
/*
* Fix these Sun OS files to avoid an invalid identifier in an #ifdef.
*/
test_text = "#ifdef ecd.cursor\n#error bogus\n#endif /* ecd+cursor */";
};
+/*
+ * 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
test_text = '#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7';
};
-
/*
* Some releases of FreeBSD 4 and FreeBSD 5.0 and 5.1 system headers presume
* neither the existence of GCC 4 nor its exact feature set yet break
test_text = '#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ == 3';
};
-
/*
* Some versions of glibc don't expect the C99 inline semantics.
*/
EOT;
};
-
/*
* Similar, but a version that didn't have __NO_INLINE__
*/
EOT;
};
-
/*
* The glibc_c99_inline_1 fix should have fixed everything. Unfortunately
* there are many glibc headers which do not respect __USE_EXTERN_INLINES.
EOT;
};
-
+/*
+ * glibc_c99_inline_3
+ */
fix = {
hackname = glibc_c99_inline_3;
files = bits/string2.h, '*/bits/string2.h';
EOT;
};
-
+/*
+ * glibc_c99_inline_4
+ */
fix = {
hackname = glibc_c99_inline_4;
- files = sys/sysmacros.h, '*/sys/sysmacros.h', wchar.h, '*/wchar.h';
+ files = sys/sysmacros.h, '*/sys/sysmacros.h', wchar.h, '*/wchar.h',
+ pthread.h, '*/pthread.h';
bypass = "__extern_inline|__gnu_inline__";
select = "(^| )extern __inline";
c_fix = format;
EOT;
};
-
/* glibc-2.3.5 defines pthread mutex initializers incorrectly,
* so we replace them with versions that correspond to the
* definition.
_EOText_;
};
-
/* glibc versions before 2.5 have a version of stdint.h that defines
UINT8_C and UINT16_C to produce unsigned constants, as do uClibc
versions with stdint.h based on those glibc versions. */
c_fix = format;
c_fix_arg = "# define UINT8_C(c)\tc\n# define UINT16_C(c)\tc";
c_fix_arg = "# define UINT8_C\\(c\\)\tc ## U\n# define UINT16_C\\(c\\)\tc ## U";
- test_text = "/* This file is part of the GNU C Library. */\n# define UINT8_C(c)\tc ## U\n# define UINT16_C(c)\tc ## U";
+ test_text = "/* This file is part of the GNU C Library. */\n"
+ "# define UINT8_C(c)\tc ## U\n"
+ "# define UINT16_C(c)\tc ## U";
};
-
/* Some versions of glibc have a version of bits/string2.h that
produces "value computed is not used" warnings from strncpy; fix
this definition by using __builtin_strncpy instead as in newer
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)";
select = '\(\(\(type\) 0.25\) && \(\(type\) 0.25 - 1\)\)';
bypass = "__floating_type\\(type\\) \\\\\n.*__builtin_classify_type";
c_fix = format;
- c_fix_arg = "(__builtin_classify_type ((type) 0) == 8 || (__builtin_classify_type ((type) 0) == 9 && __builtin_classify_type (__real__ ((type) 0)) == 8))";
+ c_fix_arg = "(__builtin_classify_type ((type) 0) == 8 || "
+ "(__builtin_classify_type ((type) 0) == 9 && "
+ "__builtin_classify_type (__real__ ((type) 0)) == 8))";
test_text = "# define __floating_type(type) (((type) 0.25) && ((type) 0.25 - 1))";
};
"typedef ushort_t wchar_t; /* ushort_t */";
};
-
/*
* Fix HP & Sony's use of "../machine/xxx.h"
* to refer to: <machine/xxx.h>
test_text = ' # include "../machine/mumble.h"';
};
-
/*
* Check for (...) in C++ code in HP/UX sys/file.h.
*/
test_text = "extern void foo(...); /* HPUX_SOURCE - bad varargs */";
};
-
/*
* Un-Hide a series of five FP defines from post-1999 compliance GCC:
* FP_NORMAL, FP_ZERO, FP_INFINITE, FP_SUBNORMAL and FP_NAN
"# define FP_NAN 4\n";
};
-
/*
* Delete C++ double pow (double, int) inline function from HP-UX 10 & 11
* math.h to prevent clash with define in c_std/bits/std_cmath.h.
" }\n";
};
-
/*
* Fix hpux 10.X missing ctype declarations 1
*/
test_text = "# define _toupper(__c) __toupper(__c)\n";
};
-
/*
* Fix hpux 10.X missing ctype declarations 2
*/
" extern unsigned int *__SB_masks;\n";
};
-
/*
* Fix hpux 10.X missing stdio declarations
*/
test_text = "# define _iob __iob\n";
};
-
/*
* Make sure hpux defines abs in header.
*/
test_text = "#ifndef _MATH_INCLUDED";
};
-
/*
- * Keep HP-UX 11 from stomping on C++ math namespace
- * with defines for fabsf.
+ * Fix hpux11 __LWP_RWLOCK_VALID define
*/
fix = {
- hackname = hpux11_fabsf;
- files = math.h;
- select = "^[ \t]*#[ \t]*define[ \t]+fabsf\\(.*";
- bypass = "__cplusplus";
-
+ hackname = hpux11_lwp_rwlock_valid;
+ mach = "*-hp-hpux11*";
+ files = sys/pthread.h;
+ select = "#define __LWP_RWLOCK_VALID[ \t]*0x8c91";
c_fix = format;
- c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
-
- test_text =
- "#ifdef _PA_RISC\n"
- "# define fabsf(x) ((float)fabs((double)(float)(x)))\n"
- "#endif";
+ c_fix_arg = "#define __LWP_RWLOCK_VALID -29551";
+ test_text = "#define __LWP_RWLOCK_VALID 0x8c91";
};
-
/*
- * Fix C99 constant in __POINTER_SET define.
+ * hpux sendfile()
*/
fix = {
- hackname = hpux11_pthread_const;
- mach = "*-hp-hpux11.[0-3]*";
- files = sys/pthread.h;
- select = "^#define[ \t]*__POINTER_SET[ \t]*\\(\\(void \\*\\) 1LL\\)";
-
+ 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.
+ */
+fix = {
+ hackname = hpux11_fabsf;
+ files = math.h;
+ select = "^[ \t]*#[ \t]*define[ \t]+fabsf\\(.*";
+ bypass = "__cplusplus";
+
+ c_fix = format;
+ c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
+
+ test_text =
+ "#ifdef _PA_RISC\n"
+ "# define fabsf(x) ((float)fabs((double)(float)(x)))\n"
+ "#endif";
+};
+
+/*
+ * Fix C99 constant in __POINTER_SET define.
+ */
+fix = {
+ hackname = hpux11_pthread_const;
+ mach = "*-hp-hpux11.[0-3]*";
+ files = sys/pthread.h;
+ select = "^#define[ \t]*__POINTER_SET[ \t]*\\(\\(void \\*\\) 1LL\\)";
+
c_fix = format;
c_fix_arg = "#define __POINTER_SET\t\t((void *) 1L)";
test_text = "#define __POINTER_SET\t\t((void *) 1LL)";
};
-
/*
* Prevent HP-UX 11 from defining __size_t and preventing size_t from
* being defined by having it define _hpux_size_t instead.
" extern int getpwuid_r( char *, __size_t, struct passwd **);\n";
};
-
/*
* Fix hpux 11.00 broken snprintf declaration
* (third argument is char *, needs to be const char * to prevent
' __va__list);';
};
-
/*
* get rid of bogus inline definitions in HP-UX 8.0
*/
"inline double sqr(double v) { return v**0.5; }";
};
+/*
+ * 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
"# define isalpha(__c) (__SB_masks ? __SB_masks[__c] & _IS\n";
};
+/*
+ * 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.
"#endif /* ! _XOPEN_SOURCE_EXTENDED */";
};
+/*
+ * 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
"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*";
files = stdlib.h;
- select = "#[ \t]*if[ \t]*!defined\\(__ia64\\) \\|\\| defined\\(_PROTOTYPES\\) \\|\\| defined\\(_LONG_DOUBLE_STRUCT\\)";
+ select = "#[ \t]*if[ \t]*!defined\\(__ia64\\) \\|\\| "
+ "defined\\(_PROTOTYPES\\) \\|\\| "
+ "defined\\(_LONG_DOUBLE_STRUCT\\)";
c_fix = format;
c_fix_arg = "# if !defined(_PROTOTYPES) || defined(_LONG_DOUBLE_STRUCT)";
- test_text = "# if !defined(__ia64) || !defined(_PROTOTYPES) || defined(_LONG_DOUBLE_STRUCT)\n";
-};
-
-/*
- * Fix hpux10.20 <sys/time.h> 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\nextern \"C\" {\n#endif\n%0\n#ifdef __cplusplus\n}\n#endif";
- test_text = " extern int errno;\n";
+ test_text = "# if !defined(__ia64) || "
+ "!defined(_PROTOTYPES) || "
+ "defined(_LONG_DOUBLE_STRUCT)\n";
};
-
/*
* Add missing braces to pthread initializer defines.
*/
"}\n";
};
-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.
+ * 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_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";
-};
+ 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.*";
-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";
+ 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_stdint_least_fast;
mach = "*-hp-hpux11.2*";
_EOFix_;
};
+/*
+ * Fix hpux10.20 <sys/time.h> 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.*";
- 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";
-};
+ hackname = hpux_systime;
+ files = sys/time.h;
+ select = "^extern 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";
+ c_fix_arg = "struct sigevent;";
+
+ test_text = 'extern struct sigevent;';
};
/*
*/
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";
test_text = "# define HUGE_VAL\t(__extension__ 0x1.0p2047)";
};
-
/*
* Fix glibc definition of HUGE_VALF in terms of hex floating point constant
*/
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";
test_text = "# define HUGE_VALF (__extension__ 0x1.0p255f)";
};
-
/*
* Fix glibc definition of HUGE_VALL in terms of hex floating point constant
*/
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";
test_text = "# define HUGE_VALL (__extension__ 0x1.0p32767L)";
};
-
/*
* Fix return type of abort and free
*/
"extern int exit(void*);";
};
-
/*
* Fix various macros used to define ioctl numbers.
* The traditional syntax was:
"#define XX_IO(x) ('x'<<8|256)";
};
+/*
+ * Fix the usage of the ioctl macro numbers.
+ */
fix = {
hackname = io_quotes_use;
select = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+IO[A-Z]*[ \t]*"
"BSD43__IOWR(T, 1) /* Some are multi-line */";
};
-
/*
* Check for missing ';' in struct
*/
"}; /* mumbled struct */\n";
};
-
/*
* Non-traditional "const" declaration in Irix's limits.h.
*/
test_text = "extern const char limit; /* test limits */";
};
-
/*
* IRIX 5.x's stdio.h declares some functions that take a va_list as
* taking char *. However, GCC uses void * for va_list, so
"extern int printf( const char *, /* va_list */ char * );";
};
-
/*
* These files in Sun OS 4.x and ARM/RISCiX and BSD4.3
* use / * * / to concatenate tokens.
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++.
*/
"\t(((char *) &((struct sigcontext *) 0)->sc_gr[0]) - (char *) 0)\n";
};
-
/*
* Remove header file warning from sys/time.h. Autoconf's
* AC_HEADER_TIME recommends to include both sys/time.h and time.h
test_text = "#warning Using <time.h> instead of <sys/time.h>";
};
-
/*
* Add missing declaration for putenv.
*/
test_text = "extern char *getenv _AP((const char *));";
};
-
/*
* Fix BSD machine/ansi.h to use __builtin_va_list to define _BSD_VA_LIST_.
*
test_text = " # define _BSD_VA_LIST_\tchar**";
};
-
/*
* Fix non-ansi machine name defines
*/
"\n/* no uniform test, so be careful :-) */";
};
-
/*
* Some math.h files define struct exception (it's in the System V
* Interface Definition), which conflicts with the class exception defined
*/
bypass = 'We have a problem when using C\+\+|for C\+\+, '
'_[a-z0-9A-Z_]+_exception; for C, exception';
+ /* The Solaris 10 headers already get this right. */
+ mach = '*-*-solaris2.1[0-9]*';
+ not_machine = true;
c_fix = wrap;
c_fix_arg = "#ifdef __cplusplus\n"
test_text = "typedef struct exception t_math_exception;";
};
-
/*
* This looks pretty broken to me. ``dbl_max_def'' will contain
* "define DBL_MAX " at the start, when what we really want is just
"#define HUGE_VAL DBL_MAX";
};
-
/*
* nested comment
*/
test_text = "/*#include <rpc/auth_des.h> /* skip this */";
};
-
/*
* Some versions of NetBSD don't expect the C99 inline semantics.
*/
test_text = "extern __inline int\nsigaddset(sigset_t *set, int signo)\n{}";
};
-
+/*
+ * netbsd_c99_inline_2
+ */
fix = {
hackname = netbsd_c99_inline_2;
mach = "*-*-netbsd*";
test_text = "#define _SIGINLINE extern __inline";
};
-
/*
* NetBSD has a semicolon after the ending '}' for some extern "C".
*/
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;
sed = "s@#define INT32_MIN.*@#define INT32_MIN (-INT32_MAX - 1)@";
sed = "s@#define INT32_MAX.*@#define INT32_MAX __INT32_MAX__@";
sed = "s@#define UINT32_MAX.*@#define UINT32_MAX __UINT32_MAX__@";
- sed = "s@#define INT_LEAST32_MIN.*@#define INT_LEAST32_MIN (-INT_LEAST32_MAX - 1)@";
- sed = "s@#define INT_LEAST32_MAX.*@#define INT_LEAST32_MAX __INT_LEAST32_MAX__@";
- sed = "s@#define UINT_LEAST32_MAX.*@#define UINT_LEAST32_MAX __UINT_LEAST32_MAX__@";
- sed = 's@#define INT_FAST\([0-9]*\)_MIN.*@#define INT_FAST\1_MIN (-INT_FAST\1_MAX - 1)@';
- sed = 's@#define INT_FAST\([0-9]*\)_MAX.*@#define INT_FAST\1_MAX __INT_FAST\1_MAX__@';
- sed = 's@#define UINT_FAST\([0-9]*\)_MAX.*@#define UINT_FAST\1_MAX __UINT_FAST\1_MAX__@';
+ sed = "s@#define INT_LEAST32_MIN.*@"
+ "#define INT_LEAST32_MIN (-INT_LEAST32_MAX - 1)@";
+ sed = "s@#define INT_LEAST32_MAX.*@"
+ "#define INT_LEAST32_MAX __INT_LEAST32_MAX__@";
+ sed = "s@#define UINT_LEAST32_MAX.*@"
+ "#define UINT_LEAST32_MAX __UINT_LEAST32_MAX__@";
+ sed = 's@#define INT_FAST\([0-9]*\)_MIN.*@'
+ '#define INT_FAST\1_MIN (-INT_FAST\1_MAX - 1)@';
+ sed = 's@#define INT_FAST\([0-9]*\)_MAX.*@'
+ '#define INT_FAST\1_MAX __INT_FAST\1_MAX__@';
+ sed = 's@#define UINT_FAST\([0-9]*\)_MAX.*@'
+ '#define UINT_FAST\1_MAX __UINT_FAST\1_MAX__@';
sed = "s@#define SIZE_MAX.*@#define SIZE_MAX __SIZE_MAX__@";
sed = "s@#define PTRDIFF_MIN.*@#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)@";
sed = "s@#define PTRDIFF_MAX.*@#define PTRDIFF_MAX __PTRDIFF_MAX__@";
"#define UINT16_C(x) x##U";
};
-
+/*
+ * newlib_stdint_2
+ */
fix = {
hackname = newlib_stdint_2;
files = stdint-newlib.h, stdint.h;
"/** Macros for minimum-width integer constant expressions */";
};
-
/*
* NeXT 3.2 adds const prefix to some math functions.
* These conflict with the built-in functions.
test_text = "extern\tdouble\t__const__\tmumble();";
};
-
/*
* NeXT 3.2 uses the word "template" as a parameter for some
* functions. GCC reports an invalid use of a reserved key word
test_text = "extern mumble( char * template); /* fix */";
};
-
/*
* NeXT 3.2 includes the keyword volatile in the abort() and exit()
* function prototypes. That conflicts with the built-in functions.
test_text = "extern\tvolatile\tvoid\tabort();";
};
-
/*
* NeXT 2.0 defines 'int wait(union wait*)', which conflicts with Posix.1.
* Note that version 3 of the NeXT system has wait.h in a different directory,
test_text = "extern pid_d wait(union wait*);";
};
-
/*
* a missing semi-colon at the end of the nodeent structure definition.
*/
test_text = "#include <reg_types.h>";
};
-
/*
* On broken glibc-2.3.3 systems an array of incomplete structures is
* passed to __sigsetjmp. Fix that to take a pointer instead.
select = "struct __jmp_buf_tag";
c_fix = format;
c_fix_arg = "%1 *%2%3";
- c_fix_arg = "^(extern int __sigsetjmp \\(struct __jmp_buf_tag) (__env)\\[1\\](.*)$";
- test_text = "extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask);";
+ c_fix_arg = "^(extern int __sigsetjmp \\(struct __jmp_buf_tag) "
+ "(__env)\\[1\\](.*)$";
+ test_text = "extern int __sigsetjmp (struct __jmp_buf_tag __env[1], "
+ "int __savemask);";
};
/*
test_text = "extern int\tfclose(), fflush(), fread(), fwrite(), foo();";
};
-
/*
* Fix casts as lvalues in glibc's <rpc/xdr.h>.
*/
"\t((long)ntohl((u_long)*__extension__((u_int32_t*)(buf))++))";
};
-
+/*
+ * rpc_xdr_lvalue_cast_b
+ */
fix = {
hackname = rpc_xdr_lvalue_cast_b;
files = rpc/xdr.h;
"\t(*__extension__((u_int32_t*)(buf))++ = (long)htonl((u_long)(v)))";
};
-
/*
* function class(double x) conflicts with C++ keyword on rs/6000
*/
test_text = "extern int class();";
};
-
/*
* Wrong fchmod prototype on RS/6000.
*/
test_text = "extern int fchmod(char *, mode_t);";
};
-
/*
* parameters conflict with C++ new on rs/6000
*/
test_text = 'extern int rename(const char *old, const char *new);';
};
-
/*
* Solaris 10+ <sys/feature_tests.h> defines _RESTRICT_KYWD as restrict
* for C99. This is wrong for C++, which needs many C99 features, but
test_text = "#define _RESTRICT_KYWD restrict";
};
-
/*
* Solaris 10+ complex.h defines _Complex_I and _Imaginary_I in terms of
* themselves, which are Sun Studio compiler intrinsics. Remove _Imaginary_I
"#define I _Imaginary_I";
};
-
/*
* Solaris 10+ <complex.h> is wrapped in #ifndef __cplusplus. Wrap in
* extern "C" instead so libstdc++ can use it.
"#endif /* !defined(__cplusplus) */";
};
-
/*
* g++ rejects functions declared with both C and C++ linkage.
*/
" void *bsearch(const void *, const void *, size_t, size_t,";
};
-
/*
* Solaris <iso/stdio_iso.h> doesn't declare getc for C++ with
* _STRICT_STDC, but uses it.
"#if !defined(_REENTRANT) && !defined(_LP64) && !defined(_STRICT_STDC)";
};
+/*
+ * 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)";
+};
/*
- * Before Solaris 10, <iso/setjmp_iso.h> doesn't mark longjump noreturn.
+ * Sun Solaris 2 has a version of sys/int_limits.h that defines
+ * UINT8_MAX and UINT16_MAX to unsigned constants.
*/
fix = {
- hackname = solaris_longjmp_noreturn;
- mach = "*-*-solaris2*";
- files = "iso/setjmp_iso.h";
- bypass = "__NORETURN";
- select = "(.*longjmp\\(jmp_buf.*[^)]+\\));";
+ hackname = solaris_int_limits_1;
+ files = sys/int_limits.h;
+ mach = '*-*-solaris2*';
c_fix = format;
- c_fix_arg = "%1 __attribute__ ((__noreturn__));";
+ 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)";
+};
- test_text = "extern void longjmp(jmp_buf, int);";
+/*
+ * 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 10 defines several C99 math macros in terms of
"#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";
"#define INFINITY __builtin_infinity";
};
+/*
+ * Solaris math NAN
+ */
fix = {
hackname = solaris_math_3;
select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
"#define NAN __builtin_nan";
};
+/*
+ * Solaris math fpclassify
+ */
fix = {
hackname = solaris_math_4;
select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
files = iso/math_c99.h;
c_fix = format;
c_fix_arg = "#define\tfpclassify(x) \\\n"
- " __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, (x))";
+ " __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, "
+ "FP_SUBNORMAL, FP_ZERO, (x))";
c_fix_arg = "^#define[ \t]+fpclassify\\(x\\)[ \t]+__builtin_fpclassify\\(x\\)";
test_text =
'#ident "@(#)math_c99.h 1.9 04/11/01 SMI"'"\n"
"#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";
_EOText_;
};
+/*
+ * Solaris math comparison macros
+ */
fix = {
hackname = solaris_math_9;
select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
files = iso/math_c99.h;
c_fix = format;
c_fix_arg = "#define\t%1(x, y)%2__builtin_%1(x, y)";
- c_fix_arg = "^#define[ \t]+([a-z]+)\\(x, y\\)([ \t]+)\\(\\(x\\) __builtin_[a-z]+\\(y\\)\\)";
+ c_fix_arg = "^#define[ \t]+([a-z]+)\\(x, y\\)([ \t]+)\\(\\(x\\) "
+ "__builtin_[a-z]+\\(y\\)\\)";
test_text =
'#ident "@(#)math_c99.h 1.9 04/11/01 SMI"'"\n"
"#undef isgreater\n"
};
/*
- * On Solaris 11, if you do isinf(NaN) you'll get a floating point
- * exception. Provide an alternative using GCC's builtin.
+ * Newer Solaris 10/11 GCC signbit implementations cause strict-aliasing
+ * warnings.
*/
-
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); })";
+ hackname = solaris_math_11;
+ select = '@\(#\)math_c99\.h' "[ \t]+1\\.[0-9]+[ \t]+[0-9/]+ ";
+ files = iso/math_c99.h;
+ c_fix = format;
+ c_fix_arg = << _EOArg_
+#undef signbit
+#define signbit(x) (sizeof(x) == sizeof(float) \
+ ? __builtin_signbitf(x) \
+ : sizeof(x) == sizeof(long double) \
+ ? __builtin_signbitl(x) \
+ : __builtin_signbit(x))
+_EOArg_;
+ c_fix_arg = << _EOArg_
+^#undef[ ]+signbit
+#if defined\(__sparc\)
+#define[ ]+signbit\(x\)[ ]+__extension__\( \\
+[ ]+\{[ ]*__typeof\(x\)[ ]*__x_s[ ]*=[ ]*\(x\);[ ]*\\
+[ ]+\(int\)[ ]*\(\*\(unsigned[ ]*\*\)[ ]*\&__x_s[ ]*>>[ ]*31\);[ ]*\}\)
+#elif defined\(__i386\) \|\| defined\(__amd64\)
+#define[ ]+signbit\(x\)[ ]+__extension__\( \\
+[ ]+\{ __typeof\(x\) __x_s = \(x\); \\
+[ ]+\(sizeof \(__x_s\) == sizeof \(float\) \? \\
+[ ]+\(int\) \(\*\(unsigned \*\) \&__x_s >> 31\) : \\
+[ ]+sizeof \(__x_s\) == sizeof \(double\) \? \\
+[ ]+\(int\) \(\(\(unsigned \*\) \&__x_s\)\[1\] >> 31\) : \\
+[ ]+\(int\) \(\(\(unsigned short \*\) \&__x_s\)\[4\] >> 15\)\); \}\)
+#endif
+_EOArg_;
+ test_text = << _EOText_
+/* @(#)math_c99.h 1.14 13/03/27 */
+#undef signbit
+#if defined(__sparc)
+#define signbit(x) __extension__( \\
+ { __typeof(x) __x_s = (x); \\
+ (int) (*(unsigned *) &__x_s >> 31); })
+#elif defined(__i386) || defined(__amd64)
+#define signbit(x) __extension__( \\
+ { __typeof(x) __x_s = (x); \\
+ (sizeof (__x_s) == sizeof (float) ? \\
+ (int) (*(unsigned *) &__x_s >> 31) : \\
+ sizeof (__x_s) == sizeof (double) ? \\
+ (int) (((unsigned *) &__x_s)[1] >> 31) : \\
+ (int) (((unsigned short *) &__x_s)[4] >> 15)); })
+#endif
+_EOText_;
};
/*
- * 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
- * __STDC__ defined (e.g. by -ansi) it is a union. So change the
- * initializer to "{0}" instead
+ * 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.
*/
fix = {
- hackname = solaris_mutex_init_2;
+ hackname = solaris_once_init_1;
select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
files = pthread.h;
- /*
- * On Solaris 10, this fix is unnecessary because upad64_t is
- * always defined correctly regardless of the definition of the
- * __STDC__ macro. The first "mach" pattern matches up to
- * solaris9. The second "mach" pattern will not match any two (or
- * more) digit solaris version, but it will match e.g. 2.5.1.
- */
- mach = '*-*-solaris2.[0-9]', '*-*-solaris2.[0-9][!0-9]*';
+ mach = '*-*-solaris*';
c_fix = format;
- c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n"
- "%0\n"
- "#else\n"
- "%1, {0}}%4\n"
- "#endif";
- c_fix_arg = "(^#define[ \t]+PTHREAD_(MUTEX|COND)_INITIALIZER[ \t]+"
- "(|/\*.*\*/[ \t]*\\\\\n[ \t]*)\\{.*)"
- ",[ \t]*0\\}" "(|[ \t].*)$";
+ c_fix_arg = "%1{%2}%3";
+ c_fix_arg = "(^#define[ \t]+PTHREAD_ONCE_INIT[ \t]+\\{)([^}]+)(\\})[ \t]*$";
test_text =
- '#ident "@(#)pthread.h 1.26 98/04/12 SMI"'"\n"
- "#define PTHREAD_MUTEX_INITIALIZER\t{{{0},0}, {{{0}}}, 0}\n"
- "#define PTHREAD_COND_INITIALIZER\t{{{0}, 0}, 0}\t/* DEFAULTCV */\n"
- "#define PTHREAD_MUTEX_INITIALIZER /* = DEFAULTMUTEX */ \\\\\n"
- " {{0, 0, 0, DEFAULT_TYPE, _MUTEX_MAGIC}, {{{0}}}, 0}\n"
- "#define PTHREAD_COND_INITIALIZER /* = DEFAULTCV */ \\\\\n"
- " {{{0, 0, 0, 0}, DEFAULT_TYPE, _COND_MAGIC}, 0}";
+ '#pragma ident "@(#)pthread.h 1.37 04/09/28 SMI"'"\n"
+ "#define PTHREAD_ONCE_INIT\t{0, 0, 0, PTHREAD_ONCE_NOTDONE}";
};
+/*
+ * Solaris 10+ <spawn.h> 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]);";
+};
/*
- * The pow overloads with int were removed in C++ 2011.
+ * The pow overloads with int were removed in C++ 2011 DR 550.
*/
fix = {
hackname = solaris_pow_int_overload;
select = "^[ \t]*inline [a-z ]* pow\\([^()]*, int [^()]*\\)"
" *\\{[^{}]*\n[^{}]*\\}";
c_fix = format;
- c_fix_arg = "#ifndef __GXX_EXPERIMENTAL_CXX0X__\n%0\n#endif";
+ 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
"%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.
- */
-fix = {
- hackname = solaris_once_init_1;
- select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
- files = pthread.h;
- mach = '*-*-solaris*';
- c_fix = format;
- c_fix_arg = "%1{%2}%3";
- c_fix_arg = "(^#define[ \t]+PTHREAD_ONCE_INIT[ \t]+\\{)([^}]+)(\\})[ \t]*$";
- test_text =
- '#pragma ident "@(#)pthread.h 1.37 04/09/28 SMI"'"\n"
- "#define PTHREAD_ONCE_INIT\t{0, 0, 0, PTHREAD_ONCE_NOTDONE}";
-};
-
-
-/*
- * Sun Solaris defines PTHREAD_ONCE_INIT with a "0" for some
- * fields of the pthread_once_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. This test relies on solaris_once_init_1.
- */
-fix = {
- hackname = solaris_once_init_2;
- select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
- files = pthread.h;
- /*
- * On Solaris 10, this fix is unnecessary because upad64_t is
- * always defined correctly regardless of the definition of the
- * __STDC__ macro. The first "mach" pattern matches up to
- * solaris9. The second "mach" pattern will not match any two (or
- * more) digit solaris version, but it will match e.g. 2.5.1.
- */
- mach = '*-*-solaris2.[0-9]', '*-*-solaris2.[0-9][!0-9]*';
- c_fix = format;
- c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n"
- "%0\n"
- "#else\n"
- "%1{0}, {0}, {0}, {%3}%4\n"
- "#endif";
- c_fix_arg = "(^#define[ \t]+PTHREAD_ONCE_INIT[ \t]+\\{\\{)"
- "(0, 0, 0, )(PTHREAD_[A-Z_]+)(\\}\\})[ \t]*$";
- test_text =
- '#ident "@(#)pthread.h 1.26 98/04/12 SMI"'"\n"
- "#define PTHREAD_ONCE_INIT\t{{0, 0, 0, PTHREAD_ONCE_NOTDONE}}\n";
-};
-
-
-/*
- * 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";
-};
-
-
-/*
- * Solaris 10+ <spawn.h> 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\\](.*)";
+ "\\{0, 0, 0, \\{0, 0, 0\\}, \\{0, 0\\}, \\{0, 0\\}\\}[ \t]*$";
+
test_text =
- "char *const argv[_RESTRICT_KYWD],\n"
- "char *const envp[_RESTRICT_KYWD]);";
+ '#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}}";
};
-
/*
* Before Solaris 10, <stdio.h> lacks declarations of std::__filbuf and
* std::__flsbuf, but <iso/stdio_iso.h> uses them.
"#endif";
};
-
/*
* Sun Solaris 8 has what appears to be some gross workaround for
* some old version of their c++ compiler. G++ doesn't want it
test_text = "#if\tdefined(__cplusplus) && (__cplusplus < 54321L)";
};
-
-/*
- * On Solaris 9, __va_list needs to become a typedef for
- * __builtin_va_list to make -Wmissing-format-attribute work.
- */
-fix = {
- hackname = solaris_sys_va_list;
- files = sys/va_list.h;
- mach = '*-*-solaris2.9';
- select = "#if.*__STDC__.*\n"
- "typedef void \\*__va_list;\n"
- "#else\n"
- "typedef char \\*__va_list;\n"
- "#endif";
-
- c_fix = format;
- c_fix_arg = "#ifdef __GNUC__\n"
- "typedef __builtin_va_list __va_list;\n"
- "#else\n"
- "%0\n"
- "#endif";
- test_text = "#if defined(__STDC__) && !defined(__ia64)\n"
- "typedef void *__va_list;\n"
- "#else\n"
- "typedef char *__va_list;\n"
- "#endif";
-};
-
-
/*
* a missing semi-colon at the end of the statsswtch structure definition.
*/
test_text = "struct statswtch {\n int boottime\n};";
};
-
/*
* Arrange for stdio.h to use stdarg.h to define __gnuc_va_list.
* On 4BSD-derived systems, stdio.h defers to machine/ansi.h; that's
test_text = "";
};
-
/*
* Don't use or define the name va_list in stdio.h. This is for
* ANSI. Note _BSD_VA_LIST_ is dealt with elsewhere. The presence
test_text = "extern void mumble( va_list);";
};
-
/*
* Fix headers that use va_list from stdio.h to use the updated
* va_list from the stdio_va_list change. Note _BSD_VA_LIST_ is
test_text = "extern void mumble( va_list);";
};
-
/*
* "!__STDC__" or "__STDC__==0" or "__STDC__!=1" or "__STDC__-0==0"
* is "!defined( __STRICT_ANSI__ )"
"int foo;\n#endif";
};
-
/*
* "__STDC__!=0" or "__STDC__==1" or "__STDC__-0==1"
* is "defined( __STRICT_ANSI__ )"
test_text = "#if __STDC__ == 1 /* is std C\n */\nint foo;\n#endif";
};
-
/*
* IRIX 4.0.5 <rpc/xdr.h> uses struct __file_s
* in prototype without previous definition.
test_text = "extern void xdrstdio_create( struct __file_s* );";
};
-
/*
* IRIX 4.0.5 <rpc/auth.h> uses struct sockaddr
* in prototype without previous definition.
test_text = "extern AUTH* authdes_create( struct sockaddr* );";
};
-
/*
* Apply fix this to all OSs since this problem seems to effect
* more than just SunOS.
"};";
};
-
/*
* Fix bogus #ifdef on SunOS 4.1.
*/
test_text = "#ifdef __i386__ || __vax__ || __sun4c__";
};
-
/*
* Fix the CAT macro in SunOS memvar.h.
*/
"#define CAT(a,b)\ta/**/b";
};
-
/*
* Fix return type of free and {c,m,re}alloc in <malloc.h> on SunOS 4.1.
* Also fix return type of {m,re}alloc in <malloc.h> on sysV68
"char*\trealloc();";
};
-
/*
* Check for yet more missing ';' in struct (in SunOS 4.0.x)
*/
test_text = "struct mumble\n int _cnt\n};";
};
-
/*
* signal.h on SunOS defines signal using (),
* which causes trouble when compiling with g++ -pedantic.
test_text = "void\t(*signal())();";
};
-
/*
* Correct the return type for strlen in strings.h in SunOS 4.
*/
test_text = " int\tstrlen(); /* string length */";
};
+/*
+ * Linux kernel's vt.h breaks C++
+ */
+fix = {
+ hackname = suse_linux_vt_cxx;
+ files = linux/vt.h;
+
+ select = "^[ \t]*unsigned int new;";
+ c_fix = format;
+ c_fix_arg = "unsigned int newev;";
+
+ test_text = " unsigned int new; /* New console (if changing) */";
+};
/*
* Disable apparent native compiler optimization cruft in SVR4.2 <string.h>
test_text = "#define strlen __std_hdr_strlen\n";
};
-
/*
* Fix broken decl of getcwd present on some svr4 systems.
*/
test_text = "extern char* getcwd(char *, int);";
};
-
/*
* Fix broken decl of profil present on some svr4 systems.
*/
'profil(unsigned short *, unsigned int, unsigned int, unsigned int);';
};
-
/*
* Correct types for signal handler constants like SIG_DFL; they might be
* void (*) (), and should be void (*) (int). C++ doesn't like the
"#define SIG_IGN (void (*)())0\n";
};
-
/*
* Some SysV r4 systems, including Sequent's DYNIX/ptx, use the local
* function 'getrnge' in <regexp.h> before they declare it. For these
"{}";
};
-
/*
* Fix return value of mem{ccpy,chr,cpy,set} and str{len,spn,cspn}
* in string.h on sysV68
"\tstrlen(), strspn();";
};
-
/*
* Fix return type of calloc, malloc, realloc, bsearch and exit
*/
"extern char*\tbsearch(void*,size_t,size_t);\n";
};
-
/*
* __thread is now a keyword.
*/
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";
test_text = "#ifdef _cplusplus\nint bogus;\n#endif";
};
-
/*
* parameters not const on DECstation Ultrix V4.0 and OSF/1.
*/
"extern int scanf( char *__format, ...);\n";
};
-
/*
* parameters not const on DECstation Ultrix V4.0 and OSF/1.
*/
"extern char *tempnam(char*,char*);\n";
};
-
/*
* Fix definitions of macros used by va-i960.h in VxWorks header file.
*/
"#define __alignof__(x) ...";
};
+/*
+ * 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.
"# endif\n";
};
-/*
- * 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
*/
test_text = "#if !defined(__VAX)\n";
};
-/*
- * On VMS, change <resource.h> to <sys/resource.h> to avoid a
- * conflict while building gcc. Likewise for <builtins.h>
- */
-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<sys/%2.h>';
-
- test_text = "# include <resource.h>";
-};
-
-/*
- * 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.
*/
};
/*
- * 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";
};
/*
*/
fix = {
hackname = vms_no_64bit_getopt;
- select = "^[ \t]*(extern[ \t]*)?(int[ \t]*(getopt|optind|opterr|optopt)|(char \\*optarg))([ \t]*\\(.*\\))?;\n";
- /* select = "^[ \t](extern[ \t))?(int[ \t](getopt|optind|opterr|optopt))|(char *optarg).*;\n"; */
+ select = "^[ \t]*(extern[ \t]*)?(int[ \t]*(getopt|optind|opterr|optopt)"
+ "|(char \\*optarg))([ \t]*\\(.*\\))?;\n";
mach = "*-*-*vms*";
files = rtldef/stdio.h, rtldef/unistd.h;
c_fix = format;
- c_fix_arg = "#if __INITIAL_POINTER_SIZE != 64 /* getopt is short ptr only. */\n"
- "%0"
- "#endif\n";
+ c_fix_arg = <<- _EOArg_
+ #if __INITIAL_POINTER_SIZE != 64 /* getopt is short ptr only. */
+ %0#endif
+
+ _EOArg_;
test_text = "int getopt (int, char * const [], const char *);";
};
/*
- * 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 <resource.h> to <sys/resource.h> to avoid a
+ * conflict while building gcc. Likewise for <builtins.h>
+ */
+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<sys/%2.h>';
+
+ test_text = "# include <resource.h>";
};
/*
*/
fix = {
hackname = void_null;
- files = curses.h;
- files = dbm.h;
- files = locale.h;
- files = stdio.h;
- files = stdlib.h;
- files = string.h;
- files = time.h;
- files = unistd.h;
- files = sys/dir.h;
- files = sys/param.h;
- files = sys/types.h;
+ files = curses.h, dbm.h, locale.h, stdio.h, stdlib.h, string.h,
+ time.h, unistd.h, sys/dir.h, sys/param.h, sys/types.h;
/* avoid changing C++ friendly NULL */
bypass = __cplusplus;
bypass = __null;
select = "^#[ \t]*define[ \t]+NULL[ \t]+\\(\\(void[ \t]*\\*\\)0\\)";
c_fix = format;
- c_fix_arg = "#define NULL 0";
+ c_fix_arg = <<- _EOFix_
+ #ifndef NULL
+ #ifdef __cplusplus
+ #ifdef __GNUG__
+ #define NULL __null
+ #else /* ! __GNUG__ */
+ #define NULL 0L
+ #endif /* __GNUG__ */
+ #else /* ! __cplusplus */
+ #define NULL ((void *)0)
+ #endif /* __cplusplus */
+ #endif /* !NULL */
+ _EOFix_;
test_text = "# define\tNULL \t((void *)0) /* typed NULL */";
};
-
/*
* Make VxWorks header which is almost gcc ready fully gcc ready.
*/
"#endif /* __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__ */\n";
};
+/*
+ * Wrap VxWorks ioctl to keep everything pretty
+ */
+fix = {
+ hackname = vxworks_ioctl_macro;
+ files = ioLib.h;
+ mach = "*-*-vxworks*";
+
+ c_fix = format;
+ c_fix_arg = "%0\n"
+ "#define ioctl(fd, func, arg) (ioctl)(fd, func, (int)(arg))\n";
+ c_fix_arg = "extern[\t ]+int[\t ]+ioctl[\t ]*\\([\t ,[:alnum:]]*\\);";
+
+ test_text = "extern int ioctl ( int asdf1234, int jkl , int qwerty ) ;";
+};
+
+/*
+ * Wrap VxWorks mkdir to be posix compliant
+ */
+fix = {
+ hackname = vxworks_mkdir_macro;
+ files = sys/stat.h;
+ mach = "*-*-vxworks*";
+
+ c_fix = format;
+ c_fix_arg = "%0\n"
+ "#define mkdir(dir, ...) ((void)0, ##__VA_ARGS__, (mkdir)(dir))\n";
+ c_fix_arg = "extern[\t ]+STATUS[\t ]+mkdir[\t ]*"
+ "\\([\t ]*const[\t ]+char[\t ]*\\*[\t ]*" /* arg type */
+ "(|[_[:alpha:]][_[:alnum:]]*)" /* arg name (optional) */
+ "\\)[\t ]*;";
+
+ test_text = "extern STATUS mkdir (const char * _qwerty) ;";
+};
/*
* Fix VxWorks <time.h> to not require including <vxTypes.h>.
test_text = "uint_t\t_clocks_per_sec;";
};
-
/*
* Fix VxWorks <sys/stat.h> to not require including <vxWorks.h>.
*/
"# define\t__INCstath <sys/stat.h>";
};
+/*
+ * Make it so VxWorks does not include gcc/regs.h accidentally
+ */
+fix = {
+ hackname = vxworks_regs;
+ mach = "*-*-vxworks*";
+
+ select = "#[\t ]*include[\t ]+[<\"]regs.h[>\"]";
+ c_fix = format;
+ c_fix_arg = "#include <arch/../regs.h>";
+
+ test_text = "#include <regs.h>\n";
+};
/*
* Another bad dependency in VxWorks 5.2 <time.h>.
"#define VOIDFUNCPTR (void(*)())";
};
+/*
+ * This hack makes write const-correct on VxWorks
+ */
+fix = {
+ hackname = vxworks_write_const;
+ files = ioLib.h;
+ mach = "*-*-vxworks*";
+
+ c_fix = format;
+ c_fix_arg = "extern int write (int, const char*, size_t);";
+ c_fix_arg = "extern[\t ]+int[\t ]+write[\t ]*\\("
+ "[\t ]*int[\t ]*,"
+ "[\t ]*char[\t ]*\\*[\t ]*,"
+ "[\t ]*size_t[\t ]*\\)[\t ]*;";
+
+ test_text = "extern int write ( int , char * , size_t ) ;";
+};
/*
* There are several name conflicts with C++ reserved words in X11 header
"} mumble;\n";
};
-
/*
* class in Xm/BaseClassI.h
*/
test_text = "extern mumble (int class);\n";
};
-
/*
* new in Xm/Traversal.h
*/
"};\nextern Wedged( Widget new, Widget old );";
};
-
/*
* Incorrect sprintf declaration in X11/Xmu.h
*/
test_text = "extern char *\tsprintf();";
};
-
/*EOF*/