PATCH: Provide stdint.h for IRIX 5/6
Rainer Orth
ro@CeBiTec.Uni-Bielefeld.DE
Tue Nov 17 19:58:00 GMT 2009
"Joseph S. Myers" <joseph@codesourcery.com> writes:
> On Tue, 17 Nov 2009, Rainer Orth wrote:
>
>> This happens because some sed fixes in newlib_stdint_1 (UINT32_MAX,
>> PTRDIFF_MIN, PTRDIFF_MAX, UINT8_C, UINT16_C) and hpux_c99_intptr
>
> The problem newlib definitions were:
>
> #define UINT32_MAX 4294967295U
> #define PTRDIFF_MIN (-__STDINT_EXP(LONG_MAX) - 1L)
> #define PTRDIFF_MAX __STDINT_EXP(LONG_MAX)
> #define UINT8_C(x)<TAB>x##U
> #define UINT16_C(x)<TAB>x##U
Thanks, I should have seen this in inclhack.def myself. Anyway, I've
managed to remove all the testsuite failures, but it turned out to be a
terrible mess:
* All the fixes in newlib_stdint_1 were far too unspecific.
Unfortunately, the baseline in tests/base/stdint.h used them for the
AIX, Darwin, and HP-UX tests as well. I've tightened them all and
restored the other tests to their `native' fixes to match.
* The fixes in hpux_c99_intptr originally matched the IRIX testcases as
well. It turned out that the only difference between the HP-UX and
IRIX 6 is whitespace: while HP-UX only uses tabs between definition
and value, IRIX 6 uses blanks. I've changed the hpux_c99_intptr fix
to be somewhat less generic, although I realize this is fragile. The
proper fix for the testsuite (bootstrap should be unaffected since the
different mach clauses prevent application of the other fix) would be
to support select clauses in check.tpl, too, and add a discriminating
string to the HP-UX testcase. Unfortunately, I've no idea how to do
this (I don't speak autogen. Bruce?) and don't have access to a HP-UX
system to check what regex could be used as a discriminator.
I'm including the revised fixincludes part of the patch (which needs
approval) below. It now passes make check; a fresh bootstrap on
mips-sgi-irix6.5 is in progress.
Ok if it passes?
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University
2009-11-17 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
fixincludes:
* inclhack.def (irix_stdint_c99): Renamed to irix_stdint_c99_mode.
(irix_stdint_c99_types): New fix.
(irix_stdint_c99_macros): Likewise.
(newlib_stdint_1): Tighten UINT32_MAX, SIZE_MAX, PTRDIFF_MIN,
PTRDIFF_MAX, UINT8_C, UINT16_C fixes.
* fixincl.x: Regenerate.
* tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed to
IRIX_STDINT_C99_MODE_CHECK.
[IRIX_STDINT_C99_TYPES_CHECK]: New test.
[IRIX_STDINT_C99_MACROS_CHECK]: Likewise.
[AIX_STDINT_3_CHECK]: Update for tightened newlib_stdint_1 fixes.
[AIX_STDINT_4_CHECK]: Likewise.
[AIX_STDINT_5_CHECK]: Likewise.
[DARWIN_STDINT_1_CHECK]: Likewise.
[DARWIN_STDINT_4_CHECK]: Likewise.
[DARWIN_STDINT_6_CHECK]: Likewise.
[HPUX_C99_INTPTR_CHECK]: Likewise.
[HPUX_C99_INTTYPES2_CHECK]: Likewise.
Index: tests/base/stdint.h
===================================================================
--- tests/base/stdint.h (revision 154216)
+++ tests/base/stdint.h (working copy)
@@ -27,30 +27,30 @@
#if defined( AIX_STDINT_3_CHECK )
-#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
-#define PTRDIFF_MAX __PTRDIFF_MAX__
+#define PTRDIFF_MIN (-9223372036854775807L - 1)
+#define PTRDIFF_MAX 9223372036854775807L
#else
-#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
-#define PTRDIFF_MAX __PTRDIFF_MAX__
+#define PTRDIFF_MIN (-2147483647L - 1)
+#define PTRDIFF_MAX 2147483647L
#endif /* AIX_STDINT_3_CHECK */
#if defined( AIX_STDINT_4_CHECK )
-#define SIZE_MAX __SIZE_MAX__
+#define SIZE_MAX 18446744073709551615UL
#else
-#define SIZE_MAX __SIZE_MAX__
+#define SIZE_MAX 4294967295UL
#endif /* AIX_STDINT_4_CHECK */
#if defined( AIX_STDINT_5_CHECK )
-#define UINT8_C(c) __UINT8_C(c)
-#define UINT16_C(c) __UINT16_C(c)
+#define UINT8_C(c) c
+#define UINT16_C(c) c
#endif /* AIX_STDINT_5_CHECK */
#if defined( DARWIN_STDINT_1_CHECK )
-#define UINT8_C(c) __UINT8_C(c)
-#define UINT16_C(c) __UINT16_C(c)
+#define UINT8_C(v) v
+#define UINT16_C(v) v
#endif /* DARWIN_STDINT_1_CHECK */
@@ -76,9 +76,9 @@
#if defined( DARWIN_STDINT_4_CHECK )
#if __WORDSIZE == 64
-#define SIZE_MAX __SIZE_MAX__
+#define SIZE_MAX 18446744073709551615UL
#else
-#define SIZE_MAX __SIZE_MAX__
+#define SIZE_MAX 4294967295UL
#endif
#endif /* DARWIN_STDINT_4_CHECK */
@@ -98,11 +98,11 @@
#if defined( DARWIN_STDINT_6_CHECK )
#if __WORDSIZE == 64
-#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
-#define PTRDIFF_MAX __PTRDIFF_MAX__
+#define PTRDIFF_MIN (-9223372036854775807L - 1)
+#define PTRDIFF_MAX 9223372036854775807L
#else
-#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
-#define PTRDIFF_MAX __PTRDIFF_MAX__
+#define PTRDIFF_MIN (-2147483647 - 1)
+#define PTRDIFF_MAX 2147483647
#endif
#endif /* DARWIN_STDINT_6_CHECK */
@@ -126,21 +126,21 @@
#if defined( HPUX_C99_INTPTR_CHECK )
-#define PTRDIFF_MAX __PTRDIFF_MAX__
+#define PTRDIFF_MAX (2147483647l)
#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
#define INTPTR_MAX (2147483647l)
#define INTPTR_MIN (-INTPTR_MAX - 1)
#define UINTPTR_MAX (4294967295ul)
-#define SIZE_MAX __SIZE_MAX__
+#define SIZE_MAX (4294967295ul)
#endif /* HPUX_C99_INTPTR_CHECK */
#if defined( HPUX_C99_INTTYPES2_CHECK )
#define INT8_C(__c) (__c)
-#define UINT8_C(c) __UINT8_C(c)
+#define UINT8_C(__c) (__c)
#define INT16_C(__c) (__c)
-#define UINT16_C(c) __UINT16_C(c)
+#define UINT16_C(__c) (__c)
#endif /* HPUX_C99_INTTYPES2_CHECK */
@@ -152,13 +152,44 @@
#endif /* HPUX_STDINT_LEAST_FAST_CHECK */
-#if defined( IRIX_STDINT_C99_CHECK )
+#if defined( IRIX_STDINT_C99_MODE_CHECK )
#if 0
#error This header file is to be used only for c99 mode compilations
#else
-#endif /* IRIX_STDINT_C99_CHECK */
+#endif /* IRIX_STDINT_C99_MODE_CHECK */
+#if defined( IRIX_STDINT_C99_TYPES_CHECK )
+#define INT64_MIN (-0x7fffffffffffffffLL - 1)
+#define INT64_MAX 0x7fffffffffffffffLL
+#define UINT32_MAX 0xffffffffU
+#define UINT64_MAX 0xffffffffffffffffULL
+#define INTPTR_MIN (-0x7fffffffL - 1)
+#define INTPTR_MAX 0x7fffffffL
+#define UINTPTR_MAX 0xffffffffUL
+#define INTPTR_MIN (-0x7fffffffffffffffL - 1)
+#define INTPTR_MAX 0x7fffffffffffffffL
+#define UINTPTR_MAX 0xffffffffffffffffUL
+#define PTRDIFF_MIN (-0x7fffffffffffffffL - 1)
+#define PTRDIFF_MAX 0x7fffffffffffffffL
+#define SIZE_MAX 0xffffffffffffffffUL
+#endif /* IRIX_STDINT_C99_TYPES_CHECK */
+
+
+#if defined( IRIX_STDINT_C99_MACROS_CHECK )
+#define INT8_C(x) (x)
+#define INT16_C(x) (x)
+#define INT32_C(x) (x)
+#define INT64_C(x) (x ## LL)
+#define UINT8_C(x) (x)
+#define UINT16_C(x) (x)
+#define UINT32_C(x) (x ## U)
+#define UINT64_C(x) (x ## ULL)
+#define INTMAX_C(x) (x ## LL)
+#define UINTMAX_C(x) (x ## ULL)
+#endif /* IRIX_STDINT_C99_MACROS_CHECK */
+
+
#if defined( NEWLIB_STDINT_1_CHECK )
/* @todo - Add support for wint_t types. */
#define INT32_MIN (-INT32_MAX - 1)
Index: inclhack.def
===================================================================
--- inclhack.def (revision 154216)
+++ inclhack.def (working copy)
@@ -2159,12 +2159,12 @@
hackname = hpux_c99_intptr;
mach = "*-hp-hpux11.3*";
files = 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)@";
+ 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"
@@ -2511,7 +2511,7 @@
* otherwise.
*/
fix = {
- hackname = irix_stdint_c99;
+ hackname = irix_stdint_c99_mode;
files = stdint.h;
select = "(#ifndef __c99\n)(#error This header file is to be used only for c99 mode compilations)";
@@ -2525,6 +2525,87 @@
/*
+ * IRIX 6.5 <stdint.h> has some *_MIN/MAX constants whose types don't
+ * match the corresponding types, as required by ISO C99.
+ */
+fix = {
+ hackname = irix_stdint_c99_types;
+ files = stdint.h;
+ mach = "mips-sgi-irix6.5";
+ sed = "s@^#define INT64_MIN.*(-0x7fffffffffffffff - 1)$@"
+ "#define INT64_MIN (-0x7fffffffffffffffLL - 1)@";
+ sed = "s@^#define INT64_MAX.*0x7fffffffffffffff$@"
+ "#define INT64_MAX 0x7fffffffffffffffLL@";
+ sed = "s@^#define UINT32_MAX.*0xffffffff$@"
+ "#define UINT32_MAX 0xffffffffU@";
+ sed = "s@^#define UINT64_MAX.*0xffffffffffffffff$@"
+ "#define UINT64_MAX 0xffffffffffffffffULL@";
+ sed = "s@^#define INTPTR_MIN.*INT32_MIN$@"
+ "#define INTPTR_MIN (-0x7fffffffL - 1)@";
+ sed = "s@^#define INTPTR_MAX.*INT32_MAX$@"
+ "#define INTPTR_MAX 0x7fffffffL@";
+ sed = "s@^#define UINTPTR_MAX.*UINT32_MAX$@"
+ "#define UINTPTR_MAX 0xffffffffUL@";
+ sed = "s@^#define INTPTR_MIN.*INT64_MIN@"
+ "#define INTPTR_MIN (-0x7fffffffffffffffL - 1)@";
+ sed = "s@^#define INTPTR_MAX.*INT64_MAX$@"
+ "#define INTPTR_MAX 0x7fffffffffffffffL@";
+ sed = "s@^#define UINTPTR_MAX.*UINT64_MAX$@"
+ "#define UINTPTR_MAX 0xffffffffffffffffUL@";
+ sed = "s@^#define PTRDIFF_MIN.*INT64_MIN$@"
+ "#define PTRDIFF_MIN (-0x7fffffffffffffffL - 1)@";
+ sed = "s@^#define PTRDIFF_MAX.*INT64_MAX$@"
+ "#define PTRDIFF_MAX 0x7fffffffffffffffL@";
+ sed = "s@^#define SIZE_MAX.*UINT64_MAX$@"
+ "#define SIZE_MAX 0xffffffffffffffffUL@";
+ test_text = "#define INT64_MIN (-0x7fffffffffffffff - 1)\n"
+ "#define INT64_MAX 0x7fffffffffffffff\n"
+ "#define UINT32_MAX 0xffffffff\n"
+ "#define UINT64_MAX 0xffffffffffffffff\n"
+ "#define INTPTR_MIN INT32_MIN\n"
+ "#define INTPTR_MAX INT32_MAX\n"
+ "#define UINTPTR_MAX UINT32_MAX\n"
+ "#define INTPTR_MIN INT64_MIN\n"
+ "#define INTPTR_MAX INT64_MAX\n"
+ "#define UINTPTR_MAX UINT64_MAX\n"
+ "#define PTRDIFF_MIN INT64_MIN\n"
+ "#define PTRDIFF_MAX INT64_MAX\n"
+ "#define SIZE_MAX UINT64_MAX";
+};
+
+
+/*
+ * IRIX 6.5 <stdint.h> uses casts in some macros which cannot thus be used
+ * in preprocessor tests, although ISO C99 requires this.
+ */
+fix = {
+ hackname = irix_stdint_c99_macros;
+ files = stdint.h;
+ mach = "mips-sgi-irix6.5";
+ sed = "s@^#define INT8_C(x).*int.*_t.*$@#define INT8_C(x) (x)@";
+ sed = "s@^#define INT16_C(x).*int.*_t.*$@#define INT16_C(x) (x)@";
+ sed = "s@^#define INT32_C(x).*int.*_t.*$@#define INT32_C(x) (x)@";
+ sed = "s@^#define INT64_C(x).*int.*_t.*$@#define INT64_C(x) (x ## LL)@";
+ sed = "s@^#define UINT8_C(x).*int.*_t.*$@#define UINT8_C(x) (x)@";
+ sed = "s@^#define UINT16_C(x).*int.*_t.*$@#define UINT16_C(x) (x)@";
+ sed = "s@^#define UINT32_C(x).*int.*_t.*$@#define UINT32_C(x) (x ## U)@";
+ sed = "s@^#define UINT64_C(x).*int.*_t.*$@#define UINT64_C(x) (x ## ULL)@";
+ sed = "s@^#define INTMAX_C(x).*int.*_t.*$@#define INTMAX_C(x) (x ## LL)@";
+ sed = "s@^#define UINTMAX_C(x).*int.*_t.*$@#define UINTMAX_C(x) (x ## ULL)@";
+ test_text = "#define INT8_C(x) (int_least8_t)(x)\n"
+ "#define INT16_C(x) (int_least16_t)(x)\n"
+ "#define INT32_C(x) (int_least32_t)(x)\n"
+ "#define INT64_C(x) (int_least64_t)(x)\n"
+ "#define UINT8_C(x) (uint_least8_t)(x)\n"
+ "#define UINT16_C(x) (uint_least16_t)(x)\n"
+ "#define UINT32_C(x) (uint_least32_t)(x)\n"
+ "#define UINT64_C(x) (uint_least64_t)(x)\n"
+ "#define INTMAX_C(x) (intmax_t)(x)\n"
+ "#define UINTMAX_C(x) (uintmax_t)(x)";
+};
+
+
+/*
* IRIX 5.x's stdio.h and IRIX 6.5's internal/stdio_core.h declare
* some functions that take a va_list as
* taking char *. However, GCC uses void * for va_list, so
@@ -2817,18 +2898,18 @@
select = "@todo - Add support for wint_t types";
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 UINT32_MAX.*4294967295U.*@#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 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__@";
- sed = "s@#define UINT8_C.*@#define UINT8_C(c) __UINT8_C(c)@";
- sed = "s@#define UINT16_C.*@#define UINT16_C(c) __UINT16_C(c)@";
+ sed = "s@#define SIZE_MAX.*__STDINT_EXP.*@#define SIZE_MAX __SIZE_MAX__@";
+ sed = "s@#define PTRDIFF_MIN.*__STDINT_EXP.*@#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)@";
+ sed = "s@#define PTRDIFF_MAX.*__STDINT_EXP.*@#define PTRDIFF_MAX __PTRDIFF_MAX__@";
+ sed = "s@#define UINT8_C.*##U.*@#define UINT8_C(c) __UINT8_C(c)@";
+ sed = "s@#define UINT16_C.*##U.*@#define UINT16_C(c) __UINT16_C(c)@";
test_text = "/* @todo - Add support for wint_t types. */\n"
"#define INT32_MIN (-2147483647-1)\n"
"#define INT32_MAX 2147483647\n"
More information about the Gcc-patches
mailing list