トップ «前の日記(2004年01月31日) 最新 次の日記(2004年02月03日)» 編集
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|10|12|
2009|02|03|06|07|10|11|12|
2010|01|02|03|04|07|09|10|11|12|
2011|01|03|04|05|06|07|08|10|
2012|01|06|08|09|10|12|
2013|01|02|03|04|07|09|11|12|
2014|01|03|04|05|06|09|
2015|04|
2016|01|08|
ここは旧えびめもです。えびめも2に移行します(2016/12/1)

2004年02月01日 曇り

gccで2進数

gccで2進数が "0b11110000" のように扱えたらさぞ便利だろう。昔っからそう思ってるんだが非公式でも裏技でもgccに0bプリフィックスが取り込まれない。でも同じようなことを考えてる人は世間にいるもんで、落合さんのサイトにgcc-2.95用のパッチを見つけた。
http://strawberry-linux.com/h8/h8tips.php
なるほど。大変参考になりました。gcc-3.2では少しソースが異なっていたので手パッチし、gcc-3.2用のdpatch形式のパッチファイルを作りました。
#! /bin/sh -e
 
# All lines beginning with `# DPATCH:' are a description of the patch.
# DP: <your description>
 
dir=
if [ $# -eq 3 -a "$2" = '-d' ]; then
    pdir="-d $3"
    dir="$3/"
elif [ $# -ne 1 ]; then
    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
    exit 1
fi
case "$1" in
    -patch)
        patch $pdir -f --no-backup-if-mismatch -p0 < $0
        #cd ${dir}gcc && autoconf
        ;;
    -unpatch)
        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
        #rm ${dir}gcc/configure
        ;;
    *)
        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
        exit 1
esac
exit 0
 
# append the patch here and adjust the -p? flag in the patch calls.
 
--- gcc/c-lex.c-orig    Sun Feb  1 16:01:05 2004
+++ gcc/c-lex.c Sun Feb  1 16:01:43 2004
@@ -877,6 +877,11 @@
       base = 16;
       p = str + 2;
     }
+  if (len > 2 && str[0] == '0' && (str[1] == 'b' || str[1] == 'B'))
+    {
+      base = 2;
+      p = str + 2;
+    }
   /* The ISDIGIT check is so we are not confused by a suffix on 0.  */
   else if (str[0] == '0' && ISDIGIT (str[1]))
     {
このファイルをファイル名 【debian/patches/gcc-binary.dpatch】で保存し、debian/rules.patch ファイルの頭のほうに
# which patches should be applied?
debian_patches = gcc-names gcc-version fastjar-doc \
        libstdc++-incdir libstdc++-pic libstdc++-doclink \
        gcc-line-numbers gccbug arm-update hppa-fptr \
        gcc-binary \
と追加して
# dpkg-buildpackage -uc -us
でカスタム版gcc-3.2の出来上がり。