diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 78936fd634f33..136db416f5b30 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4718,11 +4718,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 974e486a0082b..d6af9388e54a6 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 0a665f7017d63..21785ba01cb41 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 43a478b0664d8..b4f109e4c502c 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 be0103bffe813..be989cdd7d5b1 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 f88653146cc6f..5f1f315c5ab24 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 452485b632c45..13f4c379e0027 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.test b/llvm/test/DebugInfo/X86/debug-aranges-sce-tuning.test new file mode 100644 index 0000000000000..5729155c937e7 --- /dev/null +++ b/llvm/test/DebugInfo/X86/debug-aranges-sce-tuning.test @@ -0,0 +1,41 @@ +# This checks that .debug_aranges is always generated for the SCE debugger +# tuning. + +RUN: rm -rf %t && split-file %s %t && cd %t +RUN: llc -debugger-tune=sce -filetype=obj foo.ll -o foo.o +RUN: llvm-dwarfdump -debug-aranges foo.o | FileCheck %s + +CHECK: .debug_aranges contents: +CHECK-NEXT: Address Range Header: +CHECK-SAME: length = 0x0000002c, + +#--- foo.c +int foo; + +#--- gen +clang --target=x86_64-linux-gnu -g -S -emit-llvm foo.c -o - + +#--- foo.ll +; ModuleID = 'foo.c' +source_filename = "foo.c" +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +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, !9, !10, !11, !12} + +!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, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !4, splitDebugInlining: false, nameTableKind: None) +!3 = !DIFile(filename: "foo.c", directory: "/proc/self/cwd", checksumkind: CSK_MD5, checksum: "e0f2c326d820c28d30f9b0ea95178f64") +!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 = !{i32 8, !"PIC Level", i32 2} +!10 = !{i32 7, !"PIE Level", i32 2} +!11 = !{i32 7, !"uwtable", i32 2} +!12 = !{i32 7, !"frame-pointer", i32 2} diff --git a/llvm/test/DebugInfo/debuglineinfo-path.ll b/llvm/test/DebugInfo/debuglineinfo-path.ll index f6574a2a46f12..7e408aff6ceff 100644 --- a/llvm/test/DebugInfo/debuglineinfo-path.ll +++ b/llvm/test/DebugInfo/debuglineinfo-path.ll @@ -1,8 +1,9 @@ ; Make sure that absolute source dir is detected correctly regardless of the platform. ; On powerpc llvm-nm describes win_func as a global variable, not a function. It breaks the test. -; It is not essential to DWARF path handling code we're testing here. -; UNSUPPORTED: target=powerpc{{.*}} +; On PlayStation, (pre-relocated) .debug_aranges cause symbolization to fail, also breaking the test. +; These are not essential to DWARF path handling code we're testing here. +; UNSUPPORTED: target=powerpc{{.*}}, target=x86_64-{{.*-ps[45]}} ; REQUIRES: object-emission ; RUN: %llc_dwarf -O0 -filetype=obj -o %t < %s ; RUN: llvm-nm --radix=o %t | grep posix_absolute_func > %t.posix_absolute_func