diff --git a/OWNERS b/OWNERS
deleted file mode 100644
index ac015a5..0000000
--- a/OWNERS
+++ /dev/null
@@ -1,8 +0,0 @@
-dschuff@chromium.org
-eliben@chromium.org
-jfb@chromium.org
-jvoung@chromium.org
-kschimpf@chromium.org
-mseaborn@chromium.org
-sehr@chromium.org
-stichnot@chromium.org
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
deleted file mode 100644
index d81168e..0000000
--- a/PRESUBMIT.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright (c) 2012 The Native Client Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Documentation on PRESUBMIT.py can be found at:
-# http://www.chromium.org/developers/how-tos/depottools/presubmit-scripts
-
-EXCLUDE_PROJECT_CHECKS_DIRS = [ '.' ]
-
-import subprocess
-def CheckGitBranch():
-  p = subprocess.Popen("git branch -vv", shell=True,
-                       stdout=subprocess.PIPE)
-  output, _ = p.communicate()
-
-  lines = output.split('\n')
-  for line in lines:
-    # output format for checked-out branch should be
-    # * branchname hash [TrackedBranchName ...
-    toks = line.split()
-    if '*' not in toks[0]:
-      continue
-    if not 'origin/master' in toks[3]:
-      warning = 'Warning: your current branch:\n' + line
-      warning += '\nis not tracking origin/master. git cl push may silently '
-      warning += 'fail to push your change. To fix this, do\n'
-      warning += 'git branch -u origin/master'
-      return warning
-    return None
-  print 'Warning: presubmit check could not determine local git branch'
-  return None
-
-def _CommonChecks(input_api, output_api):
-  """Checks for both upload and commit."""
-  results = []
-  results.extend(input_api.canned_checks.PanProjectChecks(
-      input_api, output_api, project_name='Native Client',
-      excluded_paths=tuple(EXCLUDE_PROJECT_CHECKS_DIRS)))
-  branch_warning = CheckGitBranch()
-  if branch_warning:
-    results.append(output_api.PresubmitPromptWarning(branch_warning))
-  return results
-
-def CheckChangeOnUpload(input_api, output_api):
-  """Verifies all changes in all files.
-  Args:
-    input_api: the limited set of input modules allowed in presubmit.
-    output_api: the limited set of output modules allowed in presubmit.
-  """
-  report = []
-  report.extend(_CommonChecks(input_api, output_api))
-  return report
-
-def CheckChangeOnCommit(input_api, output_api):
-  """Verifies all changes in all files and verifies that the
-  tree is open and can accept a commit.
-  Args:
-    input_api: the limited set of input modules allowed in presubmit.
-    output_api: the limited set of output modules allowed in presubmit.
-  """
-  report = []
-  report.extend(CheckChangeOnUpload(input_api, output_api))
-  return report
-
-def GetPreferredTrySlaves(project, change):
-  return []
diff --git a/codereview.settings b/codereview.settings
deleted file mode 100644
index fae9103..0000000
--- a/codereview.settings
+++ /dev/null
@@ -1,12 +0,0 @@
-# This file is used by gcl to get repository specific information.
-CODE_REVIEW_SERVER: codereview.chromium.org
-CC_LIST: native-client-reviews@googlegroups.com
-VIEW_VC:
-https://gerrit.chromium.org/gerrit/gitweb?p=native_client/pnacl-clang.git;a=commit;h=
-STATUS: http://nativeclient-status.appspot.com/status
-TRY_ON_UPLOAD: False
-TRYSERVER_PROJECT: nacl
-TRYSERVER_SVN_URL: svn://svn.chromium.org/chrome-try/try-nacl
-PUSH_URL_CONFIG: url.ssh://gerrit.chromium.org.pushinsteadof
-ORIGIN_URL_CONFIG: http://git.chromium.org
-
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp
index eb71f24..865daf4 100644
--- a/lib/Basic/Targets.cpp
+++ b/lib/Basic/Targets.cpp
@@ -764,7 +764,6 @@
     if (Triple.getArch() == llvm::Triple::arm) {
       // Handled in ARM's setABI().
     } else if (Triple.getArch() == llvm::Triple::x86) {
-      // @LOCALMOD MERGETODO: upstream this if it actually works.
       this->DescriptionString = "e-m:e-p:32:32-i64:64-n8:16:32-S128";
     } else if (Triple.getArch() == llvm::Triple::x86_64) {
       this->DescriptionString = "e-m:e-p:32:32-i64:64-n8:16:32:64-S128";
@@ -772,7 +771,7 @@
       // Handled on mips' setDescriptionString.
     } else {
       assert(Triple.getArch() == llvm::Triple::le32);
-      this->DescriptionString = "e-p:32:32-i64:64-n32";
+      this->DescriptionString = "e-p:32:32-i64:64";
     }
   }
 };
diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp
index b4deb20..ebd1776 100644
--- a/lib/CodeGen/CGDecl.cpp
+++ b/lib/CodeGen/CGDecl.cpp
@@ -211,7 +211,8 @@
   GV->setAlignment(getContext().getDeclAlign(&D).getQuantity());
   setGlobalVisibility(GV, &D);
 
-  maybeSetTrivialComdat(*GV);
+  if (supportsCOMDAT() && GV->isWeakForLinker())
+    GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
 
   if (D.getTLSKind())
     setTLSMode(GV, D);
diff --git a/lib/CodeGen/CGVTT.cpp b/lib/CodeGen/CGVTT.cpp
index aca9e7a..e3df5a4 100644
--- a/lib/CodeGen/CGVTT.cpp
+++ b/lib/CodeGen/CGVTT.cpp
@@ -94,7 +94,8 @@
   // Set the correct linkage.
   VTT->setLinkage(Linkage);
 
-  CGM.maybeSetTrivialComdat(*VTT);
+  if (CGM.supportsCOMDAT() && VTT->isWeakForLinker())
+    VTT->setComdat(CGM.getModule().getOrInsertComdat(VTT->getName()));
 
   // Set the right visibility.
   CGM.setGlobalVisibility(VTT, RD);
diff --git a/lib/CodeGen/CGVTables.cpp b/lib/CodeGen/CGVTables.cpp
index 7d22d6c..3f5c7a4 100644
--- a/lib/CodeGen/CGVTables.cpp
+++ b/lib/CodeGen/CGVTables.cpp
@@ -464,6 +464,7 @@
     // Normal thunk body generation.
     CodeGenFunction(CGM).generateThunk(ThunkFn, FnInfo, GD, Thunk);
   }
+
   setThunkProperties(CGM, Thunk, ThunkFn, ForVTable, GD);
 }
 
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index 64ed0fb..0250aab 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -1293,7 +1293,8 @@
   auto *GV = new llvm::GlobalVariable(
       getModule(), Init->getType(),
       /*isConstant=*/true, llvm::GlobalValue::LinkOnceODRLinkage, Init, Name);
-  maybeSetTrivialComdat(*GV);
+  if (supportsCOMDAT())
+    GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
   return GV;
 }
 
@@ -1844,7 +1845,9 @@
     OldGV->eraseFromParent();
   }
 
-  maybeSetTrivialComdat(*GV);
+  if (supportsCOMDAT() && GV->isWeakForLinker() &&
+      !GV->hasAvailableExternallyLinkage())
+    GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
 
   return GV;
 }
@@ -1977,14 +1980,6 @@
   GO.setComdat(TheModule.getOrInsertComdat(GO.getName()));
 }
 
-void CodeGenModule::maybeSetTrivialComdat(llvm::GlobalObject &GO) {
-  if (!supportsCOMDAT())
-    return;
-  if (GO.isWeakForLinker() && !GO.hasAvailableExternallyLinkage()) {
-    GO.setComdat(getModule().getOrInsertComdat(GO.getName()));
-  }
-}
-
 void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
   llvm::Constant *Init = nullptr;
   QualType ASTTy = D->getType();
@@ -2919,7 +2914,10 @@
       nullptr, llvm::GlobalVariable::NotThreadLocal, AddrSpace);
   GV->setAlignment(Alignment);
   GV->setUnnamedAddr(true);
-  CGM.maybeSetTrivialComdat(*GV);
+  if (GV->isWeakForLinker()) {
+    assert(CGM.supportsCOMDAT() && "Only COFF uses weak string literals");
+    GV->setComdat(M.getOrInsertComdat(GV->getName()));
+  }
 
   return GV;
 }
@@ -3101,7 +3099,8 @@
   setGlobalVisibility(GV, VD);
   GV->setAlignment(
       getContext().getTypeAlignInChars(MaterializedType).getQuantity());
-  maybeSetTrivialComdat(*GV);
+  if (supportsCOMDAT() && GV->isWeakForLinker())
+    GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
   if (VD->getTLSKind())
     setTLSMode(GV, *VD);
   Slot = GV;
diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h
index 4d20cdf..848188d 100644
--- a/lib/CodeGen/CodeGenModule.h
+++ b/lib/CodeGen/CodeGenModule.h
@@ -618,7 +618,6 @@
   const llvm::Triple &getTriple() const;
   bool supportsCOMDAT() const;
   void maybeSetTrivialComdat(const Decl &D, llvm::GlobalObject &GO);
-  void maybeSetTrivialComdat(llvm::GlobalObject &GO);
 
   CGCXXABI &getCXXABI() const { return *ABI; }
   llvm::LLVMContext &getLLVMContext() { return VMContext; }
diff --git a/lib/CodeGen/ItaniumCXXABI.cpp b/lib/CodeGen/ItaniumCXXABI.cpp
index 2edd10e..fab8c9a 100644
--- a/lib/CodeGen/ItaniumCXXABI.cpp
+++ b/lib/CodeGen/ItaniumCXXABI.cpp
@@ -1358,7 +1358,8 @@
   // Set the correct linkage.
   VTable->setLinkage(Linkage);
 
-  CGM.maybeSetTrivialComdat(*VTable);
+  if (CGM.supportsCOMDAT() && VTable->isWeakForLinker())
+    VTable->setComdat(CGM.getModule().getOrInsertComdat(VTable->getName()));
 
   // Set the right visibility.
   CGM.setGlobalVisibility(VTable, RD);
@@ -1840,8 +1841,8 @@
     if (!D.isLocalVarDecl() && C) {
       guard->setComdat(C);
       CGF.CurFn->setComdat(C);
-    } else {
-      CGM.maybeSetTrivialComdat(*guard);
+    } else if (CGM.supportsCOMDAT() && guard->isWeakForLinker()) {
+      guard->setComdat(CGM.getModule().getOrInsertComdat(guard->getName()));
     }
 
     CGM.setStaticLocalDeclGuardAddress(&D, guard);
@@ -3639,7 +3640,8 @@
     // we don't want it to turn into an exported symbol.
     fn->setLinkage(llvm::Function::LinkOnceODRLinkage);
     fn->setVisibility(llvm::Function::HiddenVisibility);
-    CGM.maybeSetTrivialComdat(*fn);
+    if (CGM.supportsCOMDAT())
+      fn->setComdat(CGM.getModule().getOrInsertComdat(fn->getName()));
 
     // Set up the function.
     llvm::BasicBlock *entry =
diff --git a/lib/CodeGen/TargetInfo.cpp b/lib/CodeGen/TargetInfo.cpp
index ab17466..55d8dee 100644
--- a/lib/CodeGen/TargetInfo.cpp
+++ b/lib/CodeGen/TargetInfo.cpp
@@ -524,9 +524,6 @@
  public:
   PNaClTargetCodeGenInfo(CodeGen::CodeGenTypes &CGT)
     : TargetCodeGenInfo(new PNaClABIInfo(CGT)) {}
-
-  bool addAsmMemoryAroundSyncSynchronize() const { return true; } // @LOCALMOD
-  bool asmMemoryIsFence() const { return true; } // @LOCALMOD
 };
 
 void PNaClABIInfo::computeInfo(CGFunctionInfo &FI) const {
diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
index 9b62fd3..8defd5b 100644
--- a/lib/Driver/ToolChains.cpp
+++ b/lib/Driver/ToolChains.cpp
@@ -2359,7 +2359,7 @@
   }
 
   // Use provided linker, not system linker
-  Linker = GetLinkerPath();
+  Linker = GetProgramPath("ld");
   NaClArmMacrosPath = GetFilePath("nacl-arm-macros.s");
 }
 
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index 7334fdb..ce39b87 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -631,10 +631,6 @@
       }
       break;
 
-    case llvm::Triple::NaCl: // @LOCALMOD
-      FloatABI = "hard";
-      break;
-
     default:
       switch (Triple.getEnvironment()) {
       case llvm::Triple::GNUEABIHF:
@@ -1270,13 +1266,6 @@
     CmdArgs.push_back(Args.MakeArgString("-mips-ssection-threshold=" + v));
     A->claim();
   }
-
-  // @LOCALMOD-BEGIN
-  if (Triple.getOS() == llvm::Triple::NaCl) {
-    CmdArgs.push_back("-mllvm");
-    CmdArgs.push_back("-direct-to-nacl");
-  }
-  // @LOCALMOD-END
 }
 
 /// getPPCTargetCPU - Get the (LLVM) name of the PowerPC cpu we are targeting.
diff --git a/test/CodeGen/NaCl/atomics.c b/test/CodeGen/NaCl/atomics.c
deleted file mode 100644
index 9922e93..0000000
--- a/test/CodeGen/NaCl/atomics.c
+++ /dev/null
@@ -1,64 +0,0 @@
-// Test frontend handling of synchronization builtins which NaCl handles
-// differently.
-// Modified from test/CodeGen/Atomics.c
-// RUN: %clang_cc1 -triple le32-unknown-nacl -emit-llvm %s -o - | FileCheck %s
-
-// CHECK: define void @test_sync_synchronize()
-// CHECK-NEXT: entry:
-void test_sync_synchronize (void)
-{
-  __sync_synchronize ();
-  // CHECK-NEXT: call void asm sideeffect "", "~{memory}"()
-  // CHECK-NEXT: fence seq_cst
-  // CHECK-NEXT: call void asm sideeffect "", "~{memory}"()
-
-  // CHECK-NEXT: ret void
-}
-
-// CHECK: define void @test_asm_memory_1()
-// CHECK-NEXT: entry:
-void test_asm_memory_1 (void)
-{
-  asm ("":::"memory");
-  // CHECK-NEXT: call void asm sideeffect "", "~{memory}"()
-  // CHECK-NEXT: fence seq_cst
-  // CHECK-NEXT: call void asm sideeffect "", "~{memory}"()
-
-  // CHECK-NEXT: ret void
-}
-
-// CHECK: define void @test_asm_memory_2()
-// CHECK-NEXT: entry:
-void test_asm_memory_2 (void)
-{
-  asm volatile ("":::"memory");
-  // CHECK-NEXT: call void asm sideeffect "", "~{memory}"()
-  // CHECK-NEXT: fence seq_cst
-  // CHECK-NEXT: call void asm sideeffect "", "~{memory}"()
-
-  // CHECK-NEXT: ret void
-}
-
-// CHECK: define void @test_asm_memory_3()
-// CHECK-NEXT: entry:
-void test_asm_memory_3 (void)
-{
-  __asm__ ("":::"memory");
-  // CHECK-NEXT: call void asm sideeffect "", "~{memory}"()
-  // CHECK-NEXT: fence seq_cst
-  // CHECK-NEXT: call void asm sideeffect "", "~{memory}"()
-
-  // CHECK-NEXT: ret void
-}
-
-// CHECK: define void @test_asm_memory_4()
-// CHECK-NEXT: entry:
-void test_asm_memory_4 (void)
-{
-  __asm__ __volatile__ ("":::"memory");
-  // CHECK-NEXT: call void asm sideeffect "", "~{memory}"()
-  // CHECK-NEXT: fence seq_cst
-  // CHECK-NEXT: call void asm sideeffect "", "~{memory}"()
-
-  // CHECK-NEXT: ret void
-}
diff --git a/test/CodeGen/target-data.c b/test/CodeGen/target-data.c
index c4ef966..2c5c11a 100644
--- a/test/CodeGen/target-data.c
+++ b/test/CodeGen/target-data.c
@@ -76,7 +76,7 @@
 
 // RUN: %clang_cc1 -triple le32-nacl -o - -emit-llvm %s | \
 // RUN: FileCheck %s -check-prefix=LE32-NACL
-// LE32-NACL: target datalayout = "e-p:32:32-i64:64-n32"
+// LE32-NACL: target datalayout = "e-p:32:32-i64:64"
 
 // RUN: %clang_cc1 -triple asmjs-emscripten -o - -emit-llvm %s | \
 // RUN: FileCheck %s -check-prefix=ASMJS-EMSCRIPTEN
diff --git a/test/CodeGenCXX/thunks.cpp b/test/CodeGenCXX/thunks.cpp
index a4867e4..38afb9d 100644
--- a/test/CodeGenCXX/thunks.cpp
+++ b/test/CodeGenCXX/thunks.cpp
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 %s -triple=x86_64-pc-linux-gnu -munwind-tables -emit-llvm -o - | FileCheck %s
-// RUN: %clang_cc1 %s -triple=x86_64-pc-linux-gnu -munwind-tables -emit-llvm -o - -O1 -disable-llvm-optzns | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKOPT
+// RUN: %clang_cc1 %s -triple=x86_64-pc-linux-gnu -munwind-tables -emit-llvm -o - -O1 -disable-llvm-optzns | FileCheck %s
 
 namespace Test1 {
 
@@ -389,7 +389,4 @@
 // CHECK-LABEL: define linkonce_odr void @_ZN6Test101C3fooEv
 // CHECK-LABEL: define linkonce_odr void @_ZThn8_N6Test101C3fooEv
 
-// CHECKOPT-LABEL: define available_externally void @_ZTv0_n24_N6Test161BIiE1fEv
-// CHECKOPT-NOT: comdat
-
 // CHECK: attributes [[NUW]] = { nounwind uwtable{{.*}} }
diff --git a/test/Driver/nacl-direct.c b/test/Driver/nacl-direct.c
index f71e14f..5fe8576 100644
--- a/test/Driver/nacl-direct.c
+++ b/test/Driver/nacl-direct.c
@@ -9,7 +9,7 @@
 // CHECK-I686: "-target-cpu" "pentium4"
 // CHECK-I686: "-resource-dir" "foo"
 // CHECK-I686: "-internal-isystem" "foo{{/|\\\\}}include"
-// CHECK-I686: "-internal-isystem" "{{.*}}{{/|\\\\}}..{{/|\\\\}}i686-nacl{{/|\\\\}}usr{{/|\\\\}}include"
+// CHECK-I686: "-internal-isystem" "{{.*}}{{/|\\\\}}..{{/|\\\\}}x86_64-nacl{{/|\\\\}}usr{{/|\\\\}}include"
 // CHECK-I686: "-internal-isystem" "{{.*}}{{/|\\\\}}..{{/|\\\\}}x86_64-nacl{{/|\\\\}}include"
 // CHECK-I686: as{{(.exe)?}}" "--32"
 // CHECK-I686: ld{{(.exe)?}}"
@@ -17,7 +17,7 @@
 // CHECK-I686: "-m" "elf_i386_nacl"
 // CHECK-I686: "-static"
 // CHECK-I686: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}x86_64-nacl{{/|\\\\}}lib32"
-// CHECK-I686: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}i686-nacl{{/|\\\\}}usr{{/|\\\\}}lib"
+// CHECK-I686: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}x86_64-nacl{{/|\\\\}}usr{{/|\\\\}}lib32"
 // CHECK-I686: "-Lfoo{{/|\\\\}}lib{{/|\\\\}}i686-nacl"
 // CHECK-I686-NOT: -lpthread
 //
@@ -118,7 +118,7 @@
 // CHECK-I686-CXX: "-resource-dir" "foo"
 // CHECK-I686-CXX: "-internal-isystem" "{{.*}}{{/|\\\\}}..{{/|\\\\}}x86_64-nacl{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
 // CHECK-I686-CXX: "-internal-isystem" "foo{{/|\\\\}}include"
-// CHECK-I686-CXX: "-internal-isystem" "{{.*}}{{/|\\\\}}..{{/|\\\\}}i686-nacl{{/|\\\\}}usr{{/|\\\\}}include"
+// CHECK-I686-CXX: "-internal-isystem" "{{.*}}{{/|\\\\}}..{{/|\\\\}}x86_64-nacl{{/|\\\\}}usr{{/|\\\\}}include"
 // CHECK-I686-CXX: "-internal-isystem" "{{.*}}{{/|\\\\}}..{{/|\\\\}}x86_64-nacl{{/|\\\\}}include"
 // CHECK-I686-CXX: "-lpthread"
 
diff --git a/test/lit.cfg b/test/lit.cfg
index e3d6d43..f78bb87 100644
--- a/test/lit.cfg
+++ b/test/lit.cfg
@@ -14,16 +14,6 @@
 # name: The name of this test suite.
 config.name = 'Clang'
 
-# @LOCALMOD-START
-# Msys tools like make and bash output paths like /c/dir/path. We need Windows
-# drive letters. Makefile.rules has $(ECHOPATH) to try to get Windows paths but
-# it doesn't work with autoconf substitutions like @FOO@=$(path)
-def FixMsysPath(path):
-    if sys.platform == 'win32' and path and path.startswith('/'):
-        return path[1] + ':' + path[2:]
-    return path
-# @LOCALMOD-END
-
 # Tweak PATH for Win32
 if platform.system() == 'Windows':
     # Seek sane tools in directories and set to $PATH.
@@ -65,7 +55,7 @@
 config.test_source_root = os.path.dirname(__file__)
 
 # test_exec_root: The root path where tests should be run.
-clang_obj_root = FixMsysPath(getattr(config, 'clang_obj_root', None))# @LOCALMOD
+clang_obj_root = getattr(config, 'clang_obj_root', None)
 if clang_obj_root is not None:
     config.test_exec_root = os.path.join(clang_obj_root, 'test')
 
@@ -103,10 +93,10 @@
 
 # Tweak the PATH to include the tools dir and the scripts dir.
 if clang_obj_root is not None:
-    clang_tools_dir = FixMsysPath(getattr(config, 'clang_tools_dir', None)) # @LOCALMOD
+    clang_tools_dir = getattr(config, 'clang_tools_dir', None)
     if not clang_tools_dir:
         lit_config.fatal('No Clang tools dir set!')
-    llvm_tools_dir = FixMsysPath(getattr(config, 'llvm_tools_dir', None)) # @LOCALMOD
+    llvm_tools_dir = getattr(config, 'llvm_tools_dir', None)
     if not llvm_tools_dir:
         lit_config.fatal('No LLVM tools dir set!')
     path = os.path.pathsep.join((
diff --git a/tools/driver/cc1as_main.cpp b/tools/driver/cc1as_main.cpp
index d6c2cf4..fd0fbb4 100644
--- a/tools/driver/cc1as_main.cpp
+++ b/tools/driver/cc1as_main.cpp
@@ -28,7 +28,6 @@
 #include "llvm/MC/MCCodeEmitter.h"
 #include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCInstrInfo.h"
-#include "llvm/MC/MCNaCl.h" // @LOCALMOD
 #include "llvm/MC/MCObjectFileInfo.h"
 #include "llvm/MC/MCParser/MCAsmParser.h"
 #include "llvm/MC/MCRegisterInfo.h"
@@ -388,10 +387,6 @@
                                                 Opts.RelaxAll,
                                                 /*DWARFMustBeAtTheEnd*/ true));
     Str.get()->InitSections(Opts.NoExecStack);
-    // @LOCALMOD-BEGIN
-    if (T.isOSNaCl())
-      initializeNaClMCStreamer(*Str.get(), Ctx, T);
-    // @LOCALMOD-END
   }
 
   bool Failed = false;
@@ -501,3 +496,4 @@
 
   return !!Failed;
 }
+
