Merge changes I33c95126,I126395d3,Iaa27fa0a,Ia149a81f into main

* changes:
  Reapply "Use zstd to compress debug info in rust libraries"
  Reapply "Use zstd to compress debug info in cc libraries"
  Reapply "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 21:08:01 +00:00 committed by Gerrit Code Review
commit 02237038e1
7 changed files with 43 additions and 7 deletions

View file

@ -46,6 +46,10 @@ var (
"-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,
// 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
@ -60,6 +64,7 @@ var (
func init() {
exportedVars.ExportStringListStaticVariable("LinuxBionicArm64Cflags", linuxCrossCflags)
exportedVars.ExportStringListStaticVariable("LinuxBionicArm64Ldflags", linuxCrossLdflags)
exportedVars.ExportStringListStaticVariable("LinuxBionicArm64Lldflags", linuxCrossLldflags)
}
// toolchain config for ARM64 Linux CrossHost. Almost everything is the same as the ARM64 Android

View file

@ -27,16 +27,24 @@ var (
"-march=armv7a",
}
linuxArmLldflags = append(linuxArmLdflags,
"-Wl,--compress-debug-sections=zstd",
)
linuxArm64Ldflags = []string{}
linuxArm64Lldflags = append(linuxArm64Ldflags,
"-Wl,--compress-debug-sections=zstd",
)
)
func init() {
exportedVars.ExportStringListStaticVariable("LinuxArmCflags", linuxArmCflags)
exportedVars.ExportStringListStaticVariable("LinuxArm64Cflags", linuxArm64Cflags)
exportedVars.ExportStringListStaticVariable("LinuxArmLdflags", linuxArmLdflags)
exportedVars.ExportStringListStaticVariable("LinuxArmLldflags", linuxArmLdflags)
exportedVars.ExportStringListStaticVariable("LinuxArmLldflags", linuxArmLldflags)
exportedVars.ExportStringListStaticVariable("LinuxArm64Ldflags", linuxArm64Ldflags)
exportedVars.ExportStringListStaticVariable("LinuxArm64Lldflags", linuxArm64Ldflags)
exportedVars.ExportStringListStaticVariable("LinuxArm64Lldflags", linuxArm64Lldflags)
exportedVars.ExportStringListStaticVariable("LinuxArmYasmFlags", []string{"-f elf32 -m arm"})
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.
"-gsimple-template-names",
// Use zstd to compress debug data.
"-gz=zstd",
// Make paths in deps files relative.
"-no-canonical-prefixes",
}
@ -200,7 +203,9 @@ var (
"-Wl,-mllvm,-regalloc-enable-advisor=release",
}
deviceGlobalLldflags = append(deviceGlobalLdflags, commonGlobalLldflags...)
deviceGlobalLldflags = append(append(deviceGlobalLdflags, commonGlobalLldflags...),
"-Wl,--compress-debug-sections=zstd",
)
hostGlobalCflags = []string{}

View file

@ -53,6 +53,10 @@ var (
"--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,
// 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
@ -71,7 +75,7 @@ const (
func init() {
exportedVars.ExportStringListStaticVariable("LinuxBionicCflags", linuxBionicCflags)
exportedVars.ExportStringListStaticVariable("LinuxBionicLdflags", linuxBionicLdflags)
exportedVars.ExportStringListStaticVariable("LinuxBionicLldflags", linuxBionicLdflags)
exportedVars.ExportStringListStaticVariable("LinuxBionicLldflags", linuxBionicLldflags)
// Use the device gcc toolchain for now
exportedVars.ExportStringStaticVariable("LinuxBionicGccVersion", x86_64GccVersion)

View file

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

View file

@ -65,6 +65,7 @@ var (
"-lpthread",
"-lm",
"-lgcc_s",
"-Wl,--compress-debug-sections=zstd",
}
deviceGlobalRustFlags = []string{
@ -86,6 +87,7 @@ var (
"-Wl,--use-android-relr-tags",
"-Wl,--no-undefined",
"-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
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="$(mktemp)"
"${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"
rm -f "${outfile}.mini_debuginfo.xz"
rm -f "${outfile}.mini_debuginfo.xz" "${decompressed}"
else
cp -f "${infile}" "${outfile}.tmp"
fi