|
|
  |
Стартап и скрипт линкера из CMSIS для Sourcery CodeBench |
|
|
|
Jun 18 2013, 16:58
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(koluna @ Jun 18 2013, 19:25)  Знаю. Но тогда это что значит? А фиг его знает. Либо меня подводит мой англицкий, либо там написана неправда.  Но по факту точка - это адрес в области, куда помещается секция. Может быть, дело в ">"? Там примеры без ">". Цитата(koluna @ Jun 18 2013, 21:52)  Или линкер не может отбросить при оптимизации функции и просто переменные, которые не используются в программе, т. е., он может отбросить только секции, в которые компилятор и помещает функции/переменные при использовании ключей "-ffunction-sections и -fdata-sections"? Да, линкер умеет отбрасывать только секции.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jun 18 2013, 17:43
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Цитата(AHTOXA @ Jun 18 2013, 20:58)  А фиг его знает. Либо меня подводит мой англицкий, либо там написана неправда.  Но по факту точка - это адрес в области, куда помещается секция. Может быть, дело в ">"? Там примеры без ">". Вот и я сомневаюсь... предлагаю подождать Сергея  Цитата Да, линкер умеет отбрасывать только секции. В итоге. Секции, перечисленные в команде KEEP() не отбрасываются линкером при чистке мусора (актуально при компиляции с опциями “-ffunction-sections”, “-fdata-sections” и одновременной линковке с опцией “--gc-sections”). При компиляции с опциями “-ffunction-sections” и “-fdata-sections” компилятор помещает каждую функцию и переменную в отдельную секцию вида “.text.имя”, “.data.имя”, “.bss.имя”. Далее, при линковке с опцией “--gc-sections”, линкером отбрасываются все эти входные секции, на которые нет ссылок в программе (нет ссылок на функции и переменные, содержащиеся в них), кроме помеченых KEEP(). Правильно?
--------------------
Благодарю заранее!
|
|
|
|
|
Jun 18 2013, 18:37
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Мучает меня вопрос по секциям все-таки... .init_array - конструкторы EABI. .ctors - конструкторы не EABI. Для совместимости лучше использовать в скрипте и то и другое? .dtors Деструкторы. EABI? Нет? Все?  Это зачем? .comment .line
--------------------
Благодарю заранее!
|
|
|
|
|
Jun 18 2013, 19:44
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(koluna @ Jun 19 2013, 00:37)  .init_array - конструкторы EABI. .ctors - конструкторы не EABI. Для совместимости лучше использовать в скрипте и то и другое? Можно использовать. Насчёт "лучше" - не уверен. Зачем поддерживать такие старые компиляторы? Цитата(koluna @ Jun 19 2013, 00:37)  .dtors Деструкторы. EABI? Нет? Все?  Деструкторы нам не нужны. Поэтому мы их игнорируем, где бы они не были размещены. Цитата(koluna @ Jun 19 2013, 00:37)  Это зачем? .comment .line Не знаю, и знать не хочу!
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jun 19 2013, 07:41
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Цитата(AHTOXA @ Jun 18 2013, 23:44)  Можно использовать. Насчёт "лучше" - не уверен. Зачем поддерживать такие старые компиляторы? Насколько старые? Просто встречаю в других скриптах... видимо, авторы не особо задумывались над этим... Цитата Деструкторы нам не нужны. Поэтому мы их игнорируем, где бы они не были размещены. И деструкторы тоже встречаю в других скриптах... Ну, да... по сути и не нужны деструкторы для глобальных и статических объектов. Но вдруг у кого-то фантазия проснется и он решит вызвать деструктор?  Цитата Не знаю, и знать не хочу!  А вот я хочу, это бодрит  Со счетчиком позиций вопрос пока открыт
--------------------
Благодарю заранее!
|
|
|
|
|
Jun 19 2013, 08:04
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(koluna @ Jun 19 2013, 13:41)  Насколько старые? Емнимс, уже года три-четыре как перешли на eabi. Цитата(koluna @ Jun 19 2013, 13:41)  Но вдруг у кого-то фантазия проснется и он решит вызвать деструктор?  Вызвать вручную -- без проблем. Та секция отвечает за автоматический вызов деструкторов при завершении программы. Цитата(koluna @ Jun 19 2013, 13:41)  А вот я хочу, это бодрит  Мне кажется, что вы уже достаточно прокачали свой уровень по скрипту и стартапу, и уже можно смело двигаться дальше  Цитата(koluna @ Jun 19 2013, 13:41)  Со счетчиком позиций вопрос пока открыт  По факту всё работает как надо. Скорее всего либо мы что-то не так поняли в описании, либо там (в описании) ошибка.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jun 19 2013, 09:44
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Цитата(AHTOXA @ Jun 19 2013, 12:04)  Емнимс, уже года три-четыре как перешли на eabi. Теперь все поддерживаемые (развиваемые) в данный момент компиляторы компиляторы стали EABI? Цитата Вызвать вручную -- без проблем. Та секция отвечает за автоматический вызов деструкторов при завершении программы. А, ну да... Если хотим автоматом, то используем в скрипте входные секции ".dtors*" (мапим входные куда-нибудь в ".text", наверняка даже с KEEP()). Создаем символы, указывающие на начало и конец области размещения деструкторов в этих секциях, а потом в стартапе после вызова main() в цикле вызываем все деструкторы по указателю, используя выше определенные символы... Кстати, в ".ctors" (для EABI ".init_array") помещаются только конструкторы по умолчанию, а остальные конструкторы попадают в ".text*"? А деструкторы-то куда компилятор пихает? По аналогии с конструкторами в ".dtors*"? Цитата По факту всё работает как надо. Скорее всего либо мы что-то не так поняли в описании, либо там (в описании) ошибка. Вот-вот... не понятно... Кстати, зачем такой префикс жуткий "arm-none-eabi-"? И что вообще означает "none-eabi"? Похоже на "не EABI", но ведь компилятор мой однозначно EABI! Читал, что такой префикс придумали, чтобы отличать от других компиляторов. Но неужели нельзя было придумать что-нибудь покороче и попроще, без двусмысленности?
--------------------
Благодарю заранее!
|
|
|
|
|
Jun 19 2013, 10:02
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (koluna @ Jun 19 2013, 12:44)  Кстати, в ".ctors" (для EABI ".init_array") помещаются только конструкторы по умолчанию, а остальные конструкторы попадают в ".text*"? Поскольку конструкторы являются кодом - они помещаются в .text В .init_array и .ctors в нужном порядке помещаются указатели на них. Собственно вот код их вызова, по нему все понятно: CODE extern void(* const __ctors_start__[])(); extern void(* const __ctors_end__[])(); ... /* Call constructors */ void(* const *ctor)(); for( ctor = __ctors_start__; ctor < __ctors_end__; ) (*ctor++)(); QUOTE (koluna @ Jun 19 2013, 12:44)  Кстати, зачем такой префикс жуткий "arm-none-eabi-"? И что вообще означает "none-eabi"? Это два префикса. -none и -eabi. Гляньте сюда.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 19 2013, 14:10
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Судя по всему для EABI, по аналогии с конструкторами (".init_array"), для деструкторов используется ".fini_array". Вот на эту тему: http://electronix.ru/forum/index.php?showt...=79902&st=0.
--------------------
Благодарю заранее!
|
|
|
|
|
Jun 19 2013, 18:30
|
Профессионал
    
Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061

|
Что такое common-символы (секция COMMON)? Из доки на линкер толком не понял. Это к вопросу зачем нужно делать *(COMMON). Цитата В некоторых форматах объектных файлов общие символы (common) не привязаны к конкретной секции, поэтому линкер, считает, что они находятся в секции COMMON. Следовательно, чтобы использовать эти символы необходимо применить выражение вида *(COMMON). Но что такое "общие символы (common)" - не раскрывается
Сообщение отредактировал koluna - Jun 20 2013, 08:29
--------------------
Благодарю заранее!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|