1## Check that the --debug-vars option works for simple register locations, when 2## using DWARF4 debug info, with functions in multiple sections. 3 4## Generated with this compile command, with the source code in Inputs/debug.c: 5## clang --target=arm--none-eabi -march=armv7-a -c debug.c -O1 -gdwarf-5 -S -o - -ffunction-sections 6 7# RUN: llvm-mc -triple armv8a--none-eabi < %s -filetype=obj --dwarf-version=5 | \ 8# RUN: llvm-objdump - -d --debug-vars --no-show-raw-insn | \ 9# RUN: FileCheck %s 10 11# CHECK: Disassembly of section .text.foo: 12# CHECK-EMPTY: 13# CHECK-NEXT: 00000000 <foo>: 14# CHECK-NEXT: ┠─ a = R0 15# CHECK-NEXT: ┃ ┠─ b = R1 16# CHECK-NEXT: ┃ ┃ ┠─ c = R2 17# CHECK-NEXT: ┃ ┃ ┃ ┌─ x = R0 18# CHECK-NEXT: 0: add r0, r1, r0 ┻ ┃ ┃ ╈ 19# CHECK-NEXT: ┌─ y = R0 20# CHECK-NEXT: 4: add r0, r0, r2 ╈ ┃ ┃ ┻ 21# CHECK-NEXT: 8: bx lr ┻ ┻ ┻ 22# CHECK-EMPTY: 23# CHECK-NEXT: Disassembly of section .text.bar: 24# CHECK-EMPTY: 25# CHECK-NEXT: 00000000 <bar>: 26# CHECK-NEXT: ┠─ a = R0 27# CHECK-NEXT: 0: add r0, r0, #1 ┃ 28# CHECK-NEXT: 4: bx lr ┻ 29 30 .text 31 .syntax unified 32 .eabi_attribute 67, "2.09" 33 .eabi_attribute 6, 10 34 .eabi_attribute 7, 65 35 .eabi_attribute 8, 1 36 .eabi_attribute 9, 2 37 .fpu neon 38 .eabi_attribute 34, 0 39 .eabi_attribute 17, 1 40 .eabi_attribute 20, 1 41 .eabi_attribute 21, 1 42 .eabi_attribute 23, 3 43 .eabi_attribute 24, 1 44 .eabi_attribute 25, 1 45 .eabi_attribute 38, 1 46 .eabi_attribute 18, 4 47 .eabi_attribute 26, 2 48 .eabi_attribute 14, 0 49 .file "debug.c" 50 .section .text.foo,"ax",%progbits 51 .globl foo 52 .p2align 2 53 .type foo,%function 54 .code 32 55foo: 56.Lfunc_begin0: 57 .file 0 "/work/scratch" "/work/llvm/src/llvm/test/tools/llvm-objdump/ARM/Inputs/debug.c" md5 0x07374f01ab24ec7c07db73bc13bd778e 58 .file 1 "/work" "llvm/src/llvm/test/tools/llvm-objdump/ARM/Inputs/debug.c" md5 0x07374f01ab24ec7c07db73bc13bd778e 59 .loc 1 1 0 60 .fnstart 61 .cfi_sections .debug_frame 62 .cfi_startproc 63 .loc 1 2 13 prologue_end 64 add r0, r1, r0 65.Ltmp0: 66 .loc 1 3 13 67 add r0, r0, r2 68.Ltmp1: 69 .loc 1 4 3 70 bx lr 71.Ltmp2: 72.Lfunc_end0: 73 .size foo, .Lfunc_end0-foo 74 .cfi_endproc 75 .cantunwind 76 .fnend 77 78 .section .text.bar,"ax",%progbits 79 .globl bar 80 .p2align 2 81 .type bar,%function 82 .code 32 83bar: 84.Lfunc_begin1: 85 .loc 1 7 0 86 .fnstart 87 .cfi_startproc 88 .loc 1 8 4 prologue_end 89 add r0, r0, #1 90.Ltmp3: 91 .loc 1 9 3 92 bx lr 93.Ltmp4: 94.Lfunc_end1: 95 .size bar, .Lfunc_end1-bar 96 .cfi_endproc 97 .cantunwind 98 .fnend 99 100 .section .debug_str_offsets,"",%progbits 101 .long 48 102 .short 5 103 .short 0 104.Lstr_offsets_base0: 105 .section .debug_str,"MS",%progbits,1 106.Linfo_string0: 107 .asciz "clang version 10.0.0 (git@github.com:llvm/llvm-project.git e73f78acd34360f7450b81167d9dc858ccddc262)" 108.Linfo_string1: 109 .asciz "/work/llvm/src/llvm/test/tools/llvm-objdump/ARM/Inputs/debug.c" 110.Linfo_string2: 111 .asciz "/work/scratch" 112.Linfo_string3: 113 .asciz "foo" 114.Linfo_string4: 115 .asciz "int" 116.Linfo_string5: 117 .asciz "bar" 118.Linfo_string6: 119 .asciz "a" 120.Linfo_string7: 121 .asciz "b" 122.Linfo_string8: 123 .asciz "c" 124.Linfo_string9: 125 .asciz "x" 126.Linfo_string10: 127 .asciz "y" 128 .section .debug_str_offsets,"",%progbits 129 .long .Linfo_string0 130 .long .Linfo_string1 131 .long .Linfo_string2 132 .long .Linfo_string3 133 .long .Linfo_string4 134 .long .Linfo_string5 135 .long .Linfo_string6 136 .long .Linfo_string7 137 .long .Linfo_string8 138 .long .Linfo_string9 139 .long .Linfo_string10 140 .section .debug_loclists,"",%progbits 141 .long .Ldebug_loclist_table_end0-.Ldebug_loclist_table_start0 142.Ldebug_loclist_table_start0: 143 .short 5 144 .byte 4 145 .byte 0 146 .long 3 147.Lloclists_table_base0: 148 .long .Ldebug_loc0-.Lloclists_table_base0 149 .long .Ldebug_loc1-.Lloclists_table_base0 150 .long .Ldebug_loc2-.Lloclists_table_base0 151.Ldebug_loc0: 152 .byte 3 153 .byte 0 154 .uleb128 .Ltmp0-.Lfunc_begin0 155 .byte 1 156 .byte 80 157 .byte 0 158.Ldebug_loc1: 159 .byte 1 160 .byte 0 161 .byte 4 162 .uleb128 .Ltmp0-.Lfunc_begin0 163 .uleb128 .Ltmp1-.Lfunc_begin0 164 .byte 1 165 .byte 80 166 .byte 0 167.Ldebug_loc2: 168 .byte 1 169 .byte 0 170 .byte 4 171 .uleb128 .Ltmp1-.Lfunc_begin0 172 .uleb128 .Lfunc_end0-.Lfunc_begin0 173 .byte 1 174 .byte 80 175 .byte 0 176.Ldebug_loclist_table_end0: 177 .section .debug_abbrev,"",%progbits 178 .byte 1 179 .byte 17 180 .byte 1 181 .byte 37 182 .byte 37 183 .byte 19 184 .byte 5 185 .byte 3 186 .byte 37 187 .byte 114 188 .byte 23 189 .byte 16 190 .byte 23 191 .byte 27 192 .byte 37 193 .byte 17 194 .byte 1 195 .byte 85 196 .byte 35 197 .byte 115 198 .byte 23 199 .byte 116 200 .byte 23 201 .ascii "\214\001" 202 .byte 23 203 .byte 0 204 .byte 0 205 .byte 2 206 .byte 46 207 .byte 1 208 .byte 17 209 .byte 27 210 .byte 18 211 .byte 6 212 .byte 64 213 .byte 24 214 .byte 122 215 .byte 25 216 .byte 3 217 .byte 37 218 .byte 58 219 .byte 11 220 .byte 59 221 .byte 11 222 .byte 39 223 .byte 25 224 .byte 73 225 .byte 19 226 .byte 63 227 .byte 25 228 .byte 0 229 .byte 0 230 .byte 3 231 .byte 5 232 .byte 0 233 .byte 2 234 .byte 34 235 .byte 3 236 .byte 37 237 .byte 58 238 .byte 11 239 .byte 59 240 .byte 11 241 .byte 73 242 .byte 19 243 .byte 0 244 .byte 0 245 .byte 4 246 .byte 5 247 .byte 0 248 .byte 2 249 .byte 24 250 .byte 3 251 .byte 37 252 .byte 58 253 .byte 11 254 .byte 59 255 .byte 11 256 .byte 73 257 .byte 19 258 .byte 0 259 .byte 0 260 .byte 5 261 .byte 52 262 .byte 0 263 .byte 2 264 .byte 34 265 .byte 3 266 .byte 37 267 .byte 58 268 .byte 11 269 .byte 59 270 .byte 11 271 .byte 73 272 .byte 19 273 .byte 0 274 .byte 0 275 .byte 6 276 .byte 36 277 .byte 0 278 .byte 3 279 .byte 37 280 .byte 62 281 .byte 11 282 .byte 11 283 .byte 11 284 .byte 0 285 .byte 0 286 .byte 0 287 .section .debug_info,"",%progbits 288.Lcu_begin0: 289 .long .Ldebug_info_end0-.Ldebug_info_start0 290.Ldebug_info_start0: 291 .short 5 292 .byte 1 293 .byte 4 294 .long .debug_abbrev 295 .byte 1 296 .byte 0 297 .short 12 298 .byte 1 299 .long .Lstr_offsets_base0 300 .long .Lline_table_start0 301 .byte 2 302 .long 0 303 .byte 0 304 .long .Laddr_table_base0 305 .long .Lrnglists_table_base0 306 .long .Lloclists_table_base0 307 .byte 2 308 .byte 0 309 .long .Lfunc_end0-.Lfunc_begin0 310 .byte 1 311 .byte 91 312 313 .byte 3 314 .byte 1 315 .byte 1 316 317 .long 132 318 319 .byte 3 320 .byte 0 321 .byte 6 322 .byte 1 323 .byte 1 324 .long 132 325 .byte 4 326 .byte 1 327 .byte 81 328 .byte 7 329 .byte 1 330 .byte 1 331 .long 132 332 .byte 4 333 .byte 1 334 .byte 82 335 .byte 8 336 .byte 1 337 .byte 1 338 .long 132 339 .byte 5 340 .byte 1 341 .byte 9 342 .byte 1 343 .byte 2 344 .long 132 345 .byte 5 346 .byte 2 347 .byte 10 348 .byte 1 349 .byte 3 350 .long 132 351 .byte 0 352 .byte 2 353 .byte 1 354 .long .Lfunc_end1-.Lfunc_begin1 355 .byte 1 356 .byte 91 357 358 .byte 5 359 .byte 1 360 .byte 7 361 362 .long 132 363 364 .byte 4 365 .byte 1 366 .byte 80 367 .byte 6 368 .byte 1 369 .byte 7 370 .long 132 371 .byte 0 372 .byte 6 373 .byte 4 374 .byte 5 375 .byte 4 376 .byte 0 377.Ldebug_info_end0: 378 .section .debug_rnglists,"",%progbits 379 .long .Ldebug_rnglist_table_end0-.Ldebug_rnglist_table_start0 380.Ldebug_rnglist_table_start0: 381 .short 5 382 .byte 4 383 .byte 0 384 .long 1 385.Lrnglists_table_base0: 386 .long .Ldebug_ranges0-.Lrnglists_table_base0 387.Ldebug_ranges0: 388 .byte 3 389 .byte 0 390 .uleb128 .Lfunc_end0-.Lfunc_begin0 391 .byte 3 392 .byte 1 393 .uleb128 .Lfunc_end1-.Lfunc_begin1 394 .byte 0 395.Ldebug_rnglist_table_end0: 396 .section .debug_addr,"",%progbits 397 .long .Ldebug_addr_end0-.Ldebug_addr_start0 398.Ldebug_addr_start0: 399 .short 5 400 .byte 4 401 .byte 0 402.Laddr_table_base0: 403 .long .Lfunc_begin0 404 .long .Lfunc_begin1 405.Ldebug_addr_end0: 406 .ident "clang version 10.0.0 (git@github.com:llvm/llvm-project.git e73f78acd34360f7450b81167d9dc858ccddc262)" 407 .section ".note.GNU-stack","",%progbits 408 .addrsig 409 .eabi_attribute 30, 1 410 .section .debug_line,"",%progbits 411.Lline_table_start0: 412