2012年8月15日 星期三

different g++ version - different global object ctor implementation ~^.^~ g++ 4.4, 4.6, 4.7

令人氣餒, 本來以為搞定 global object ctor 的秘密了, 不過在使用 g++ 4.7 時, 之前的作法完全沒用, 看來 g++ 4.7 又換了一套新的實作方法。

之前理解的方式, 只有 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 帳號。