From 22f3795dca8a68e0410613ad08188a88f54b5144 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 5 Sep 2018 10:43:13 -0700 Subject: [PATCH 1/3] Remove relocation packer The relocation packer prebuilt is gone, remove the references to it. Bug: 110715614 Test: m checkbuild Change-Id: Ia20f8198e4fc206f4995dd5168c811dac7c9df89 --- Android.bp | 1 - cc/androidmk.go | 9 ---- cc/library.go | 12 +---- cc/relocation_packer.go | 100 ---------------------------------------- 4 files changed, 1 insertion(+), 121 deletions(-) delete mode 100644 cc/relocation_packer.go diff --git a/Android.bp b/Android.bp index 2f7b0514b..dcbc03029 100644 --- a/Android.bp +++ b/Android.bp @@ -134,7 +134,6 @@ bootstrap_go_package { "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 7595db1fe..9258bd4f0 100644 --- a/cc/androidmk.go +++ b/cc/androidmk.go @@ -141,7 +141,6 @@ func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.An 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 (stripper *stripper) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMk }) } -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 7ff7885c1..7886c3532 100644 --- a/cc/library.go +++ b/cc/library.go @@ -210,7 +210,6 @@ type libraryDecorator struct { flagExporter stripper - relocationPacker // If we're used as a whole_static_lib, our missing dependencies need // to be given @@ -251,8 +250,7 @@ func (library *libraryDecorator) linkerProps() []interface{} { &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 @@ func (library *libraryDecorator) linkerInit(ctx BaseModuleContext) { 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 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext, 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 8989b29ac..000000000 --- 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, - }) -} From f843290eb84755b96adf8284ec91864b1ffdfec6 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 5 Sep 2018 13:28:01 -0700 Subject: [PATCH 2/3] Fix strip.sh --keep-mini-debug-info strip.sh --keep-mini-debug-info had extra $$ escaping from when it was copied from make. Bug: 113936524 Test: m checkbuild Change-Id: I47dec958152584ca94c6149b11a06e64be2f22f9 --- scripts/strip.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/strip.sh b/scripts/strip.sh index 432582fc0..8f89a9252 100755 --- a/scripts/strip.sh +++ b/scripts/strip.sh @@ -82,8 +82,8 @@ do_strip_keep_mini_debug_info() { # 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" From 02b04bb2996b804b5fff148551f2e6cee71ce412 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 5 Sep 2018 13:14:09 -0700 Subject: [PATCH 3/3] Allow strip.sh --keep-mini-debug-info to work on non-elf files strip.sh --keep-mini-debug-info matches the default for Make, and is currently used on lots of files that are not elf files. For now, just make the behavior match Make and skip files when strip --strip-all fails. Bug: 113936524 Test: m checkbuild Change-Id: I3648c914c0fd7cc9b68aa93fd3cb0b77504d42f6 --- scripts/strip.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/strip.sh b/scripts/strip.sh index 8f89a9252..d184a9748 100755 --- a/scripts/strip.sh +++ b/scripts/strip.sh @@ -71,12 +71,13 @@ do_strip_keep_symbols() { 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,