xref: /llvm-project/llvm/test/tools/dsymutil/X86/dwarf5-addrx.test (revision f1fdfe6888f93b9f6dfb4689e1f3206de584ff5b)
1## Test that DWARF5 DW_FORM_addrx is correctly recognized
2## and converted into the DW_FORM_addr or just preserved
3## in case --update.
4
5## $ cat dwarf5-addrx.c
6## __attribute__ ((optnone)) int foo1 ( ) {
7##   volatile int a = 0x1; return a;
8## }
9##
10## __attribute__ ((optnone)) int foo2 ( ) {
11##   volatile int a = 0x2; return a;
12## }
13##
14## __attribute__ ((optnone)) int foo3 ( ) {
15##   volatile int a = 0x3; return a;
16## }
17##
18## __attribute__ ((optnone)) int foo4 ( ) {
19##   volatile int a = 0x4; return a;
20## }
21##
22## __attribute__ ((optnone)) int foo5 ( ) {
23##   volatile int a = 0x5; return a;
24## }
25##
26## __attribute__ ((optnone)) int foo6 ( ) {
27##   volatile int a = 0x6; return a;
28## }
29##
30## __attribute__ ((optnone)) int foo7 ( ) {
31##   volatile int a = 0x7; return a;
32## }
33##
34## __attribute__ ((optnone)) int foo8 ( ) {
35##   volatile int a = 0x8; return a;
36## }
37##
38## int main ( void ) {
39##   return foo1()+foo2()+foo3()+foo4()+foo5()+foo6()+foo7()+foo8();
40## }
41##
42## $ clang -gdwarf-5 dwarf5-addrx.c -c -o dwarf5-addrx.o
43## $ clang dwarf5-addrx.o -o dwarf5-addrx.out
44
45RUN: dsymutil -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/dwarf5/dwarf5-addrx.out -o %t.dSYM 2>&1 | FileCheck %s --allow-empty
46RUN: llvm-dwarfdump --verify %t.dSYM 2>&1 | FileCheck %s
47
48RUN: llvm-dwarfdump --verbose %t.dSYM | FileCheck %s --check-prefix DWARF
49
50RUN: dsymutil --update -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/dwarf5/dwarf5-addrx.out -o %t.dSYM 2>&1 | FileCheck %s --allow-empty
51RUN: llvm-dwarfdump --verify %t.dSYM 2>&1 | FileCheck %s
52
53RUN: llvm-dwarfdump --verbose %t.dSYM | FileCheck %s --check-prefix UPDATE-DWARF
54
55RUN: dsymutil --linker parallel -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/dwarf5/dwarf5-addrx.out -o %t.dSYM 2>&1 | FileCheck %s --allow-empty
56RUN: llvm-dwarfdump --verify %t.dSYM 2>&1 | FileCheck %s
57
58RUN: llvm-dwarfdump --verbose %t.dSYM | FileCheck %s --check-prefix DWARF
59
60RUN: dsymutil --linker parallel --update -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/dwarf5/dwarf5-addrx.out -o %t.dSYM 2>&1 | FileCheck %s --allow-empty
61RUN: llvm-dwarfdump --verify %t.dSYM 2>&1 | FileCheck %s
62
63RUN: llvm-dwarfdump --verbose %t.dSYM | FileCheck %s --check-prefix UPDATE-DWARF
64
65
66CHECK-NOT: error:
67
68DWARF: DW_TAG_compile_unit
69DWARF:   DW_AT_name [DW_FORM_strx]  {{.*}}     "dwarf5-addrx.c"
70DWARF:   DW_AT_low_pc [DW_FORM_addrx]      (indexed (00000000) address = 0x0000000100000eb0)
71DWARF:   DW_AT_high_pc [DW_FORM_data4]   (0x00000103)
72DWARF:   DW_AT_addr_base [DW_FORM_sec_offset]      (0x00000008)
73DWARF:   DW_TAG_subprogram
74DWARF:     DW_AT_low_pc [DW_FORM_addrx]    (indexed (00000000) address = 0x0000000100000eb0)
75DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
76DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo1"
77DWARF:   DW_TAG_subprogram
78DWARF:     DW_AT_low_pc [DW_FORM_addrx]    (indexed (00000001) address = 0x0000000100000ec0)
79DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
80DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo2"
81DWARF:   DW_TAG_subprogram
82DWARF:     DW_AT_low_pc [DW_FORM_addrx]    (indexed (00000002) address = 0x0000000100000ed0)
83DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
84DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo3"
85DWARF:   DW_TAG_subprogram
86DWARF:     DW_AT_low_pc [DW_FORM_addrx]    (indexed (00000003) address = 0x0000000100000ee0)
87DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
88DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo4"
89DWARF:   DW_TAG_subprogram
90DWARF:     DW_AT_low_pc [DW_FORM_addrx]    (indexed (00000004) address = 0x0000000100000ef0)
91DWARF:     DW_AT_high_pc  [DW_FORM_data4]  (0x00000010)
92DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo5"
93DWARF:   DW_TAG_subprogram
94DWARF:     DW_AT_low_pc [DW_FORM_addrx]    (indexed (00000005) address = 0x0000000100000f00)
95DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
96DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo6"
97DWARF:   DW_TAG_subprogram
98DWARF:     DW_AT_low_pc [DW_FORM_addrx]    (indexed (00000006) address = 0x0000000100000f10)
99DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
100DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo7"
101DWARF:   DW_TAG_subprogram
102DWARF:     DW_AT_low_pc [DW_FORM_addrx]    (indexed (00000007) address = 0x0000000100000f20)
103DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
104DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo8"
105DWARF:   DW_TAG_subprogram
106DWARF:     DW_AT_low_pc [DW_FORM_addrx]    (indexed (00000008) address = 0x0000000100000f30)
107DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000083)
108DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "main"
109
110UPDATE-DWARF: DW_TAG_compile_unit
111UPDATE-DWARF:   DW_AT_name [DW_FORM_strx]  {{.*}}     "dwarf5-addrx.c"
112UPDATE-DWARF:   DW_AT_low_pc [DW_FORM_addrx]  (indexed (00000000) address = 0x0000000000000000)
113UPDATE-DWARF:   DW_AT_high_pc [DW_FORM_data4]   (0x00000103)
114UPDATE-DWARF:   DW_TAG_subprogram
115UPDATE-DWARF:     DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000000000)
116UPDATE-DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
117UPDATE-DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo1"
118UPDATE-DWARF:   DW_TAG_subprogram
119UPDATE-DWARF:     DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001) address = 0x0000000000000010)
120UPDATE-DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
121UPDATE-DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo2"
122UPDATE-DWARF:   DW_TAG_subprogram
123UPDATE-DWARF:     DW_AT_low_pc [DW_FORM_addrx]  (indexed (00000002) address = 0x0000000000000020)
124UPDATE-DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
125UPDATE-DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo3"
126UPDATE-DWARF:   DW_TAG_subprogram
127UPDATE-DWARF:     DW_AT_low_pc  [DW_FORM_addrx] (indexed (00000003) address = 0x0000000000000030)
128UPDATE-DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
129UPDATE-DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo4"
130UPDATE-DWARF:   DW_TAG_subprogram
131UPDATE-DWARF:     DW_AT_low_pc [DW_FORM_addrx]  (indexed (00000004) address = 0x0000000000000040)
132UPDATE-DWARF:     DW_AT_high_pc  [DW_FORM_data4]  (0x00000010)
133UPDATE-DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo5"
134UPDATE-DWARF:   DW_TAG_subprogram
135UPDATE-DWARF:     DW_AT_low_pc  [DW_FORM_addrx] (indexed (00000005) address = 0x0000000000000050)
136UPDATE-DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
137UPDATE-DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo6"
138UPDATE-DWARF:   DW_TAG_subprogram
139UPDATE-DWARF:     DW_AT_low_pc  [DW_FORM_addrx] (indexed (00000006) address = 0x0000000000000060)
140UPDATE-DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
141UPDATE-DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo7"
142UPDATE-DWARF:   DW_TAG_subprogram
143UPDATE-DWARF:     DW_AT_low_pc  [DW_FORM_addrx] (indexed (00000007) address = 0x0000000000000070)
144UPDATE-DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
145UPDATE-DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "foo8"
146UPDATE-DWARF:   DW_TAG_subprogram
147UPDATE-DWARF:     DW_AT_low_pc  [DW_FORM_addrx] (indexed (00000008) address = 0x0000000000000080)
148UPDATE-DWARF:     DW_AT_high_pc [DW_FORM_data4]   (0x00000083)
149UPDATE-DWARF:     DW_AT_name  [DW_FORM_strx] {{.*}}   "main"
150UPDATE-DWARF:  .debug_addr contents:
151UPDATE-DWARF:  0x00000000: Address table header: length = 0x0000004c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00
152UPDATE-DWARF: Addrs: [
153UPDATE-DWARF: 0x0000000000000000
154UPDATE-DWARF: 0x0000000000000010
155UPDATE-DWARF: 0x0000000000000020
156UPDATE-DWARF: 0x0000000000000030
157UPDATE-DWARF: 0x0000000000000040
158UPDATE-DWARF: 0x0000000000000050
159UPDATE-DWARF: 0x0000000000000060
160UPDATE-DWARF: 0x0000000000000070
161UPDATE-DWARF: 0x0000000000000080
162UPDATE-DWARF: ]
163