Merge changes Ia85d8dc0,I4ab3d47f,Ieeaa6554,I0b3c1f08 into main

* changes:
  Use zstd to compress debug info in rust libraries
  Use zstd to compress debug info in cc libraries
  Compress debug info in clang builds with zstd
  Decompress debug sections when creating debug info
This commit is contained in:
Eric Rahm 2023-10-20 10:32:13 +00:00 committed by Gerrit Code Review
commit b60cd11bc7
7 changed files with 43 additions and 7 deletions

View file

@ -46,6 +46,10 @@ var (
"-Wl,--no-undefined-version", "-Wl,--no-undefined-version",
} }
linuxCrossLldflags = append(linuxCrossLdflags,
"-Wl,--compress-debug-sections=zstd",
)
// Embed the linker into host bionic binaries. This is needed to support host bionic, // Embed the linker into host bionic binaries. This is needed to support host bionic,
// as the linux kernel requires that the ELF interpreter referenced by PT_INTERP be // as the linux kernel requires that the ELF interpreter referenced by PT_INTERP be
// either an absolute path, or relative from CWD. To work around this, we extract // either an absolute path, or relative from CWD. To work around this, we extract
@ -60,6 +64,7 @@ var (
func init() { func init() {
exportedVars.ExportStringListStaticVariable("LinuxBionicArm64Cflags", linuxCrossCflags) exportedVars.ExportStringListStaticVariable("LinuxBionicArm64Cflags", linuxCrossCflags)
exportedVars.ExportStringListStaticVariable("LinuxBionicArm64Ldflags", linuxCrossLdflags) exportedVars.ExportStringListStaticVariable("LinuxBionicArm64Ldflags", linuxCrossLdflags)
exportedVars.ExportStringListStaticVariable("LinuxBionicArm64Lldflags", linuxCrossLldflags)
} }
// toolchain config for ARM64 Linux CrossHost. Almost everything is the same as the ARM64 Android // toolchain config for ARM64 Linux CrossHost. Almost everything is the same as the ARM64 Android

View file

@ -27,16 +27,24 @@ var (
"-march=armv7a", "-march=armv7a",
} }
linuxArmLldflags = append(linuxArmLdflags,
"-Wl,--compress-debug-sections=zstd",
)
linuxArm64Ldflags = []string{} linuxArm64Ldflags = []string{}
linuxArm64Lldflags = append(linuxArm64Ldflags,
"-Wl,--compress-debug-sections=zstd",
)
) )
func init() { func init() {
exportedVars.ExportStringListStaticVariable("LinuxArmCflags", linuxArmCflags) exportedVars.ExportStringListStaticVariable("LinuxArmCflags", linuxArmCflags)
exportedVars.ExportStringListStaticVariable("LinuxArm64Cflags", linuxArm64Cflags) exportedVars.ExportStringListStaticVariable("LinuxArm64Cflags", linuxArm64Cflags)
exportedVars.ExportStringListStaticVariable("LinuxArmLdflags", linuxArmLdflags) exportedVars.ExportStringListStaticVariable("LinuxArmLdflags", linuxArmLdflags)
exportedVars.ExportStringListStaticVariable("LinuxArmLldflags", linuxArmLdflags) exportedVars.ExportStringListStaticVariable("LinuxArmLldflags", linuxArmLldflags)
exportedVars.ExportStringListStaticVariable("LinuxArm64Ldflags", linuxArm64Ldflags) exportedVars.ExportStringListStaticVariable("LinuxArm64Ldflags", linuxArm64Ldflags)
exportedVars.ExportStringListStaticVariable("LinuxArm64Lldflags", linuxArm64Ldflags) exportedVars.ExportStringListStaticVariable("LinuxArm64Lldflags", linuxArm64Lldflags)
exportedVars.ExportStringListStaticVariable("LinuxArmYasmFlags", []string{"-f elf32 -m arm"}) exportedVars.ExportStringListStaticVariable("LinuxArmYasmFlags", []string{"-f elf32 -m arm"})
exportedVars.ExportStringListStaticVariable("LinuxArm64YasmFlags", []string{"-f elf64 -m aarch64"}) exportedVars.ExportStringListStaticVariable("LinuxArm64YasmFlags", []string{"-f elf64 -m aarch64"})

View file

@ -133,6 +133,9 @@ var (
// Using simple template names reduces the size of debug builds. // Using simple template names reduces the size of debug builds.
"-gsimple-template-names", "-gsimple-template-names",
// Use zstd to compress debug data.
"-gz=zstd",
// Make paths in deps files relative. // Make paths in deps files relative.
"-no-canonical-prefixes", "-no-canonical-prefixes",
} }
@ -200,7 +203,9 @@ var (
"-Wl,-mllvm,-regalloc-enable-advisor=release", "-Wl,-mllvm,-regalloc-enable-advisor=release",
} }
deviceGlobalLldflags = append(deviceGlobalLdflags, commonGlobalLldflags...) deviceGlobalLldflags = append(append(deviceGlobalLdflags, commonGlobalLldflags...),
"-Wl,--compress-debug-sections=zstd",
)
hostGlobalCflags = []string{} hostGlobalCflags = []string{}

View file

@ -53,6 +53,10 @@ var (
"--gcc-toolchain=${LinuxBionicGccRoot}", "--gcc-toolchain=${LinuxBionicGccRoot}",
} }
linuxBionicLldflags = append(linuxBionicLdflags,
"-Wl,--compress-debug-sections=zstd",
)
// Embed the linker into host bionic binaries. This is needed to support host bionic, // Embed the linker into host bionic binaries. This is needed to support host bionic,
// as the linux kernel requires that the ELF interpreter referenced by PT_INTERP be // as the linux kernel requires that the ELF interpreter referenced by PT_INTERP be
// either an absolute path, or relative from CWD. To work around this, we extract // either an absolute path, or relative from CWD. To work around this, we extract
@ -71,7 +75,7 @@ const (
func init() { func init() {
exportedVars.ExportStringListStaticVariable("LinuxBionicCflags", linuxBionicCflags) exportedVars.ExportStringListStaticVariable("LinuxBionicCflags", linuxBionicCflags)
exportedVars.ExportStringListStaticVariable("LinuxBionicLdflags", linuxBionicLdflags) exportedVars.ExportStringListStaticVariable("LinuxBionicLdflags", linuxBionicLdflags)
exportedVars.ExportStringListStaticVariable("LinuxBionicLldflags", linuxBionicLdflags) exportedVars.ExportStringListStaticVariable("LinuxBionicLldflags", linuxBionicLldflags)
// Use the device gcc toolchain for now // Use the device gcc toolchain for now
exportedVars.ExportStringStaticVariable("LinuxBionicGccVersion", x86_64GccVersion) exportedVars.ExportStringStaticVariable("LinuxBionicGccVersion", x86_64GccVersion)

View file

@ -59,6 +59,10 @@ var (
"--gcc-toolchain=${LinuxGccRoot}", "--gcc-toolchain=${LinuxGccRoot}",
} }
linuxLldflags = append(linuxLdflags,
"-Wl,--compress-debug-sections=zstd",
)
linuxGlibcLdflags = []string{ linuxGlibcLdflags = []string{
"--sysroot ${LinuxGccRoot}/sysroot", "--sysroot ${LinuxGccRoot}/sysroot",
} }
@ -138,7 +142,7 @@ func init() {
exportedVars.ExportStringListStaticVariable("LinuxCflags", linuxCflags) exportedVars.ExportStringListStaticVariable("LinuxCflags", linuxCflags)
exportedVars.ExportStringListStaticVariable("LinuxLdflags", linuxLdflags) exportedVars.ExportStringListStaticVariable("LinuxLdflags", linuxLdflags)
exportedVars.ExportStringListStaticVariable("LinuxLldflags", linuxLdflags) exportedVars.ExportStringListStaticVariable("LinuxLldflags", linuxLldflags)
exportedVars.ExportStringListStaticVariable("LinuxGlibcCflags", linuxGlibcCflags) exportedVars.ExportStringListStaticVariable("LinuxGlibcCflags", linuxGlibcCflags)
exportedVars.ExportStringListStaticVariable("LinuxGlibcLdflags", linuxGlibcLdflags) exportedVars.ExportStringListStaticVariable("LinuxGlibcLdflags", linuxGlibcLdflags)
exportedVars.ExportStringListStaticVariable("LinuxGlibcLldflags", linuxGlibcLdflags) exportedVars.ExportStringListStaticVariable("LinuxGlibcLldflags", linuxGlibcLdflags)

View file

@ -65,6 +65,7 @@ var (
"-lpthread", "-lpthread",
"-lm", "-lm",
"-lgcc_s", "-lgcc_s",
"-Wl,--compress-debug-sections=zstd",
} }
deviceGlobalRustFlags = []string{ deviceGlobalRustFlags = []string{
@ -86,6 +87,7 @@ var (
"-Wl,--use-android-relr-tags", "-Wl,--use-android-relr-tags",
"-Wl,--no-undefined", "-Wl,--no-undefined",
"-B${cc_config.ClangBin}", "-B${cc_config.ClangBin}",
"-Wl,--compress-debug-sections=zstd",
} }
) )

View file

@ -98,9 +98,17 @@ do_strip_keep_mini_debug_info_linux() {
"${CLANG_BIN}/llvm-strip" --strip-all --keep-section=.ARM.attributes --remove-section=.comment "${infile}" -o "${outfile}.tmp" || fail=true "${CLANG_BIN}/llvm-strip" --strip-all --keep-section=.ARM.attributes --remove-section=.comment "${infile}" -o "${outfile}.tmp" || fail=true
if [ -z $fail ]; then if [ -z $fail ]; then
"${CREATE_MINIDEBUGINFO}" "${infile}" "${outfile}.mini_debuginfo.xz" # create_minidebuginfo has issues with compressed debug sections. Just
# decompress them for now using objcopy which understands compressed
# debug sections.
# b/306150780 tracks supporting this directly in create_minidebuginfo
decompressed="${infile}.decompressed"
"${CLANG_BIN}/llvm-objcopy" --decompress-debug-sections \
"${infile}" "${decompressed}"
"${CREATE_MINIDEBUGINFO}" "${decompressed}" "${outfile}.mini_debuginfo.xz"
"${CLANG_BIN}/llvm-objcopy" --add-section .gnu_debugdata="${outfile}.mini_debuginfo.xz" "${outfile}.tmp" "${CLANG_BIN}/llvm-objcopy" --add-section .gnu_debugdata="${outfile}.mini_debuginfo.xz" "${outfile}.tmp"
rm -f "${outfile}.mini_debuginfo.xz" rm -f "${outfile}.mini_debuginfo.xz" "${decompressed}"
else else
cp -f "${infile}" "${outfile}.tmp" cp -f "${infile}" "${outfile}.tmp"
fi fi