📄 install_glibc.sh
字号:
#! /bin/sh# syntax : ./install_glibc.sh glibc_install_dir# glibc_src# PTT_patch# [-j jobs]# [...]# with # glibc_install_dir: path to glibc installation directory# glibc_src: path to glibc sources directory# PTT_patch: PTT patch for glibc# jobs: number of jobs to run simultaneously when building glibc# [...] arguments for glibc configure scriptLIBCDIR=$1; echo $LIBCDIR | grep -q ^/ || LIBCDIR=`pwd`/$LIBCDIRLIBCSRC=$2; echo $LIBCSRC | grep -q ^/ || LIBCSRC=`pwd`/$LIBCSRCPATCH=$3LIBCBUILD=$LIBCDIR/buildLIBCROOT=$LIBCDIR/libc_rootLIBCPATCHEDSRC=$LIBCDIR/patched_srcPREFIX=$LIBCROOTPATCHEDPREFIX=$LIBCPATCHEDROOTBUILD_ROOT=/GLIBC_LIBPTHREAD=$LIBCROOT/lib/libpthread.so.0GLIBC_PATCHEDLIBPTHREAD=$LIBCROOT/lib/libpthread_ptt.so.0PTT_LIBDIR=../libPTT_LIBPTHREAD=$PTT_LIBDIR/libpthread.so.0PTT_PATCHEDLIBPTHREAD=$PTT_LIBDIR/libpthread_ptt.so.0INFOFLAGS=flags.txtTEST_PATCH_FILE=$LIBCPATCHEDSRC/nptl/ptt_module.cCUR_DIR=`pwd`# test command syntaxif [ $# -lt 3 ]; then echo "Syntax error: $0 glibc_install_dir glibc_src PTT_patch [-j jobs] " \ "[glibc_configure_arguments]" exit 1else shift; shift; shift;fi# test whether given pathes are correctif [ ! -d $LIBCDIR ]; then echo "Error: can't find directory $LIBCDIR" exit 1fiif [ ! -d $LIBCSRC ]; then echo "Error: can't find directory $LIBCSRC" exit 1fiif [ ! -f $PATCH ]; then echo "Error: can't find file $PATCH" exit 1fi# test whether glibc supports NPTLif [ ! -d $LIBCSRC/nptl ]; then echo "Error: can't locate glibc NPTL sources in $LIBCSRC" exit 1fi# patch NPTL for use with PTTif [ ! -f $TEST_PATCH_FILE ]; then echo "patching glibc sources..." rm -rf $LIBCPATCHEDSRC cp -r $LIBCSRC $LIBCPATCHEDSRC cp $PATCH $LIBCPATCHEDSRC cat $PATCH | patch -d $LIBCPATCHEDSRC -p1 || exit 1 GLIBC_PATCHED=0else echo "PTT patch already applied. skipping..." GLIBC_PATCHED=1fi# get number of jobsJOBS=1if [ $# -gt 0 ]; then if [ $1 = "-j" ]; then if [ -z $2 ]; then echo "Syntax error: $0 glibc_install_dir glibc_src PTT_patch " \ "[-j jobs] [glibc_configure_arguments]" exit 1 fi JOBS=$2 shift; shiftfi; fi# build glibc with instrumented NPTLif [ ! -f $GLIBC_PATCHEDLIBPTHREAD -o $GLIBC_PATCHED -eq 0 ]; then echo "building glibc with instrumented NPTL..." rm -rf $LIBCROOT $LIBCBUILD mkdir -p $LIBCROOT $LIBCBUILD cd $LIBCBUILD $LIBCPATCHEDSRC/configure --prefix=$PREFIX -without-selinux \ --without-gd --enable-add-ons=nptl --with-tls --with-__thread \ --disable-profile --with-ptt $@ || exit 1 make PARALLELMFLAGS=-j$JOBS || exit 1 mkdir -p $LIBCROOT/etc/ > $LIBCROOT/etc/ld.so.conf make install_root=$BUILD_ROOT install || exit 1 # change libpthread to libpthread_ptt cd $LIBCROOT/lib LIBPTHREAD_NAME=`/bin/ls libpthread-*` LIBPTHREAD_PTT_NAME=`echo $LIBPTHREAD_NAME | sed s/pthread/pthread_ptt/` mv $LIBPTHREAD_NAME $LIBPTHREAD_PTT_NAME ln -s $LIBPTHREAD_PTT_NAME libpthread_ptt.so.0 rm -f libpthread.so.0 libpthread*a libpthread.soelse echo "glibc with instrumented NPTL already built. skipping..."fi# build glibc with original NPTLif [ ! -f $GLIBC_LIBPTHREAD -o $GLIBC_PATCHED -eq 0 ]; then echo "building glibc with original NPTL..." rm -rf $LIBCBUILD; mkdir -p $LIBCBUILD cd $LIBCBUILD $LIBCPATCHEDSRC/configure --prefix=$PREFIX -without-selinux \ --without-gd --enable-add-ons=nptl --with-tls --with-__thread \ --disable-profile --without-ptt $@ || exit 1 make PARALLELMFLAGS=-j$JOBS || exit 1 make install_root=$BUILD_ROOT install || exit 1 # glibc installation process creates symbolic links # libpthread.so.0 -> libpthread_ptt.so.0 (!?!) # instead of -> libpthread-2.3.6.so cd $LIBCROOT/lib LIBPTHREAD_NAME=`/bin/ls libpthread-*` rm -f libpthread.so.0 ln -s $LIBPTHREAD_NAME libpthread.so.0else echo "glibc with original NPTL already built. skipping..."ficd $CUR_DIRrm -f $PTT_LIBPTHREAD $PTT_PATCHEDLIBPTHREADcp $GLIBC_LIBPTHREAD $PTT_LIBPTHREADcp $GLIBC_PATCHEDLIBPTHREAD $PTT_PATCHEDLIBPTHREADLD=`/bin/ls $LIBCROOT/lib/ld-linux*`echo "LDFLAGS=-Wl,-dynamic-linker,$LD -Wl,-rpath,$LIBCROOT/lib:/lib:/usr/lib"\> $INFOFLAGS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -