Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В какую секцию попадают const данные? 
:(
    Опции темы
savigm
  Дата 31.8.2009, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.12.2008
Где: г. Зеленоград

Репутация: нет
Всего: нет



Подскажите пожалуйста, в какую секцию попадают данные с квалификатором const и в каком виде? Насколько я понимаю данные без const идут в секцию data , а при использовании const - в rodata. При использовании квалификаторов static и const компилятор просто пишет значения в регистры в секции text, но это видимо как повезет, т.е. компилятор постарается так сделать, но может и в rodata поместить.
Собственно что мне нужно:
разместить постоянный указатель на структуру 
Код

volatile struct *const
 в секции text, но если не использовать static, то компилятор кладет данные в rodata.
На явное указание секции .text, компилятор начинает ругаться на изменение аттрибутов (флагов секций):
Код

volatile struct *const __attribute__ ((section (".text")))

Код

Warning: ignoring changed section attributes for .text

P.S. Компилатор GCC - если это имеет значение.

Это сообщение отредактировал(а) savigm - 31.8.2009, 16:03
PM MAIL ICQ   Вверх
500mhz
Дата 31.8.2009, 17:15 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



const = постоянная
компилер все правильно мутит и кладет ее в секцию с атрибутами реадонли, чтоб тебе ее менять не захотелось
при попытке сунуть ее в .техт он пытаеться там поставить РО , на что наверняка ругнеться линкер так как он захочет чтоб там не РО было а с атрибутами ЕХЕ

а какая тебе в принципе разница где что храниться?  настройки чтоль собрался там хранить? дык проще в оверлее тогда )))

Это сообщение отредактировал(а) 500mhz - 31.8.2009, 17:17


--------------------

PM MAIL ICQ   Вверх
savigm
  Дата 31.8.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.12.2008
Где: г. Зеленоград

Репутация: нет
Всего: нет



500mhz, разница собственно в том что мне нужно и код и все данные запихнуть в .text, особенности компиляции так сказать. Собственно выбор у меня не большой: либо переписывать весь сишный код на ассемблер (чего очень не хотелось-бы), либо найти способ запихнуть данные в .text с помощью __attribute__ ((section (".text"))), но при этом мне нужно избавиться от предупреждения. Изменение флагов компиляции не подходит. Существует-ли способ при задании секции явно изменить аттрибуты данных в секции, т.е. типа приведения типов, только приведение флагов секций, чтобы компилятор не ругался?

Это сообщение отредактировал(а) savigm - 31.8.2009, 17:27
PM MAIL ICQ   Вверх
500mhz
Дата 31.8.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



сушествует РеEditor в котором любой секции какие угодно можно атрибуты выставить (или не РЕ еслу е тебя ELF)))

в GCC не знаю как менять атриб секции я им не пользуюсь

Это сообщение отредактировал(а) 500mhz - 31.8.2009, 17:33


--------------------

PM MAIL ICQ   Вверх
smoke_man
Дата 1.9.2009, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 1
Всего: 17



При использовании section данные должны иметь первоначальное значение. Может быть еще в этом проблема?


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
savigm
Дата 1.9.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.12.2008
Где: г. Зеленоград

Репутация: нет
Всего: нет



smoke_man, нет, начальные значения присваиваются.
Очевидно единственный способ в Си запихнуть данные в секцию .text - это использование
Код

__attribute__ ((section (".text")))
, но при этом возникнет предупреждение
Код

Warning: ignoring changed section attributes for .text
, что означает изменение аттрибутов данных (в случае квалификатора const) с чтения, на чтение и выполнение, а избавиться от этого предупреждения не получиться.

Это сообщение отредактировал(а) savigm - 1.9.2009, 12:55
PM MAIL ICQ   Вверх
500mhz
Дата 1.9.2009, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



хз даже в OpenWatcom есть умная опция пихания всего в одну секцию


--------------------

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0469 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.