Как я могу получить (void *) 0x12345678 аргумент? - PullRequest
0 голосов
/ 10 апреля 2019

В test.c (уровень пользователя)

tid = thread_create(thread, (void *)0x12345678, stack);

Я хочу получить аргументы вышеупомянутой функции thread_create. Итак, я написал код в sysproc.c (уровень ядра)

if(argptr(0, (void*)&function, sizeof(*function)) ||
   argptr(1, (void*)&arg, sizeof(*arg)) ||
   argptr(2, (void*)&stack, sizeof(*stack)))
    return -1;

но только вторая строка вызвала ошибку. Как я могу изменить код этой части ??

argptr (1, (void *) & arg, sizeof (* arg))

Я работаю над ОС xv6, и первоначально определенная функция -

int thread_create(void *(*function)(void*), void *arg, void *stack);

и test.c не могут быть изменены.

1 Ответ

0 голосов
/ 11 апреля 2019

Мы не видим объявление arg, но кажется, что оно void* arg, поэтому ваш код должен быть:

argptr(1, (void*)&arg, sizeof(arg))

Я не адвокат по языкам, поэтому я не знаю, является ли sizeof(void) действительным со стандартной языковой точки зрения, но большинство компиляторов C, которые я использовал, дают 1 за это. Компиляторы C ++ обычно сообщают об ошибке. В любом случае, это не то, что вы хотите здесь, вы хотите sizeof(void*)

...