vova7890 0 29 июня, 2011 Опубликовано 29 июня, 2011 · Жалоба Здраствуйте. В процессе познания мира натыкнулся на необходимость запихнуть все данные "как есть" в отдельную секцию, получить стартовый аддрес этой секции и размер. В общем с секциями я хотел решить проблему так volatile int __section_begin; // Сдесь будут находится переменные, которые нужно собрать без оптимизации //Например volatile const int test = 12; volatile SomeStruct data = {2, 3, 4}; volatile int __section_end; Код собирается, и даже размер секции правильно расчитывает, только фишка в том что нада вычитать не __section_end - __section_begin, а наоборот о_О. С нулевой оптимизацией все нормально, только хотелось бы решить эту проблему внутри файла, без задавания параметров компилятору. Пробовал прагмой задать оптимизацию, в варнинге увидел что она игнорирована, та же ситуация и с аттрибутом. Что посоветуете? gcc 4.6.0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 29 июня, 2011 Опубликовано 29 июня, 2011 · Жалоба да вроде бы volatile и говорит компиллеру не оптимизировать переменные. для таких случаев специально есть механизм укладывания переменных в секцию которая в скрипте линкера объявлена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vova7890 0 29 июня, 2011 Опубликовано 29 июня, 2011 · Жалоба я без скрипта собираю. Якобы дефолтный. По -verbose выводит какой-то скрипт, который заставляет падать лоадер... Загрузчик заточен под сборку без скрипта. Можно без него как-то обойтись? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 30 июня, 2011 Опубликовано 30 июня, 2011 · Жалоба Код собирается, и даже размер секции правильно расчитывает, только фишка в том что нада вычитать не __section_end - __section_begin, а наоборот о_О. По дефолту именно так и есть - встреченные более поздно по тексту переменные укладываются в начало секции, выход - перестать мельчить и запихнуть все в структуру, а ее имя уже будет относиться к секции. Внутри структуры адресация линейная в порядке перечисления аргументов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 123 30 июня, 2011 Опубликовано 30 июня, 2011 · Жалоба Код собирается, и даже размер секции правильно расчитываетПопробуйте какую-то из переменных проинициализировать нулем (явно или по-умолчанию). Будете приятно удивлены. да вроде бы volatile и говорит компиллеру не оптимизировать переменные.Не оптимизировать доступ к ним. Про размещение никто ничего не обещает. Загрузчик заточен под сборку без скрипта. Можно без него как-то обойтись?Придумываем себе трудности, чтобы потом их успешно преодолевать? Ну-ну. Тогда структура, как советует _Pasha, ваше всё. И миритесь с необходимостью при доступе к любой переменной указывать имя структуры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vova7890 0 30 июня, 2011 Опубликовано 30 июня, 2011 · Жалоба кароче поставил оптимизацию на 0 и все... А вот при сборке на g++ неиспользованные переменные улетели. Решил проблему сборкой одного файла на С и extern "С" . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 123 30 июня, 2011 Опубликовано 30 июня, 2011 (изменено) · Жалоба кароче поставил оптимизацию на 0 и все...[CENSORED] А вот при сборке на g++ неиспользованные переменные улетели.Ключ -fdata-sections в CFLAGS появился волшебным образом сам, какой нехороший :laughing: А в скрипте линкера есть магическое слово KEEP() для секций, которые не нужно "чистить"... Решил проблему сборкой одного файла на С и extern "С" .[CENSORED] Изменено 7 июля, 2011 пользователем IgorKossak Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 17 6 июля, 2011 Опубликовано 6 июля, 2011 · Жалоба А в скрипте линкера есть магическое слово KEEP() для секций, которые не нужно "чистить"... А ещё есть __attribute__((used)) для объектов, которые не нужно трогать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 7 июля, 2011 Опубликовано 7 июля, 2011 · Жалоба Удалил рассуждения не по теме. Прошу держаться в рамках. Модератор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vova7890 0 10 июля, 2011 Опубликовано 10 июля, 2011 · Жалоба А ещё есть __attribute__((used)) для объектов, которые не нужно трогать Во, спасибо, помогло :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться