diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index 42cbaf16fa6..eb09e070db4 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -7706,7 +7706,7 @@ fn find_main_fn(&@crate_ctxt cx) -> ValueRef {
 
 fn trans_main_fn(@local_ctxt cx, ValueRef llcrate, ValueRef crate_map) {
     auto T_main_args = [T_int(), T_int()];
-    auto T_rust_start_args = [T_int(), T_int(), T_int(), T_int(), T_int()];
+    auto T_rust_start_args = [T_int(), T_int(), T_int(), T_int()];
 
     auto main_name;
     if (str::eq(std::os::target_os(), "win32")) {
@@ -7718,7 +7718,7 @@ fn trans_main_fn(@local_ctxt cx, ValueRef llcrate, ValueRef crate_map) {
     auto llmain =
         decl_cdecl_fn(cx.ccx.llmod, main_name, T_fn(T_main_args, T_int()));
 
-    auto llrust_start = decl_cdecl_fn(cx.ccx.llmod, "rust_start",
+    auto llrust_start = decl_cdecl_fn(cx.ccx.llmod, "new_rust_start",
                                       T_fn(T_rust_start_args, T_int()));
 
     auto llargc = llvm::LLVMGetParam(llmain, 0u);
@@ -7737,8 +7737,7 @@ fn trans_main_fn(@local_ctxt cx, ValueRef llcrate, ValueRef crate_map) {
         llvm::LLVMAppendBasicBlock(llmain, str::buf(""));
     auto b = new_builder(llbb);
 
-    auto start_args = [p2i(llrust_main), p2i(llcrate), llargc, llargv,
-                          p2i(crate_map)];
+    auto start_args = [p2i(llrust_main), llargc, llargv, p2i(crate_map)];
 
     b.Ret(b.Call(llrust_start, start_args));
 }
diff --git a/src/rt/rust.cpp b/src/rt/rust.cpp
index 245b068df63..0194760c6fd 100644
--- a/src/rt/rust.cpp
+++ b/src/rt/rust.cpp
@@ -77,8 +77,7 @@ command_line_args : public dom_owned<command_line_args>
  */
 
 extern "C" CDECL int
-rust_start(uintptr_t main_fn, rust_crate const *crate, int argc,
-           char **argv, void* crate_map) {
+new_rust_start(uintptr_t main_fn, int argc, char **argv, void* crate_map) {
 
     update_log_settings(crate_map, getenv("RUST_LOG"));
     rust_srv *srv = new rust_srv();
@@ -118,6 +117,12 @@ rust_start(uintptr_t main_fn, rust_crate const *crate, int argc,
     return ret;
 }
 
+extern "C" CDECL int
+rust_start(uintptr_t main_fn, rust_crate const *crate, int argc,
+           char **argv, void* crate_map) {
+    return new_rust_start(main_fn, argc, argv, crate_map);
+}
+
 //
 // Local Variables:
 // mode: C++