| #! /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" \ |
| : "=m" (((__fd_mask *) \ |
| (fdsetp))[__FDELT (__FD_SETSIZE)]), \ |
| "=&c" (__d0), "=&D" (__d1) \ |
| : "a" (0), "1" (sizeof (__fd_set) \ |
| / sizeof (__fd_mask)), \ |
| "2" ((__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" \ |
| : "=m" (*(__kernel_fd_set *) (fdsetp)), \ |
| "=&c" (__d0), "=&D" (__d1) \ |
| : "a" (0), "1" (__FDSET_LONGS), \ |
| "2" ((__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" \ |
| : "=m" (*(__fd_set *) (fdsetp)), \ |
| "=&c" (__d0), "=&D" (__d1) \ |
| : "a" (0), "1" (__FDSET_LONGS), \ |
| "2" ((__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 |
| |
| if [ x${INSTALL_ASSERT_H} != x ] |
| then |
| cd ${ORIG_DIR} |
| rm -f include/assert.h |
| cp ${srcdir}/assert.h include/assert.h || exit 1 |
| chmod a+r include/assert.h |
| fi |
| |
| exit 0 |