Index: llvm/lib/MC/MCDwarf.cpp =================================================================== --- llvm/lib/MC/MCDwarf.cpp +++ llvm/lib/MC/MCDwarf.cpp @@ -462,11 +462,14 @@ emitAbsValue(*MCOS, MakeStartMinusEndExpr(*MCOS, *LineStartSym, *LineEndSym, 4), 4); - // Next 2 bytes is the Version. - // FIXME: On Darwin we still default to V2. unsigned LineTableVersion = context.getDwarfVersion(); - if (context.getObjectFileInfo()->getTargetTriple().isOSDarwin()) + + // On Darwin we default to v2 for anything before DWARF v5. + if (context.getObjectFileInfo()->getTargetTriple().isOSDarwin() && + LineTableVersion < 5) LineTableVersion = 2; + + // Next 2 bytes is the Version. MCOS->EmitIntValue(LineTableVersion, 2); // Keep track of the bytes between the very start and where the header length Index: llvm/test/CodeGen/Generic/dwarf-md5.ll =================================================================== --- llvm/test/CodeGen/Generic/dwarf-md5.ll +++ llvm/test/CodeGen/Generic/dwarf-md5.ll @@ -1,9 +1,6 @@ ; MD5 checksums provided by IR should be passed through to asm. ; They'll be emitted to an object file only for DWARF 5 or later. -; Darwin clamps the line table at DWARF v2 so XFAIL this test. -; XFAIL: darwin - ; REQUIRES: object-emission ; RUN: %llc_dwarf -dwarf-version 4 -filetype=asm -o - %s | FileCheck %s --check-prefix=ASM-4 ; RUN: %llc_dwarf -dwarf-version 5 -filetype=asm -o - %s | FileCheck %s --check-prefix=ASM-5 Index: llvm/test/CodeGen/Generic/dwarf-source.ll =================================================================== --- llvm/test/CodeGen/Generic/dwarf-source.ll +++ llvm/test/CodeGen/Generic/dwarf-source.ll @@ -1,9 +1,6 @@ ; Source text provided by IR should be passed through to asm. ; It is emitted to an object file only for DWARF 5 or later. -; Darwin clamps the line table at DWARF v2 so XFAIL this test. -; XFAIL: darwin - ; REQUIRES: object-emission ; RUN: %llc_dwarf -dwarf-version 4 -filetype=asm -o - %s | FileCheck %s --check-prefix=ASM-4 ; RUN: %llc_dwarf -dwarf-version 5 -filetype=asm -o - %s | FileCheck %s --check-prefix=ASM-5 Index: llvm/test/MC/ELF/dwarf-file0.s =================================================================== --- llvm/test/MC/ELF/dwarf-file0.s +++ llvm/test/MC/ELF/dwarf-file0.s @@ -4,8 +4,6 @@ # RUN: llvm-mc -dwarf-version 4 %s -filetype=asm -o - 2>&1 | FileCheck %s --check-prefix=WARN # RUN: llvm-mc -dwarf-version 5 %s -filetype=obj -o - | llvm-dwarfdump -debug-line - | FileCheck %s --check-prefixes=CHECK,CHECK-5 # RUN: llvm-mc -dwarf-version 5 %s -filetype=asm -o - | FileCheck %s --check-prefixes=ASM,ASM-5 -# Darwin is stuck on DWARF v2. -# XFAIL: darwin .file 0 "/test" "root.cpp" .file 1 "/include" "header.h" .file 2 "/test" "root.cpp" Index: llvm/test/MC/ELF/dwarf-loc0.s =================================================================== --- llvm/test/MC/ELF/dwarf-loc0.s +++ llvm/test/MC/ELF/dwarf-loc0.s @@ -1,8 +1,6 @@ # REQUIRES: default_triple # RUN: llvm-mc -dwarf-version 5 %s -filetype=obj -o - | llvm-dwarfdump -debug-line - | FileCheck %s # RUN: not llvm-mc -dwarf-version 4 %s -filetype=asm -o - 2>&1 | FileCheck %s -check-prefix=ERR -# Darwin line table is stuck on DWARF v2. -# XFAIL: darwin # Show that ".loc 0" works in DWARF v5, gets an error for earlier versions. .file 0 "root.cpp" .file 1 "header.h"