https://gcc.gnu.org/g:48d302702d9c37d0da4f7446c1c09677e4f2f311

commit r13-8585-g48d302702d9c37d0da4f7446c1c09677e4f2f311
Author: Iain Sandoe <i...@sandoe.co.uk>
Date:   Sun Mar 31 23:25:31 2024 +0100

    Darwin: Do not emit .macinfo when dsymutil cannot consume it.
    
    Some verions of dsymutil do not ignore .macinfo sections, but instead
    ignore the entire debug in the file.
    
    To avoid this total loss of debug, when we detect that the debug level
    is g3 and the dsymutil version cannot support it, we reduce the level
    to g2 and issue a note.
    
    This behaviour can be overidden by -gstrict-dwarf (although the objects
    will contain macinfo; dsymutil will not produce a .dSYM with it).
    
    gcc/ChangeLog:
    
            * config/darwin.cc (darwin_override_options): Reduce the debug
            level to 2 if dsymutil cannot handle .macinfo sections.
    
    Signed-off-by: Iain Sandoe <i...@sandoe.co.uk>
    (cherry picked from commit 3c499f8f6f7d19b21d7047efabbe6396ee1c2cac)

Diff:
---
 gcc/config/darwin.cc | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/gcc/config/darwin.cc b/gcc/config/darwin.cc
index b4a7c4226c4..fd2b6e872b7 100644
--- a/gcc/config/darwin.cc
+++ b/gcc/config/darwin.cc
@@ -3363,10 +3363,6 @@ darwin_override_options (void)
                  global_options.x_flag_objc_abi);
     }
 
-  /* Don't emit DWARF3/4 unless specifically selected.  This is a
-     workaround for tool bugs.  */
-  if (!OPTION_SET_P (dwarf_strict))
-    dwarf_strict = 1;
   if (!OPTION_SET_P (dwarf_version))
     dwarf_version = 2;
 
@@ -3378,6 +3374,24 @@ darwin_override_options (void)
       OPTION_SET_P (dwarf_split_debug_info) = 0;
     }
 
+  /* Cases where dsymutil will exclude files with .macinfo sections; we are
+     better off forcing the debug level to 2 than completely excluding the
+     files.  If strict dwarf is set, then emit the macinfo anyway.  */
+  if (debug_info_level == DINFO_LEVEL_VERBOSE
+      && (!OPTION_SET_P (dwarf_strict) || dwarf_strict == 0)
+      && ((dsymutil_version.kind == CLANG && dsymutil_version.major >= 1500)
+         || (dsymutil_version.kind == LLVM && dsymutil_version.major >= 15)))
+    {
+      inform (input_location,
+             "%<-g3%> is not supported by the debug linker in use (set to 2)");
+      debug_info_level = DINFO_LEVEL_NORMAL;
+    }
+
+  /* Limit DWARF to the chosen version, the linker and debug linker might not
+     be able to consume newer structures.  */
+  if (!OPTION_SET_P (dwarf_strict))
+    dwarf_strict = 1;
+
   /* Do not allow unwind tables to be generated by default for m32.
      fnon-call-exceptions will override this, regardless of what we do.  */
   if (generating_for_darwin_version < 10

Reply via email to