Summary: I recently re-discovered that the unsinged stream operators of the lldb_private::Stream class have a surprising behavior in that they print the number in hex. This is all the more confusing because the "signed" versions of those operators behave normally. Now that, thanks to Raphael, each Stream class has a llvm::raw_ostream wrapper, I think we should delete most of our formatting capabilities and just delegate to that. This patch tests the water by just deleting the operators with the most surprising behavior. Most of the code using these operators was printing user_id_t values. It wasn't fully consistent about prefixing them with "0x", but I've tried to consistenly print it without that prefix, to make it more obviously different from pointer values. Reviewers: teemperor, JDevlieghere, jdoerfert Subscribers: lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D70241
148 lines
6.3 KiB
ArmAsm
148 lines
6.3 KiB
ArmAsm
# This tests a bug where we would incorrectly parse the size of an array if that
|
|
# size happened to match an existing DIE offset. This happened because we
|
|
# misinterpreted that value as a reference to a DIE specifying the VLA size even
|
|
# though the form was a data form (as it should be).
|
|
|
|
# REQUIRES: lld, x86
|
|
|
|
# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj > %t.o
|
|
# RUN: ld.lld %t.o -o %t
|
|
# RUN: lldb-test symbols %t | FileCheck %s
|
|
|
|
# CHECK: Variable{0x7fffffff0000001e}, name = "X"
|
|
# CHECK-SAME: type = {7fffffff00000033} 0x{{[0-9A-F]*}} (char [56])
|
|
|
|
|
|
# Generated from "char X[47];"
|
|
# The array size was modified by hand.
|
|
|
|
.text
|
|
.file "-"
|
|
.file 1 "/tmp" "<stdin>"
|
|
.type X,@object # @X
|
|
.comm X,63,16
|
|
.section .debug_str,"MS",@progbits,1
|
|
.Linfo_string0:
|
|
.asciz "clang version 8.0.0 (trunk 349604) (llvm/trunk 349608)" # string offset=0
|
|
.Linfo_string1:
|
|
.asciz "-" # string offset=55
|
|
.Linfo_string2:
|
|
.asciz "/tmp" # string offset=57
|
|
.Linfo_string3:
|
|
.asciz "X" # string offset=62
|
|
.Linfo_string4:
|
|
.asciz "char" # string offset=64
|
|
.Linfo_string5:
|
|
.asciz "__ARRAY_SIZE_TYPE__" # string offset=69
|
|
.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 14 # DW_FORM_strp
|
|
.byte 19 # DW_AT_language
|
|
.byte 5 # DW_FORM_data2
|
|
.byte 3 # DW_AT_name
|
|
.byte 14 # DW_FORM_strp
|
|
.byte 16 # DW_AT_stmt_list
|
|
.byte 23 # DW_FORM_sec_offset
|
|
.byte 27 # DW_AT_comp_dir
|
|
.byte 14 # DW_FORM_strp
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.byte 2 # Abbreviation Code
|
|
.byte 52 # DW_TAG_variable
|
|
.byte 0 # DW_CHILDREN_no
|
|
.byte 3 # DW_AT_name
|
|
.byte 14 # DW_FORM_strp
|
|
.byte 73 # DW_AT_type
|
|
.byte 19 # DW_FORM_ref4
|
|
.byte 63 # DW_AT_external
|
|
.byte 25 # DW_FORM_flag_present
|
|
.byte 58 # DW_AT_decl_file
|
|
.byte 11 # DW_FORM_data1
|
|
.byte 59 # DW_AT_decl_line
|
|
.byte 11 # DW_FORM_data1
|
|
.byte 2 # DW_AT_location
|
|
.byte 24 # DW_FORM_exprloc
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.byte 3 # 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 4 # 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 5 # Abbreviation Code
|
|
.byte 36 # DW_TAG_base_type
|
|
.byte 0 # DW_CHILDREN_no
|
|
.byte 3 # DW_AT_name
|
|
.byte 14 # DW_FORM_strp
|
|
.byte 62 # DW_AT_encoding
|
|
.byte 11 # DW_FORM_data1
|
|
.byte 11 # DW_AT_byte_size
|
|
.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 14 # DW_FORM_strp
|
|
.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)
|
|
.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 [1] 0xb:0x43 DW_TAG_compile_unit
|
|
.long .Linfo_string0 # DW_AT_producer
|
|
.short 12 # DW_AT_language
|
|
.long .Linfo_string1 # DW_AT_name
|
|
.long 0 # DW_AT_stmt_list
|
|
.long .Linfo_string2 # DW_AT_comp_dir
|
|
.byte 2 # Abbrev [2] 0x1e:0x15 DW_TAG_variable
|
|
.long .Linfo_string3 # DW_AT_name
|
|
.long 51 # DW_AT_type
|
|
# DW_AT_external
|
|
.byte 1 # DW_AT_decl_file
|
|
.byte 1 # DW_AT_decl_line
|
|
.byte 9 # DW_AT_location
|
|
.byte 3
|
|
.quad X
|
|
.byte 3 # Abbrev [3] 0x33:0xc DW_TAG_array_type
|
|
.long 63 # DW_AT_type
|
|
.Ldie:
|
|
.byte 4 # Abbrev [4] 0x38:0x6 DW_TAG_subrange_type
|
|
.long 70 # DW_AT_type
|
|
.byte .Ldie-.Lcu_begin0 # DW_AT_count - should match the offset of an existing die
|
|
.byte 0 # End Of Children Mark
|
|
.byte 5 # Abbrev [5] 0x3f:0x7 DW_TAG_base_type
|
|
.long .Linfo_string4 # DW_AT_name
|
|
.byte 6 # DW_AT_encoding
|
|
.byte 1 # DW_AT_byte_size
|
|
.byte 6 # Abbrev [6] 0x46:0x7 DW_TAG_base_type
|
|
.long .Linfo_string5 # DW_AT_name
|
|
.byte 8 # DW_AT_byte_size
|
|
.byte 7 # DW_AT_encoding
|
|
.byte 0 # End Of Children Mark
|
|
.Ldebug_info_end0:
|