Сбой sys_getppid с SIGSYS на x86 Android при вызове с int $ 0x80 - PullRequest
0 голосов
/ 06 июня 2018

Код ниже возвращает правильное значение pid и затем вылетает.Я не понимаю причину.Платформа - эмулятор андроида x86 CPU (Nexus 5X).

long pid;
__asm__ __volatile__ ("int $0x80" : "=a"(pid) : "0"(__NR_getpid));
printf("Pid : %d", pid);

Вот вывод:

D/APP: Pid:8261
A/libc: Fatal signal 31 (SIGSYS), code 1 in tid 8261 (.APP), pid 8261 (.APP)
Application terminated.

Кто-нибудь может дать идею?

Изменить: Я попытался заменить "0"(__NR_getpid) на "a"(__NR_getpid) и получил тот же результат.Я также вызывал тот же системный вызов с __NR_getppid, когда я удалил второй вызов, я увидел, что он больше не падает.

Платформа: Android Studio - NDK Clang x86 (i386)

Тестовый код:

#include <syscall.h>
#include <stdbool.h>
#include <stdint.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>

static inline long _syscall0(long n)
{
    long __ret;
    __asm__ __volatile__ ("int $0x80" : "=a"(__ret) : "0"(n));
    return __ret;
}

int main(void)
{
    int pid = (int)_syscall0(__NR_getpid);
    printf("Pid:%d", pid); 
    int ppid = (int)_syscall0(__NR_getppid); // <--- crashing here
    printf("PPid:%d", ppid); 
    return 0;
}

Вывод сборки компилятора: https://godbolt.org/g/ibmxTb

Edit2: Попытка заменить ppid на pid, так что он стал 2 pids, но все еще падал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...