xref: /llvm-project/lld/test/ELF/debug-line-obj.s (revision 81cebfd0080e3873d0cef5ee5215b8c97332ff96)
1ded11807SAlexey Lapshin# REQUIRES: x86
2ded11807SAlexey Lapshin# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux -dwarf-version=5 %s -o %t.o
3*81cebfd0SFangrui Song# RUN: not ld.lld %t.o -o /dev/null 2>&1 | FileCheck %s
4ded11807SAlexey Lapshin
5ded11807SAlexey Lapshin# When compiling with -ffunction-sections, .debug_line may contain descriptions
6ded11807SAlexey Lapshin# of locations from the different text sections. Until relocated such
7ded11807SAlexey Lapshin# descriptions might contain overlapping offsets. Check LLD is able to report
8ded11807SAlexey Lapshin# the error locations correctly in this case.
9ded11807SAlexey Lapshin
10ded11807SAlexey Lapshin# CHECK:      error: undefined symbol: foo()
11ded11807SAlexey Lapshin# CHECK-NEXT: >>> referenced by test.cpp:2
12ded11807SAlexey Lapshin# CHECK-NEXT: >>>               {{.*}}.o:(bar())
13ded11807SAlexey Lapshin# CHECK-NEXT: >>> referenced by test.cpp:3
14ded11807SAlexey Lapshin# CHECK-NEXT: >>>               {{.*}}.o:(baz())
15ded11807SAlexey Lapshin
16ded11807SAlexey Lapshin# The code below is the reduced version of the output
17ded11807SAlexey Lapshin# from the following invocation and source:
18ded11807SAlexey Lapshin#
19ded11807SAlexey Lapshin# // test.cpp:
20ded11807SAlexey Lapshin# int foo();
21ded11807SAlexey Lapshin# int bar() { return foo(); }
22ded11807SAlexey Lapshin# int baz() { return foo(); }
23ded11807SAlexey Lapshin#
24ded11807SAlexey Lapshin# clang -gdwarf-5 -ffunction-sections test.cpp -o test.s -S
25ded11807SAlexey Lapshin
26ded11807SAlexey Lapshin.text
27ded11807SAlexey Lapshin.file  "test.cpp"
28ded11807SAlexey Lapshin.section  .text._Z3barv,"ax",@progbits
29ded11807SAlexey Lapshin.globl  _Z3barv
30ded11807SAlexey Lapshin.type  _Z3barv,@function
31ded11807SAlexey Lapshin_Z3barv:
32ded11807SAlexey Lapshin.Lfunc_begin0:
33ded11807SAlexey Lapshin  .file  0 "/path" "test.cpp" md5 0x9ff11a8404ab4d032ee2dd4f5f8c4140
34783d84bbSAli Tamur  .loc  0 2 0                   # test.cpp:2:0
35783d84bbSAli Tamur  .loc  0 2 20 prologue_end     # test.cpp:2:20
36ded11807SAlexey Lapshin  callq  _Z3foov
37783d84bbSAli Tamur  .loc  0 2 13 is_stmt 0        # test.cpp:2:13
38ded11807SAlexey Lapshin.Lfunc_end0:
39ded11807SAlexey Lapshin.size  _Z3barv, .Lfunc_end0-_Z3barv
40ded11807SAlexey Lapshin                                        # -- End function
41ded11807SAlexey Lapshin.section  .text._Z3bazv,"ax",@progbits
42ded11807SAlexey Lapshin.globl  _Z3bazv                 # -- Begin function _Z3bazv
43ded11807SAlexey Lapshin  .type  _Z3bazv,@function
44ded11807SAlexey Lapshin_Z3bazv:                                # @_Z3bazv
45ded11807SAlexey Lapshin.Lfunc_begin1:
46783d84bbSAli Tamur  .loc  0 3 0 is_stmt 1         # test.cpp:3:0
47783d84bbSAli Tamur  .loc  0 3 20 prologue_end     # test.cpp:3:20
48ded11807SAlexey Lapshin  callq  _Z3foov
49783d84bbSAli Tamur  .loc  0 3 13 is_stmt 0        # test.cpp:3:13
50ded11807SAlexey Lapshin.Lfunc_end1:
51ded11807SAlexey Lapshin  .size  _Z3bazv, .Lfunc_end1-_Z3bazv
52ded11807SAlexey Lapshin
53ded11807SAlexey Lapshin.section  .debug_str,"MS",@progbits,1
54ded11807SAlexey Lapshin.Linfo_string0:
55ded11807SAlexey Lapshin  .asciz  "stub"
56ded11807SAlexey Lapshin
57ded11807SAlexey Lapshin.section  .debug_str_offsets,"",@progbits
58ded11807SAlexey Lapshin  .long  8
59ded11807SAlexey Lapshin  .short  5
60ded11807SAlexey Lapshin  .short  0
61ded11807SAlexey Lapshin.Lstr_offsets_base0:
62ded11807SAlexey Lapshin  .long  .Linfo_string0
63ded11807SAlexey Lapshin
64ded11807SAlexey Lapshin.section  .debug_abbrev,"",@progbits
65ded11807SAlexey Lapshin  .byte  1                       # Abbreviation Code
66ded11807SAlexey Lapshin  .byte  17                      # DW_TAG_compile_unit
67ded11807SAlexey Lapshin  .byte  1                       # DW_CHILDREN_yes
68ded11807SAlexey Lapshin  .byte  37                      # DW_AT_producer
69ded11807SAlexey Lapshin  .byte  37                      # DW_FORM_strx1
70ded11807SAlexey Lapshin  .byte  19                      # DW_AT_language
71ded11807SAlexey Lapshin  .byte  5                       # DW_FORM_data2
72ded11807SAlexey Lapshin  .byte  3                       # DW_AT_name
73ded11807SAlexey Lapshin  .byte  37                      # DW_FORM_strx1
74ded11807SAlexey Lapshin  .byte  114                     # DW_AT_str_offsets_base
75ded11807SAlexey Lapshin  .byte  23                      # DW_FORM_sec_offset
76ded11807SAlexey Lapshin  .byte  16                      # DW_AT_stmt_list
77ded11807SAlexey Lapshin  .byte  23                      # DW_FORM_sec_offset
78ded11807SAlexey Lapshin  .byte  27                      # DW_AT_comp_dir
79ded11807SAlexey Lapshin  .byte  37                      # DW_FORM_strx1
80ded11807SAlexey Lapshin  .byte  115                     # DW_AT_addr_base
81ded11807SAlexey Lapshin  .byte  23                      # DW_FORM_sec_offset
82ded11807SAlexey Lapshin  .byte  17                      # DW_AT_low_pc
83ded11807SAlexey Lapshin  .byte  1                       # DW_FORM_addr
84ded11807SAlexey Lapshin  .byte  85                      # DW_AT_ranges
85ded11807SAlexey Lapshin  .byte  35                      # DW_FORM_rnglistx
86ded11807SAlexey Lapshin  .byte  116                     # DW_AT_rnglists_base
87ded11807SAlexey Lapshin  .byte  23                      # DW_FORM_sec_offset
88ded11807SAlexey Lapshin  .byte  0                       # EOM(1)
89ded11807SAlexey Lapshin  .byte  0                       # EOM(2)
90ded11807SAlexey Lapshin  .byte  2                       # Abbreviation Code
91ded11807SAlexey Lapshin  .byte  46                      # DW_TAG_subprogram
92ded11807SAlexey Lapshin  .byte  0                       # DW_CHILDREN_no
93ded11807SAlexey Lapshin  .byte  17                      # DW_AT_low_pc
94ded11807SAlexey Lapshin  .byte  27                      # DW_FORM_addrx
95ded11807SAlexey Lapshin  .byte  18                      # DW_AT_high_pc
96ded11807SAlexey Lapshin  .byte  6                       # DW_FORM_data4
97ded11807SAlexey Lapshin  .byte  64                      # DW_AT_frame_base
98ded11807SAlexey Lapshin  .byte  24                      # DW_FORM_exprloc
99ded11807SAlexey Lapshin  .byte  110                     # DW_AT_linkage_name
100ded11807SAlexey Lapshin  .byte  37                      # DW_FORM_strx1
101ded11807SAlexey Lapshin  .byte  3                       # DW_AT_name
102ded11807SAlexey Lapshin  .byte  37                      # DW_FORM_strx1
103ded11807SAlexey Lapshin  .byte  58                      # DW_AT_decl_file
104ded11807SAlexey Lapshin  .byte  11                      # DW_FORM_data1
105ded11807SAlexey Lapshin  .byte  59                      # DW_AT_decl_line
106ded11807SAlexey Lapshin  .byte  11                      # DW_FORM_data1
107ded11807SAlexey Lapshin  .byte  73                      # DW_AT_type
108ded11807SAlexey Lapshin  .byte  19                      # DW_FORM_ref4
109ded11807SAlexey Lapshin  .byte  63                      # DW_AT_external
110ded11807SAlexey Lapshin  .byte  25                      # DW_FORM_flag_present
111ded11807SAlexey Lapshin  .byte  0                       # EOM(1)
112ded11807SAlexey Lapshin  .byte  0                       # EOM(2)
113ded11807SAlexey Lapshin  .byte  3                       # Abbreviation Code
114ded11807SAlexey Lapshin  .byte  36                      # DW_TAG_base_type
115ded11807SAlexey Lapshin  .byte  0                       # DW_CHILDREN_no
116ded11807SAlexey Lapshin  .byte  3                       # DW_AT_name
117ded11807SAlexey Lapshin  .byte  37                      # DW_FORM_strx1
118ded11807SAlexey Lapshin  .byte  62                      # DW_AT_encoding
119ded11807SAlexey Lapshin  .byte  11                      # DW_FORM_data1
120ded11807SAlexey Lapshin  .byte  11                      # DW_AT_byte_size
121ded11807SAlexey Lapshin  .byte  11                      # DW_FORM_data1
122ded11807SAlexey Lapshin  .byte  0                       # EOM(1)
123ded11807SAlexey Lapshin  .byte  0                       # EOM(2)
124ded11807SAlexey Lapshin  .byte  0                       # EOM(3)
125ded11807SAlexey Lapshin
126ded11807SAlexey Lapshin.section  .debug_info,"",@progbits
127ded11807SAlexey Lapshin.Lcu_begin0:
128ded11807SAlexey Lapshin  .long  .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
129ded11807SAlexey Lapshin.Ldebug_info_start0:
130ded11807SAlexey Lapshin  .short  5                       # DWARF version number
131ded11807SAlexey Lapshin  .byte  1                       # DWARF Unit Type
132ded11807SAlexey Lapshin  .byte  8                       # Address Size (in bytes)
133ded11807SAlexey Lapshin  .long  .debug_abbrev           # Offset Into Abbrev. Section
134ded11807SAlexey Lapshin  .byte  1                       # Abbrev [1] 0xc:0x44 DW_TAG_compile_unit
135ded11807SAlexey Lapshin  .byte  0                       # DW_AT_producer
136ded11807SAlexey Lapshin  .short  4                       # DW_AT_language
137ded11807SAlexey Lapshin  .byte  0                       # DW_AT_name
138ded11807SAlexey Lapshin  .long  .Lstr_offsets_base0     # DW_AT_str_offsets_base
139ded11807SAlexey Lapshin  .long  .Lline_table_start0     # DW_AT_stmt_list
140ded11807SAlexey Lapshin  .byte  2                       # DW_AT_comp_dir
141ded11807SAlexey Lapshin  .long  0      # DW_AT_addr_base
142ded11807SAlexey Lapshin  .quad  0                       # DW_AT_low_pc
143ded11807SAlexey Lapshin  .byte  0                       # DW_AT_ranges
144ded11807SAlexey Lapshin  .long  0  # DW_AT_rnglists_base
145ded11807SAlexey Lapshin  .byte  2                       # Abbrev [2] 0x2b:0x10 DW_TAG_subprogram
146ded11807SAlexey Lapshin  .byte  0                       # DW_AT_low_pc
147ded11807SAlexey Lapshin  .long  .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc
148ded11807SAlexey Lapshin  .byte  1                       # DW_AT_frame_base
149ded11807SAlexey Lapshin  .byte  86
150ded11807SAlexey Lapshin  .byte  3                       # DW_AT_linkage_name
151ded11807SAlexey Lapshin  .byte  0                       # DW_AT_name
152ded11807SAlexey Lapshin  .byte  1                       # DW_AT_decl_file
153ded11807SAlexey Lapshin  .byte  2                       # DW_AT_decl_line
154ded11807SAlexey Lapshin  .long  75                      # DW_AT_type
155ded11807SAlexey Lapshin                                        # DW_AT_external
156ded11807SAlexey Lapshin  .byte  2                       # Abbrev [2] 0x3b:0x10 DW_TAG_subprogram
157ded11807SAlexey Lapshin  .byte  1                       # DW_AT_low_pc
158ded11807SAlexey Lapshin  .long  .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc
159ded11807SAlexey Lapshin  .byte  1                       # DW_AT_frame_base
160ded11807SAlexey Lapshin  .byte  86
161ded11807SAlexey Lapshin  .byte  6                       # DW_AT_linkage_name
162ded11807SAlexey Lapshin  .byte  0                       # DW_AT_name
163ded11807SAlexey Lapshin  .byte  1                       # DW_AT_decl_file
164ded11807SAlexey Lapshin  .byte  3                       # DW_AT_decl_line
165ded11807SAlexey Lapshin  .long  75                      # DW_AT_type
166ded11807SAlexey Lapshin                                        # DW_AT_external
167ded11807SAlexey Lapshin  .byte  3                       # Abbrev [3] 0x4b:0x4 DW_TAG_base_type
168ded11807SAlexey Lapshin  .byte  0                       # DW_AT_name
169ded11807SAlexey Lapshin  .byte  5                       # DW_AT_encoding
170ded11807SAlexey Lapshin  .byte  4                       # DW_AT_byte_size
171ded11807SAlexey Lapshin  .byte  0                       # End Of Children Mark
172ded11807SAlexey Lapshin.Ldebug_info_end0:
173ded11807SAlexey Lapshin
174ded11807SAlexey Lapshin.section  .debug_line,"",@progbits
175ded11807SAlexey Lapshin.Lline_table_start0:
176