PING^1

On 9/22/22 14:51, Martin Liška wrote:
> Hi.
> 
> Tested with Fangrui's patch set sent to binutils ML and mold linker.
> 
> $ gcc -g -gz=zstd a.c --save-temps --verbose 2>&1 | grep debug-sections
>  /home/marxin/Programming/binutils/objdir/gas/as-new -v --gdwarf-5 
> --compress-debug-sections=zstd --64 -o a.o a.s
>  /home/marxin/bin/gcc/libexec/gcc/x86_64-pc-linux-gnu/13.0.0/collect2 -plugin 
> /home/marxin/bin/gcc/libexec/gcc/x86_64-pc-linux-gnu/13.0.0/liblto_plugin.so 
> -plugin-opt=/home/marxin/bin/gcc/libexec/gcc/x86_64-pc-linux-gnu/13.0.0/lto-wrapper
>  -plugin-opt=-fresolution=a.res -plugin-opt=-pass-through=-lgcc 
> -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc 
> -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s 
> --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 
> --compress-debug-sections=zstd /lib/../lib64/crt1.o /lib/../lib64/crti.o 
> /home/marxin/bin/gcc/lib64/gcc/x86_64-pc-linux-gnu/13.0.0/crtbegin.o 
> -L/home/marxin/bin/gcc/lib64/gcc/x86_64-pc-linux-gnu/13.0.0 
> -L/home/marxin/bin/gcc/lib64/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../lib64 
> -L/lib/../lib64 -L/usr/lib/../lib64 
> -L/home/marxin/bin/gcc/lib64/gcc/x86_64-pc-linux-gnu/13.0.0/../../.. a.o 
> -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s 
> --no-as-needed 
> /home/marxin/bin/gcc/lib64/gcc/x86_64-pc-linux-gnu/13.0.0/crtend.o 
> /lib/../lib64/crtn.o
> 
> $ gdb a.out
> ...
> BFD: /home/marxin/Programming/testcases/a.out: unable to initialize 
> decompress status for section .debug_abbrev
> BFD: /home/marxin/Programming/testcases/a.out: unable to initialize 
> decompress status for section .debug_abbrev
> "/home/marxin/Programming/testcases/a.out": not in executable format: file 
> format not recognized
> 
> So it's really compressed with zstd. I'm going to write ChangeLog entry for 
> zlib-gnu once this gets merged as well.
> 
> Ready to be installed?
> Thanks,
> Martin
> 
>       PR driver/106897
> 
> gcc/ChangeLog:
> 
>       * common.opt: Add -gz=zstd value.
>       * configure.ac: Detect --compress-debug-sections=zstd
>       for both linker and assembler.
>       * configure: Regenerate.
>       * gcc.cc (LINK_COMPRESS_DEBUG_SPEC): Handle -gz=zstd.
>       (ASM_COMPRESS_DEBUG_SPEC): Likewise.
> ---
>  gcc/common.opt   |  5 ++++-
>  gcc/configure    | 11 +++++++++--
>  gcc/configure.ac | 11 +++++++++--
>  gcc/gcc.cc       | 15 +++++++++++++++
>  4 files changed, 37 insertions(+), 5 deletions(-)
> 
> diff --git a/gcc/common.opt b/gcc/common.opt
> index 06ef768ab78..68370db816b 100644
> --- a/gcc/common.opt
> +++ b/gcc/common.opt
> @@ -3419,7 +3419,10 @@ EnumValue
>  Enum(compressed_debug_sections) String(zlib) Value(1)
>  
>  EnumValue
> -Enum(compressed_debug_sections) String(zlib-gnu) Value(2)
> +Enum(compressed_debug_sections) String(zstd) Value(2)
> +
> +EnumValue
> +Enum(compressed_debug_sections) String(zlib-gnu) Value(3)
>  
>  gz
>  Common Driver
> diff --git a/gcc/configure b/gcc/configure
> index 70a013e9a30..ce4e1859e1f 100755
> --- a/gcc/configure
> +++ b/gcc/configure
> @@ -29727,13 +29727,16 @@ else
>     if $gcc_cv_as --compress-debug-sections -o conftest.o conftest.s 2>&1 | 
> grep -i warning > /dev/null
>     then
>       gcc_cv_as_compress_debug=0
> -   # Since binutils 2.26, gas supports --compress-debug-sections=zlib,
> -   # defaulting to the ELF gABI format.
>     elif $gcc_cv_as --compress-debug-sections=zlib -o conftest.o conftest.s > 
> /dev/null 2>&1
>     then
>       gcc_cv_as_compress_debug=1
>       gcc_cv_as_compress_debug_option="--compress-debug-sections"
>       gcc_cv_as_no_compress_debug_option="--nocompress-debug-sections"
> +     # Since binutils 2.40, gas supports --compress-debug-sections=zstd.
> +     if $gcc_cv_as --compress-debug-sections=zstd -o conftest.o conftest.s > 
> /dev/null 2>&1
> +     then
> +       gcc_cv_as_compress_debug=2
> +     fi
>     else
>       gcc_cv_as_compress_debug=0
>     fi
> @@ -30251,6 +30254,10 @@ $as_echo_n "checking linker for compressed debug 
> sections... " >&6; }
>  if $gcc_cv_ld --help 2>&1 | grep -- 
> '--compress-debug-sections.*\<zlib-gabi\>' > /dev/null; then
>      gcc_cv_ld_compress_debug=1
>      gcc_cv_ld_compress_debug_option="--compress-debug-sections"
> +    # Detect zstd debug section compression support
> +    if $gcc_cv_ld --help 2>&1 | grep -- 
> '--compress-debug-sections.*\<zstd\>' > /dev/null; then
> +      gcc_cv_ld_compress_debug=2
> +    fi
>  else
>    case "${target}" in
>      *-*-solaris2*)
> diff --git a/gcc/configure.ac b/gcc/configure.ac
> index 96e10d7c194..b6bafa8b7d6 100644
> --- a/gcc/configure.ac
> +++ b/gcc/configure.ac
> @@ -5732,13 +5732,16 @@ gcc_GAS_CHECK_FEATURE([compressed debug sections],
>     if $gcc_cv_as --compress-debug-sections -o conftest.o conftest.s 2>&1 | 
> grep -i warning > /dev/null
>     then
>       gcc_cv_as_compress_debug=0
> -   # Since binutils 2.26, gas supports --compress-debug-sections=zlib,
> -   # defaulting to the ELF gABI format.
>     elif $gcc_cv_as --compress-debug-sections=zlib -o conftest.o conftest.s > 
> /dev/null 2>&1
>     then
>       gcc_cv_as_compress_debug=1
>       gcc_cv_as_compress_debug_option="--compress-debug-sections"
>       gcc_cv_as_no_compress_debug_option="--nocompress-debug-sections"
> +     # Since binutils 2.40, gas supports --compress-debug-sections=zstd.
> +     if $gcc_cv_as --compress-debug-sections=zstd -o conftest.o conftest.s > 
> /dev/null 2>&1
> +     then
> +       gcc_cv_as_compress_debug=2
> +     fi
>     else
>       gcc_cv_as_compress_debug=0
>     fi])
> @@ -6127,6 +6130,10 @@ AC_MSG_CHECKING(linker for compressed debug sections)
>  if $gcc_cv_ld --help 2>&1 | grep -- 
> '--compress-debug-sections.*\<zlib-gabi\>' > /dev/null; then
>      gcc_cv_ld_compress_debug=1
>      gcc_cv_ld_compress_debug_option="--compress-debug-sections"
> +    # Detect zstd debug section compression support
> +    if $gcc_cv_ld --help 2>&1 | grep -- 
> '--compress-debug-sections.*\<zstd\>' > /dev/null; then
> +      gcc_cv_ld_compress_debug=2
> +    fi
>  else
>  changequote(,)dnl
>    case "${target}" in
> diff --git a/gcc/gcc.cc b/gcc/gcc.cc
> index 7578988efa9..2ffbbc0bf2a 100644
> --- a/gcc/gcc.cc
> +++ b/gcc/gcc.cc
> @@ -835,6 +835,14 @@ proper position among the other output files.  */
>  #define LINK_COMPRESS_DEBUG_SPEC \
>       " %{gz|gz=zlib:"  LD_COMPRESS_DEBUG_OPTION "=zlib}" \
>       " %{gz=none:"     LD_COMPRESS_DEBUG_OPTION "=none}" \
> +     " %{gz*:%e-gz=zstd is not supported in this configuration} " \
> +     " %{gz=zlib-gnu:}" /* Ignore silently zlib-gnu option value.  */
> +#elif HAVE_LD_COMPRESS_DEBUG == 2
> +/* ELF gABI style and ZSTD.  */
> +#define LINK_COMPRESS_DEBUG_SPEC \
> +     " %{gz|gz=zlib:"  LD_COMPRESS_DEBUG_OPTION "=zlib}" \
> +     " %{gz=none:"     LD_COMPRESS_DEBUG_OPTION "=none}" \
> +     " %{gz=zstd:"     LD_COMPRESS_DEBUG_OPTION "=zstd}" \
>       " %{gz=zlib-gnu:}" /* Ignore silently zlib-gnu option value.  */
>  #else
>  #error Unknown value for HAVE_LD_COMPRESS_DEBUG.
> @@ -890,6 +898,13 @@ proper position among the other output files.  */
>       " %{gz|gz=zlib:"  AS_COMPRESS_DEBUG_OPTION "=zlib}" \
>       " %{gz=none:"     AS_COMPRESS_DEBUG_OPTION "=none}" \
>       " %{gz=zlib-gnu:}" /* Ignore silently zlib-gnu option value.  */
> +#elif HAVE_AS_COMPRESS_DEBUG == 2
> +/* ELF gABI style and ZSTD.  */
> +#define ASM_COMPRESS_DEBUG_SPEC \
> +     " %{gz|gz=zlib:"  AS_COMPRESS_DEBUG_OPTION "=zlib}" \
> +     " %{gz=none:"     AS_COMPRESS_DEBUG_OPTION "=none}" \
> +     " %{gz=zstd:"     AS_COMPRESS_DEBUG_OPTION "=zstd}" \
> +     " %{gz=zlib-gnu:}" /* Ignore silently zlib-gnu option value.  */
>  #else
>  #error Unknown value for HAVE_AS_COMPRESS_DEBUG.
>  #endif

Reply via email to