2014-09-26 3 views
0


#define SYSCALL_DEFINEx (х, SNAME, ...)

В ядре 3,14 Linux существует следующий макрос:

#define SYSCALL_DEFINEx(x, sname, ...) 

Он расположен в включать/Linux/syscalls.h ,

Я добавил в исходный код syscall, я скомпилировал его, и я сделал небольшую программу, используя syscall. Кажется, это работает, потому что мой syscall был вызван и напечатал сообщение.

Но я не использовал макрос. Я читал об этом. Я понял, что этот макрос для аргументов. Но я не понимаю, когда мы должны использовать его, потому что я сделал «grep», и кажется, что большинство системных вызовов, которые принимают параметры, не используют его.

Должен ли я использовать его? Зачем?

И у меня такая же проблема для других макросов в том же файле (SYSCALL_METADATA (sname, nb, ...), SYSCALL_TRACE_ENTER_EVENT (sname) и т. Д.). Должен ли я использовать их все, даже если мой syscall работает?

Я боюсь пропустить что-то, если я не использую эти макро и я не могу найти достаточно информации об этом:/

Спасибо!

+0

Попробуйте свою программу в обе стороны. Если результат тот же, то вам не нужно, но если он отличается, тогда изучите разницу. – eyoung100

+0

Я пробовал, но я не понимал, в чем разница. Теперь это более ясно. Благодаря! – Kany

ответ

2

Вы должны прочитать Anatomy of a system call, part1 и part 2.

SYSCALL_DEFINEx макрос не должен использоваться непосредственно, а SYSCALL_DEFINE0, SYSCALL_DEFINE1, SYSCALL_DEFINE2 и т.д. в зависимости от количества параметров ваш системный вызов принимает.

Это обычный способ определения системных вызовов в Linux. Назначение макросов состоит в том, чтобы к этой функции были применены соответствующие прагмы компилятора - стандартные function prologue и calling conventions не применимы к системным вызовам.

В зависимости от конфигурации ядра, а не ваших личных предпочтений, другие части кода, которые вы видите в макросах syscall, включаются или нет. Вы можете видеть, что весь код SYSCALL_METADATA включен в стоимость if CONFIG_FTRACE_SYSCALLS is set.

+0

ОК, что мне нужно, это лучше сейчас! Спасибо! – Kany

Смежные вопросы