Отговори на тема  [ 37 мнения ]  Отиди на страница Предишна  1, 2, 3
Един CALL до много функции... 
Автор Съобщение
Ранг: Популярен
Ранг: Популярен

Регистриран на: Пон Мар 22, 2010 8:52 pm
Мнения: 328
Мнение Re: Един CALL до много функции...
Така, аз мога да си сложа входните секции където си поискам. Въпросът е, че като опиша въпросните входни секции, тогава линкера не ми прави тези специални имена.


Пон Ное 18, 2013 4:29 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: Един CALL до много функции...
има си документация по въпроса ;-)


Пон Ное 18, 2013 4:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: Един CALL до много функции...
Т.е. не работи имплицитно ... ами направи го експлицитно, дефинирай си ги на ръка тези маркери. И без това е грозно като видиш някой символ в сорсовете който не се намира с греп никъде защото компилатора/линкера си го е генерирал незнайно как.

_________________
Мразя да мразя ...


Пон Ное 18, 2013 4:40 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: Един CALL до много функции...
Просто трябва да е спазено:

1. Името на входната секция да може да се ползва като С-идентификатор (демек да не съдържа точки или други гадни символи)
2. Да няма правили за тая секция в скрипта

При тия две условия ще направи _start_....

и ако сложи и един const може и да се опита да го разположи във флаша ;-)

Демек:

Цитат:
#define __ON_INIT(x) void x (void); \
const void * const x##_p __attribute__ ((section("MSG_ON_INIT"))) = & x; \
void x (void)

extern const char *__start_MSG_ON_INIT;
extern const char * __stop_MSG_ON_INIT;


Пон Ное 18, 2013 4:47 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Пон Мар 22, 2010 8:52 pm
Мнения: 328
Мнение Re: Един CALL до много функции...
Сетих се за това и го пробвах, ама не подейства :)

Условие 1 е изпълнено. Само с 2 имам проблем. Това което чета по разни форуми е, че маи трябва д аси упгрейдна гцц-то. май при по-новите това със секциите го прави за всяка, а не само за неупоменатите в скрипт-а

Сега прочето ПДФ-а за последният ЛД на пакета дето ползвам... е там си пише същото за тези 2 условия :(


Пон Ное 18, 2013 5:20 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Окт 17, 2006 8:23 am
Мнения: 30
Мнение Re: Един CALL до много функции... - леко off.
А какво казва стандарта на C/C++, ако има един модул със

void(*funcs[50])();
int counter = 0;

и във всеки регистриращ се модул пишем

extern void(*funcs[50])();
extern int counter;

static void(*dummy)() = ( funcs[++counter] = &module_init );

Присвояването ще се изпълни ли?


Съб Ное 30, 2013 2:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: Един CALL до много функции...
Това на Ц не минава:
Код:
test2.c:8:25: error: initializer element is not a compile-time constant
static void(*dummy)() = ( funcs[++counter] = &module_init );
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

на Ц++ генерирания код по същество е както този със статичните конструктори т.е. за нещо което може да се свърши компиле тайм със секции се генерира код който се изпълнява преди main. Но определесно е по просто отколкото да се ползват обекти ...
И един интересен момент - включих линк тайм оптимизации и целия код изчезна и стана ефективно както решението със секциите - е това на clang :D

_________________
Мразя да мразя ...


Нед Дек 01, 2013 11:43 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 37 мнения ]  Отиди на страница Предишна  1, 2, 3

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни