diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Call.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Call.java
index c120b6fc7d1b9c7fdb3f264d916ed611cbbe86e4..9b76276804be7dacb87f9e4d2d16712eea905654 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Call.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Call.java
@@ -79,7 +79,6 @@ class TruffleLLVM_Call implements CallRFFI {
     }
 
     private enum INIT_VAR_FUN {
-        OBJ,
         DOUBLE,
         INT;
 
@@ -100,6 +99,8 @@ class TruffleLLVM_Call implements CallRFFI {
         Node executeNode = Message.createExecute(2).createNode();
         RFFIVariables[] variables = RFFIVariables.initialize();
         for (int i = 0; i < variables.length; i++) {
+            // The TruffleObject instances are not passed down as
+            // they cannot be stored in memory at the moment
             RFFIVariables var = variables[i];
             Object value = var.getValue();
             if (value == null) {
@@ -110,10 +111,6 @@ class TruffleLLVM_Call implements CallRFFI {
                     ForeignAccess.sendExecute(executeNode, INIT_VAR_FUN.DOUBLE.symbolHandle.asTruffleObject(), i, value);
                 } else if (value instanceof Integer) {
                     ForeignAccess.sendExecute(executeNode, INIT_VAR_FUN.INT.symbolHandle.asTruffleObject(), i, value);
-                } else {
-                    // TODO
-                    // ForeignAccess.sendExecute(executeNode, frame,
-                    // INIT_VAR_FUN.OBJ.symbolHandle.asTruffleObject(), i, value);
                 }
             } catch (Throwable t) {
                 throw RInternalError.shouldNotReachHere(t);
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_DLL.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_DLL.java
index 3137ffd0abb16599f00e23643b2709ec1ff5e785..13eeb36eb0f4fcbb7ef9a53834e35b2d4e477ae8 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_DLL.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_DLL.java
@@ -233,7 +233,7 @@ class TruffleLLVM_DLL extends JNI_DLL implements DLLRFFI {
 
     private static class TruffleLLVM_DLSymNode extends JNI_DLSymNode {
         @Override
-        public SymbolHandle execute(Object handle, String symbol) {
+        public SymbolHandle execute(Object handle, String symbol) throws UnsatisfiedLinkError {
             if (handle instanceof LLVM_Handle) {
                 // If the symbol exists it will be in the map
                 ParseStatus parseStatus = getContextState().parseStatusMap.get(symbol);
@@ -247,7 +247,7 @@ class TruffleLLVM_DLL extends JNI_DLL implements DLLRFFI {
                     return new SymbolHandle(symValue);
                 } else {
                     // symbol not found (or not in requested library)
-                    return null;
+                    throw new UnsatisfiedLinkError();
                 }
             } else {
                 return super.execute(handle, symbol);
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_UpCallsRFFIImpl.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_UpCallsRFFIImpl.java
index a772cd62ca08f428c0193d2da389b3f633f744eb..ba772aadafd1ae5e92c821eaa469420bf0f711e6 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_UpCallsRFFIImpl.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_UpCallsRFFIImpl.java
@@ -44,12 +44,13 @@ import com.oracle.truffle.r.runtime.data.RScalar;
 import com.oracle.truffle.r.runtime.data.RTypedValue;
 import com.oracle.truffle.r.runtime.data.RUnboundValue;
 import com.oracle.truffle.r.runtime.ffi.CharSXPWrapper;
+import com.oracle.truffle.r.runtime.ffi.RFFIVariables;
 
 /**
  * (Incomplete) Variant of {@link UpCallsRFFIImpl} for Truffle LLVM.
  *
  */
-public class TruffleLLVM_UpCallsRFFIImpl extends UpCallsRFFIImpl {
+public class TruffleLLVM_UpCallsRFFIImpl extends UpCallsRFFIImpl implements VariableUpCallsRFFI {
     private static TruffleLLVM_UpCallsRFFIImpl singleton;
     private static TruffleObject singletonTruffleObject;
 
@@ -124,14 +125,6 @@ public class TruffleLLVM_UpCallsRFFIImpl extends UpCallsRFFIImpl {
         }
     }
 
-    public Object R_NilValue() {
-        return RNull.instance;
-    }
-
-    public Object R_UnboundValue() {
-        return RUnboundValue.instance;
-    }
-
     public Object bytesToNativeCharArray(byte[] bytes) {
         return new NativeCharArray(bytes);
     }
@@ -147,4 +140,180 @@ public class TruffleLLVM_UpCallsRFFIImpl extends UpCallsRFFIImpl {
             throw RInternalError.shouldNotReachHere();
         }
     }
+
+    @Override
+    public Object R_NilValue() {
+        return RNull.instance;
+    }
+
+    @Override
+    public Object R_UnboundValue() {
+        return RUnboundValue.instance;
+    }
+
+    @Override
+    public Object R_Srcref() {
+        return RFFIVariables.R_Srcref.getValue();
+    }
+
+    @Override
+    public Object R_MissingArg() {
+        return RFFIVariables.R_MissingArg.getValue();
+    }
+
+    @Override
+    public Object R_BaseSymbol() {
+        return RFFIVariables.R_BaseSymbol.getValue();
+    }
+
+    @Override
+    public Object R_BraceSymbol() {
+        return RFFIVariables.R_BraceSymbol.getValue();
+    }
+
+    @Override
+    public Object R_Bracket2Symbol() {
+        return RFFIVariables.R_Bracket2Symbol.getValue();
+    }
+
+    @Override
+    public Object R_BracketSymbol() {
+        return RFFIVariables.R_BracketSymbol.getValue();
+    }
+
+    @Override
+    public Object R_ClassSymbol() {
+        return RFFIVariables.R_ClassSymbol.getValue();
+    }
+
+    @Override
+    public Object R_DeviceSymbol() {
+        return RFFIVariables.R_DeviceSymbol.getValue();
+    }
+
+    @Override
+    public Object R_DimNamesSymbol() {
+        return RFFIVariables.R_DimNamesSymbol.getValue();
+    }
+
+    @Override
+    public Object R_DimSymbol() {
+        return RFFIVariables.R_DimSymbol.getValue();
+    }
+
+    @Override
+    public Object R_DollarSymbol() {
+        return RFFIVariables.R_DollarSymbol.getValue();
+    }
+
+    @Override
+    public Object R_DotsSymbol() {
+        return RFFIVariables.R_DotsSymbol.getValue();
+    }
+
+    @Override
+    public Object R_DropSymbol() {
+        return RFFIVariables.R_DropSymbol.getValue();
+    }
+
+    @Override
+    public Object R_LastvalueSymbol() {
+        return RFFIVariables.R_LastvalueSymbol.getValue();
+    }
+
+    @Override
+    public Object R_LevelsSymbol() {
+        return RFFIVariables.R_LevelsSymbol.getValue();
+    }
+
+    @Override
+    public Object R_ModeSymbol() {
+        return RFFIVariables.R_ModeSymbol.getValue();
+    }
+
+    @Override
+    public Object R_NaRmSymbol() {
+        return RFFIVariables.R_NaRmSymbol.getValue();
+    }
+
+    @Override
+    public Object R_NameSymbol() {
+        return RFFIVariables.R_NameSymbol.getValue();
+    }
+
+    @Override
+    public Object R_NamesSymbol() {
+        return RFFIVariables.R_NamesSymbol.getValue();
+    }
+
+    @Override
+    public Object R_NamespaceEnvSymbol() {
+        return RFFIVariables.R_NamespaceEnvSymbol.getValue();
+    }
+
+    @Override
+    public Object R_PackageSymbol() {
+        return RFFIVariables.R_PackageSymbol.getValue();
+    }
+
+    @Override
+    public Object R_QuoteSymbol() {
+        return RFFIVariables.R_QuoteSymbol.getValue();
+    }
+
+    @Override
+    public Object R_RowNamesSymbol() {
+        return RFFIVariables.R_RowNamesSymbol.getValue();
+    }
+
+    @Override
+    public Object R_SeedsSymbol() {
+        return RFFIVariables.R_SeedsSymbol.getValue();
+    }
+
+    @Override
+    public Object R_SourceSymbol() {
+        return RFFIVariables.R_SourceSymbol.getValue();
+    }
+
+    @Override
+    public Object R_TspSymbol() {
+        return RFFIVariables.R_TspSymbol.getValue();
+    }
+
+    @Override
+    public Object R_dot_defined() {
+        return RFFIVariables.R_dot_defined.getValue();
+    }
+
+    @Override
+    public Object R_dot_Method() {
+        return RFFIVariables.R_dot_Method.getValue();
+    }
+
+    @Override
+    public Object R_dot_target() {
+        return RFFIVariables.R_dot_target.getValue();
+    }
+
+    @Override
+    public Object R_NaString() {
+        return RFFIVariables.R_NaString.getValue();
+    }
+
+    @Override
+    public Object R_BlankString() {
+        return RFFIVariables.R_BlankString.getValue();
+    }
+
+    @Override
+    public Object R_BlankScalarString() {
+        return RFFIVariables.R_BlankScalarString.getValue();
+    }
+
+    @Override
+    public Object R_EmptyEnv() {
+        return RFFIVariables.R_EmptyEnv.getValue();
+    }
+
 }
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/VariableUpCallsRFFI.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/VariableUpCallsRFFI.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1749e8e99b73274a59308a74f546a8a9310f371
--- /dev/null
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/VariableUpCallsRFFI.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.truffle.r.engine.interop.ffi.llvm;
+
+import com.oracle.truffle.api.interop.TruffleObject;
+
+/**
+ * This exists because {@link TruffleObject} instances cannot currently be stored in memory, so
+ * upcall to get the values.
+ *
+ * TODO Some of these, e.g. {@link #R_NilValue}, are performance sensitive, but most are not. So we
+ * could collapse those into a single upcall that returned all the values in one go and extract the
+ * value with another upcall.
+ */
+public interface VariableUpCallsRFFI {
+    // Checkstyle: stop method name check
+
+    Object R_EmptyEnv();
+
+    Object R_NilValue();
+
+    Object R_UnboundValue();
+
+    Object R_Srcref();
+
+    Object R_MissingArg();
+
+    Object R_BaseSymbol();
+
+    Object R_BraceSymbol();
+
+    Object R_Bracket2Symbol();
+
+    Object R_BracketSymbol();
+
+    Object R_ClassSymbol();
+
+    Object R_DeviceSymbol();
+
+    Object R_DimNamesSymbol();
+
+    Object R_DimSymbol();
+
+    Object R_DollarSymbol();
+
+    Object R_DotsSymbol();
+
+    Object R_DropSymbol();
+
+    Object R_LastvalueSymbol();
+
+    Object R_LevelsSymbol();
+
+    Object R_ModeSymbol();
+
+    Object R_NaRmSymbol();
+
+    Object R_NameSymbol();
+
+    Object R_NamesSymbol();
+
+    Object R_NamespaceEnvSymbol();
+
+    Object R_PackageSymbol();
+
+    Object R_QuoteSymbol();
+
+    Object R_RowNamesSymbol();
+
+    Object R_SeedsSymbol();
+
+    Object R_SourceSymbol();
+
+    Object R_TspSymbol();
+
+    Object R_dot_defined();
+
+    Object R_dot_Method();
+
+    Object R_dot_target();
+
+    Object R_NaString();
+
+    Object R_BlankString();
+
+    Object R_BlankScalarString();
+
+}
diff --git a/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.c b/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.c
index 296aa073f59ca463fe1faf04783c74b201b440e3..f41cc549341b79624a2dcb02fff13a97918baef8 100644
--- a/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.c
+++ b/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.c
@@ -21,32 +21,39 @@
  * questions.
  */
 #include <rffiutils.h>
-#include <variable_defs.h>
+#include <variables.h>
+
+// Arith.h
+double R_NaN;		/* IEEE NaN */
+double R_PosInf;	/* IEEE Inf */
+double R_NegInf;	/* IEEE -Inf */
+double R_NaReal;	/* NA_REAL: IEEE */
+int R_NaInt;	/* NA_INTEGER:= INT_MIN currently */
 
 // R_GlobalEnv et al are not a variables in FASTR as they are RContext specific
-SEXP FASTR_GlobalEnv() {
+SEXP FASTR_R_GlobalEnv() {
 	IMPORT_CALLHELPER();
 	return truffle_invoke(obj, "R_GlobalEnv");
 }
 
-SEXP FASTR_BaseEnv() {
+SEXP FASTR_R_BaseEnv() {
 	IMPORT_CALLHELPER();
 	return truffle_invoke(obj, "R_BaseEnv");
 }
 
-SEXP FASTR_BaseNamespace() {
+SEXP FASTR_R_BaseNamespace() {
 	IMPORT_CALLHELPER();
 	return truffle_invoke(obj, "R_BaseNamespace");
 }
 
-SEXP FASTR_NamespaceRegistry() {
+SEXP FASTR_R_NamespaceRegistry() {
 	IMPORT_CALLHELPER();
 	return truffle_invoke(obj, "R_NamespaceRegistry");
 }
 
-Rboolean FASTR_IsInteractive() {
+Rboolean FASTR_R_Interactive() {
 	IMPORT_CALLHELPER();
-	return (Rboolean) truffle_invoke_i(obj, "isInteractive");
+	return (Rboolean) truffle_invoke_i(obj, "R_Interactive");
 }
 
 char *FASTR_R_Home() {
@@ -54,6 +61,8 @@ char *FASTR_R_Home() {
 	return (char *) truffle_invoke(obj, "R_Home");
 }
 
+// Callbacks because cannot store TruffleObjects in memory (currently)
+
 SEXP FASTR_R_NilValue() {
 	IMPORT_CALLHELPER();
 	return truffle_invoke(obj, "R_NilValue");
@@ -65,53 +74,167 @@ SEXP FASTR_R_UnboundValue() {
 	return truffle_invoke(obj, "R_UnboundValue");
 }
 
-void Call_initvar_obj(int index, void* value) {
-	/*
-	switch (index) {
-    case R_Home_x: R_Home = (char *) value; break;
-    case R_TempDir_x: R_TempDir = value; break;
-    case R_NilValue_x: R_NilValue = value; break;
-    case R_UnboundValue_x: R_UnboundValue = value; break;
-    case R_MissingArg_x: R_MissingArg = value; break;
-    case R_Srcref_x: R_Srcref = value; break;
-    case R_Bracket2Symbol_x: R_Bracket2Symbol = value; break;
-    case R_BracketSymbol_x: R_BracketSymbol = value; break;
-    case R_BraceSymbol_x: R_BraceSymbol = value; break;
-    case R_ClassSymbol_x: R_ClassSymbol = value; break;
-    case R_DeviceSymbol_x: R_DeviceSymbol = value; break;
-    case R_DevicesSymbol_x: R_DevicesSymbol = value; break;
-    case R_DimNamesSymbol_x: R_DimNamesSymbol = value; break;
-    case R_DimSymbol_x: R_DimSymbol = value; break;
-    case R_DollarSymbol_x: R_DollarSymbol = value; break;
-    case R_DotsSymbol_x: R_DotsSymbol = value; break;
-    case R_DropSymbol_x: R_DropSymbol = value; break;
-    case R_LastvalueSymbol_x: R_LastvalueSymbol = value; break;
-    case R_LevelsSymbol_x: R_LevelsSymbol = value; break;
-    case R_ModeSymbol_x: R_ModeSymbol = value; break;
-    case R_NameSymbol_x: R_NameSymbol = value; break;
-    case R_NamesSymbol_x: R_NamesSymbol = value; break;
-    case R_NaRmSymbol_x: R_NaRmSymbol = value; break;
-    case R_PackageSymbol_x: R_PackageSymbol = value; break;
-    case R_QuoteSymbol_x: R_QuoteSymbol = value; break;
-    case R_RowNamesSymbol_x: R_RowNamesSymbol = value; break;
-    case R_SeedsSymbol_x: R_SeedsSymbol = value; break;
-    case R_SourceSymbol_x: R_SourceSymbol = value; break;
-    case R_TspSymbol_x: R_TspSymbol = value; break;
-    case R_dot_defined_x: R_dot_defined = value; break;
-    case R_dot_Method_x: R_dot_Method = value; break;
-    case R_dot_target_x: R_dot_target = value; break;
-    case R_SrcrefSymbol_x: R_SrcrefSymbol = value; break;
-    case R_SrcfileSymbol_x: R_SrcfileSymbol = value; break;
-    case R_NaString_x: R_NaString = value; break;
-    case R_NaInt_x: R_NaInt = (int) value; break;
-    case R_BlankString_x: R_BlankString = value; break;
-    case R_TrueValue_x: R_TrueValue = value; break;
-    case R_FalseValue_x: R_FalseValue = value; break;
-    case R_LogicalNAValue_x: R_LogicalNAValue = value; break;
-	}
-	*/
+SEXP FASTR_R_EmptyEnv() {
+	IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_EmptyEnv");
+}
+
+SEXP FASTR_R_MissingArg() {
+    IMPORT_CALLHELPER();
+    return Truffle_Invoke(Obj, "R_MissingArg");
+}
+
+SEXP FASTR_R_BaseSymbol() {
+    IMPORT_CALLHELPER();
+    Return Truffle_Invoke(Obj, "R_BaseSymbol");
+}
+
+SEXP FASTR_R_BraceSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_BraceSymbol");
+}
+
+SEXP FASTR_R_Bracket2Symbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_Bracket2Symbol");
+}
+
+SEXP FASTR_R_BracketSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_BracketSymbol");
+}
+
+SEXP FASTR_R_ClassSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_ClassSymbol");
+}
+
+SEXP FASTR_R_DeviceSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_DeviceSymbol");
+}
+
+SEXP FASTR_R_DimNamesSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_DimNamesSymbol");
+}
+
+SEXP FASTR_R_DimSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_DimSymbol");
+}
+
+SEXP FASTR_R_DollarSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_DollarSymbol");
+}
+
+SEXP FASTR_R_DotsSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_DotsSymbol");
+}
+
+SEXP FASTR_R_DropSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_DropSymbol");
+}
+
+SEXP FASTR_R_LastvalueSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_LastvalueSymbol");
+}
+
+SEXP FASTR_R_LevelsSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_LevelsSymbol");
+}
+
+SEXP FASTR_R_ModeSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_ModeSymbol");
+}
+
+SEXP FASTR_R_NaRmSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_NaRmSymbol");
+}
+
+SEXP FASTR_R_NameSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_NameSymbol");
+}
+
+SEXP FASTR_R_NamesSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_NamesSymbol");
+}
+
+SEXP FASTR_R_NamespaceEnvSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_NamespaceEnvSymbol");
+}
+
+SEXP FASTR_R_PackageSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_PackageSymbol");
+}
+
+SEXP FASTR_R_QuoteSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_QuoteSymbol");
+}
+
+SEXP FASTR_R_RowNamesSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_RowNamesSymbol");
+}
+
+SEXP FASTR_R_SeedsSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_SeedsSymbol");
 }
 
+SEXP FASTR_R_SourceSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_SourceSymbol");
+}
+
+SEXP FASTR_R_TspSymbol() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_TspSymbol");
+}
+
+SEXP FASTR_R_dot_defined() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_dot_defined");
+}
+
+SEXP FASTR_R_dot_Method() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_dot_Method");
+}
+
+SEXP FASTR_R_dot_target() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_dot_target");
+}
+
+SEXP FASTR_R_NaString() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_NaString");
+}
+
+SEXP FASTR_R_BlankString() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_BlankString");
+}
+
+SEXP FASTR_R_BlankScalarString() {
+    IMPORT_CALLHELPER();
+    return truffle_invoke(obj, "R_BlankScalarString");
+}
+
+
 void Call_initvar_double(int index, double value) {
 	switch (index) {
     case R_NaN_x: R_NaN = value; break;
diff --git a/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.h b/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.h
new file mode 100644
index 0000000000000000000000000000000000000000..3a245b1fa929a70ebea8719ae90c36704da0bc17
--- /dev/null
+++ b/com.oracle.truffle.r.native/fficall/src/truffle_llvm/variables.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+#define R_Home_x 0
+#define R_TempDir_x 1
+#define R_NilValue_x 2
+#define R_UnboundValue_x 3
+#define R_MissingArg_x 4
+#define R_GlobalEnv_x 5
+#define R_EmptyEnv_x 6
+#define R_BaseEnv_x 7
+#define R_BaseNamespace_x 8
+#define R_NamespaceRegistry_x 9
+#define R_Srcref_x 10
+#define R_Bracket2Symbol_x 11
+#define R_BracketSymbol_x 12
+#define R_BraceSymbol_x 13
+#define R_ClassSymbol_x 14
+#define R_DeviceSymbol_x 15
+#define R_DevicesSymbol_x 16
+#define R_DimNamesSymbol_x 17
+#define R_DimSymbol_x 18
+#define R_DollarSymbol_x 19
+#define R_DotsSymbol_x 20
+#define R_DropSymbol_x 21
+#define R_LastvalueSymbol_x 22
+#define R_LevelsSymbol_x 23
+#define R_ModeSymbol_x 24
+#define R_NameSymbol_x 25
+#define R_NamesSymbol_x 26
+#define R_NaRmSymbol_x 27
+#define R_PackageSymbol_x 28
+#define R_QuoteSymbol_x 29
+#define R_RowNamesSymbol_x 30
+#define R_SeedsSymbol_x 31
+#define R_SourceSymbol_x 32
+#define R_TspSymbol_x 33
+#define R_dot_defined_x 34
+#define R_dot_Method_x 35
+#define R_dot_target_x 36
+#define R_SrcrefSymbol_x 37
+#define R_SrcfileSymbol_x 38
+#define R_NaString_x 39
+#define R_NaN_x 40
+#define R_PosInf_x 41
+#define R_NegInf_x 42
+#define R_NaReal_x 43
+#define R_NaInt_x 44
+#define R_BlankString_x 45
+#define R_BlankScalarString_x 46
+#define R_TrueValue_x 47
+#define R_FalseValue_x 48
+#define R_LogicalNAValue_x 49
+#define R_BaseSymbol_x 50
+#define R_NamespaceEnvSymbol_x 51
+#define R_RestartToken_x 52