Merge "Add an option to preserve symbols and debug_frame."

This commit is contained in:
Christopher Ferris
2019-05-21 18:09:08 +00:00
committed by Gerrit Code Review
3 changed files with 46 additions and 15 deletions

View File

@@ -267,11 +267,12 @@ type builderFlags struct {
groupStaticLibs bool groupStaticLibs bool
stripKeepSymbols bool stripKeepSymbols bool
stripKeepSymbolsList string stripKeepSymbolsList string
stripKeepMiniDebugInfo bool stripKeepSymbolsAndDebugFrame bool
stripAddGnuDebuglink bool stripKeepMiniDebugInfo bool
stripUseGnuStrip bool stripAddGnuDebuglink bool
stripUseGnuStrip bool
proto android.ProtoFlags proto android.ProtoFlags
protoC bool protoC bool
@@ -852,6 +853,9 @@ func TransformStrip(ctx android.ModuleContext, inputFile android.Path,
if flags.stripKeepSymbolsList != "" { if flags.stripKeepSymbolsList != "" {
args += " -k" + flags.stripKeepSymbolsList args += " -k" + flags.stripKeepSymbolsList
} }
if flags.stripKeepSymbolsAndDebugFrame {
args += " --keep-symbols-and-debug-frame"
}
if flags.stripUseGnuStrip { if flags.stripUseGnuStrip {
args += " --use-gnu-strip" args += " --use-gnu-strip"
} }

View File

@@ -22,11 +22,12 @@ import (
type StripProperties struct { type StripProperties struct {
Strip struct { Strip struct {
None *bool `android:"arch_variant"` None *bool `android:"arch_variant"`
All *bool `android:"arch_variant"` All *bool `android:"arch_variant"`
Keep_symbols *bool `android:"arch_variant"` Keep_symbols *bool `android:"arch_variant"`
Keep_symbols_list []string `android:"arch_variant"` Keep_symbols_list []string `android:"arch_variant"`
Use_gnu_strip *bool `android:"arch_variant"` Keep_symbols_and_debug_frame *bool `android:"arch_variant"`
Use_gnu_strip *bool `android:"arch_variant"`
} `android:"arch_variant"` } `android:"arch_variant"`
} }
@@ -46,6 +47,8 @@ func (stripper *stripper) strip(ctx ModuleContext, in android.Path, out android.
} else { } else {
if Bool(stripper.StripProperties.Strip.Keep_symbols) { if Bool(stripper.StripProperties.Strip.Keep_symbols) {
flags.stripKeepSymbols = true flags.stripKeepSymbols = true
} else if Bool(stripper.StripProperties.Strip.Keep_symbols_and_debug_frame) {
flags.stripKeepSymbolsAndDebugFrame = true
} else if len(stripper.StripProperties.Strip.Keep_symbols_list) > 0 { } else if len(stripper.StripProperties.Strip.Keep_symbols_list) > 0 {
flags.stripKeepSymbolsList = strings.Join(stripper.StripProperties.Strip.Keep_symbols_list, ",") flags.stripKeepSymbolsList = strings.Join(stripper.StripProperties.Strip.Keep_symbols_list, ",")
} else if !Bool(stripper.StripProperties.Strip.All) { } else if !Bool(stripper.StripProperties.Strip.All) {

View File

@@ -28,6 +28,7 @@
# --add-gnu-debuglink # --add-gnu-debuglink
# --keep-mini-debug-info # --keep-mini-debug-info
# --keep-symbols # --keep-symbols
# --keep-symbols-and-debug-frame
# --use-gnu-strip # --use-gnu-strip
# --remove-build-id # --remove-build-id
@@ -39,11 +40,12 @@ usage() {
cat <<EOF cat <<EOF
Usage: strip.sh [options] -k symbols -i in-file -o out-file -d deps-file Usage: strip.sh [options] -k symbols -i in-file -o out-file -d deps-file
Options: Options:
--add-gnu-debuglink Add a gnu-debuglink section to out-file --add-gnu-debuglink Add a gnu-debuglink section to out-file
--keep-mini-debug-info Keep compressed debug info in out-file --keep-mini-debug-info Keep compressed debug info in out-file
--keep-symbols Keep symbols in out-file --keep-symbols Keep symbols in out-file
--use-gnu-strip Use strip/objcopy instead of llvm-{strip,objcopy} --keep-symbols-and-debug-frame Keep symbols and .debug_frame in out-file
--remove-build-id Remove the gnu build-id section in out-file --use-gnu-strip Use strip/objcopy instead of llvm-{strip,objcopy}
--remove-build-id Remove the gnu build-id section in out-file
EOF EOF
exit 1 exit 1
} }
@@ -63,6 +65,15 @@ do_strip() {
fi fi
} }
do_strip_keep_symbols_and_debug_frame() {
REMOVE_SECTIONS=`"${CROSS_COMPILE}readelf" -S "${infile}" | awk '/.debug_/ {if ($2 != ".debug_frame") {print "--remove-section " $2}}' | xargs`
if [ -z "${use_gnu_strip}" ]; then
"${CLANG_BIN}/llvm-objcopy" "${infile}" "${outfile}.tmp" ${REMOVE_SECTIONS}
else
"${CROSS_COMPILE}objcopy" "${infile}" "${outfile}.tmp" ${REMOVE_SECTIONS}
fi
}
do_strip_keep_symbols() { do_strip_keep_symbols() {
REMOVE_SECTIONS=`"${CROSS_COMPILE}readelf" -S "${infile}" | awk '/.debug_/ {print "--remove-section " $2}' | xargs` REMOVE_SECTIONS=`"${CROSS_COMPILE}readelf" -S "${infile}" | awk '/.debug_/ {print "--remove-section " $2}' | xargs`
if [ -z "${use_gnu_strip}" ]; then if [ -z "${use_gnu_strip}" ]; then
@@ -148,6 +159,7 @@ while getopts $OPTSTRING opt; do
add-gnu-debuglink) add_gnu_debuglink=true ;; add-gnu-debuglink) add_gnu_debuglink=true ;;
keep-mini-debug-info) keep_mini_debug_info=true ;; keep-mini-debug-info) keep_mini_debug_info=true ;;
keep-symbols) keep_symbols=true ;; keep-symbols) keep_symbols=true ;;
keep-symbols-and-debug-frame) keep_symbols_and_debug_frame=true ;;
remove-build-id) remove_build_id=true ;; remove-build-id) remove_build_id=true ;;
use-gnu-strip) use_gnu_strip=true ;; use-gnu-strip) use_gnu_strip=true ;;
*) echo "Unknown option --${OPTARG}"; usage ;; *) echo "Unknown option --${OPTARG}"; usage ;;
@@ -177,6 +189,16 @@ if [ ! -z "${keep_symbols}" -a ! -z "${keep_mini_debug_info}" ]; then
usage usage
fi fi
if [ ! -z "${keep_symbols}" -a ! -z "${keep_symbols_and_debug_frame}" ]; then
echo "--keep-symbols and --keep-symbols-and-debug-frame cannot be used together"
usage
fi
if [ ! -z "${keep_mini_debug_info}" -a ! -z "${keep_symbols_and_debug_frame}" ]; then
echo "--keep-symbols-mini-debug-info and --keep-symbols-and-debug-frame cannot be used together"
usage
fi
if [ ! -z "${symbols_to_keep}" -a ! -z "${keep_symbols}" ]; then if [ ! -z "${symbols_to_keep}" -a ! -z "${keep_symbols}" ]; then
echo "--keep-symbols and -k cannot be used together" echo "--keep-symbols and -k cannot be used together"
usage usage
@@ -195,6 +217,8 @@ elif [ ! -z "${symbols_to_keep}" ]; then
do_strip_keep_symbol_list do_strip_keep_symbol_list
elif [ ! -z "${keep_mini_debug_info}" ]; then elif [ ! -z "${keep_mini_debug_info}" ]; then
do_strip_keep_mini_debug_info do_strip_keep_mini_debug_info
elif [ ! -z "${keep_symbols_and_debug_frame}" ]; then
do_strip_keep_symbols_and_debug_frame
else else
do_strip do_strip
fi fi