diff --git a/Android.bp b/Android.bp
index 2f7b051..dcbc030 100644
--- a/Android.bp
+++ b/Android.bp
@@ -134,7 +134,6 @@
         "cc/pgo.go",
         "cc/prebuilt.go",
         "cc/proto.go",
-        "cc/relocation_packer.go",
         "cc/rs.go",
         "cc/sanitize.go",
         "cc/sabi.go",
diff --git a/cc/androidmk.go b/cc/androidmk.go
index 7595db1..9258bd4 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -141,7 +141,6 @@
 		ret.Class = "STATIC_LIBRARIES"
 	} else if library.shared() {
 		ctx.subAndroidMk(ret, &library.stripper)
-		ctx.subAndroidMk(ret, &library.relocationPacker)
 
 		ret.Class = "SHARED_LIBRARIES"
 	} else if library.header() {
@@ -310,14 +309,6 @@
 	})
 }
 
-func (packer *relocationPacker) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
-	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) {
-		if packer.Properties.PackingRelocations {
-			fmt.Fprintln(w, "LOCAL_PACK_MODULE_RELOCATIONS := true")
-		}
-	})
-}
-
 func (installer *baseInstaller) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
 	// Soong installation is only supported for host modules. Have Make
 	// installation trigger Soong installation.
diff --git a/cc/library.go b/cc/library.go
index 7ff7885..7886c35 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -210,7 +210,6 @@
 
 	flagExporter
 	stripper
-	relocationPacker
 
 	// If we're used as a whole_static_lib, our missing dependencies need
 	// to be given
@@ -251,8 +250,7 @@
 		&library.Properties,
 		&library.MutatedProperties,
 		&library.flagExporter.Properties,
-		&library.stripper.StripProperties,
-		&library.relocationPacker.Properties)
+		&library.stripper.StripProperties)
 }
 
 func (library *libraryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
@@ -428,8 +426,6 @@
 	library.baseInstaller.location = location
 
 	library.baseLinker.linkerInit(ctx)
-
-	library.relocationPacker.packingInit(ctx)
 }
 
 func (library *libraryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
@@ -558,12 +554,6 @@
 		TransformSharedObjectToToc(ctx, outputFile, tocFile, builderFlags)
 	}
 
-	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) {
 		// b/80093681, GNU strip/objcopy bug.
 		// Use llvm-{strip,objcopy} when clang lld is used.
diff --git a/cc/relocation_packer.go b/cc/relocation_packer.go
deleted file mode 100644
index 8989b29..0000000
--- a/cc/relocation_packer.go
+++ /dev/null
@@ -1,100 +0,0 @@
-// 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"},
-	})
-
-type RelocationPackerProperties struct {
-	// Generate compact dynamic relocation table, default true.
-	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"`
-
-	// Use clang lld instead of gnu ld.
-	Use_clang_lld *bool
-}
-
-type relocationPacker struct {
-	Properties RelocationPackerProperties
-}
-
-func (p *relocationPacker) useClangLld(ctx BaseModuleContext) bool {
-	if p.Properties.Use_clang_lld != nil {
-		return Bool(p.Properties.Use_clang_lld)
-	}
-	return ctx.Config().UseClangLld()
-}
-
-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.Config().Getenv("DISABLE_RELOCATION_PACKER") == "true" {
-		enabled = false
-	}
-	// Relocation packer does not work with lld output files.
-	// Packed files won't load.
-	if p.useClangLld(ctx) {
-		enabled = false
-	}
-	if ctx.useSdk() {
-		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.Config().EmbeddedInMake() {
-		return false
-	}
-	return p.Properties.PackingRelocations
-}
-
-func (p *relocationPacker) pack(ctx ModuleContext, in, out android.ModuleOutPath, flags builderFlags) {
-	ctx.Build(pctx, android.BuildParams{
-		Rule:        relocationPackerRule,
-		Description: "pack relocations",
-		Output:      out,
-		Input:       in,
-	})
-}
diff --git a/scripts/strip.sh b/scripts/strip.sh
index 432582f..d184a97 100755
--- a/scripts/strip.sh
+++ b/scripts/strip.sh
@@ -71,19 +71,20 @@
 
 do_strip_keep_mini_debug_info() {
     rm -f "${outfile}.dynsyms" "${outfile}.funcsyms" "${outfile}.keep_symbols" "${outfile}.debug" "${outfile}.mini_debuginfo" "${outfile}.mini_debuginfo.xz"
+    local fail=
     if [ ! -z "${use_llvm_strip}" ]; then
-        "${CLANG_BIN}/llvm-strip" --strip-all -keep=.ARM.attributes -remove-section=.comment "${infile}" "${outfile}.tmp"
+        "${CLANG_BIN}/llvm-strip" --strip-all -keep=.ARM.attributes -remove-section=.comment "${infile}" "${outfile}.tmp" || fail=true
     else
-        "${CROSS_COMPILE}strip" --strip-all -R .comment "${infile}" -o "${outfile}.tmp"
+        "${CROSS_COMPILE}strip" --strip-all -R .comment "${infile}" -o "${outfile}.tmp" || fail=true
     fi
-    if [ "$?" == "0" ]; then
+    if [ -z $fail ]; then
         # Current prebult llvm-objcopy does not support the following flags:
         #    --only-keep-debug --rename-section --keep-symbols
         # For the following use cases, ${CROSS_COMPILE}objcopy does fine with lld linked files,
         # except the --add-section flag.
         "${CROSS_COMPILE}objcopy" --only-keep-debug "${infile}" "${outfile}.debug"
-        "${CROSS_COMPILE}nm" -D "${infile}" --format=posix --defined-only | awk '{ print $$1 }' | sort >"${outfile}.dynsyms"
-        "${CROSS_COMPILE}nm" "${infile}" --format=posix --defined-only | awk '{ if ($$2 == "T" || $$2 == "t" || $$2 == "D") print $$1 }' | sort > "${outfile}.funcsyms"
+        "${CROSS_COMPILE}nm" -D "${infile}" --format=posix --defined-only | awk '{ print $1 }' | sort >"${outfile}.dynsyms"
+        "${CROSS_COMPILE}nm" "${infile}" --format=posix --defined-only | awk '{ if ($2 == "T" || $2 == "t" || $2 == "D") print $1 }' | sort > "${outfile}.funcsyms"
         comm -13 "${outfile}.dynsyms" "${outfile}.funcsyms" > "${outfile}.keep_symbols"
         echo >> "${outfile}.keep_symbols" # Ensure that the keep_symbols file is not empty.
         "${CROSS_COMPILE}objcopy" --rename-section .debug_frame=saved_debug_frame "${outfile}.debug" "${outfile}.mini_debuginfo"
