Расположение определения open () в xv6 - PullRequest
2 голосов
/ 19 июня 2019

У меня есть задание, которое заставило меня создать собственный системный вызов.Для этого я бы хотел посмотреть определение системного вызова open.Под этим я подразумеваю, что хотел бы увидеть, как определяется фактическое открытие (const char *, const int), а не sys_open (поскольку я знаю, где находится исходный код, и могу его прочитать).

В обоихДокументация и файлы xv6 в xv6-public, я не могу найти ссылки на прототип определения.Теория моего друга и меня заключается в том, что это определено в каком-то файле asm или в каком-то файле .o.Кто-нибудь знает, где находится исходный код?Я был бы очень признателен за это.

Пробовал ctrl-f для открытия в исходной документации и пробовал grep поверх всех файлов в xv6-public.Ничего не нашел.

1 Ответ

0 голосов
/ 02 июля 2019

Ну

open объявлено в user.h .

open определяется в usys.S :

Посмотрим:

SYSCALL(open)

Будет преобразован в

  .globl open; 
  open: 
    movl $SYS_ ## open, %eax; 
    int $T_SYSCALL; 
    ret

Что случилось?

Когда вызывается функция open

  • регистр %eax установлен на SYS_open (это значение равно 15 (см. syscall.h ), а SYS_open определено в sysfile.c
  • прерывание T_SYSCALL (64 см. traps.h ) повышено.
  • после возврата системного вызова open также возвращает.
...