Lisp Scheme Part22
■ このスレッドは過去ログ倉庫に格納されています
0662639
2008/06/17(火) 17:55:27READ(&old_fsubr_tab,sizeof(fsubr_tab));
READ(&old_pseudofun_tab,sizeof(pseudofun_tab));
READ(&symbol_tab,sizeof(symbol_tab));
というコードがあるのですが、
3つ目のREADマクロ中のread(2)が失敗し、
i386ならEFAULTが、armならEACCESがerrnoにセットされます。
ところが3つ目のREADマクロの前に
{
int i;
for ( i = 0 ; i < sizeof(symbol_tab) ; i += 4000 /* i386の場合。armの場合は3999 */ )
((char *) &symbol_tab)[ i ] = '!'; /* '!'という値には意味はありません */
}
というコードを挿入すればread(2)は失敗しません。
i386なら4001以上、armなら4000以上のiの増分ではread(2)が失敗します。
symbol_tabというのはマクロで、実体はsymbol_tab_dataを指していますが
old_fsubr_tabとold_pseudofun_tabはbssセクションに置かれているのに対し
symbol_tab_dataはdataセクションに置かれているという違いがあります。
■ このスレッドは過去ログ倉庫に格納されています