gcc: __DATA, __ const против __TEXT, __ const - PullRequest
2 голосов
/ 01 декабря 2009

В соответствии с справочником форматов файлов Mac-X для Mac OS X ABI , __DATA,__const содержит Инициализированные перемещаемые постоянные переменные . Я немного поковырялся, и похоже, что gcc помещает инициализированные структуры и массивы в __DATA, __const. Почему бы не __TEXT,__const, хотя?

Koi8rModel и CI_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 ]

3 голосов
/ 01 декабря 2009

Раздел __TEXT, __const предназначен для не перемещаемых инициализированных постоянных данных. Примером может послужить беспорядочный. Перемещаемые данные только для чтения, как и в приведенных вами примерах, находятся в __DATA, __const.

1 голос
/ 01 декабря 2009

Классически, ТЕКСТ в этом контексте означает «код». Похоже, что Mac OS X все бросает, но, как отмечают другие авторы, вы обнаружите, чего вам следует ожидать от вашей платформы.

0 голосов
/ 01 декабря 2009

Я только что понял, что мой вопрос содержал ответ. __DATA,__const действительно для перемещаемых битов, но причина, по которой биты в моем вопросе являются перемещаемыми, заключается в том, что они являются указателями и поэтому должны быть исправлены во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...