From b5c34d7f4076187195399f6e490ed9845b56aa51 Mon Sep 17 00:00:00 2001 From: Yi Kong Date: Wed, 7 Nov 2018 16:28:49 -0800 Subject: [PATCH] Use llvm-{strip,objcopy} by default ... except for Darwin Mach-O, as it is not supported by llvm-strip. Test: m checkbuild Bug: 119221035 Change-Id: I021637b6dd3530bff1f563f2ec7c2168e1083b7e --- cc/binary.go | 6 +++--- cc/builder.go | 6 +++--- cc/library.go | 6 +++--- scripts/strip.sh | 22 ++++++++++------------ 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/cc/binary.go b/cc/binary.go index a8eb641fa..4794815c0 100644 --- a/cc/binary.go +++ b/cc/binary.go @@ -317,9 +317,9 @@ func (binary *binaryDecorator) link(ctx ModuleContext, builderFlags := flagsToBuilderFlags(flags) if binary.stripper.needsStrip(ctx) { - // b/80093681, GNU strip/objcopy bug. - // Use llvm-{strip,objcopy} when clang lld is used. - builderFlags.stripUseLlvmStrip = binary.baseLinker.useClangLld(ctx) + if ctx.Darwin() { + builderFlags.stripUseGnuStrip = true + } strippedOutputFile := outputFile outputFile = android.PathForModuleOut(ctx, "unstripped", fileName) binary.stripper.strip(ctx, outputFile, strippedOutputFile, builderFlags) diff --git a/cc/builder.go b/cc/builder.go index 645b3c23c..6e24d5666 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -255,7 +255,7 @@ type builderFlags struct { stripKeepSymbols bool stripKeepMiniDebugInfo bool stripAddGnuDebuglink bool - stripUseLlvmStrip bool + stripUseGnuStrip bool protoDeps android.Paths protoFlags string @@ -821,8 +821,8 @@ func TransformStrip(ctx android.ModuleContext, inputFile android.Path, if flags.stripKeepSymbols { args += " --keep-symbols" } - if flags.stripUseLlvmStrip { - args += " --use-llvm-strip" + if flags.stripUseGnuStrip { + args += " --use-gnu-strip" } ctx.Build(pctx, android.BuildParams{ diff --git a/cc/library.go b/cc/library.go index 13acfae62..d716ffac7 100644 --- a/cc/library.go +++ b/cc/library.go @@ -686,9 +686,9 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext, TransformSharedObjectToToc(ctx, outputFile, tocFile, builderFlags) if library.stripper.needsStrip(ctx) { - // b/80093681, GNU strip/objcopy bug. - // Use llvm-{strip,objcopy} when clang lld is used. - builderFlags.stripUseLlvmStrip = library.baseLinker.useClangLld(ctx) + if ctx.Darwin() { + builderFlags.stripUseGnuStrip = true + } strippedOutputFile := outputFile outputFile = android.PathForModuleOut(ctx, "unstripped", fileName) library.stripper.strip(ctx, outputFile, strippedOutputFile, builderFlags) diff --git a/scripts/strip.sh b/scripts/strip.sh index d826e57cb..bedc527d3 100755 --- a/scripts/strip.sh +++ b/scripts/strip.sh @@ -27,7 +27,7 @@ # --add-gnu-debuglink # --keep-mini-debug-info # --keep-symbols -# --use-llvm-strip +# --use-gnu-strip set -o pipefail @@ -40,12 +40,12 @@ Options: --add-gnu-debuglink Add a gnu-debuglink section to out-file --keep-mini-debug-info Keep compressed debug info in out-file --keep-symbols Keep symbols in out-file - --use-llvm-strip Use llvm-{strip,objcopy} instead of strip/objcopy + --use-gnu-strip Use strip/objcopy instead of llvm-{strip,objcopy} EOF exit 1 } -# With --use-llvm-strip, GNU strip is replaced with llvm-strip to work around +# Without --use-gnu-strip, GNU strip is replaced with llvm-strip to work around # old GNU strip bug on lld output files, b/80093681. # Similary, calls to objcopy are replaced with llvm-objcopy, # with some exceptions. @@ -53,7 +53,7 @@ EOF do_strip() { # ${CROSS_COMPILE}strip --strip-all does not strip .ARM.attributes, # so we tell llvm-strip to keep it too. - if [ ! -z "${use_llvm_strip}" ]; then + if [ -z "${use_gnu_strip}" ]; then "${CLANG_BIN}/llvm-strip" --strip-all -keep-section=.ARM.attributes "${infile}" -o "${outfile}.tmp" else "${CROSS_COMPILE}strip" --strip-all "${infile}" -o "${outfile}.tmp" @@ -61,10 +61,8 @@ do_strip() { } do_strip_keep_symbols() { - # Maybe we should replace this objcopy with llvm-objcopy, but - # we have not found a use case that is broken by objcopy yet. REMOVE_SECTIONS=`"${CROSS_COMPILE}readelf" -S "${infile}" | awk '/.debug_/ {print "--remove-section " $2}' | xargs` - if [ ! -z "${use_llvm_strip}" ]; then + if [ -z "${use_gnu_strip}" ]; then "${CLANG_BIN}/llvm-objcopy" "${infile}" "${outfile}.tmp" ${REMOVE_SECTIONS} else "${CROSS_COMPILE}objcopy" "${infile}" "${outfile}.tmp" ${REMOVE_SECTIONS} @@ -74,7 +72,7 @@ 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 + if [ -z "${use_gnu_strip}" ]; then "${CLANG_BIN}/llvm-strip" --strip-all -keep-section=.ARM.attributes -remove-section=.comment "${infile}" -o "${outfile}.tmp" || fail=true else "${CROSS_COMPILE}strip" --strip-all -R .comment "${infile}" -o "${outfile}.tmp" || fail=true @@ -93,7 +91,7 @@ do_strip_keep_mini_debug_info() { "${CROSS_COMPILE}objcopy" -S --remove-section .gdb_index --remove-section .comment --keep-symbols="${outfile}.keep_symbols" "${outfile}.mini_debuginfo" "${CROSS_COMPILE}objcopy" --rename-section saved_debug_frame=.debug_frame "${outfile}.mini_debuginfo" "${XZ}" "${outfile}.mini_debuginfo" - if [ ! -z "${use_llvm_strip}" ]; then + if [ -z "${use_gnu_strip}" ]; then "${CLANG_BIN}/llvm-objcopy" --add-section .gnu_debugdata="${outfile}.mini_debuginfo.xz" "${outfile}.tmp" else "${CROSS_COMPILE}objcopy" --add-section .gnu_debugdata="${outfile}.mini_debuginfo.xz" "${outfile}.tmp" @@ -105,7 +103,7 @@ do_strip_keep_mini_debug_info() { } do_add_gnu_debuglink() { - if [ ! -z "${use_llvm_strip}" ]; then + if [ -z "${use_gnu_strip}" ]; then "${CLANG_BIN}/llvm-objcopy" --add-gnu-debuglink="${infile}" "${outfile}.tmp" else "${CROSS_COMPILE}objcopy" --add-gnu-debuglink="${infile}" "${outfile}.tmp" @@ -122,7 +120,7 @@ while getopts $OPTSTRING opt; do add-gnu-debuglink) add_gnu_debuglink=true ;; keep-mini-debug-info) keep_mini_debug_info=true ;; keep-symbols) keep_symbols=true ;; - use-llvm-strip) use_llvm_strip=true ;; + use-gnu-strip) use_gnu_strip=true ;; *) echo "Unknown option --${OPTARG}"; usage ;; esac;; ?) usage ;; @@ -172,7 +170,7 @@ fi rm -f "${outfile}" mv "${outfile}.tmp" "${outfile}" -if [ ! -z "${use_llvm_strip}" ]; then +if [ -z "${use_gnu_strip}" ]; then USED_STRIP_OBJCOPY="${CLANG_BIN}/llvm-strip ${CLANG_BIN}/llvm-objcopy" else USED_STRIP_OBJCOPY="${CROSS_COMPILE}strip"