- 662 名前:639 mailto:sage [2008/06/17(火) 17:55:27 ]
- 具体的にはspvw_memfile.cの1196-1198行目(clisp-2.45の場合)に
READ(&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セクションに置かれているという違いがあります。
|

|