diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/HiddenInternalFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/HiddenInternalFunctions.java
index 3299dcf98d2c51485f219fe48b74c2b360606785..5e9a45debc362a98a699921b22943f2ad0b4c5ef 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/HiddenInternalFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/HiddenInternalFunctions.java
@@ -208,4 +208,21 @@ public class HiddenInternalFunctions {
         }
     }
 
+    @RBuiltin(name = "getRegisteredRoutines", kind = INTERNAL, parameterNames = "info")
+    public abstract static class GetRegisteredRoutines extends RBuiltinNode {
+        private static final RStringVector NAMES = RDataFactory.createStringVector(new String[]{".C", ".Call", ".Fortran", ".External"}, RDataFactory.COMPLETE_VECTOR);
+        private static final RList EMPTY = RDataFactory.createList();
+
+        @Specialization
+        protected RList getRegisteredRoutines(Object info) {
+            Object[] data;
+            if (info == RNull.instance) {
+                data = new Object[]{EMPTY, EMPTY, EMPTY, EMPTY};
+                return RDataFactory.createList(data, NAMES);
+            } else {
+                throw RError.nyi(getEncapsulatingSourceSection(), " getRegisteredRoutines with non-null info");
+            }
+        }
+    }
+
 }