реклама на сайте
подробности

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> Стартап и скрипт линкера из CMSIS для Sourcery CodeBench
koluna
сообщение Jun 18 2013, 15:52
Сообщение #46


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Пока так и не понял, "--gc-sections" работает без "-ffunction-sections и -fdata-sections"?
Ну поместит компилятор при использовании ключей "-ffunction-sections и -fdata-sections" каждую функцию в ".text.имя_функции", и каждую переменную (глобальную или статическую) в ".data.имя_переменной" (".bss.имя_переменной") и что дальше?
Или линкер не может отбросить при оптимизации функции и просто переменные, которые не используются в программе, т. е., он может отбросить только секции, в которые компилятор и помещает функции/переменные при использовании ключей "-ffunction-sections и -fdata-sections"?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 18 2013, 16:58
Сообщение #47


фанат дивана
******

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



Цитата(koluna @ Jun 18 2013, 19:25) *
Знаю. Но тогда это что значит?

А фиг его знает. Либо меня подводит мой англицкий, либо там написана неправда. sm.gif
Но по факту точка - это адрес в области, куда помещается секция. Может быть, дело в ">"? Там примеры без ">".
Цитата(koluna @ Jun 18 2013, 21:52) *
Или линкер не может отбросить при оптимизации функции и просто переменные, которые не используются в программе, т. е., он может отбросить только секции, в которые компилятор и помещает функции/переменные при использовании ключей "-ffunction-sections и -fdata-sections"?

Да, линкер умеет отбрасывать только секции.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
koluna
сообщение Jun 18 2013, 17:43
Сообщение #48


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(AHTOXA @ Jun 18 2013, 20:58) *
А фиг его знает. Либо меня подводит мой англицкий, либо там написана неправда. sm.gif
Но по факту точка - это адрес в области, куда помещается секция. Может быть, дело в ">"? Там примеры без ">".


Вот и я сомневаюсь... предлагаю подождать Сергея sm.gif

Цитата
Да, линкер умеет отбрасывать только секции.


В итоге.
Секции, перечисленные в команде KEEP() не отбрасываются линкером при чистке мусора (актуально при компиляции с опциями “-ffunction-sections”, “-fdata-sections” и одновременной линковке с опцией “--gc-sections”). При компиляции с опциями “-ffunction-sections” и “-fdata-sections” компилятор помещает каждую функцию и переменную в отдельную секцию вида “.text.имя”, “.data.имя”, “.bss.имя”. Далее, при линковке с опцией “--gc-sections”, линкером отбрасываются все эти входные секции, на которые нет ссылок в программе (нет ссылок на функции и переменные, содержащиеся в них), кроме помеченых KEEP().
Правильно? sm.gif


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 18 2013, 17:54
Сообщение #49


фанат дивана
******

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



Да, всё так.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 18 2013, 18:34
Сообщение #50


Гуру
******

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



QUOTE (koluna @ Jun 18 2013, 20:43) *
Вот и я сомневаюсь... предлагаю подождать Сергея sm.gif
Я пас.

QUOTE (koluna @ Jun 18 2013, 20:43) *
Правильно? sm.gif
Да.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
koluna
сообщение Jun 18 2013, 18:37
Сообщение #51


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Мучает меня вопрос по секциям все-таки...

.init_array - конструкторы EABI.
.ctors - конструкторы не EABI.
Для совместимости лучше использовать в скрипте и то и другое?

.dtors
Деструкторы. EABI? Нет? Все? sm.gif

Это зачем?
.comment
.line


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 18 2013, 19:44
Сообщение #52


фанат дивана
******

Группа: Свой
Сообщений: 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? Нет? Все? sm.gif

Деструкторы нам не нужны. Поэтому мы их игнорируем, где бы они не были размещены.

Цитата(koluna @ Jun 19 2013, 00:37) *
Это зачем?
.comment
.line

Не знаю, и знать не хочу! sm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
koluna
сообщение Jun 19 2013, 07:41
Сообщение #53


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(AHTOXA @ Jun 18 2013, 23:44) *
Можно использовать. Насчёт "лучше" - не уверен. Зачем поддерживать такие старые компиляторы?


Насколько старые?
Просто встречаю в других скриптах... видимо, авторы не особо задумывались над этим...

Цитата
Деструкторы нам не нужны. Поэтому мы их игнорируем, где бы они не были размещены.


И деструкторы тоже встречаю в других скриптах...
Ну, да... по сути и не нужны деструкторы для глобальных и статических объектов.
Но вдруг у кого-то фантазия проснется и он решит вызвать деструктор? sm.gif

Цитата
Не знаю, и знать не хочу! sm.gif


А вот я хочу, это бодрит sm.gif

Со счетчиком позиций вопрос пока открыт sad.gif


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 19 2013, 08:04
Сообщение #54


фанат дивана
******

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



Цитата(koluna @ Jun 19 2013, 13:41) *
Насколько старые?

Емнимс, уже года три-четыре как перешли на eabi.
Цитата(koluna @ Jun 19 2013, 13:41) *
Но вдруг у кого-то фантазия проснется и он решит вызвать деструктор? sm.gif

Вызвать вручную -- без проблем. Та секция отвечает за автоматический вызов деструкторов при завершении программы.
Цитата(koluna @ Jun 19 2013, 13:41) *
А вот я хочу, это бодрит sm.gif

Мне кажется, что вы уже достаточно прокачали свой уровень по скрипту и стартапу, и уже можно смело двигаться дальшеsm.gif
Цитата(koluna @ Jun 19 2013, 13:41) *
Со счетчиком позиций вопрос пока открыт sad.gif

По факту всё работает как надо. Скорее всего либо мы что-то не так поняли в описании, либо там (в описании) ошибка.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
koluna
сообщение Jun 19 2013, 09:44
Сообщение #55


Профессионал
*****

Группа: Участник
Сообщений: 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!
Читал, что такой префикс придумали, чтобы отличать от других компиляторов. Но неужели нельзя было придумать что-нибудь покороче и попроще, без двусмысленности? sm.gif


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 19 2013, 10:02
Сообщение #56


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
koluna
сообщение Jun 19 2013, 12:31
Сообщение #57


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Понятно, спасибо.

А с деструкторами все-таки что? Аналогично?
Для EABI и не EABI одинаково?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 19 2013, 13:11
Сообщение #58


Гуру
******

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



QUOTE (koluna @ Jun 19 2013, 15:31) *
А с деструкторами все-таки что? Аналогично?
Мы их не используем, потому и не разбирались. Вы можете сами провести такое исследование и огласить результат.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
koluna
сообщение Jun 19 2013, 14:10
Сообщение #59


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Судя по всему для EABI, по аналогии с конструкторами (".init_array"), для деструкторов используется ".fini_array".
Вот на эту тему: http://electronix.ru/forum/index.php?showt...=79902&st=0.


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
koluna
сообщение Jun 19 2013, 18:30
Сообщение #60


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Что такое common-символы (секция COMMON)?
Из доки на линкер толком не понял.
Это к вопросу зачем нужно делать *(COMMON).

Цитата
В некоторых форматах объектных файлов общие символы (common) не привязаны к конкретной секции, поэтому линкер, считает, что они находятся в секции COMMON. Следовательно, чтобы использовать эти символы необходимо применить выражение вида *(COMMON).


Но что такое "общие символы (common)" - не раскрывается sad.gif

Сообщение отредактировал koluna - Jun 20 2013, 08:29


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post

5 страниц V  « < 2 3 4 5 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th June 2025 - 12:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01486 секунд с 7
ELECTRONIX ©2004-2016