5dd0c182b1
From-SVN: r26933
144 lines
3.9 KiB
Bash
144 lines
3.9 KiB
Bash
#! /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
|
|
|
|
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
|