xref: /llvm-project/llvm/test/DebugInfo/symbolize-absolute-path-in-debug-line.s (revision cd1424aebb37d7aceea37f2c2740f1da42bf879b)
1*cd1424aeSJames Henderson# Create .debug_line containing absolute path in filename. Show that the path is sensibly printed/found/etc.
2*cd1424aeSJames Henderson# REQUIRES: x86-registered-target
3*cd1424aeSJames Henderson
4*cd1424aeSJames Henderson# RUN: sed s!FILEPATH!%/s! %s > %t.s
5*cd1424aeSJames Henderson# RUN: llvm-mc --filetype=obj --triple=x86_64-pc-linux %t.s -o %t.o
6*cd1424aeSJames Henderson# RUN: llvm-symbolizer --obj=%t.o 0 | FileCheck %s -DPATH=%/s
7*cd1424aeSJames Henderson
8*cd1424aeSJames Henderson# CHECK: {{^}}[[PATH]]:1:0
9*cd1424aeSJames Henderson
10*cd1424aeSJames Henderson.type _start,@function
11*cd1424aeSJames Henderson_start:
12*cd1424aeSJames Henderson.Lfunc_begin0:
13*cd1424aeSJames Henderson    ret
14*cd1424aeSJames Henderson.Lfunc_end0:
15*cd1424aeSJames Henderson
16*cd1424aeSJames Henderson.section .debug_str,"MS",@progbits,1
17*cd1424aeSJames Henderson.Linfo_string1:
18*cd1424aeSJames Henderson    .asciz "test.c"
19*cd1424aeSJames Henderson.Linfo_string2:
20*cd1424aeSJames Henderson    .asciz "/some/dir"
21*cd1424aeSJames Henderson.Linfo_string3:
22*cd1424aeSJames Henderson    .asciz "_start"
23*cd1424aeSJames Henderson
24*cd1424aeSJames Henderson.section    .debug_abbrev,"",@progbits
25*cd1424aeSJames Henderson    .byte   1                       # Abbreviation Code
26*cd1424aeSJames Henderson    .byte   17                      # DW_TAG_compile_unit
27*cd1424aeSJames Henderson    .byte   1                       # DW_CHILDREN_yes
28*cd1424aeSJames Henderson    .byte   3                       # DW_AT_name
29*cd1424aeSJames Henderson    .byte   14                      # DW_FORM_strp
30*cd1424aeSJames Henderson    .byte   16                      # DW_AT_stmt_list
31*cd1424aeSJames Henderson    .byte   23                      # DW_FORM_sec_offset
32*cd1424aeSJames Henderson    .byte   27                      # DW_AT_comp_dir
33*cd1424aeSJames Henderson    .byte   14                      # DW_FORM_strp
34*cd1424aeSJames Henderson    .byte   17                      # DW_AT_low_pc
35*cd1424aeSJames Henderson    .byte   1                       # DW_FORM_addr
36*cd1424aeSJames Henderson    .byte   18                      # DW_AT_high_pc
37*cd1424aeSJames Henderson    .byte   6                       # DW_FORM_data4
38*cd1424aeSJames Henderson    .byte   0                       # EOM(1)
39*cd1424aeSJames Henderson    .byte   0                       # EOM(2)
40*cd1424aeSJames Henderson    .byte   2                       # Abbreviation Code
41*cd1424aeSJames Henderson    .byte   46                      # DW_TAG_subprogram
42*cd1424aeSJames Henderson    .byte   0                       # DW_CHILDREN_no
43*cd1424aeSJames Henderson    .byte   17                      # DW_AT_low_pc
44*cd1424aeSJames Henderson    .byte   1                       # DW_FORM_addr
45*cd1424aeSJames Henderson    .byte   18                      # DW_AT_high_pc
46*cd1424aeSJames Henderson    .byte   6                       # DW_FORM_data4
47*cd1424aeSJames Henderson    .byte   3                       # DW_AT_name
48*cd1424aeSJames Henderson    .byte   14                      # DW_FORM_strp
49*cd1424aeSJames Henderson    .byte   58                      # DW_AT_decl_file
50*cd1424aeSJames Henderson    .byte   11                      # DW_FORM_data1
51*cd1424aeSJames Henderson    .byte   59                      # DW_AT_decl_line
52*cd1424aeSJames Henderson    .byte   11                      # DW_FORM_data1
53*cd1424aeSJames Henderson    .byte   63                      # DW_AT_external
54*cd1424aeSJames Henderson    .byte   25                      # DW_FORM_flag_present
55*cd1424aeSJames Henderson    .byte   0                       # EOM(1)
56*cd1424aeSJames Henderson    .byte   0                       # EOM(2)
57*cd1424aeSJames Henderson    .byte   0                       # EOM(3)
58*cd1424aeSJames Henderson    .section    .debug_info,"",@progbits
59*cd1424aeSJames Henderson    .long   .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
60*cd1424aeSJames Henderson.Ldebug_info_start0:
61*cd1424aeSJames Henderson    .short  4                       # DWARF version number
62*cd1424aeSJames Henderson    .long   .debug_abbrev           # Offset Into Abbrev. Section
63*cd1424aeSJames Henderson    .byte   8                       # Address Size (in bytes)
64*cd1424aeSJames Henderson    .byte   1                       # Abbrev [1] 0xb:0x35 DW_TAG_compile_unit
65*cd1424aeSJames Henderson    .long   .Linfo_string1          # DW_AT_name
66*cd1424aeSJames Henderson    .long   .Lline_table_start0     # DW_AT_stmt_list
67*cd1424aeSJames Henderson    .long   .Linfo_string2          # DW_AT_comp_dir
68*cd1424aeSJames Henderson    .quad   .Lfunc_begin0           # DW_AT_low_pc
69*cd1424aeSJames Henderson    .long   .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc
70*cd1424aeSJames Henderson    .byte   2                       # Abbrev [2] 0x2a:0x15 DW_TAG_subprogram
71*cd1424aeSJames Henderson    .quad   .Lfunc_begin0           # DW_AT_low_pc
72*cd1424aeSJames Henderson    .long   .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc
73*cd1424aeSJames Henderson    .long   .Linfo_string3          # DW_AT_name
74*cd1424aeSJames Henderson    .byte   1                       # DW_AT_decl_file
75*cd1424aeSJames Henderson    .byte   1                       # DW_AT_decl_line
76*cd1424aeSJames Henderson                                        # DW_AT_external
77*cd1424aeSJames Henderson    .byte   0                       # End Of Children Mark
78*cd1424aeSJames Henderson.Ldebug_info_end0:
79*cd1424aeSJames Henderson
80*cd1424aeSJames Henderson# Hand-written .debug_line to allow replacing in the absolute path
81*cd1424aeSJames Henderson# into the filename table at runtime.
82*cd1424aeSJames Henderson.section .debug_line,"",@progbits
83*cd1424aeSJames Henderson.Lline_table_start0:
84*cd1424aeSJames Henderson    .long .Ltable_end - .Ltable_start   # unit length
85*cd1424aeSJames Henderson.Ltable_start:
86*cd1424aeSJames Henderson    .short 4                            # version
87*cd1424aeSJames Henderson    .long .Lheader_end - .Lheader_start # header length
88*cd1424aeSJames Henderson.Lheader_start:
89*cd1424aeSJames Henderson    .byte 1                             # min instruction length
90*cd1424aeSJames Henderson    .byte 1                             # max ops per instruction
91*cd1424aeSJames Henderson    .byte 1                             # default is_stmt
92*cd1424aeSJames Henderson    .byte -5                            # line base
93*cd1424aeSJames Henderson    .byte 14                            # line range
94*cd1424aeSJames Henderson    .byte 13                            # opcode base
95*cd1424aeSJames Henderson    .byte 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # standard opcode lengths
96*cd1424aeSJames Henderson    .byte 0                             # directory table
97*cd1424aeSJames Henderson    .asciz "FILEPATH"                   # filename table
98*cd1424aeSJames Henderson    .byte 0, 0, 0
99*cd1424aeSJames Henderson    .byte 0
100*cd1424aeSJames Henderson.Lheader_end:
101*cd1424aeSJames Henderson    .byte 0, 9, 2                       # DW_LNE_set_address
102*cd1424aeSJames Henderson    .quad .Lfunc_begin0
103*cd1424aeSJames Henderson    .byte 1                             # DW_LNS_copy
104*cd1424aeSJames Henderson    .byte 33                            # +1 address, +1 line
105*cd1424aeSJames Henderson    .byte 0, 1, 1                       # DW_LNE_end_sequence
106*cd1424aeSJames Henderson.Ltable_end:
107