以前、hdk神からLinuxカーネルは最適化を有効にしないとコンパイルできないという話を聞いたのですが、詳解Linuxカーネルをパラパラと読んでいたら理由が書いてありました。
この不思議な現象を生み出す原因はfix_to_virt関数にあります。どのアーキテクチャにもあると思います。ざっと確認した限りではmips, sh, x86_64, sparc, i386, umに同様の関数が定義されていました(ファイル名はasm/fixmap.h)。
例えばmipsのコードを見ると、以下のようになっています。
static inline unsigned long fix_to_virt(const unsigned int idx)
{
/*
* this branch gets completely eliminated after inlining,
* except when someone tries to use fixaddr indices in an
* illegal way. (such as mixing up address types or using
* out-of-range indices).
*
* If it doesn't get removed, the linker will complain
* loudly with a reasonably clear error message..
*/
if (idx >= __end_of_fixed_addresses)
__this_fixmap_does_not_exist();
return __fix_to_virt(idx);
}
引数idxには必ず __end_of_fixed_addresses未満の定数を渡します。するとこのコードが最適化される際にifの条件が評価され、if文が常に成立しないことがわかります。コンパイラはifブロックを全て消しさってから、呼び出し元の関数に埋め込み(インライン展開)ます。
__end_of_fixed_addressesってのは、各アーキテクチャの固定メモリマップのアドレスを定義するfixed_addresses列挙型の最後に置かれる定数です。値そのものより「どの固定メモリマップアドレスよりも大きい」ことが重要です。この値を越えたアドレスへのアクセスは不正なアクセスなのです。
mipsでは以下のような列挙型で定義されています。
enum fixed_addresses {
#define FIX_N_COLOURS 8
FIX_CMAP_BEGIN,
#ifdef CONFIG_MIPS_MT_SMTC
FIX_CMAP_END = FIX_CMAP_BEGIN + (FIX_N_COLOURS * NR_CPUS),
#else
FIX_CMAP_END = FIX_CMAP_BEGIN + FIX_N_COLOURS,
#endif
#ifdef CONFIG_HIGHMEM
/* reserved pte's for temporary kernel mappings */
FIX_KMAP_BEGIN = FIX_CMAP_END + 1,
FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
#endif
__end_of_fixed_addresses
};
正しくない引数(変数や __end_of_fixed_addresses以上の定数)を渡す呼び出しがあると、if文が消去できず __this_fixmap_does_not_exist関数の呼び出しが残ります。しかしこの関数はどこにも定義されていないため、リンク時にエラーになるのです。
つまりこのif文は、最適化によって消去されることを前提に作ってあります。逆に言うと、最適化しなければ正しい呼び出しでも __this_fixmap_does_not_exist関数の呼び出しが残ってしまってコンパイルが通らないことを意味しています。
こうすることで実行時のチェックを省略できて速くなるのでしょうけど、gccの挙動にべったり依存しています。この技を使わずとも実現できる何か良い方法は無かったのかなあ…。
この記事にコメントする
大下さんと京都の寺巡りをしました。今回は東寺(教王護国寺、真言宗)と知恩院(浄土宗)です。
東寺では五重塔を撮ったのですが、上がほとんどちょんぎれて見られたもんじゃない写真になりました。しかもその後、携帯の電池が切れてお亡くなりに…。
東寺の五重塔の中は良かったですね。真ん中のでかい柱(心柱、しんばしら)は大日如来を表してるとか、心柱は建物と独立していて伸び率が違うとか、そのせいで長さが合わなくなって心柱だけ短くしたとか。…心柱にしか気持ちが行ってないですな。
金堂はぶつぞーがいっぱいです。あとは、灌頂院(かんじょういん)ってところを特別公開していました。
知恩院は特別公開の三門が面白かったですね。階段が急で危ないけど…。
関西に住んでいるものの、面倒くさくてあまり京都には行ってなかったので、どこの寺に行こうとも初めて訪れる場所ばかりです。一方、大下さんは何カ所も巡ってるので2回目とか3回目のことが多いですね。
今回は東寺も知恩院も特別公開をしており、大下さんはご満悦でした。あぁーいや、どちらかというと特別公開を狙って行った、というべきでしょうかね。
この記事にコメントする
大阪城公園に梅見に行きました。満開とのことでしたが、思ったほど咲いていない?梅の季節なのに…と疑問に思いつつ、咲いている木を見つけて写真撮ったり、香りを楽しんだり。梅は良い香り。
梅林の終点に看板があって、それによるとなんとこの狭い公園に90種類以上植えてあるのだとか。たくさんの種類を一度に見た方が得!って思ったんだろうけど、風情が…。まあ関西らしいといえばそうなんですけど。
逆に、多種類なので多少時期を外してもどこかの木が咲いているという利点があります。時期を過ぎても諦めないで見に行ってみましょう。多分咲いてます。
みんなでシアタールームを借りてスマブラしました。でかい画面でスマブラをやると目がすごく疲れる…。
この記事にコメントする
久々に同期の人と飲み会をしました。
んで、いつもの飲み会かと思いきや、ケーキをもらって誕生日をお祝いしていただきました。
いやーこの年になっても、祝ってもらえるとそりゃ嬉しいもんです。感謝感謝!!
この記事にコメントする
西明石(兵庫県)行きが来たんですが、電車の表示は草津(京都府)行き。行き先が真逆?それが何か??と言わんばかりの誤表示。
車内は車内で電光掲示板が狂ってて、本来表示すべき駅の一つ先を表示していました(※)。長岡京で乗ったら、山崎って出てるし、高槻駅で降りるときも「ただいまの駅は摂津富田」だった。てきとーねえ。
2〜3駅止まってもずれっぱなしで直らないところを見ると、電光掲示板だけど表示内容は手動で制御しているとみた。何か微妙…。
参考: JR京都線の駅
(至、大阪) - 茨木 - 摂津富田 - 高槻 - 山崎 - 長岡京 - 向日町 - (至、京都)
とまあ以上が古い電車(たぶん JR西日本221系です)の話。新しい電車(たぶん JR西日本321系です)は天井からでかい液晶ディスプレイが下がっていて、片方は駅名や路線図を表示して、もう一方はCMを流し続けています。こいつもときおりおかしいです。
駅名を表示する方はあまりおかしくなりませんが、終点を越えた地点に居ることになっていたり、近郊路線図のまま固まって現在地の表示を諦めている時があります。
またCMを流している方のディスプレイもハングアップすることがあります。先日などはクイズ番組の問題出題画面で固まっておりました。他にも多数CMがあるなかで、なぜそこで固まるのか?答えが気になって仕方ない。
この記事にコメントする
アサヒコムのニュースを見てたら、こんなニュース(ゆうちょ銀、ヤマトのメール便使う 日本郵政社長が怒る)がトップにどかーんと載ってて、思わず笑ってしまった。
ゆうちょ銀行が全国の郵便局に冊子を送る際に、身内の日本郵便ではなく、ヤマト運輸のメール便で送っちゃって、日本郵政の社長がもうカンカンです。ニュースによるとお互いの言い分はこう(超絶意訳)。
日本郵便 「そういう仕事はうちだろが!何ヤマトに回しとんじゃー!!」
ゆうちょ銀「お前がさっき『そんな仕事できねえ』って追い返したからだろがー!!」
日本郵便側の「最初は断った」とか「公募の存在すら知らん」のはあんまりですけど、一回断られたからってあっさりヤマト運輸に回しちゃうゆうちょ銀も相当手厳しい。郵政公社って仲悪いんですかね?
この記事にコメントする
会社でscreenを使うようにしてからそこそこ経ちました。といっても時間が過ぎただけで使う機能は大したこと無いんですけども。
今はターミナルを縦に長くびよーーーんと伸ばして(70〜80行くらい)、screenで2画面に分割するのがお気に入りです。なのでウインドウ関連のキーバインドだけいじってます。その他は便利そうな設定を拾っては寄せ集めました。
escape ^t^t
# disable vbell toggle
bind ^G
bind g
# disable screen lock
bind ^X
bind x
# bind 'window remove' to x and ^X
bind ^X remove
bind x remove
# bind 'window only' to q
bind q only
# bind 'window split' to s
bind s split
vbell off
defscrollback 1024
defencoding UTF-8
autodetach on
startup_message off
caption always "%{=d wk} %-w%{=s wk}%n %t%{-}%+w %= %{=d kg}%y/%m/%d %c"
今感じる不満は、ステータス部に表示されるスクリーンの名前が全部「1:bash 2:bash 3:bash」とbash以外何も表示しないことかな。大量にスクリーンを作ると、ステータス部が全部bashで埋まります。
ネットで調べたらzshのpreexec機能と .screenrcを組み合わせれば願いが叶うみたいです。ですがね当方はbashなのでね、そんな便利な機能はないのですよねー…。zshも入ってた気がしなくもないですけどねえ。
あとは細かい点ですが、
あたりが気になります。新バージョンで改善されているかもしれないので今度コンパイルしてみようかな…。
じゃあ本当にbashしかない人はどうすんのよ、って疑問が沸いたので引き続き調べてみると、bashのデバッグフック機能を使ってpreexecを無理矢理実現している設定(preexec.bash.txt)が見つかりました。
これは面白いって事で、上記ファイルを元手に作ったら上手く行きました。けどね、どうしてかjobsの一覧がおかしくなりますのよ?なんでなんで?
調べるとbashのバグで、デバッグフックで実行した文がジョブリストの内容を書き潰すそうです。うーむ、困りましたね。jobsは結構使うからダメですね。
ちなみに手持ちのDebianだと発生しませんのでもう直ってるんです。が、以前も書いたように腐れyumが腐っててアップデートできないなんてもう腐りすぎ。FedoraもDebian系と微妙に操作が違っててちくちくとウザい。あーすげぇ、イライラするぜぇ〜〜(´皿`;) 。
この記事にコメントする
本屋で医龍の16巻を見つけて買ったんですが、全然わけがわからない。何が起きたのかと思ったら、単に買い忘れて15巻読んでないだけだった。
よーし、15巻はAmazonで注文しちゃ…って…、それって最初からAmazonで買えば良かったんじゃないのかな?ん?まあいいか!
そういえば実家にいた頃、家族で名探偵コナンとか金田一少年の事件簿を楽しみ読んでました。その時は確か既に同じ巻がないか家に電話で確認するのが恒例だったような。コナンとか金田一って何巻まで買ったかさっぱりわからんのよ。
引っ越しのときに漫画本を全部売り払った上に、現在住んでいる寮もそんなに広いところではないしあまり本を買いたくありません。既に置く場所ないし。
が、今まで読んでいたマンガはどうも続きが気になって、つい買ってしまいます。おかげでどのマンガも最新から2〜3巻しかありません。なんとも中途半端。
この記事にコメントする
某顔文字ではありませんよ(・∀・)
以前も全クリしたロードモナーク(SFC版: 日本ファルコム、エポック)を懲りずにまたやっています。一面30分程度という時間が非常に便利です。RPGなんかはついやりすぎて深夜2時を過ぎたりするから危険です。
2回目の挑戦とあって、前より旨くなっていることを期待したのですが、残念ながら実力はあまり変わないようです。クリアするだけなら簡単ですが、上達の道は甘くないというナイスバランス。
ロードモナークのほぼ全てを攻略している有名なサイト「ロードモナークいろいろ」を見ていると、自分なんかには信じられないようなスピードでクリアしている人がたくさんいるようです。
ランキングコーナーに全面クリア後のスコア(残日数とか)が載っているのですが、自分の二倍以上の人がぞろぞろいます。何、この記録…怖っ……。
この記事にコメントする
今日は4年に一回しかない肉の日(というのは冗談で、本当は2月9日らしい)です。4年に特別な意味を見出す人も居るでしょうが、昔の人が適当に作った暦を今も適当に引きずっているから起きてしまうだけで、別に何も意味のない日なんですよね。
JR京都線はときおり途中で連結されたような形の編成
つまり、<運転席]-[客車]-[客車]-[運転席>-<運転席]-[客車]-[運転席> のような形
が走っています。田舎の方で分離するんでしょうかね。
で、いつもの通勤で乗る真ん中辺り(3〜4両目付近)が運転席付きの車両になっています。今日は暇だったので運転席をずっと眺めていました。最近の電車は全てデジタルメーターなんですね。
運転台を眺めると架線電圧とか列車の速度という比較的わかりやすい数字と、BC圧、MR圧とかいう謎の数字が仲良く並んでピコピコ動いておりました。BCって何だろうね??
この記事にコメントする
生物が活動する目的の一つとして「圧倒的多数派を維持し続けること」があると思います。
例えば圧倒的多数に至るために人類は、目に入った他者を滅ぼす、という手法を取りました。策は功を奏し、人類は急激に増えましたがあまりに攻撃的すぎて自身の首も絞めています。人類は圧倒的多数を維持できる程の力を持たない種なのかも知れません。
まあ、人類が生物の覇者か否かは時間が証明してくれるのでさておいて。
周りを攻撃して滅ぼす方法で未来が望めないなら、周りと共生することで覇道を歩む生物はいないのでしょうか?自分は、共生する生物はいずれ攻撃的な生物にやられて消えるものだと思っていたのですが…、実は意外と近く成功者が居たのでした。
その名はミトコンドリアです。ミトコンドリアは酸素からエネルギーを生む器官です。一説によれば古代に存在したバクテリアが細胞内に取り込まれ、共生を始めたことが起源だと考えられているそうです。その説を信じるならミトコンドリアは真核生物(細菌類を除いたほぼ全ての生物)と共存し続ける生物と言えます(※)。
細菌の一派として生きる道もあったでしょうけれど、真核生物との共生を追いに追って「この世の全ての真核生物と一蓮托生の関係を築くこと」に辿り着いたのでしょう。ミトコンドリアはこの世の覇者たる生物に到達したと言えるかもしれません。
(※)ミトコンドリアは独自のDNAを持ち、分裂によって増えます。しかし細胞外では生存できず、独立した生物ではありません。この際どこから生物と呼ぶかは曖昧にしておきましょう…。
この記事にコメントする
モンスターファームオンライン始めました。ゲームの内容以前にね、製品としてどうなのよ?ってとこが多すぎます。
最近 nProtectを初めとしたルートキットを入れるのがネトゲの標準になりつつあるんですが、いい加減やめて欲しいな。あと我が家のPCではCDを読まない(モンスターを作るときに使う)のですが、Daemon Toolsのせいかもしれないです。ま、どうでもいいけど。
とにかく全体がもっさりーもっさらーもっされすとーです。非常にイライラします。ベータ版とはいえひどすぎる。テクモさんガンバっておくれよ。
この記事にコメントする
| < | 2008 | > | ||||
| << | < | 03 | > | >> | ||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| - | - | - | - | - | - | 1 |
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 | - | - | - | - | - |
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: