diff --git a/libc/include/sys/syscall.h b/libc/include/sys/syscall.h index a44b2e5ba..34a29df3f 100644 --- a/libc/include/sys/syscall.h +++ b/libc/include/sys/syscall.h @@ -37,7 +37,7 @@ __BEGIN_DECLS -int syscall(int number, ...); +long syscall(long number, ...); __END_DECLS diff --git a/tests/unistd_test.cpp b/tests/unistd_test.cpp index 58c9ad94f..2a656574c 100644 --- a/tests/unistd_test.cpp +++ b/tests/unistd_test.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -212,6 +213,14 @@ TEST(unistd, read_EBADF) { ASSERT_EQ(EBADF, errno); } +TEST(unistd, syscall_long) { + // Check that syscall(3) correctly returns long results. + // https://code.google.com/p/android/issues/detail?id=73952 + // We assume that the break is > 4GiB, but this is potentially flaky. + uintptr_t p = reinterpret_cast(sbrk(0)); + ASSERT_EQ(p, static_cast(syscall(__NR_brk, 0))); +} + TEST(unistd, alarm) { ASSERT_EQ(0U, alarm(0)); }