diff --git a/Android.bp b/Android.bp
index aee9123..0202ea7 100644
--- a/Android.bp
+++ b/Android.bp
@@ -126,6 +126,7 @@
         "cc/check.go",
         "cc/gen.go",
         "cc/makevars.go",
+        "cc/relocation_packer.go",
         "cc/sanitize.go",
         "cc/stl.go",
         "cc/strip.go",
diff --git a/androidmk/cmd/androidmk/android.go b/androidmk/cmd/androidmk/android.go
index 3bda7a9..6646c9d 100644
--- a/androidmk/cmd/androidmk/android.go
+++ b/androidmk/cmd/androidmk/android.go
@@ -70,8 +70,8 @@
 	"LOCAL_NO_CRT":                  {"nocrt", bpparser.BoolType},
 	"LOCAL_ALLOW_UNDEFINED_SYMBOLS": {"allow_undefined_symbols", bpparser.BoolType},
 	"LOCAL_RTTI_FLAG":               {"rtti", bpparser.BoolType},
-
-	"LOCAL_NO_STANDARD_LIBRARIES": {"no_standard_libraries", bpparser.BoolType},
+	"LOCAL_NO_STANDARD_LIBRARIES":   {"no_standard_libraries", bpparser.BoolType},
+	"LOCAL_PACK_MODULE_RELOCATIONS": {"pack_relocations", bpparser.BoolType},
 
 	"LOCAL_EXPORT_PACKAGE_RESOURCES": {"export_package_resources", bpparser.BoolType},
 }
diff --git a/cc/androidmk.go b/cc/androidmk.go
index 831c0fb..f446333 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -81,6 +81,7 @@
 func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
 	if !library.static() {
 		ctx.subAndroidMk(ret, &library.stripper)
+		ctx.subAndroidMk(ret, &library.relocationPacker)
 	}
 
 	if library.static() {
@@ -129,7 +130,6 @@
 
 	ret.Class = "EXECUTABLES"
 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) error {
-		fmt.Fprintln(w, "LOCAL_CXX_STL := none")
 		fmt.Fprintln(w, "LOCAL_SYSTEM_SHARED_LIBRARIES :=")
 		if Bool(binary.Properties.Static_executable) {
 			fmt.Fprintln(w, "LOCAL_FORCE_STATIC_EXECUTABLE := true")
@@ -157,7 +157,6 @@
 	ret.Class = "STATIC_LIBRARIES"
 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) error {
 		fmt.Fprintln(w, "LOCAL_MODULE_SUFFIX := "+outputFile.Ext())
-		fmt.Fprintln(w, "LOCAL_CXX_STL := none")
 		fmt.Fprintln(w, "LOCAL_SYSTEM_SHARED_LIBRARIES :=")
 
 		return nil
@@ -183,6 +182,15 @@
 	})
 }
 
+func (packer *relocationPacker) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
+	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) error {
+		if packer.Properties.PackingRelocations {
+			fmt.Fprintln(w, "LOCAL_PACK_MODULE_RELOCATIONS := true")
+		}
+		return nil
+	})
+}
+
 func (installer *baseInstaller) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
 	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) error {
 		path := installer.path.RelPathString()
diff --git a/cc/compiler.go b/cc/compiler.go
index 4a7bba9..37dc744 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -147,6 +147,7 @@
 		if !ctx.sdk() || ctx.Host() {
 			flags.GlobalFlags = append(flags.GlobalFlags,
 				"${config.CommonGlobalIncludes}",
+				"${config.CommonGlobalSystemIncludes}",
 				tc.IncludeFlags(),
 				"${config.CommonNativehelperInclude}")
 		}
diff --git a/cc/config/global.go b/cc/config/global.go
index f1989a2..5b49bc3 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -90,9 +90,11 @@
 	pctx.StaticVariable("CommonClangGlobalCppflags",
 		strings.Join(append(ClangFilterUnknownCflags(commonGlobalCppflags), "${ClangExtraCppflags}"), " "))
 
-	// Everything in this list is a crime against abstraction and dependency tracking.
+	// Everything in these lists is a crime against abstraction and dependency tracking.
 	// Do not add anything to this list.
-	pctx.PrefixedPathsForOptionalSourceVariable("CommonGlobalIncludes", "-isystem ",
+	pctx.PrefixedPathsForOptionalSourceVariable("CommonGlobalIncludes", "-I",
+		[]string{})
+	pctx.PrefixedPathsForOptionalSourceVariable("CommonGlobalSystemIncludes", "-isystem ",
 		[]string{
 			"system/core/include",
 			"system/media/audio/include",
diff --git a/cc/installer.go b/cc/installer.go
index a133bf2..fa8fc32 100644
--- a/cc/installer.go
+++ b/cc/installer.go
@@ -24,7 +24,7 @@
 
 type InstallerProperties struct {
 	// install to a subdirectory of the default install path for the module
-	Relative_install_path string
+	Relative_install_path string `android:"arch_variant"`
 
 	// install symlinks to the module
 	Symlinks []string `android:"arch_variant"`
@@ -50,6 +50,7 @@
 
 	dir      string
 	dir64    string
+	relative string
 	location installLocation
 
 	path android.OutputPath
@@ -69,7 +70,7 @@
 	if !ctx.Host() && !ctx.Arch().Native {
 		subDir = filepath.Join(subDir, ctx.Arch().ArchType.String())
 	}
-	dir := android.PathForModuleInstall(ctx, subDir, installer.Properties.Relative_install_path)
+	dir := android.PathForModuleInstall(ctx, subDir, installer.Properties.Relative_install_path, installer.relative)
 	installer.path = ctx.InstallFile(dir, file)
 	for _, symlink := range installer.Properties.Symlinks {
 		ctx.InstallSymlink(dir, symlink, installer.path)
diff --git a/cc/library.go b/cc/library.go
index 5119c90..cc5ff15 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -151,6 +151,7 @@
 
 	flagExporter
 	stripper
+	relocationPacker
 
 	// If we're used as a whole_static_lib, our missing dependencies need
 	// to be given
@@ -177,7 +178,8 @@
 	return append(props,
 		&library.Properties,
 		&library.flagExporter.Properties,
-		&library.stripper.StripProperties)
+		&library.stripper.StripProperties,
+		&library.relocationPacker.Properties)
 }
 
 func (library *libraryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
@@ -289,6 +291,8 @@
 	library.baseInstaller.location = location
 
 	library.baseLinker.linkerInit(ctx)
+
+	library.relocationPacker.packingInit(ctx)
 }
 
 func (library *libraryDecorator) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
@@ -386,6 +390,12 @@
 
 	builderFlags := flagsToBuilderFlags(flags)
 
+	if library.relocationPacker.needsPacking(ctx) {
+		packedOutputFile := outputFile
+		outputFile = android.PathForModuleOut(ctx, "unpacked", fileName)
+		library.relocationPacker.pack(ctx, outputFile, packedOutputFile, builderFlags)
+	}
+
 	if library.stripper.needsStrip(ctx) {
 		strippedOutputFile := outputFile
 		outputFile = android.PathForModuleOut(ctx, "unstripped", fileName)
diff --git a/cc/makevars.go b/cc/makevars.go
index 23814c3..ea32121 100644
--- a/cc/makevars.go
+++ b/cc/makevars.go
@@ -17,6 +17,7 @@
 import (
 	"fmt"
 	"path/filepath"
+	"sort"
 	"strings"
 
 	"android/soong/android"
@@ -43,7 +44,7 @@
 	ctx.Strict("GLOBAL_CLANG_CPPFLAGS_NO_OVERRIDE", "")
 	ctx.Strict("NDK_PREBUILT_SHARED_LIBRARIES", strings.Join(ndkPrebuiltSharedLibs, " "))
 
-	includeFlags, err := ctx.Eval("${config.CommonGlobalIncludes}")
+	includeFlags, err := ctx.Eval("${config.CommonGlobalIncludes} ${config.CommonGlobalSystemIncludes}")
 	if err != nil {
 		panic(err)
 	}
@@ -51,6 +52,7 @@
 	ctx.StrictRaw("SRC_HEADERS", strings.Join(includes, " "))
 	ctx.StrictRaw("SRC_SYSTEM_HEADERS", strings.Join(systemIncludes, " "))
 
+	sort.Strings(ndkMigratedLibs)
 	ctx.Strict("NDK_MIGRATED_LIBS", strings.Join(ndkMigratedLibs, " "))
 
 	hostTargets := ctx.Config().Targets[android.Host]
diff --git a/cc/relocation_packer.go b/cc/relocation_packer.go
new file mode 100644
index 0000000..c509f31
--- /dev/null
+++ b/cc/relocation_packer.go
@@ -0,0 +1,84 @@
+// Copyright 2016 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package cc
+
+import (
+	"runtime"
+
+	"github.com/google/blueprint"
+
+	"android/soong/android"
+)
+
+func init() {
+	pctx.SourcePathVariable("relocationPackerCmd", "prebuilts/misc/${config.HostPrebuiltTag}/relocation_packer/relocation_packer")
+}
+
+var relocationPackerRule = pctx.AndroidStaticRule("packRelocations",
+	blueprint.RuleParams{
+		Command:     "rm -f $out && cp $in $out && $relocationPackerCmd $out",
+		CommandDeps: []string{"$relocationPackerCmd"},
+		Description: "pack relocations $out",
+	})
+
+type RelocationPackerProperties struct {
+	Pack_relocations *bool `android:"arch_variant"`
+
+	// This will be true even if we're embedded in Make, in which case
+	// we'll defer to make to actually do the packing.
+	PackingRelocations bool `blueprint:"mutated"`
+}
+
+type relocationPacker struct {
+	Properties RelocationPackerProperties
+}
+
+func (p *relocationPacker) packingInit(ctx BaseModuleContext) {
+	enabled := true
+	// Relocation packer isn't available on Darwin yet
+	if runtime.GOOS == "darwin" {
+		enabled = false
+	}
+	if ctx.Target().Os != android.Android {
+		enabled = false
+	}
+	if ctx.AConfig().Getenv("DISABLE_RELOCATION_PACKER") == "true" {
+		enabled = false
+	}
+	if ctx.sdk() {
+		enabled = false
+	}
+	if p.Properties.Pack_relocations != nil &&
+		*p.Properties.Pack_relocations == false {
+		enabled = false
+	}
+
+	p.Properties.PackingRelocations = enabled
+}
+
+func (p *relocationPacker) needsPacking(ctx ModuleContext) bool {
+	if ctx.AConfig().EmbeddedInMake() {
+		return false
+	}
+	return p.Properties.PackingRelocations
+}
+
+func (p *relocationPacker) pack(ctx ModuleContext, in, out android.ModuleOutPath, flags builderFlags) {
+	ctx.ModuleBuild(pctx, android.ModuleBuildParams{
+		Rule:   relocationPackerRule,
+		Output: out,
+		Input:  in,
+	})
+}
diff --git a/cc/test.go b/cc/test.go
index 5418ebf..5a34d1d 100644
--- a/cc/test.go
+++ b/cc/test.go
@@ -26,7 +26,7 @@
 
 type TestProperties struct {
 	// if set, build against the gtest library. Defaults to true.
-	Gtest bool
+	Gtest *bool
 }
 
 type TestBinaryProperties struct {
@@ -116,8 +116,12 @@
 	linker     *baseLinker
 }
 
+func (test *testDecorator) gtest() bool {
+	return test.Properties.Gtest == nil || *test.Properties.Gtest == true
+}
+
 func (test *testDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
-	if !test.Properties.Gtest {
+	if !test.gtest() {
 		return flags
 	}
 
@@ -143,7 +147,7 @@
 }
 
 func (test *testDecorator) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
-	if test.Properties.Gtest {
+	if test.gtest() {
 		if ctx.sdk() && ctx.Device() {
 			switch ctx.selectedStl() {
 			case "ndk_libc++_shared", "ndk_libc++_static":
@@ -208,8 +212,9 @@
 }
 
 func (test *testBinary) install(ctx ModuleContext, file android.Path) {
-	test.binaryDecorator.baseInstaller.dir = filepath.Join("nativetest", ctx.ModuleName())
-	test.binaryDecorator.baseInstaller.dir64 = filepath.Join("nativetest64", ctx.ModuleName())
+	test.binaryDecorator.baseInstaller.dir = "nativetest"
+	test.binaryDecorator.baseInstaller.dir64 = "nativetest64"
+	test.binaryDecorator.baseInstaller.relative = ctx.ModuleName()
 	test.binaryDecorator.baseInstaller.install(ctx, file)
 }
 
@@ -225,7 +230,6 @@
 		binaryDecorator: binary,
 		baseCompiler:    NewBaseCompiler(),
 	}
-	test.testDecorator.Properties.Gtest = true
 	module.compiler = test
 	module.linker = test
 	module.installer = test
@@ -267,7 +271,6 @@
 		},
 		libraryDecorator: library,
 	}
-	test.testDecorator.Properties.Gtest = true
 	module.linker = test
 	return module
 }
