⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 install_glibc.sh

📁 linux下的多线程调试工具
💻 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 + -