This allows `image lookup -a ... -v` to print variables only if the given address is covered by the valid ranges of the variables. Since variables created in dwarf plugin always has empty scope range, print the variable if it has empty scope. Differential Revision: https://reviews.llvm.org/D119963
49 lines
2.9 KiB
Plaintext
49 lines
2.9 KiB
Plaintext
# RUN: llvm-mc -filetype=obj %S/Inputs/unused-inlined-params.s \
|
|
# RUN: -triple x86_64-pc-linux -o %t.o
|
|
# RUN: %lldb %t.o -s %s -o exit | FileCheck %s
|
|
|
|
|
|
# In this test we verify that inlined functions still mention
|
|
# all their parameters in `frame variable`, even when those
|
|
# parameters were completely optimized away from the concrete
|
|
# instance of the inlined function in the debug info.
|
|
# The debugger should look up the parameters in the abstract
|
|
# origin of the concrete instance.
|
|
|
|
# Let us check that unused parameters of an inlined function are listed
|
|
# at the inlined function entry.
|
|
image lookup -v -s break_at_inlined_f_in_main
|
|
# CHECK-LABEL: image lookup -v -s break_at_inlined_f_in_main
|
|
# CHECK: name = "unused1", type = "void *", valid ranges = <block>, location = <empty>
|
|
# CHECK: name = "used", type = "int", valid ranges = <block>, location = [0x0000000000000011, 0x0000000000000014) -> DW_OP_consts +42
|
|
# CHECK: name = "unused2", type = "int", valid ranges = <block>, location = <empty>
|
|
# CHECK: name = "partial", type = "int", valid ranges = <block>, location = [0x0000000000000011, 0x0000000000000019) -> DW_OP_reg4 RSI
|
|
# CHECK: name = "unused3", type = "int", valid ranges = <block>, location = <empty>
|
|
|
|
# Show variables outsid of the live range of the 'partial' parameter
|
|
# and verify that the output is as expected.
|
|
image lookup -v -s break_at_inlined_f_in_main_between_printfs
|
|
# CHECK-LABEL: image lookup -v -s break_at_inlined_f_in_main_between_printfs
|
|
# CHECK: name = "unused1", type = "void *", valid ranges = <block>, location = <empty>
|
|
# CHECK: name = "used", type = "int", valid ranges = <block>, location = [0x0000000000000014, 0x000000000000001e) -> DW_OP_reg3 RBX
|
|
# CHECK: name = "unused2", type = "int", valid ranges = <block>, location = <empty>
|
|
# Note: image lookup does not show variables outside of their
|
|
# location, so |partial| is missing here.
|
|
# CHECK-NOT: partial
|
|
# CHECK: name = "unused3", type = "int", valid ranges = <block>, location = <empty>
|
|
|
|
# Check that we show parameters even if all of them are compiled away.
|
|
image lookup -v -s break_at_inlined_g_in_main
|
|
# CHECK-LABEL: image lookup -v -s break_at_inlined_g_in_main
|
|
# CHECK: name = "unused", type = "int", valid ranges = <block>, location = <empty>
|
|
|
|
# Check that even the other inlined instance of f displays the correct
|
|
# parameters.
|
|
image lookup -v -s break_at_inlined_f_in_other
|
|
# CHECK-LABEL: image lookup -v -s break_at_inlined_f_in_other
|
|
# CHECK: name = "unused1", type = "void *", valid ranges = <block>, location = <empty>
|
|
# CHECK: name = "used", type = "int", valid ranges = <block>, location = [0x0000000000000001, 0x000000000000000b) -> DW_OP_consts +1
|
|
# CHECK: name = "unused2", type = "int", valid ranges = <block>, location = <empty>
|
|
# CHECK: name = "partial", type = "int", valid ranges = <block>, location = [0x0000000000000001, 0x0000000000000006) -> DW_OP_consts +2
|
|
# CHECK: name = "unused3", type = "int", valid ranges = <block>, location = <empty>
|