diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index f7b987bf810c1c..abe517f0f5dea3 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4659,11 +4659,8 @@ renderDebugOptions(const ToolChain &TC, const Driver &D, const llvm::Triple &T, // -gdwarf-aranges turns on the emission of the aranges section in the // backend. - // Always enabled for SCE tuning. - bool NeedAranges = DebuggerTuning == llvm::DebuggerKind::SCE; - if (const Arg *A = Args.getLastArg(options::OPT_gdwarf_aranges)) - NeedAranges = checkDebugInfoOption(A, Args, D, TC) || NeedAranges; - if (NeedAranges) { + if (const Arg *A = Args.getLastArg(options::OPT_gdwarf_aranges); + A && checkDebugInfoOption(A, Args, D, TC)) { CmdArgs.push_back("-mllvm"); CmdArgs.push_back("-generate-arange-section"); } diff --git a/clang/lib/Driver/ToolChains/PS4CPU.cpp b/clang/lib/Driver/ToolChains/PS4CPU.cpp index 974e486a0082bc..d6af9388e54a64 100644 --- a/clang/lib/Driver/ToolChains/PS4CPU.cpp +++ b/clang/lib/Driver/ToolChains/PS4CPU.cpp @@ -162,10 +162,6 @@ void tools::PS4cpu::Linker::ConstructJob(Compilation &C, const JobAction &JA, }; if (UseLTO) { - // We default to creating the arange section, but LTO does not. Enable it - // here. - AddCodeGenFlag("-generate-arange-section"); - // This tells LTO to perform JustMyCode instrumentation. if (UseJMC) AddCodeGenFlag("-enable-jmc-instrument"); @@ -272,10 +268,6 @@ void tools::PS5cpu::Linker::ConstructJob(Compilation &C, const JobAction &JA, }; if (UseLTO) { - // We default to creating the arange section, but LTO does not. Enable it - // here. - AddCodeGenFlag("-generate-arange-section"); - // This tells LTO to perform JustMyCode instrumentation. if (UseJMC) AddCodeGenFlag("-enable-jmc-instrument"); diff --git a/clang/test/Driver/debug-options.c b/clang/test/Driver/debug-options.c index 0a665f7017d636..21785ba01cb410 100644 --- a/clang/test/Driver/debug-options.c +++ b/clang/test/Driver/debug-options.c @@ -118,27 +118,28 @@ // RUN: %clang_cl -### -c -Z7 -target x86_64-windows-msvc -- %s 2>&1 \ // RUN: | FileCheck -check-prefix=G_NOTUNING %s -// On the PS4/PS5, -g defaults to -gno-column-info, and we always generate the -// arange section. +// On the PS4/PS5, -g defaults to -gno-column-info. We default to always +// generating the arange section, but keyed off SCE DebuggerTuning being in +// play during codegen, instead of -generate-arange-section. // RUN: %clang -### -c %s -target x86_64-scei-ps4 2>&1 \ // RUN: | FileCheck -check-prefix=NOG_PS %s // RUN: %clang -### -c %s -target x86_64-sie-ps5 2>&1 \ // RUN: | FileCheck -check-prefix=NOG_PS %s /// PS4 will stay on v4 even if the generic default version changes. // RUN: %clang -### -c %s -g -target x86_64-scei-ps4 2>&1 \ -// RUN: | FileCheck -check-prefixes=G_DWARF4,GARANGE,G_SCE,NOCI,FWD_TMPL_PARAMS %s +// RUN: | FileCheck -check-prefixes=G_DWARF4,G_SCE,NOCI,FWD_TMPL_PARAMS %s // RUN: %clang -### -c %s -g -target x86_64-sie-ps5 2>&1 \ -// RUN: | FileCheck -check-prefixes=G_DWARF5,GARANGE,G_SCE,NOCI,FWD_TMPL_PARAMS %s +// RUN: | FileCheck -check-prefixes=G_DWARF5,G_SCE,NOCI,FWD_TMPL_PARAMS %s // RUN: %clang -### -c %s -g -gcolumn-info -target x86_64-scei-ps4 2>&1 \ // RUN: | FileCheck -check-prefix=CI %s // RUN: %clang -### -c %s -gsce -target x86_64-unknown-linux 2>&1 \ // RUN: | FileCheck -check-prefix=NOCI %s // RUN: %clang -### %s -g -flto=thin -target x86_64-scei-ps4 2>&1 \ -// RUN: | FileCheck -check-prefix=SNLDTLTOGARANGE %s +// RUN: | FileCheck -check-prefix=LDGARANGE %s // RUN: %clang -### %s -g -flto=full -target x86_64-scei-ps4 2>&1 \ -// RUN: | FileCheck -check-prefix=SNLDFLTOGARANGE %s +// RUN: | FileCheck -check-prefix=LDGARANGE %s // RUN: %clang -### %s -g -flto -target x86_64-scei-ps5 2>&1 \ -// RUN: | FileCheck -check-prefix=LLDGARANGE %s +// RUN: | FileCheck -check-prefix=LDGARANGE %s // RUN: %clang -### %s -g -target x86_64-scei-ps5 2>&1 \ // RUN: | FileCheck -check-prefix=LDGARANGE %s @@ -321,8 +322,7 @@ // // NOG_PS: "-cc1" // NOG_PS-NOT: "-dwarf-version= -// NOG_PS: "-generate-arange-section" -// NOG_PS-NOT: "-dwarf-version= +// NOG_PS-NOT: "-generate-arange-section" // // G_ERR: error: unknown argument: // @@ -402,8 +402,7 @@ // // LDGARANGE: {{".*ld.*"}} {{.*}} -// LDGARANGE-NOT: "-plugin-opt=-generate-arange-section" -// LLDGARANGE: {{".*lld.*"}} {{.*}} "-plugin-opt=-generate-arange-section" +// LDGARANGE-NOT: -generate-arange-section" // SNLDTLTOGARANGE: {{".*orbis-ld.*"}} {{.*}} "-lto-thin-debug-options= -generate-arange-section" // SNLDFLTOGARANGE: {{".*orbis-ld.*"}} {{.*}} "-lto-debug-options= -generate-arange-section" diff --git a/clang/test/Driver/lto-jobs.c b/clang/test/Driver/lto-jobs.c index 43a478b0664d84..b4f109e4c502c1 100644 --- a/clang/test/Driver/lto-jobs.c +++ b/clang/test/Driver/lto-jobs.c @@ -11,7 +11,7 @@ // RUN: %clang --target=x86_64-scei-ps4 -### %s -flto=thin -flto-jobs=5 2> %t // RUN: FileCheck -check-prefix=CHECK-PS4-LINK-THIN-JOBS-ACTION < %t %s // -// CHECK-PS4-LINK-THIN-JOBS-ACTION: "-lto-thin-debug-options= -generate-arange-section -threads=5" +// CHECK-PS4-LINK-THIN-JOBS-ACTION: "-lto-thin-debug-options= -threads=5" // RUN: %clang --target=x86_64-apple-darwin13.3.0 -### %s -flto=thin -flto-jobs=5 2> %t // RUN: FileCheck -check-prefix=CHECK-LINK-THIN-JOBS2-ACTION < %t %s diff --git a/clang/test/Driver/ps4-linker.c b/clang/test/Driver/ps4-linker.c index be0103bffe8136..be989cdd7d5b17 100644 --- a/clang/test/Driver/ps4-linker.c +++ b/clang/test/Driver/ps4-linker.c @@ -5,8 +5,8 @@ // RUN: %clang --target=x86_64-scei-ps4 -flto=full -fjmc %s -### 2>&1 | FileCheck --check-prefixes=CHECK-FULL-LTO,CHECK-LIB %s // CHECK-NOT: -enable-jmc-instrument -// CHECK-THIN-LTO: "-lto-thin-debug-options= -generate-arange-section -enable-jmc-instrument" -// CHECK-FULL-LTO: "-lto-debug-options= -generate-arange-section -enable-jmc-instrument" +// CHECK-THIN-LTO: "-lto-thin-debug-options= -enable-jmc-instrument" +// CHECK-FULL-LTO: "-lto-debug-options= -enable-jmc-instrument" // Check the default library name. // CHECK-LIB: "--whole-archive" "-lSceDbgJmc" "--no-whole-archive" @@ -16,5 +16,5 @@ // RUN: %clang --target=x86_64-scei-ps4 -flto=thin -fcrash-diagnostics-dir=mydumps %s -### 2>&1 | FileCheck --check-prefixes=CHECK-DIAG-THIN-LTO %s // RUN: %clang --target=x86_64-scei-ps4 -flto=full -fcrash-diagnostics-dir=mydumps %s -### 2>&1 | FileCheck --check-prefixes=CHECK-DIAG-FULL-LTO %s -// CHECK-DIAG-THIN-LTO: "-lto-thin-debug-options= -generate-arange-section -crash-diagnostics-dir=mydumps" -// CHECK-DIAG-FULL-LTO: "-lto-debug-options= -generate-arange-section -crash-diagnostics-dir=mydumps" +// CHECK-DIAG-THIN-LTO: "-lto-thin-debug-options= -crash-diagnostics-dir=mydumps" +// CHECK-DIAG-FULL-LTO: "-lto-debug-options= -crash-diagnostics-dir=mydumps" diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 80cd5ec501f25d..578a90d402c548 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -354,6 +354,9 @@ DwarfDebug::DwarfDebug(AsmPrinter *A) UseLocSection = !TT.isNVPTX(); + // Always emit .debug_aranges for SCE tuning. + UseARangesSection = GenerateARangeSection || tuneForSCE(); + HasAppleExtensionAttributes = tuneForLLDB(); // Handle split DWARF. @@ -1450,7 +1453,7 @@ void DwarfDebug::endModule() { emitDebugInfo(); // Emit info into a debug aranges section. - if (GenerateARangeSection) + if (UseARangesSection) emitDebugARanges(); // Emit info into a debug ranges section. diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h index 452485b632c45f..13f4c379e00274 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -435,6 +435,9 @@ class DwarfDebug : public DebugHandlerBase { ///Allow emission of the .debug_loc section. bool UseLocSection = true; + /// Allow emission of .debug_aranges section + bool UseARangesSection = false; + /// Generate DWARF v4 type units. bool GenerateTypeUnits; diff --git a/llvm/test/DebugInfo/X86/debug-aranges-sce-tuning.ll b/llvm/test/DebugInfo/X86/debug-aranges-sce-tuning.ll new file mode 100644 index 00000000000000..ac0d61aef2b1cc --- /dev/null +++ b/llvm/test/DebugInfo/X86/debug-aranges-sce-tuning.ll @@ -0,0 +1,33 @@ +; This checks that .debug_aranges is always generated for the SCE debugger +; tuning. + +; RUN: llc -mtriple=x86_64 -debugger-tune=sce -filetype=obj %s -o %t +; RUN: llvm-dwarfdump -debug-aranges %t | FileCheck %s + +; CHECK: .debug_aranges contents: +; CHECK-NEXT: Address Range Header: +; CHECK-SAME: length = 0x0000002c, + +; IR generated and reduced from: +; $ cat foo.c +; int foo; +; $ clang -g -S -emit-llvm foo.c -o foo.ll + +target triple = "x86_64-unknown-linux-gnu" + +@foo = dso_local global i32 0, align 4, !dbg !0 + +!llvm.dbg.cu = !{!2} +!llvm.module.flags = !{!6, !7, !8} +!llvm.ident = !{!9} + +!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) +!1 = distinct !DIGlobalVariable(name: "foo", scope: !2, file: !3, line: 1, type: !5, isLocal: false, isDefinition: true) +!2 = distinct !DICompileUnit(language: DW_LANG_C11, file: !3, producer: "clang version 19.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !4, splitDebugInlining: false, nameTableKind: None) +!3 = !DIFile(filename: "foo.c", directory: "/tmp") +!4 = !{!0} +!5 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) +!6 = !{i32 7, !"Dwarf Version", i32 5} +!7 = !{i32 2, !"Debug Info Version", i32 3} +!8 = !{i32 1, !"wchar_size", i32 4} +!9 = !{!"clang version 19.0.0"}