diff options
Diffstat (limited to 'gcc/fixinc.x86-linux-gnu')
-rwxr-xr-x | gcc/fixinc.x86-linux-gnu | 136 |
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 + |