Код ниже возвращает правильное значение 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, но все еще падал.