gcc:__DATA,__ const vs __TEXT,__ const

时间:2009-12-01 12:46:39

标签: gcc

根据Mac OS X ABI Mach-O File Format Reference__DATA,__const包含已初始化的可重定位常量变量。我戳了一下,看起来gcc在__DATA, __const中放置了初始化的const结构和数组。但为什么不__TEXT,__const

例如,

Koi8rModelCI_nsJSCID是初始化的const结构,而AlignStrings是一个数组。

nm -m MinefieldNoPic.app/Contents/MacOS/firefox-bin |grep Koi8rModel
000000010156ce80 (__DATA,__const) non-external _Koi8rModel

nm -m MinefieldNoPic.app/Contents/MacOS/firefox-bin |grep CI_nsJSCID
0000000101441060 (__DATA,__const) non-external __ZL10CI_nsJSCID

nm -m MinefieldNoPic.app/Contents/MacOS/firefox-bin |grep AlignStrings
000000010154f8c0 (__DATA,__const) non-external __ZL13sAlignStrings

3 个答案:

答案 0 :(得分:3)

__TEXT,__ const部分用于不可重定位的初始化常量数据。一个例子是一个混乱。可重定位的只读数据(如您提供的示例)转到__DATA,__ const。

答案 1 :(得分:1)

经典地,TEXT in this context表示“代码”。似乎Mac OS X似乎抛出了一些东西,但正如其他海报所指出的那样,你发现的是你在平台上应该期待的东西。

答案 2 :(得分:0)

我刚才意识到我的问题包含答案。 __DATA,__const确实是可重定位的,但我问题中的位是可重定位的原因是因为它们是指针,因此需要在运行时修复。