diff --git a/rpython/rlib/rposix.py b/rpython/rlib/rposix.py
index f35e2b7..6aad4b8 100644
--- a/rpython/rlib/rposix.py
+++ b/rpython/rlib/rposix.py
@@ -1778,9 +1778,9 @@ def uname():
         lltype.free(l_utsbuf, flavor='raw')
 
 # These are actually macros on some/most systems
-c_makedev = external('makedev', [rffi.INT, rffi.INT], rffi.INT)
-c_major = external('major', [rffi.INT], rffi.INT)
-c_minor = external('minor', [rffi.INT], rffi.INT)
+c_makedev = external('makedev', [rffi.INT, rffi.INT], rffi.INT, macro=_MACRO_ON_POSIX)
+c_major = external('major', [rffi.INT], rffi.INT, macro=_MACRO_ON_POSIX)
+c_minor = external('minor', [rffi.INT], rffi.INT, macro=_MACRO_ON_POSIX)
 
 @replace_os_function('makedev')
 @jit.dont_look_inside
diff --git a/rpython/rlib/test/test_rposix.py b/rpython/rlib/test/test_rposix.py
index b3bc6ed..4edfcaa 100644
--- a/rpython/rlib/test/test_rposix.py
+++ b/rpython/rlib/test/test_rposix.py
@@ -281,6 +281,10 @@ class TestPosixFunction:
     def test_isatty(self):
         assert rposix.isatty(-1) is False
 
+    def test_makedev(self):
+        dev = rposix.makedev(24, 7)
+        assert rposix.major(dev) == 24
+        assert rposix.minor(dev) == 7
 
 @py.test.mark.skipif("not hasattr(os, 'ttyname')")
 class TestOsExpect(ExpectTest):
