В main.c, он вызывает Initialize() и запуска(). Внутри каждой из этих функций в init.c, он перебирает в таблице, которая содержит зарегистрированные функции и называет их:Как iPXE выполняет функции, не вызывая его имена
void startup (void) {
struct startup_fn *startup_fn;
if (started)
return;
/* Call registered startup functions */
for_each_table_entry (startup_fn, STARTUP_FNS) {
if (startup_fn->startup)
startup_fn->startup();
}
started = 1;
}
Я не знаю, где зарегистрированные функции, в соответствии с комментарием.
#define STARTUP_FNS __table (struct startup_fn, "startup_fns")
#define __table(type, name) (type, name)
__table конец того, что я могу смотреть. В комментарии говорится, что это «Объявить таблицу компоновщиков». Но как он может получить функции?
Есть более table.h, такие как __table_entry, table_start ... где же эта таблица взялось? Где его записи? что это значит по:
#define table_start(table) __table_entries (table, 00)
Что 00
значит здесь?
Пожалуйста, помогите. Я действительно хочу понять. Благодарю.
Кстати, макрос __table() является хорошим примером того, как определять и использовать векторнозначные макросы. –