The function was returning an incorrect (empty) value on the first invocation. Given that this only affected the first invocation, this bug/typo went mostly unaffected. DW_AT_const_value were particularly badly affected by this as the GetByteSize call is SymbolFileDWARF::ParseVariableDIE is likely to be the first call of this function, and its effects cannot be undone by retrying. Depends on D86348. Differential Revision: https://reviews.llvm.org/D86436
176 lines
8.3 KiB
ArmAsm
176 lines
8.3 KiB
ArmAsm
# Test handling of (optimized-out/location-less) variables whose value is
|
|
# specified by DW_AT_const_value
|
|
|
|
# REQUIRES: x86
|
|
|
|
# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux %s -o %t
|
|
# RUN: %lldb %t \
|
|
# RUN: -o "target variable udata data1 data2 data4 data8 string strp ref4 udata_ptr" \
|
|
# RUN: -o exit | FileCheck %s
|
|
|
|
# CHECK-LABEL: target variable
|
|
## Variable specified via DW_FORM_udata. This is typical for clang (10).
|
|
# CHECK: (unsigned long) udata = 4742474247424742
|
|
## Variables specified via fixed-size forms. This is typical for gcc (9).
|
|
# CHECK: (unsigned long) data1 = 47
|
|
# CHECK: (unsigned long) data2 = 4742
|
|
# CHECK: (unsigned long) data4 = 47424742
|
|
# CHECK: (unsigned long) data8 = 4742474247424742
|
|
## Variables specified using string forms. This behavior purely speculative -- I
|
|
## don't know of any compiler that would represent character strings this way.
|
|
# CHECK: (char [7]) string = "string"
|
|
# CHECK: (char [7]) strp = "strp"
|
|
## Bogus attribute form. Let's make sure we don't crash at least.
|
|
# CHECK: (char [7]) ref4 = <empty constant data>
|
|
## A variable of pointer type.
|
|
# CHECK: (unsigned long *) udata_ptr = 0xdeadbeefbaadf00d
|
|
|
|
.section .debug_abbrev,"",@progbits
|
|
.byte 1 # Abbreviation Code
|
|
.byte 17 # DW_TAG_compile_unit
|
|
.byte 1 # DW_CHILDREN_yes
|
|
.byte 37 # DW_AT_producer
|
|
.byte 8 # DW_FORM_string
|
|
.byte 3 # DW_AT_name
|
|
.byte 8 # DW_FORM_string
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.byte 2 # Abbreviation Code
|
|
.byte 15 # DW_TAG_pointer_type
|
|
.byte 0 # DW_CHILDREN_no
|
|
.byte 73 # DW_AT_type
|
|
.byte 19 # DW_FORM_ref4
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.byte 4 # Abbreviation Code
|
|
.byte 1 # DW_TAG_array_type
|
|
.byte 1 # DW_CHILDREN_yes
|
|
.byte 73 # DW_AT_type
|
|
.byte 19 # DW_FORM_ref4
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.byte 5 # Abbreviation Code
|
|
.byte 33 # DW_TAG_subrange_type
|
|
.byte 0 # DW_CHILDREN_no
|
|
.byte 73 # DW_AT_type
|
|
.byte 19 # DW_FORM_ref4
|
|
.byte 55 # DW_AT_count
|
|
.byte 11 # DW_FORM_data1
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.byte 6 # Abbreviation Code
|
|
.byte 36 # DW_TAG_base_type
|
|
.byte 0 # DW_CHILDREN_no
|
|
.byte 3 # DW_AT_name
|
|
.byte 8 # DW_FORM_string
|
|
.byte 11 # DW_AT_byte_size
|
|
.byte 11 # DW_FORM_data1
|
|
.byte 62 # DW_AT_encoding
|
|
.byte 11 # DW_FORM_data1
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.macro var code, form
|
|
.byte \code # Abbreviation Code
|
|
.byte 52 # DW_TAG_variable
|
|
.byte 0 # DW_CHILDREN_no
|
|
.byte 3 # DW_AT_name
|
|
.byte 8 # DW_FORM_string
|
|
.byte 73 # DW_AT_type
|
|
.byte 19 # DW_FORM_ref4
|
|
.byte 28 # DW_AT_const_value
|
|
.byte \form
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.endm
|
|
var 10, 0xf # DW_FORM_udata
|
|
var 11, 0xb # DW_FORM_data1
|
|
var 12, 0x5 # DW_FORM_data2
|
|
var 13, 0x6 # DW_FORM_data4
|
|
var 14, 0x7 # DW_FORM_data8
|
|
var 15, 0x8 # DW_FORM_string
|
|
var 16, 0xe # DW_FORM_strp
|
|
var 17, 0x13 # DW_FORM_ref4
|
|
.byte 0 # EOM(3)
|
|
.section .debug_info,"",@progbits
|
|
.Lcu_begin0:
|
|
.long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
|
|
.Ldebug_info_start0:
|
|
.short 4 # DWARF version number
|
|
.long .debug_abbrev # Offset Into Abbrev. Section
|
|
.byte 8 # Address Size (in bytes)
|
|
.byte 1 # Abbrev DW_TAG_compile_unit
|
|
.asciz "Hand-written DWARF" # DW_AT_producer
|
|
.asciz "const.c" # DW_AT_name
|
|
.Lchar_arr:
|
|
.byte 4 # Abbrev DW_TAG_array_type
|
|
.long .Lchar-.Lcu_begin0 # DW_AT_type
|
|
.byte 5 # Abbrev DW_TAG_subrange_type
|
|
.long .Lulong-.Lcu_begin0 # DW_AT_type
|
|
.byte 7 # DW_AT_count
|
|
.byte 0 # End Of Children Mark
|
|
.Lchar:
|
|
.byte 6 # Abbrev DW_TAG_base_type
|
|
.asciz "char" # DW_AT_name
|
|
.byte 1 # DW_AT_byte_size
|
|
.byte 6 # DW_AT_encoding
|
|
.Lulong:
|
|
.byte 6 # Abbrev DW_TAG_base_type
|
|
.asciz "unsigned long" # DW_AT_name
|
|
.byte 8 # DW_AT_byte_size
|
|
.byte 7 # DW_AT_encoding
|
|
.Lulong_ptr:
|
|
.byte 2 # Abbrev DW_TAG_pointer_type
|
|
.long .Lulong-.Lcu_begin0 # DW_AT_type
|
|
|
|
.byte 10 # Abbrev DW_TAG_variable
|
|
.asciz "udata" # DW_AT_name
|
|
.long .Lulong-.Lcu_begin0 # DW_AT_type
|
|
.uleb128 4742474247424742 # DW_AT_const_value
|
|
|
|
.byte 11 # Abbrev DW_TAG_variable
|
|
.asciz "data1" # DW_AT_name
|
|
.long .Lulong-.Lcu_begin0 # DW_AT_type
|
|
.byte 47 # DW_AT_const_value
|
|
|
|
.byte 12 # Abbrev DW_TAG_variable
|
|
.asciz "data2" # DW_AT_name
|
|
.long .Lulong-.Lcu_begin0 # DW_AT_type
|
|
.word 4742 # DW_AT_const_value
|
|
|
|
.byte 13 # Abbrev DW_TAG_variable
|
|
.asciz "data4" # DW_AT_name
|
|
.long .Lulong-.Lcu_begin0 # DW_AT_type
|
|
.long 47424742 # DW_AT_const_value
|
|
|
|
.byte 14 # Abbrev DW_TAG_variable
|
|
.asciz "data8" # DW_AT_name
|
|
.long .Lulong-.Lcu_begin0 # DW_AT_type
|
|
.quad 4742474247424742 # DW_AT_const_value
|
|
|
|
.byte 15 # Abbrev DW_TAG_variable
|
|
.asciz "string" # DW_AT_name
|
|
.long .Lchar_arr-.Lcu_begin0 # DW_AT_type
|
|
.asciz "string" # DW_AT_const_value
|
|
|
|
.byte 16 # Abbrev DW_TAG_variable
|
|
.asciz "strp" # DW_AT_name
|
|
.long .Lchar_arr-.Lcu_begin0 # DW_AT_type
|
|
.long .Lstrp # DW_AT_const_value
|
|
|
|
.byte 17 # Abbrev DW_TAG_variable
|
|
.asciz "ref4" # DW_AT_name
|
|
.long .Lchar_arr-.Lcu_begin0 # DW_AT_type
|
|
.long .Lulong-.Lcu_begin0 # DW_AT_const_value
|
|
|
|
.byte 10 # Abbrev DW_TAG_variable
|
|
.asciz "udata_ptr" # DW_AT_name
|
|
.long .Lulong_ptr-.Lcu_begin0 # DW_AT_type
|
|
.uleb128 0xdeadbeefbaadf00d # DW_AT_const_value
|
|
|
|
.byte 0 # End Of Children Mark
|
|
.Ldebug_info_end0:
|
|
|
|
.section .debug_str,"MS",@progbits,1
|
|
.Lstrp:
|
|
.asciz "strp"
|