[PS4/PS5][Driver][DWARF] Always emit .debug_aranges for SCE tuning (#99629)
Some of SIE's post-mortem analysis infrastructure currently makes use of .debug_aranges, so we'd like to ensure the section's presence in PlayStation binaries. The simplest way to do this is force emission when the debugger tuning is set to SCE (which is in turn typically initialized from the target triple). This also simplifies the driver. SIE tracker: TOOLCHAIN-16951
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
33
llvm/test/DebugInfo/X86/debug-aranges-sce-tuning.ll
Normal file
33
llvm/test/DebugInfo/X86/debug-aranges-sce-tuning.ll
Normal file
@@ -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"}
|
||||
Reference in New Issue
Block a user