diff --git a/fixincludes/ChangeLog b/fixincludes/ChangeLog index 1df6596f392..86991332b9f 100644 --- a/fixincludes/ChangeLog +++ b/fixincludes/ChangeLog @@ -1,3 +1,10 @@ +2007-12-18 Hans-Peter Nilsson + + * inclhack.def: (glibc_c99_inline_1a, glibc_c99_inline_5): New. + * fixincl.x: Regenerate. + * tests/base/wchar.h: Update. + * tests/base/features.h: New. + 2007-10-14 John David Anglin PR target/33700 diff --git a/fixincludes/fixincl.x b/fixincludes/fixincl.x index a0daa2a6a4f..c61a3ac5205 100644 --- a/fixincludes/fixincl.x +++ b/fixincludes/fixincl.x @@ -2,11 +2,11 @@ * * DO NOT EDIT THIS FILE (fixincl.x) * - * It has been AutoGen-ed Sunday October 14, 2007 at 06:17:05 PM EDT + * It has been AutoGen-ed Tuesday December 18, 2007 at 03:28:19 AM CET * From the definitions inclhack.def * and the template file fixincl */ -/* DO NOT SVN-MERGE THIS FILE, EITHER Sun Oct 14 18:17:05 EDT 2007 +/* DO NOT SVN-MERGE THIS FILE, EITHER Tue Dec 18 03:28:19 CET 2007 * * You must regenerate it. Use the ./genfixes script. * @@ -15,7 +15,7 @@ * certain ANSI-incompatible system header files which are fixed to work * correctly with ANSI C and placed in a directory that GNU C will search. * - * This file contains 210 fixup descriptions. + * This file contains 212 fixup descriptions. * * See README for more information. * @@ -2263,6 +2263,43 @@ static const char* apzGlibc_C99_Inline_1Patch[] = { "%0 && (defined __extern_inline || defined __GNUC_GNU_INLINE__)", (char*)NULL }; +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Glibc_C99_Inline_1a fix + */ +tSCC zGlibc_C99_Inline_1aName[] = + "glibc_c99_inline_1a"; + +/* + * File name selection pattern + */ +tSCC zGlibc_C99_Inline_1aList[] = + "features.h\0*/features.h\0"; +/* + * Machine/OS name selection pattern + */ +#define apzGlibc_C99_Inline_1aMachs (const char**)NULL + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zGlibc_C99_Inline_1aSelect0[] = + "(\\) && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__)\n\ +(#[ \t]*define[ \t]*__USE_EXTERN_INLINES[ \t]*1)"; + +#define GLIBC_C99_INLINE_1A_TEST_CT 1 +static tTestDesc aGlibc_C99_Inline_1aTests[] = { + { TT_EGREP, zGlibc_C99_Inline_1aSelect0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Glibc_C99_Inline_1a + */ +static const char* apzGlibc_C99_Inline_1aPatch[] = { + "format", + "%1 && (defined __extern_inline || defined __GNUC_GNU_INLINE__)\n\ +%2", + (char*)NULL }; + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * Description of Glibc_C99_Inline_2 fix @@ -2397,6 +2434,52 @@ extern\n\ "(^| )extern ", (char*)NULL }; +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Glibc_C99_Inline_5 fix + */ +tSCC zGlibc_C99_Inline_5Name[] = + "glibc_c99_inline_5"; + +/* + * File name selection pattern + */ +tSCC zGlibc_C99_Inline_5List[] = + "wchar.h\0*/wchar.h\0"; +/* + * Machine/OS name selection pattern + */ +#define apzGlibc_C99_Inline_5Machs (const char**)NULL + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zGlibc_C99_Inline_5Select0[] = + "(^| )extern __inline"; + +/* + * content bypass pattern - skip fix if pattern found + */ +tSCC zGlibc_C99_Inline_5Bypass0[] = + "__STDC_VERSION__"; + +#define GLIBC_C99_INLINE_5_TEST_CT 2 +static tTestDesc aGlibc_C99_Inline_5Tests[] = { + { TT_NEGREP, zGlibc_C99_Inline_5Bypass0, (regex_t*)NULL }, + { TT_EGREP, zGlibc_C99_Inline_5Select0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Glibc_C99_Inline_5 + */ +static const char* apzGlibc_C99_Inline_5Patch[] = { + "format", + "\n\ +#ifdef __GNUC_GNU_INLINE__\n\ +extern\n\ +#endif\n\ +__inline", + (char*)NULL }; + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * Description of Glibc_Mutex_Init fix @@ -8539,9 +8622,9 @@ static const char* apzX11_SprintfPatch[] = { * * List of all fixes */ -#define REGEX_COUNT 253 +#define REGEX_COUNT 256 #define MACH_LIST_SIZE_LIMIT 261 -#define FIX_COUNT 210 +#define FIX_COUNT 212 /* * Enumerate the fixes @@ -8599,9 +8682,11 @@ typedef enum { FREEBSD_GCC3_BREAKAGE_FIXIDX, FREEBSD_GCC4_BREAKAGE_FIXIDX, GLIBC_C99_INLINE_1_FIXIDX, + GLIBC_C99_INLINE_1A_FIXIDX, GLIBC_C99_INLINE_2_FIXIDX, GLIBC_C99_INLINE_3_FIXIDX, GLIBC_C99_INLINE_4_FIXIDX, + GLIBC_C99_INLINE_5_FIXIDX, GLIBC_MUTEX_INIT_FIXIDX, GNU_TYPES_FIXIDX, HP_INLINE_FIXIDX, @@ -9020,6 +9105,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = { GLIBC_C99_INLINE_1_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, aGlibc_C99_Inline_1Tests, apzGlibc_C99_Inline_1Patch, 0 }, + { zGlibc_C99_Inline_1aName, zGlibc_C99_Inline_1aList, + apzGlibc_C99_Inline_1aMachs, + GLIBC_C99_INLINE_1A_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aGlibc_C99_Inline_1aTests, apzGlibc_C99_Inline_1aPatch, 0 }, + { zGlibc_C99_Inline_2Name, zGlibc_C99_Inline_2List, apzGlibc_C99_Inline_2Machs, GLIBC_C99_INLINE_2_TEST_CT, FD_MACH_ONLY, @@ -9035,6 +9125,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = { GLIBC_C99_INLINE_4_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, aGlibc_C99_Inline_4Tests, apzGlibc_C99_Inline_4Patch, 0 }, + { zGlibc_C99_Inline_5Name, zGlibc_C99_Inline_5List, + apzGlibc_C99_Inline_5Machs, + GLIBC_C99_INLINE_5_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aGlibc_C99_Inline_5Tests, apzGlibc_C99_Inline_5Patch, 0 }, + { zGlibc_Mutex_InitName, zGlibc_Mutex_InitList, apzGlibc_Mutex_InitMachs, GLIBC_MUTEX_INIT_TEST_CT, FD_MACH_ONLY, diff --git a/fixincludes/inclhack.def b/fixincludes/inclhack.def index 75f83478f21..859042a8da2 100644 --- a/fixincludes/inclhack.def +++ b/fixincludes/inclhack.def @@ -1347,6 +1347,24 @@ EOT; }; +/* + * Similar, but a version that didn't have __NO_INLINE__ + */ +fix = { + hackname = glibc_c99_inline_1a; + files = features.h, '*/features.h'; + select = "(\\) && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__)\n" + "(#[ \t]*define[ \t]*__USE_EXTERN_INLINES[ \t]*1)"; + c_fix = format; + c_fix_arg = "%1 && (defined __extern_inline || defined __GNUC_GNU_INLINE__)\n%2"; + test_text = <<-EOT +#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ +# define __USE_EXTERN_INLINES 1 +#endif +EOT; +}; + + /* * The glibc_c99_inline_1 fix should have fixed everything. Unfortunately * there are many glibc headers which do not respect __USE_EXTERN_INLINES. @@ -1408,6 +1426,21 @@ fix = { }; +fix = { + hackname = glibc_c99_inline_5; + files = wchar.h, '*/wchar.h'; + bypass = "__STDC_VERSION__"; + select = "(^| )extern __inline"; + c_fix = format; + c_fix_arg = "\n#ifdef __GNUC_GNU_INLINE__\nextern\n#endif\n__inline"; + test_text = <<-EOT + __extension__ extern __inline double + __extension__ __extern_inline long + extern __inline unsigned int + EOT; +}; + + /* glibc-2.3.5 defines pthread mutex initializers incorrectly, * so we replace them with versions that correspond to the * definition. diff --git a/fixincludes/tests/base/features.h b/fixincludes/tests/base/features.h new file mode 100644 index 00000000000..93838c71253 --- /dev/null +++ b/fixincludes/tests/base/features.h @@ -0,0 +1,23 @@ +/* DO NOT EDIT THIS FILE. + + It has been auto-edited by fixincludes from: + + "fixinc/tests/inc/features.h" + + This had to be done to correct non-standard usages in the + original, manufacturer supplied header file. */ + + + +#if defined( GLIBC_C99_INLINE_1_CHECK ) +#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__ +# define __USE_EXTERN_INLINES 1 +#endif +#endif /* GLIBC_C99_INLINE_1_CHECK */ + + +#if defined( GLIBC_C99_INLINE_1A_CHECK ) +#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && (defined __extern_inline || defined __GNUC_GNU_INLINE__) +# define __USE_EXTERN_INLINES 1 +#endif +#endif /* GLIBC_C99_INLINE_1A_CHECK */ diff --git a/fixincludes/tests/base/wchar.h b/fixincludes/tests/base/wchar.h index 5c0b9dfe86a..5ca5adeb0e1 100644 --- a/fixincludes/tests/base/wchar.h +++ b/fixincludes/tests/base/wchar.h @@ -13,3 +13,18 @@ extern wchar_t *wcstok __((wchar_t *, const wchar_t *, wchar_t **)) __asm__("wcstok_r"); extern size_t wcsftime __((wchar_t *, size_t, const wchar_t *, const struct tm *)) __asm__("__wcsftime_isoc"); #endif /* ALPHA_WCHAR_CHECK */ + + +#if defined( GLIBC_C99_INLINE_5_CHECK ) +__extension__ +#ifdef __GNUC_GNU_INLINE__ +extern +#endif +__inline double +__extension__ __extern_inline long + +#ifdef __GNUC_GNU_INLINE__ +extern +#endif +__inline unsigned int +#endif /* GLIBC_C99_INLINE_5_CHECK */