之前理解的方式, 只有 g++-4.6, g++-4.4 可以套用。
基本上 .ctor section 存放喚起 global object ctor 的 function 位址, 不過在 g++ 4.7 時, 這個 function 似乎放在 .text, 我掙扎幾番後, 放棄了, 無法得知如何喚起這個 function。
我有別的方式可用, 不過似乎不太高明, 就是 c++ runtime - global object ctor (0) 提到的。
好吧, 我不想越玩越大, 重點在用 c++ 寫 os, 先用 g++ 4.6, g++ 4.4 擋一下先。
20120816 補充:
g++ 4.7 將 _GLOBAL__sub_I_ab 放在 .init_array section[ 2] .init_array INIT_ARRAY 00000938 000938 000004 00 WA 0 0 4
一樣是 4byte, 一看就知道是幹嘛的, 有了這個就沒問題了。
嗯 ... 很清楚, 上圖是 g++ 4.7.1, 下圖是 g++ 4.4.3, 成功的支援不同的 g++ 版本 global object ctor 實作。
不過這次為什麼不是真實機器的測試畫面, 當然絕對不是因為捲曲的很厲害的美女, 是因為這程式在真實機器上的 msdos 無法正常執行, 我努力找問題中 ... 這困擾我好幾天了。
已經解決 ref: bss initialize issue
ref: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46770
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。