ToDo:
最近 64bit とかになって hoge_t* が 8 バイトあるのが 耐えられないとか言ってよくわからないうわごとをよく言っている。 そういううわごとの一つとして最近よく言ってるのが x86-34 で。
まず ELF 。たぶん class は ELF32 でいい。 Machine は EM_X86_34 で。
kernel 。 CPU は 64bit モードで動かすけど kernel が mmap にかえすアドレスは 34bit 空間に。 vdso とかそのへんも 34bit 空間で。
コンパイラ… int* とか string* とかは 32bit で表現。 デリファレンスは全部 4*(%rax) とかで頑張る。 char* とかとにかく 4byte 以下のデータへのポインタと void* はしょうがないので 64bit で表現。 だから sizeof(char*) > sizeof(int*)
char* => int* の cast とかは基本無理で困る。 まぁデータの 3byte 目を int として読むみたいな、 つまり *(int*)(chptr+3) みたいなのは許すとして、 後は基本許さん方向で。
void* => int* の cast は 4byte アラインされてないと不定な動作!
jmp と call は x86-64 と同じでいいや。 ただ関数は 4byte 境界に。
リンカとローダはグローバルにある int* の解決とかはちょっといじらにゃいかん気がする。
デバッガはそれなりに。
要は 4GB のアドレス空間は足りないかもしれないけど 16GB あれば10年くらいは戦えそうじゃないかという。
うわごともいいところだなあ。
(03:41)
#include <stdio.h> int main() { // ここでとある方法で e を定義すると FPE が出る printf("%d\n", e - e); }
というような e があるんだなぁとふと見つけた
(03:46)
前 | 2010年 1月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
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 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。