Я узнал, что с помощью __attribute__ ((section(".section_name")))
я могу перемещать функцию или переменную в определенный раздел, как определено в сценарии компоновщика. Но у меня есть несколько исходных файлов C, для которых я хочу переместить весь этот код в определенный раздел простым методом вместо того, чтобы писать указанную выше команду для каждого объявления функции / переменной.
Точно так же у меня есть файлы режима C, для которых мне нужно переместить их в другие определенные разделы.
Написание __attribute__ ((section(".section_name")))
для каждой функции и переменной будет трудоемким и сложным процессом. Может ли у кого-нибудь быть альтернативный метод применения определенного раздела для всего файла вместо каждой функции?
Вы преувеличиваете, когда говорите «написание
__attribute__ ((section(".section_name")))
для каждой функции и переменной будет трудоемким и сложным процессом»?Предложение Ctx — жизнеспособное решение. Но когда вы вернетесь к своему коду через полгода, вам будет трудно вспомнить, почему и как он работает. И это добавит много дополнительных усилий, когда вы перейдете на другую систему сборки.
Более прагматичным решением будет использование макроса:
Использование макроса создает легко читаемый и понятный код без скрытой магии компоновщика:
Ну конечно это хороший способ. Но, ну … Это именно то, чего ОП явно не хочет, будь то макрос или нет. Может ли у кого-нибудь быть альтернативный метод применения определенного раздела для всего файла вместо каждой функции? здесь просто нет ответа. — person Logan859; 22.11.2019
@Ctx Я часто беру на себя смелость предлагать решения, которые, как мне кажется, в интересах ОП, даже если он / она, возможно, просили чего-то немного другого. Преимущество StackOverflow в том, что на вопрос может быть несколько разумных ответов и что OP и более поздние посетители могут реализовать тот, который лучше всего подходит для их конкретного контекста. — person Logan859; 22.11.2019
Спасибо за ответ, ребята … @Codo Я использую в своем проекте разные SDK с поддержкой FreeRTOS MPU. Итак, мне нужно поместить все сторонние коды в другой раздел для безопасности. Итак, как я упоминал ранее, я не могу использовать подход attribute ((section (.section_name))), поскольку файлов SDK огромное количество. — person Logan859; 22.11.2019
@Codo Я понимаю это в целом, но в данном случае это решение было явно исключено в вопросе. — person Logan859; 22.11.2019
Для этого вы можете использовать скрипт компоновщика. Сначала загрузите скрипт компоновщика по умолчанию:
Включен
SECTIONS
раздел, который необходимо изменить:Теперь в том месте, где вы хотите разместить новый раздел, поместите следующую команду:
Это помещает все символы указанных объектных файлов в указанный раздел. Вы также можете ограничить это определенными разделами ввода, например
Вы также можете использовать подстановочные знаки для спецификации имени файла:
Для получения дополнительных сведений см. руководство GNU ld
Спасибо за ответ @Ctx. Я попробую с вашим предложением. — person Logan859; 22.11.2019