незнакомые коды в iw [закрыто]

Недавно я пытался понять как работают коды в iw. В iw.h я обнаружил следующее:

#define __COMMAND(sect, name, args, nlcmd, flags, idby, handler)    \
static const struct cmd __cmd_ ## handler ## nlcmd ## idby  \
__attribute__((used)) __attribute__((section("__cmd")))     \
= { sect, name, args, nlcmd, flags, idby, handler }
#define COMMAND(section, name, args, cmd, flags, idby, handler) \
__COMMAND(#section, #name, args, cmd, flags, idby, handler)
#define TOPLEVEL(name, args, cmd, flags, idby, handler)     \
__COMMAND(NULL, #name, args, cmd, flags, idby, handler)

extern struct cmd __start___cmd;
extern struct cmd __stop___cmd;

Я попытался выполнить поиск в Google, но смог понять только то, что «__start___cmd» и «__stop___cmd» генерируются компоновщиком. Есть ли еще какое-нибудь объяснение этого непрофессионала?

Определенный __COMMAND не использовался в кодах, и я понятия не имею, какова его цель. Я могу только предположить, что это связано с определенной структурой extern.

Я загрузил исходный код с https://www.kernel.org/pub/software/network/iw/iw-0.9.1.tar.gz

-1
задан 3 June 2014 в 18:08

1 ответ

То, что интересно в этом макроопределении, является использованием переменные атрибуты :

#define __COMMAND(sect, name, args, nlcmd, flags, idby, handler)    \
static const struct cmd __cmd_ ## handler ## nlcmd ## idby  \
__attribute__((used)) __attribute__((section("__cmd")))     \
= { sect, name, args, nlcmd, flags, idby, handler }

gcc (ld, скорее) генерирует две волшебных переменные: __ start_SECTION и __ stop_SECTION. Они могут использоваться для получения запуска и конечных адресов раздела.

Источник

0
ответ дан 3 June 2014 в 18:08

Другие вопросы по тегам:

Похожие вопросы: