mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
d82cf6fb61
Summary: This patch stems from the discussion D68270 (including some offline talks). The idea is to provide an "incremental" api for parsing location lists, which will avoid caching or materializing parsed data. An additional goal is to provide a high level location list api, which abstracts the differences between different encoding schemes, and can be used by users which don't care about those (such as LLDB). This patch implements the first part. It implements a call-back based "visitLocationList" api. This function parses a single location list, calling a user-specified callback for each entry. This is going to be the base api, which other location list functions (right now, just the dumping code) are going to be based on. Future patches will do something similar for the v4 location lists, and add a mechanism to translate raw entries into concrete address ranges. Reviewers: dblaikie, probinson, JDevlieghere, aprantl, SouraVX Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D69672
133 lines
5.8 KiB
ArmAsm
133 lines
5.8 KiB
ArmAsm
# RUN: llvm-mc -triple=x86_64-pc-linux -filetype=obj %s > %t
|
|
# RUN: llvm-dwarfdump %t | FileCheck %s
|
|
|
|
# CHECK: DW_AT_name ("x0")
|
|
# CHECK-NEXT: DW_AT_location (0x0000000c
|
|
# CHECK-NEXT: [0x0000000000000000, 0x0000000000000002): DW_OP_reg5 RDI
|
|
# CHECK-NEXT: [0x0000000000000002, 0x0000000000000003): DW_OP_reg0 RAX)
|
|
|
|
# CHECK: DW_AT_name ("x1")
|
|
# CHECK-NEXT: DW_AT_location (0xdeadbeef
|
|
# CHECK-NEXT: error: unexpected end of data)
|
|
|
|
# CHECK: DW_AT_name ("x2")
|
|
# CHECK-NEXT: DW_AT_location (0x00000025
|
|
# CHECK-NEXT: error: unexpected end of data)
|
|
|
|
|
|
.type f,@function
|
|
f: # @f
|
|
.Lfunc_begin0:
|
|
movl %edi, %eax
|
|
.Ltmp0:
|
|
retq
|
|
.Ltmp1:
|
|
.Lfunc_end0:
|
|
.size f, .Lfunc_end0-f
|
|
|
|
.section .debug_str,"MS",@progbits,1
|
|
.Linfo_string0:
|
|
.asciz "Hand-written DWARF"
|
|
.Linfo_string3:
|
|
.asciz "f"
|
|
.Linfo_string4:
|
|
.asciz "int"
|
|
.Lx0:
|
|
.asciz "x0"
|
|
.Lx1:
|
|
.asciz "x1"
|
|
.Lx2:
|
|
.asciz "x2"
|
|
|
|
.section .debug_loclists,"",@progbits
|
|
.long .Ldebug_loclist_table_end0-.Ldebug_loclist_table_start0 # Length
|
|
.Ldebug_loclist_table_start0:
|
|
.short 5 # Version
|
|
.byte 8 # Address size
|
|
.byte 0 # Segment selector size
|
|
.long 0 # Offset entry count
|
|
.Lloclists_table_base0:
|
|
.Ldebug_loc0:
|
|
.byte 8 # DW_LLE_start_length
|
|
.quad .Lfunc_begin0-.Lfunc_begin0 # starting offset
|
|
.uleb128 .Ltmp0-.Lfunc_begin0 # size
|
|
.byte 1 # Loc expr size
|
|
.byte 85 # super-register DW_OP_reg5
|
|
.byte 8 # DW_LLE_start_length
|
|
.quad .Ltmp0-.Lfunc_begin0 # starting offset
|
|
.uleb128 .Lfunc_end0-.Ltmp0 # size
|
|
.byte 1 # Loc expr size
|
|
.byte 80 # super-register DW_OP_reg0
|
|
.byte 0 # DW_LLE_end_of_list
|
|
.Ldebug_loc2:
|
|
.byte 8 # DW_LLE_start_length
|
|
.quad .Lfunc_begin0-.Lfunc_begin0 # starting offset
|
|
.uleb128 .Ltmp0-.Lfunc_begin0 # size
|
|
.uleb128 0xdeadbeef # Loc expr size
|
|
.Ldebug_loclist_table_end0:
|
|
|
|
.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 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.byte 2 # Abbreviation Code
|
|
.byte 46 # DW_TAG_subprogram
|
|
.byte 1 # DW_CHILDREN_yes
|
|
.byte 3 # DW_AT_name
|
|
.byte 14 # DW_FORM_strp
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.byte 3 # Abbreviation Code
|
|
.byte 5 # DW_TAG_formal_parameter
|
|
.byte 0 # DW_CHILDREN_no
|
|
.byte 3 # DW_AT_name
|
|
.byte 14 # DW_FORM_strp
|
|
.byte 2 # DW_AT_location
|
|
.byte 23 # DW_FORM_sec_offset
|
|
.byte 0 # EOM(1)
|
|
.byte 0 # EOM(2)
|
|
.byte 4 # 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 0 # EOM(3)
|
|
|
|
.section .debug_info,"",@progbits
|
|
.Lcu_begin0:
|
|
.long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
|
|
.Ldebug_info_start0:
|
|
.short 5 # DWARF version number
|
|
.byte 1 # DWARF Unit Type
|
|
.byte 8 # Address Size (in bytes)
|
|
.long .debug_abbrev # Offset Into Abbrev. Section
|
|
.byte 1 # Abbrev [1] 0xb:0x50 DW_TAG_compile_unit
|
|
.long .Linfo_string0 # DW_AT_producer
|
|
.short 12 # DW_AT_language
|
|
.byte 2 # Abbrev [2] 0x2a:0x29 DW_TAG_subprogram
|
|
.long .Linfo_string3 # DW_AT_name
|
|
.byte 3 # Abbrev [3] DW_TAG_formal_parameter
|
|
.long .Lx0 # DW_AT_name
|
|
.long .Ldebug_loc0 # DW_AT_location
|
|
.byte 3 # Abbrev [3] DW_TAG_formal_parameter
|
|
.long .Lx1 # DW_AT_name
|
|
.long 0xdeadbeef # DW_AT_location
|
|
.byte 3 # Abbrev [3] DW_TAG_formal_parameter
|
|
.long .Lx2 # DW_AT_name
|
|
.long .Ldebug_loc2 # DW_AT_location
|
|
.byte 0 # End Of Children Mark
|
|
.byte 0 # End Of Children Mark
|
|
.Ldebug_info_end0:
|