summaryrefslogtreecommitdiff
path: root/gcc/fixinc.x86-linux-gnu
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fixinc.x86-linux-gnu')
-rwxr-xr-xgcc/fixinc.x86-linux-gnu136
1 files changed, 136 insertions, 0 deletions
diff --git a/gcc/fixinc.x86-linux-gnu b/gcc/fixinc.x86-linux-gnu
new file mode 100755
index 0000000..ac2b947
--- /dev/null
+++ b/gcc/fixinc.x86-linux-gnu
@@ -0,0 +1,136 @@
+#! /bin/sh
+#
+# The script is created for Cygnus by vmakarov@cygnus.com and based on
+# fixinc.wrap
+#
+# This script is designed for x86 with gnulibc of version 2.0 and less
+# for solution of problems with invalid asm-statements by creating
+# small wrappers around the include files containg the asm-statements.
+#
+# See README-fixinc for more information.
+
+
+# Directory in which to store the results.
+LIB=${1?"fixincludes: output directory not specified"}
+
+# Make sure it exists.
+if [ ! -d $LIB ]; then
+ mkdir $LIB || exit 1
+fi
+
+# Make LIB absolute if it is relative.
+# Don't do this if not necessary, since may screw up automounters.
+case $LIB in
+/*)
+ ;;
+*)
+ cd $LIB; LIB=`${PWDCMD-pwd}`
+ ;;
+esac
+
+echo Building fixed headers in ${LIB}
+
+file=selectbits.h
+echo Fixed $file for glibc-2.0.x
+rm -f $LIB/$file
+cat <<'__EOF__' >$LIB/$file
+/* This file fixes __FD_ZERO bug for glibc-2.0.x. */
+#ifndef _SELECTBITS_H_WRAPPER
+#include <features.h>
+#include_next <selectbits.h>
+
+#if defined(__FD_ZERO) && defined(__GLIBC__) && defined(__GLIBC_MINOR__) && __GLIBC__ == 2 && __GLIBC_MINOR__ == 0
+#undef __FD_ZERO
+#define __FD_ZERO(fdsetp) \
+ do { \
+ int __d0, __d1; \
+ __asm__ __volatile__ ("cld; rep; stosl" \
+ : "=&c" (__d0), "=&D" (__d1) \
+ : "a" (0), "0" (sizeof (__fd_set) \
+ / sizeof (__fd_mask)), \
+ "1" ((__fd_mask *) (fdsetp)) \
+ : "memory"); \
+ } while (0)
+#endif
+
+#define _SELECTBITS_H_WRAPPER
+#endif /* _SELECTBITS_H_WRAPPER */
+__EOF__
+# Define _SELECTBITS_H_WRAPPER at the end of the wrapper, not
+# the start, so that if #include_next gets another instance of
+# the wrapper, this will follow the #include_next chain until
+# we arrive at the real <selectbits.h>.
+chmod a+r $LIB/$file
+
+# asm/posix_types.h for libc version 1.x
+file=asm/posix_types.h
+echo Fixed $file for glibc-1.x
+rm -f $LIB/$file
+dir=`dirname $LIB/$file`
+if [ ! -d $dir ]; then
+ mkdir -p $dir || exit 1
+fi
+cat <<'__EOF__' >$LIB/$file
+/* This file fixes __FD_ZERO bug for glibc-1.x. */
+#ifndef _POSIX_TYPES_H_WRAPPER
+#include <features.h>
+#include_next <asm/posix_types.h>
+
+#if defined(__FD_ZERO) && !defined(__GLIBC__)
+#undef __FD_ZERO
+#define __FD_ZERO(fdsetp) \
+ do { \
+ int __d0, __d1; \
+ __asm__ __volatile__("cld ; rep ; stosl" \
+ : "=&c" (__d0), "=&D" (__d1) \
+ : "a" (0), "0" (__FDSET_LONGS), \
+ "1" ((__kernel_fd_set *) (fdsetp)) :"memory"); \
+ } while (0)
+#endif
+
+#define _POSIX_TYPES_H_WRAPPER
+#endif /* _POSIX_TYPES_H_WRAPPER */
+__EOF__
+# Define _POSIX_TYPES_H_WRAPPER at the end of the wrapper, not
+# the start, so that if #include_next gets another instance of
+# the wrapper, this will follow the #include_next chain until
+# we arrive at the real <asm/posix_types.h>.
+chmod a+r $LIB/$file
+
+# gnu/types.h for libc version 1.x
+file=gnu/types.h
+echo Fixed $file for glibc-1.x
+rm -f $LIB/$file
+dir=`dirname $LIB/$file`
+if [ ! -d $dir ]; then
+ mkdir -p $dir || exit 1
+fi
+cat <<'__EOF__' >$LIB/$file
+/* This file fixes __FD_ZERO bug for glibc-1.x. */
+#ifndef _TYPES_H_WRAPPER
+#include <features.h>
+#include_next <gnu/types.h>
+
+#if defined(__FD_ZERO) && !defined(__GLIBC__)
+#undef __FD_ZERO
+# define __FD_ZERO(fdsetp) \
+ do { \
+ int __d0, __d1; \
+ __asm__ __volatile__("cld ; rep ; stosl" \
+ : "=&c" (__d0), "=&D" (__d1) \
+ : "a" (0), "0" (__FDSET_LONGS), \
+ "1" ((__fd_set *) (fdsetp)) :"memory"); \
+ } while (0)
+#endif
+
+#define _TYPES_H_WRAPPER
+#endif /* _TYPES_H_WRAPPER */
+__EOF__
+# Define _TYPES_H_WRAPPER at the end of the wrapper, not the start,
+# so that if #include_next gets another instance of the wrapper,
+# this will follow the #include_next chain until we arrive at
+# the real <gnu/types.h>.
+chmod a+r $LIB/$file
+
+exit 0
+