Hi,

this is the build failure on Windows with binutils for which GNU as accepts 
the --gdwarf-5 switch but GNU ld generates broken binaries with DWARF 5.

We already have the HAVE_LD_BROKEN_PE_DWARF5 kludge to disable DWARF 5 in this 
case but it only tames the DWARF version in the compiler, so the driver still 
passes --gdwarf-5 when invoked on an assembly file with -g.

The attached patch is a minimal fix to plug the hole, and I don't think that 
anything more sophisticated is worth the hassle since 2.37 supports DWARF 5,
i.e. HAVE_AS_GDWARF_5_DEBUG_FLAG and HAVE_AS_WORKING_DWARF_N_FLAG are defined 
and HAVE_LD_BROKEN_PE_DWARF5 is not with it.

Tested on x86-64/Linux and x86[-64]/Windows, OK for mainline and 11 branch?


2021-07-07  Eric Botcazou  <ebotca...@adacore.com>

        PR target/101377
        * gcc.c.c (ASM_DEBUG_DWARF_OPTION): Set again to --gdwarf2
        if HAVE_AS_WORKING_DWARF_N_FLAG is not defined
        and HAVE_LD_BROKEN_PE_DWARF5 is defined.

-- 
Eric Botcazou
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 7837553958b..7c75d1314fa 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -910,7 +910,7 @@ proper position among the other output files.  */
    than in ASM_DEBUG_SPEC, so that it applies to both .s and .c etc.
    compilations.  */
 #  define ASM_DEBUG_DWARF_OPTION ""
-# elif defined(HAVE_AS_GDWARF_5_DEBUG_FLAG)
+# elif defined(HAVE_AS_GDWARF_5_DEBUG_FLAG) && !defined(HAVE_LD_BROKEN_PE_DWARF5)
 #  define ASM_DEBUG_DWARF_OPTION "%{%:dwarf-version-gt(4):--gdwarf-5;" \
 	"%:dwarf-version-gt(3):--gdwarf-4;"				\
 	"%:dwarf-version-gt(2):--gdwarf-3;"				\

Reply via email to