From d652c017f285b44ad5ace126870e5edff95dd155 Mon Sep 17 00:00:00 2001 From: Djordje Todorovic Date: Fri, 24 Jul 2020 13:31:36 +0200 Subject: [PATCH] [DWARF] Avoid entry_values production for SCE SONY debugger does not prefer debug entry values feature, so the plan is to avoid production of the entry values by default when the tuning is SCE debugger. The feature still can be enabled with the -debug-entry-values option for the testing/development purposes. This patch addresses PR46643. Differential Revision: https://reviews.llvm.org/D83462 --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 8 +------- lib/CodeGen/TargetOptionsImpl.cpp | 8 ++++++-- .../MIR/X86/call-site-gnu-vs-dwarf5-attrs.mir | 2 +- ...ue.mir => debug-entry-value-operation.mir} | 20 ++++++++++++------- 4 files changed, 21 insertions(+), 17 deletions(-) rename test/DebugInfo/MIR/X86/{DW_OP_entry_value.mir => debug-entry-value-operation.mir} (91%) diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index a705fa4eec3..5a4c4dfb90a 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -95,10 +95,6 @@ static cl::opt UseDwarfRangesBaseAddressSpecifier( "use-dwarf-ranges-base-address-specifier", cl::Hidden, cl::desc("Use base address specifiers in debug_ranges"), cl::init(false)); -static cl::opt EmitDwarfDebugEntryValues( - "emit-debug-entry-values", cl::Hidden, - cl::desc("Emit the debug entry values"), cl::init(false)); - static cl::opt GenerateARangeSection("generate-arange-section", cl::Hidden, cl::desc("Generate dwarf aranges"), @@ -430,9 +426,7 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M) // Emit call-site-param debug info for GDB and LLDB, if the target supports // the debug entry values feature. It can also be enabled explicitly. - EmitDebugEntryValues = (Asm->TM.Options.ShouldEmitDebugEntryValues() && - (tuneForGDB() || tuneForLLDB())) || - EmitDwarfDebugEntryValues; + EmitDebugEntryValues = Asm->TM.Options.ShouldEmitDebugEntryValues(); Asm->OutStreamer->getContext().setDwarfVersion(DwarfVersion); } diff --git a/lib/CodeGen/TargetOptionsImpl.cpp b/lib/CodeGen/TargetOptionsImpl.cpp index 4866d4c171c..0731cf9b28f 100644 --- a/lib/CodeGen/TargetOptionsImpl.cpp +++ b/lib/CodeGen/TargetOptionsImpl.cpp @@ -47,7 +47,11 @@ bool TargetOptions::HonorSignDependentRoundingFPMath() const { } /// NOTE: There are targets that still do not support the debug entry values -/// production. +/// production and that is being controlled with the SupportsDebugEntryValues. +/// In addition, SCE debugger does not have the feature implemented, so prefer +/// not to emit the debug entry values in that case. +/// The EnableDebugEntryValues can be used for the testing purposes. bool TargetOptions::ShouldEmitDebugEntryValues() const { - return SupportsDebugEntryValues || EnableDebugEntryValues; + return (SupportsDebugEntryValues && DebuggerTuning != DebuggerKind::SCE) || + EnableDebugEntryValues; } diff --git a/test/DebugInfo/MIR/X86/call-site-gnu-vs-dwarf5-attrs.mir b/test/DebugInfo/MIR/X86/call-site-gnu-vs-dwarf5-attrs.mir index b60c10a04e5..fdbebd306f3 100644 --- a/test/DebugInfo/MIR/X86/call-site-gnu-vs-dwarf5-attrs.mir +++ b/test/DebugInfo/MIR/X86/call-site-gnu-vs-dwarf5-attrs.mir @@ -21,7 +21,7 @@ # RUN: | llvm-dwarfdump - | FileCheck %s -check-prefixes=CHECK-DWARF5 -implicit-check-not=DW_AT_call # # RUN: llc -emit-call-site-info -dwarf-version 5 -filetype=obj -debugger-tune=sce \ -# RUN: -emit-debug-entry-values -debug-entry-values -mtriple=x86_64-unknown-unknown \ +# RUN: -debug-entry-values -mtriple=x86_64-unknown-unknown \ # RUN: -start-after=machineverifier -o - %s | llvm-dwarfdump - | FileCheck %s -check-prefixes=CHECK-DWARF5 # # This is based on the following reproducer: diff --git a/test/DebugInfo/MIR/X86/DW_OP_entry_value.mir b/test/DebugInfo/MIR/X86/debug-entry-value-operation.mir similarity index 91% rename from test/DebugInfo/MIR/X86/DW_OP_entry_value.mir rename to test/DebugInfo/MIR/X86/debug-entry-value-operation.mir index f7f74b628d1..a368cc5c942 100644 --- a/test/DebugInfo/MIR/X86/DW_OP_entry_value.mir +++ b/test/DebugInfo/MIR/X86/debug-entry-value-operation.mir @@ -1,16 +1,22 @@ # RUN: llc -start-before=livedebugvalues -mtriple=x86_64-apple-darwin -o %t %s -filetype=obj # RUN: llvm-dwarfdump %t | FileCheck %s -# -# int global; -# int foo(int p, int q, int r) { -# global = p + 1; -# asm __volatile("" : : : "edi", "esi", "edx"); -# return 123; -# } + +# RUN: llc -start-before=livedebugvalues -debugger-tune=sce -mtriple=x86_64-sce-ps4 -o %t1 %s -filetype=obj +# RUN: llvm-dwarfdump %t1 | FileCheck %s -check-prefix=SCE + +## Based on: +## int global; +## int foo(int p, int q, int r) { +## global = p + 1; +## asm __volatile("" : : : "edi", "esi", "edx"); +## return 123; +## } # CHECK: DW_TAG_formal_parameter # CHECK: DW_OP_entry_value +# SCE-NOT: DW_OP_{{.*}}entry_value + --- | ; ModuleID = 'multiple-param-dbg-value-entry.ll' source_filename = "multiple-param-dbg-value-entry.c"