DLL初期化周り整理

monapi

staticリンク時
  1. user_start
  2. monapi_initialize_memory
  3. invokeFuncList [ __CTOR_LIST__はこのとき monapi_crt/monapi_implで同一のものを参照 ]
  4. __attribute__( (constructor) ) void monapi_initialize()[ invokeFuncListの呼出しによる ]
  5. user_start_c_impl
  6. main
dynamicリンク時
  1. dllmain
  2. monapi_initialize_memory
  3. invokeFuncList [ __CTOR_LIST__は monapi_implのものを参照 ]
  4. __attribute__( (constructor) ) void monapi_initialize()[ invokeFuncListの呼出しによる ]
  5. user_start
  6. invokeFuncList [ __CTOR_LIST__は monapiのものを参照 ]
  7. user_start_c_impl
  8. main

monalibc

staticリンク時(crtは monapi_crt.o)
  1. user_start
  2. monapi_initialize_memory
  3. invokeFuncList [ __CTOR_LIST__はこのとき monapi/monapi_implで同一のものを参照 ]
  4. 以下の2つの初期化メソッドの呼出順序は保証されないので flag を使って monapi->monalibcとなるようにしている
    1. __attribute__( (constructor) ) void monapi_initialize()[ invokeFuncListの呼出しによる ]
    2. __attribute__( (constructor) ) void monalibc_initialize()[ invokeFuncListの呼出しによる ]
  5. user_start_c_impl
  6. main
dynamicリンク時
  1. dllmain(monapi)
  2. monapi_initialize_memory
  3. invokeFuncList [ __CTOR_LIST__は monapi_implのものを参照 ]
  4. __attribute__( (constructor) ) void monapi_initialize()[ invokeFuncListの呼出しによる ]
  5. dllmain(monalibc)
  6. invokeFuncList [ __CTOR_LIST__は crt/dllmain のものを参照 ]
  7. __attribute__( (constructor) ) void monalibc_initialize()[ invokeFuncListの呼出しによる ]
  8. user_start
  9. invokeFuncList [ __CTOR_LIST__は monapi_crtのものを参照 ]
  10. user_start_c_impl
  11. main

monalibc/crt/crt.cpp も monapi.cpp のようにメモリ初期化についてフラグを参照しなければいけなくなりました。
変更済みです。

libgui

GUI.DLLは monapi-imp に依存している。
monalibcと同じ形式で dllmain で invokeFuncList を呼び、libgui_initialize を __attribute__( (constructor) )で呼びます。

libbaygui

libguiと同様

バグ

monalibc/crt/dllmain.cpp の monalibc_initializeで Stream の初期化をやるといろいろうごかなくなります。
原因がさっぱり分からないのでしばらく寝かせようと思います。

申し訳ないのですがもし可能ならば、inStream/outStream は messages.cpp にあるように必要になったときに初期化するように変更頂けないでしょうか。
id:shotaro_tsuji