toge's diary

コンピュータ関連の趣味をつらつらと。

Linuxでは初期化さえ失敗するし

http://lists.gnu.org/archive/html/tinycc-devel/2003-06/msg00014.html

Linuxでも一筋縄ではいきませんな。
まずはtccelf.c内で/usr/lib/libc.soを読み込んでいるのですけど、ld scriptのパーズに失敗しているのよね。超adhocに修正してみました。
本当はld scriptの文法を調べて真剣にpatchを作らんとあかんと思うのですが・・・。

2312c2312,2347
<                 tcc_add_file(s1, filename);
    • -
> > // support AS_NEEDED begin > if (strcmp(filename, "AS_NEEDED") == 0) > { > t = ld_next(s1, filename, sizeof(filename)); > if (t == ',') { > t = ld_next(s1, filename, sizeof(filename)); > } > if (t != '(') > expect("("); > t = ld_next(s1, filename, sizeof(filename)); > > for(;;) { > if (t == LD_TOK_EOF) { > error_noabort("unexpected end of file"); > return -1; > } else if (t == ')') { > break; > } else if (t != LD_TOK_NAME) { > printf("%d %s\n", LD_TOK_NAME, filename); > error_noabort("filename expected"); > return -1; > } > tcc_add_file(s1, filename); > t = ld_next(s1, filename, sizeof(filename)); > if (t == ',') { > t = ld_next(s1, filename, sizeof(filename)); > } > } > } > else > { > tcc_add_file(s1, filename); > } > // support AS_NEEDED end >


ちなみにld scriptのフォーマットは以下の通りでいいのかなぁ。
http://www.kpitgnutools.com/manuals/ld.html#SEC12

色々TCCが対応していないフォーマットがありますな。
TCCの人々はあんまり動く気無さげ。ぬぅ・・・、ま、困った時に直せばいいか。