tzh
2024-08-22 c7d0944258c7d0943aa7b2211498fd612971ce27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# This assembly file was generated from the following trivial C code:
# $ cat scattered.c 
# int bar = 42;
# $ clang -S -arch armv7 -g scattered.c
# $ clang -c -o 1.o scattered.s
#
# Then I edited the debug info bellow to change the DW_AT_location of the bar
# variable from '.long _bar' to '.long _bar + 16' in order to generate a
# scattered reloc (I do not think LLVM will generate scattered relocs in
# debug info by itself).
 
   .section    __TEXT,__text,regular,pure_instructions
   .ios_version_min 5, 0
   .syntax unified
   .file    1 "scattered.c"
   .section    __DATA,__data
   .globl    _bar                    @ @bar
   .p2align    2
_bar:
   .long    42                      @ 0x2a
 
   .section    __DWARF,__debug_str,regular,debug
Linfo_string:
   .asciz    "clang version 3.9.0 (trunk 259311)" @ string offset=0
   .asciz    "scattered.c"           @ string offset=35
   .asciz    "/tmp"                  @ string offset=47
   .asciz    "bar"                   @ string offset=52
   .asciz    "int"                   @ string offset=56
   .section    __DWARF,__debug_loc,regular,debug
Lsection_debug_loc:
   .section    __DWARF,__debug_abbrev,regular,debug
Lsection_abbrev:
   .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    6                       @ DW_FORM_data4
   .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    12                      @ DW_FORM_flag
   .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    10                      @ DW_FORM_block1
   .byte    0                       @ EOM(1)
   .byte    0                       @ EOM(2)
   .byte    3                       @ 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    __DWARF,__debug_info,regular,debug
Lsection_info:
Lcu_begin0:
   .long    52                      @ Length of Unit
   .short    2                       @ DWARF version number
Lset0 = Lsection_abbrev-Lsection_abbrev @ Offset Into Abbrev. Section
   .long    Lset0
   .byte    4                       @ Address Size (in bytes)
   .byte    1                       @ Abbrev [1] 0xb:0x2d DW_TAG_compile_unit
   .long    0                       @ DW_AT_producer
   .short    12                      @ DW_AT_language
   .long    35                      @ DW_AT_name
Lset1 = Lline_table_start0-Lsection_line @ DW_AT_stmt_list
   .long    Lset1
   .long    47                      @ DW_AT_comp_dir
   .byte    2                       @ Abbrev [2] 0x1e:0x12 DW_TAG_variable
   .long    52                      @ DW_AT_name
   .long    48                      @ DW_AT_type
   .byte    1                       @ DW_AT_external
   .byte    1                       @ DW_AT_decl_file
   .byte    1                       @ DW_AT_decl_line
   .byte    5                       @ DW_AT_location
   .byte    3
   .long    _bar + 16
   .byte    3                       @ Abbrev [3] 0x30:0x7 DW_TAG_base_type
   .long    56                      @ DW_AT_name
   .byte    5                       @ DW_AT_encoding
   .byte    4                       @ DW_AT_byte_size
   .byte    0                       @ End Of Children Mark
   .section    __DWARF,__debug_ranges,regular,debug
Ldebug_range:
   .section    __DWARF,__debug_macinfo,regular,debug
   .byte    0                       @ End Of Macro List Mark
   .section    __DWARF,__apple_names,regular,debug
Lnames_begin:
   .long    1212240712              @ Header Magic
   .short    1                       @ Header Version
   .short    0                       @ Header Hash Function
   .long    1                       @ Header Bucket Count
   .long    1                       @ Header Hash Count
   .long    12                      @ Header Data Length
   .long    0                       @ HeaderData Die Offset Base
   .long    1                       @ HeaderData Atom Count
   .short    1                       @ DW_ATOM_die_offset
   .short    6                       @ DW_FORM_data4
   .long    0                       @ Bucket 0
   .long    193487034               @ Hash in Bucket 0
   .long    LNames0-Lnames_begin    @ Offset in Bucket 0
LNames0:
   .long    52                      @ bar
   .long    1                       @ Num DIEs
   .long    30
   .long    0
   .section    __DWARF,__apple_objc,regular,debug
Lobjc_begin:
   .long    1212240712              @ Header Magic
   .short    1                       @ Header Version
   .short    0                       @ Header Hash Function
   .long    1                       @ Header Bucket Count
   .long    0                       @ Header Hash Count
   .long    12                      @ Header Data Length
   .long    0                       @ HeaderData Die Offset Base
   .long    1                       @ HeaderData Atom Count
   .short    1                       @ DW_ATOM_die_offset
   .short    6                       @ DW_FORM_data4
   .long    -1                      @ Bucket 0
   .section    __DWARF,__apple_namespac,regular,debug
Lnamespac_begin:
   .long    1212240712              @ Header Magic
   .short    1                       @ Header Version
   .short    0                       @ Header Hash Function
   .long    1                       @ Header Bucket Count
   .long    0                       @ Header Hash Count
   .long    12                      @ Header Data Length
   .long    0                       @ HeaderData Die Offset Base
   .long    1                       @ HeaderData Atom Count
   .short    1                       @ DW_ATOM_die_offset
   .short    6                       @ DW_FORM_data4
   .long    -1                      @ Bucket 0
   .section    __DWARF,__apple_types,regular,debug
Ltypes_begin:
   .long    1212240712              @ Header Magic
   .short    1                       @ Header Version
   .short    0                       @ Header Hash Function
   .long    1                       @ Header Bucket Count
   .long    1                       @ Header Hash Count
   .long    20                      @ Header Data Length
   .long    0                       @ HeaderData Die Offset Base
   .long    3                       @ HeaderData Atom Count
   .short    1                       @ DW_ATOM_die_offset
   .short    6                       @ DW_FORM_data4
   .short    3                       @ DW_ATOM_die_tag
   .short    5                       @ DW_FORM_data2
   .short    4                       @ DW_ATOM_type_flags
   .short    11                      @ DW_FORM_data1
   .long    0                       @ Bucket 0
   .long    193495088               @ Hash in Bucket 0
   .long    Ltypes0-Ltypes_begin    @ Offset in Bucket 0
Ltypes0:
   .long    56                      @ int
   .long    1                       @ Num DIEs
   .long    48
   .short    36
   .byte    0
   .long    0
 
.subsections_via_symbols
   .section    __DWARF,__debug_line,regular,debug
Lsection_line:
Lline_table_start0: