1 #! /bin/sh 2 # Copyright (C) 2013 Red Hat, Inc. 3 # This file is part of elfutils. 4 # 5 # This file is free software; you can redistribute it and/or modify 6 # it under the terms of the GNU General Public License as published by 7 # the Free Software Foundation; either version 3 of the License, or 8 # (at your option) any later version. 9 # 10 # elfutils is distributed in the hope that it will be useful, but 11 # WITHOUT ANY WARRANTY; without even the implied warranty of 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 # GNU General Public License for more details. 14 # 15 # You should have received a copy of the GNU General Public License 16 # along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 . $srcdir/test-subr.sh 19 20 # - hello.c 21 # int say (const char *prefix); 22 # 23 # static char * 24 # subject (char *word, int count) 25 # { 26 # return count > 0 ? word : (word + count); 27 # } 28 # 29 # int 30 # main (int argc, char **argv) 31 # { 32 # return say (subject (argv[0], argc)); 33 # } 34 # 35 # - world.c 36 # static int 37 # sad (char c) 38 # { 39 # return c > 0 ? c : c + 1; 40 # } 41 # 42 # static int 43 # happy (const char *w) 44 # { 45 # return sad (w[1]); 46 # } 47 # 48 # int 49 # say (const char *prefix) 50 # { 51 # const char *world = "World"; 52 # return prefix ? sad (prefix[0]) : happy (world); 53 # } 54 # 55 # gcc -g -O2 -c hello.c 56 # gcc -g -O2 -c world.c 57 # gcc -g -o testfileloc hello.o world.o 58 59 testfiles testfileloc 60 61 # Process values as offsets from base addresses and resolve to symbols. 62 testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc --debug-dump=ranges \ 63 testfileloc<<\EOF 64 65 DWARF section [33] '.debug_loc' at offset 0xd2a: 66 67 CU [ b] base: 0x0000000000400480 <main> 68 [ 0] range 0, d 69 0x0000000000400480 <main>.. 70 0x000000000040048c <main+0xc> 71 [ 0] reg5 72 [ 23] range 5, d 73 0x0000000000400485 <main+0x5>.. 74 0x000000000040048c <main+0xc> 75 [ 0] reg5 76 77 CU [ e0] base: 0x00000000004004a0 <say> 78 [ 46] range 12, 1a 79 0x00000000004004b2 <say+0x12>.. 80 0x00000000004004b9 <say+0x19> 81 [ 0] breg5 0 82 83 DWARF section [34] '.debug_ranges' at offset 0xd94: 84 85 CU [ b] base: 0x0000000000400480 <main> 86 [ 0] range 0, 2 87 0x0000000000400480 <main>.. 88 0x0000000000400481 <main+0x1> 89 range 5, d 90 0x0000000000400485 <main+0x5>.. 91 0x000000000040048c <main+0xc> 92 93 CU [ e0] base: 0x00000000004004a0 <say> 94 [ 30] range d, f 95 0x00000000004004ad <say+0xd>.. 96 0x00000000004004ae <say+0xe> 97 range 12, 1a 98 0x00000000004004b2 <say+0x12>.. 99 0x00000000004004b9 <say+0x19> 100 EOF 101 102 # Don't resolve addresses to symbols. 103 testrun_compare ${abs_top_builddir}/src/readelf -N --debug-dump=loc --debug-dump=ranges \ 104 testfileloc<<\EOF 105 106 DWARF section [33] '.debug_loc' at offset 0xd2a: 107 108 CU [ b] base: 0x0000000000400480 109 [ 0] range 0, d 110 0x0000000000400480.. 111 0x000000000040048c 112 [ 0] reg5 113 [ 23] range 5, d 114 0x0000000000400485.. 115 0x000000000040048c 116 [ 0] reg5 117 118 CU [ e0] base: 0x00000000004004a0 119 [ 46] range 12, 1a 120 0x00000000004004b2.. 121 0x00000000004004b9 122 [ 0] breg5 0 123 124 DWARF section [34] '.debug_ranges' at offset 0xd94: 125 126 CU [ b] base: 0x0000000000400480 127 [ 0] range 0, 2 128 0x0000000000400480.. 129 0x0000000000400481 130 range 5, d 131 0x0000000000400485.. 132 0x000000000040048c 133 134 CU [ e0] base: 0x00000000004004a0 135 [ 30] range d, f 136 0x00000000004004ad.. 137 0x00000000004004ae 138 range 12, 1a 139 0x00000000004004b2.. 140 0x00000000004004b9 141 EOF 142 143 # Produce "raw" unprocessed content. 144 testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=loc --debug-dump=ranges \ 145 testfileloc<<\EOF 146 147 DWARF section [33] '.debug_loc' at offset 0xd2a: 148 149 CU [ b] base: 0x0000000000400480 150 [ 0] range 0, d 151 [ 0] reg5 152 [ 23] range 5, d 153 [ 0] reg5 154 155 CU [ e0] base: 0x00000000004004a0 156 [ 46] range 12, 1a 157 [ 0] breg5 0 158 159 DWARF section [34] '.debug_ranges' at offset 0xd94: 160 161 CU [ b] base: 0x0000000000400480 162 [ 0] range 0, 2 163 range 5, d 164 165 CU [ e0] base: 0x00000000004004a0 166 [ 30] range d, f 167 range 12, 1a 168 EOF 169 170 # .debug_rnglists (DWARF5), see tests/testfile-dwarf-45.source 171 testfiles testfile-dwarf-5 172 testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc testfile-dwarf-5<<\EOF 173 174 DWARF section [31] '.debug_loclists' at offset 0x1c0c: 175 Table at Offset 0x0: 176 177 Length: 96 178 DWARF version: 5 179 Address size: 8 180 Segment size: 0 181 Offset entries: 0 182 CU [ c] base: 0x0000000000400510 <foo> 183 184 Offset: c, Index: 0 185 offset_pair 0, a 186 0x0000000000400510 <foo>.. 187 0x0000000000400519 <foo+0x9> 188 [ 0] reg5 189 offset_pair a, 34 190 0x000000000040051a <foo+0xa>.. 191 0x0000000000400543 <foo+0x33> 192 [ 0] entry_value: 193 [ 0] reg5 194 [ 3] stack_value 195 end_of_list 196 197 Offset: 1a, Index: e 198 offset_pair 1b, 2d 199 0x000000000040052b <foo+0x1b>.. 200 0x000000000040053c <foo+0x2c> 201 [ 0] addr 0x601038 <m> 202 end_of_list 203 204 Offset: 28, Index: 1c 205 offset_pair 1b, 21 206 0x000000000040052b <foo+0x1b>.. 207 0x0000000000400530 <foo+0x20> 208 [ 0] reg5 209 end_of_list 210 211 Offset: 2e, Index: 22 212 offset_pair 1b, 27 213 0x000000000040052b <foo+0x1b>.. 214 0x0000000000400536 <foo+0x26> 215 [ 0] reg5 216 offset_pair 29, 2d 217 0x0000000000400539 <foo+0x29>.. 218 0x000000000040053c <foo+0x2c> 219 [ 0] reg5 220 end_of_list 221 222 Offset: 39, Index: 2d 223 offset_pair 21, 27 224 0x0000000000400531 <foo+0x21>.. 225 0x0000000000400536 <foo+0x26> 226 [ 0] reg5 227 offset_pair 29, 2d 228 0x0000000000400539 <foo+0x29>.. 229 0x000000000040053c <foo+0x2c> 230 [ 0] reg5 231 end_of_list 232 233 Offset: 44, Index: 38 234 offset_pair 21, 2d 235 0x0000000000400531 <foo+0x21>.. 236 0x000000000040053c <foo+0x2c> 237 [ 0] reg5 238 end_of_list 239 240 Offset: 4a, Index: 3e 241 offset_pair 2d, 33 242 0x000000000040053d <foo+0x2d>.. 243 0x0000000000400542 <foo+0x32> 244 [ 0] reg5 245 end_of_list 246 247 Offset: 50, Index: 44 248 offset_pair 40, 4f 249 0x0000000000400550 <baz>.. 250 0x000000000040055e <baz+0xe> 251 [ 0] reg5 252 offset_pair 4f, 51 253 0x000000000040055f <baz+0xf>.. 254 0x0000000000400560 <baz+0x10> 255 [ 0] entry_value: 256 [ 0] reg5 257 [ 3] stack_value 258 end_of_list 259 260 Offset: 5e, Index: 52 261 offset_pair 40, 50 262 0x0000000000400550 <baz>.. 263 0x000000000040055f <baz+0xf> 264 [ 0] reg5 265 end_of_list 266 267 Table at Offset 0x64: 268 269 Length: 159 270 DWARF version: 5 271 Address size: 8 272 Segment size: 0 273 Offset entries: 0 274 CU [ 218] base: 000000000000000000 275 276 Offset: 70, Index: 0 277 base_address 0x400410 278 0x0000000000400410 <main> 279 offset_pair 0, 14 280 0x0000000000400410 <main>.. 281 0x0000000000400423 <main+0x13> 282 [ 0] reg5 283 offset_pair 14, 20 284 0x0000000000400424 <main+0x14>.. 285 0x000000000040042f <main+0x1f> 286 [ 0] entry_value: 287 [ 0] reg5 288 [ 3] stack_value 289 end_of_list 290 291 Offset: 87, Index: 17 292 base_address 0x400410 293 0x0000000000400410 <main> 294 offset_pair 0, 18 295 0x0000000000400410 <main>.. 296 0x0000000000400427 <main+0x17> 297 [ 0] reg4 298 offset_pair 18, 20 299 0x0000000000400428 <main+0x18>.. 300 0x000000000040042f <main+0x1f> 301 [ 0] entry_value: 302 [ 0] reg4 303 [ 3] stack_value 304 end_of_list 305 306 Offset: 9e, Index: 2e 307 start_length 0x400421, 7 308 0x0000000000400421 <main+0x11>.. 309 0x0000000000400427 <main+0x17> 310 [ 0] reg0 311 end_of_list 312 313 Offset: ab, Index: 3b 314 base_address 0x400570 315 0x0000000000400570 <calc> 316 offset_pair 0, 8 317 0x0000000000400570 <calc>.. 318 0x0000000000400577 <calc+0x7> 319 [ 0] reg5 320 offset_pair 8, 2b 321 0x0000000000400578 <calc+0x8>.. 322 0x000000000040059a <calc+0x2a> 323 [ 0] entry_value: 324 [ 0] reg5 325 [ 3] stack_value 326 end_of_list 327 328 Offset: c2, Index: 52 329 start_length 0x400588, b 330 0x0000000000400588 <calc+0x18>.. 331 0x0000000000400592 <calc+0x22> 332 [ 0] reg0 333 end_of_list 334 335 Offset: cf, Index: 5f 336 base_address 0x400588 337 0x0000000000400588 <calc+0x18> 338 offset_pair 0, 2 339 0x0000000000400588 <calc+0x18>.. 340 0x0000000000400589 <calc+0x19> 341 [ 0] reg1 342 offset_pair 2, 7 343 0x000000000040058a <calc+0x1a>.. 344 0x000000000040058e <calc+0x1e> 345 [ 0] reg5 346 offset_pair 7, b 347 0x000000000040058f <calc+0x1f>.. 348 0x0000000000400592 <calc+0x22> 349 [ 0] entry_value: 350 [ 0] reg5 351 [ 3] deref_size 1 352 [ 5] const1u 56 353 [ 7] shl 354 [ 8] const1u 56 355 [10] shra 356 [11] stack_value 357 end_of_list 358 359 Offset: f3, Index: 83 360 base_address 0x400588 361 0x0000000000400588 <calc+0x18> 362 offset_pair 0, 2 363 0x0000000000400588 <calc+0x18>.. 364 0x0000000000400589 <calc+0x19> 365 [ 0] reg1 366 offset_pair 2, b 367 0x000000000040058a <calc+0x1a>.. 368 0x0000000000400592 <calc+0x22> 369 [ 0] reg5 370 end_of_list 371 372 EOF 373 374 # Same as above, but for DWARF4, note completely different encoding, but 375 # the information is the same (check with diff -uwb). 376 testfiles testfile-dwarf-4 377 testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc testfile-dwarf-4<<\EOF 378 379 DWARF section [31] '.debug_loc' at offset 0x1c86: 380 381 CU [ b] base: 0x0000000000400510 <foo> 382 [ 0] range 0, a 383 0x0000000000400510 <foo>.. 384 0x0000000000400519 <foo+0x9> 385 [ 0] reg5 386 range a, 34 387 0x000000000040051a <foo+0xa>.. 388 0x0000000000400543 <foo+0x33> 389 [ 0] GNU_entry_value: 390 [ 0] reg5 391 [ 3] stack_value 392 [ 39] range 1b, 2d 393 0x000000000040052b <foo+0x1b>.. 394 0x000000000040053c <foo+0x2c> 395 [ 0] addr 0x601038 <m> 396 [ 64] range 1b, 21 397 0x000000000040052b <foo+0x1b>.. 398 0x0000000000400530 <foo+0x20> 399 [ 0] reg5 400 [ 87] range 1b, 27 401 0x000000000040052b <foo+0x1b>.. 402 0x0000000000400536 <foo+0x26> 403 [ 0] reg5 404 range 29, 2d 405 0x0000000000400539 <foo+0x29>.. 406 0x000000000040053c <foo+0x2c> 407 [ 0] reg5 408 [ bd] range 21, 27 409 0x0000000000400531 <foo+0x21>.. 410 0x0000000000400536 <foo+0x26> 411 [ 0] reg5 412 range 29, 2d 413 0x0000000000400539 <foo+0x29>.. 414 0x000000000040053c <foo+0x2c> 415 [ 0] reg5 416 [ f3] range 21, 2d 417 0x0000000000400531 <foo+0x21>.. 418 0x000000000040053c <foo+0x2c> 419 [ 0] reg5 420 [ 116] range 2d, 33 421 0x000000000040053d <foo+0x2d>.. 422 0x0000000000400542 <foo+0x32> 423 [ 0] reg5 424 [ 139] range 40, 4f 425 0x0000000000400550 <baz>.. 426 0x000000000040055e <baz+0xe> 427 [ 0] reg5 428 range 4f, 51 429 0x000000000040055f <baz+0xf>.. 430 0x0000000000400560 <baz+0x10> 431 [ 0] GNU_entry_value: 432 [ 0] reg5 433 [ 3] stack_value 434 [ 172] range 40, 50 435 0x0000000000400550 <baz>.. 436 0x000000000040055f <baz+0xf> 437 [ 0] reg5 438 439 CU [ 21c] base: 000000000000000000 440 [ 195] range 400410, 400424 441 0x0000000000400410 <main>.. 442 0x0000000000400423 <main+0x13> 443 [ 0] reg5 444 range 400424, 400430 445 0x0000000000400424 <main+0x14>.. 446 0x000000000040042f <main+0x1f> 447 [ 0] GNU_entry_value: 448 [ 0] reg5 449 [ 3] stack_value 450 [ 1ce] range 400410, 400428 451 0x0000000000400410 <main>.. 452 0x0000000000400427 <main+0x17> 453 [ 0] reg4 454 range 400428, 400430 455 0x0000000000400428 <main+0x18>.. 456 0x000000000040042f <main+0x1f> 457 [ 0] GNU_entry_value: 458 [ 0] reg4 459 [ 3] stack_value 460 [ 207] range 400421, 400428 461 0x0000000000400421 <main+0x11>.. 462 0x0000000000400427 <main+0x17> 463 [ 0] reg0 464 [ 22a] range 400570, 400578 465 0x0000000000400570 <calc>.. 466 0x0000000000400577 <calc+0x7> 467 [ 0] reg5 468 range 400578, 40059b 469 0x0000000000400578 <calc+0x8>.. 470 0x000000000040059a <calc+0x2a> 471 [ 0] GNU_entry_value: 472 [ 0] reg5 473 [ 3] stack_value 474 [ 263] range 400588, 400593 475 0x0000000000400588 <calc+0x18>.. 476 0x0000000000400592 <calc+0x22> 477 [ 0] reg0 478 [ 286] range 400588, 40058a 479 0x0000000000400588 <calc+0x18>.. 480 0x0000000000400589 <calc+0x19> 481 [ 0] reg1 482 range 40058a, 40058f 483 0x000000000040058a <calc+0x1a>.. 484 0x000000000040058e <calc+0x1e> 485 [ 0] reg5 486 range 40058f, 400593 487 0x000000000040058f <calc+0x1f>.. 488 0x0000000000400592 <calc+0x22> 489 [ 0] GNU_entry_value: 490 [ 0] reg5 491 [ 3] deref_size 1 492 [ 5] const1u 56 493 [ 7] shl 494 [ 8] const1u 56 495 [10] shra 496 [11] stack_value 497 [ 2da] range 400588, 40058a 498 0x0000000000400588 <calc+0x18>.. 499 0x0000000000400589 <calc+0x19> 500 [ 0] reg1 501 range 40058a, 400593 502 0x000000000040058a <calc+0x1a>.. 503 0x0000000000400592 <calc+0x22> 504 [ 0] reg5 505 EOF 506 507 # Split DWARF5 variant. Note that the .debug_loclists moved to the .dwo file 508 # and now uses an index and addrx indirections. 509 testfiles testfile-splitdwarf-5 testfile-hello5.dwo testfile-world5.dwo 510 testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc --dwarf-skeleton=testfile-splitdwarf-5 testfile-hello5.dwo testfile-world5.dwo <<\EOF 511 512 testfile-hello5.dwo: 513 514 515 DWARF section [ 3] '.debug_loclists.dwo' at offset 0x236: 516 Table at Offset 0x0: 517 518 Length: 125 519 DWARF version: 5 520 Address size: 8 521 Segment size: 0 522 Offset entries: 9 523 CU [ 14] base: 0x0000000000401160 <foo> 524 525 Offsets starting at 0xc: 526 [ 0] 0x24 527 [ 1] 0x32 528 [ 2] 0x39 529 [ 3] 0x3f 530 [ 4] 0x4a 531 [ 5] 0x55 532 [ 6] 0x5b 533 [ 7] 0x61 534 [ 8] 0x6f 535 536 Offset: 30, Index: 24 537 startx_length f, a 538 0x0000000000401160 <foo>.. 539 0x0000000000401169 <foo+0x9> 540 [ 0] reg5 541 startx_length 0, 2a 542 0x000000000040116a <foo+0xa>.. 543 0x0000000000401193 <foo+0x33> 544 [ 0] entry_value: 545 [ 0] reg5 546 [ 3] stack_value 547 end_of_list 548 549 Offset: 3e, Index: 32 550 startx_length 11, 12 551 0x000000000040117b <foo+0x1b>.. 552 0x000000000040118c <foo+0x2c> 553 [ 0] addrx [18] 0x404038 <m> 554 end_of_list 555 556 Offset: 45, Index: 39 557 startx_length 11, 6 558 0x000000000040117b <foo+0x1b>.. 559 0x0000000000401180 <foo+0x20> 560 [ 0] reg5 561 end_of_list 562 563 Offset: 4b, Index: 3f 564 startx_length 11, c 565 0x000000000040117b <foo+0x1b>.. 566 0x0000000000401186 <foo+0x26> 567 [ 0] reg5 568 startx_length 1, 4 569 0x0000000000401189 <foo+0x29>.. 570 0x000000000040118c <foo+0x2c> 571 [ 0] reg5 572 end_of_list 573 574 Offset: 56, Index: 4a 575 startx_length 4, 6 576 0x0000000000401181 <foo+0x21>.. 577 0x0000000000401186 <foo+0x26> 578 [ 0] reg5 579 startx_length 1, 4 580 0x0000000000401189 <foo+0x29>.. 581 0x000000000040118c <foo+0x2c> 582 [ 0] reg5 583 end_of_list 584 585 Offset: 61, Index: 55 586 startx_length 4, c 587 0x0000000000401181 <foo+0x21>.. 588 0x000000000040118c <foo+0x2c> 589 [ 0] reg5 590 end_of_list 591 592 Offset: 67, Index: 5b 593 startx_length 2, 6 594 0x000000000040118d <foo+0x2d>.. 595 0x0000000000401192 <foo+0x32> 596 [ 0] reg5 597 end_of_list 598 599 Offset: 6d, Index: 61 600 startx_length 9, f 601 0x00000000004011a0 <baz>.. 602 0x00000000004011ae <baz+0xe> 603 [ 0] reg5 604 startx_length 5, 2 605 0x00000000004011af <baz+0xf>.. 606 0x00000000004011b0 <baz+0x10> 607 [ 0] entry_value: 608 [ 0] reg5 609 [ 3] stack_value 610 end_of_list 611 612 Offset: 7b, Index: 6f 613 startx_length 9, 10 614 0x00000000004011a0 <baz>.. 615 0x00000000004011af <baz+0xf> 616 [ 0] reg5 617 end_of_list 618 619 620 testfile-world5.dwo: 621 622 623 DWARF section [ 3] '.debug_loclists.dwo' at offset 0x217: 624 Table at Offset 0x0: 625 626 Length: 128 627 DWARF version: 5 628 Address size: 8 629 Segment size: 0 630 Offset entries: 7 631 CU [ 14] base: 000000000000000000 632 633 Offsets starting at 0xc: 634 [ 0] 0x1c 635 [ 1] 0x2a 636 [ 2] 0x38 637 [ 3] 0x3e 638 [ 4] 0x4c 639 [ 5] 0x52 640 [ 6] 0x6d 641 642 Offset: 28, Index: 1c 643 startx_length 2, 14 644 0x0000000000401060 <main>.. 645 0x0000000000401073 <main+0x13> 646 [ 0] reg5 647 startx_length 4, c 648 0x0000000000401074 <main+0x14>.. 649 0x000000000040107f <main+0x1f> 650 [ 0] entry_value: 651 [ 0] reg5 652 [ 3] stack_value 653 end_of_list 654 655 Offset: 36, Index: 2a 656 startx_length 2, 18 657 0x0000000000401060 <main>.. 658 0x0000000000401077 <main+0x17> 659 [ 0] reg4 660 startx_length 7, 6 661 0x0000000000401078 <main+0x18>.. 662 0x000000000040107d <main+0x1d> 663 [ 0] entry_value: 664 [ 0] reg4 665 [ 3] stack_value 666 end_of_list 667 668 Offset: 44, Index: 38 669 startx_length 3, 7 670 0x0000000000401071 <main+0x11>.. 671 0x0000000000401077 <main+0x17> 672 [ 0] reg0 673 end_of_list 674 675 Offset: 4a, Index: 3e 676 startx_length d, 8 677 0x00000000004011c0 <calc>.. 678 0x00000000004011c7 <calc+0x7> 679 [ 0] reg5 680 startx_length e, 23 681 0x00000000004011c8 <calc+0x8>.. 682 0x00000000004011ea <calc+0x2a> 683 [ 0] entry_value: 684 [ 0] reg5 685 [ 3] stack_value 686 end_of_list 687 688 Offset: 58, Index: 4c 689 startx_length f, b 690 0x00000000004011d8 <calc+0x18>.. 691 0x00000000004011e2 <calc+0x22> 692 [ 0] reg0 693 end_of_list 694 695 Offset: 5e, Index: 52 696 startx_length f, 2 697 0x00000000004011d8 <calc+0x18>.. 698 0x00000000004011d9 <calc+0x19> 699 [ 0] reg1 700 startx_length 10, 5 701 0x00000000004011da <calc+0x1a>.. 702 0x00000000004011de <calc+0x1e> 703 [ 0] reg5 704 startx_length 0, 4 705 0x00000000004011df <calc+0x1f>.. 706 0x00000000004011e2 <calc+0x22> 707 [ 0] entry_value: 708 [ 0] reg5 709 [ 3] deref_size 1 710 [ 5] const1u 56 711 [ 7] shl 712 [ 8] const1u 56 713 [10] shra 714 [11] stack_value 715 end_of_list 716 717 Offset: 79, Index: 6d 718 startx_length f, 2 719 0x00000000004011d8 <calc+0x18>.. 720 0x00000000004011d9 <calc+0x19> 721 [ 0] reg1 722 startx_length 10, 9 723 0x00000000004011da <calc+0x1a>.. 724 0x00000000004011e2 <calc+0x22> 725 [ 0] reg5 726 end_of_list 727 728 EOF 729 730 # GNU DebugFission split-dwarf variant. Still uses .debug_loc, but now in 731 # .dwo file, with somewhat similar, but different encoding from DWARF5. 732 testfiles testfile-splitdwarf-4 testfile-hello4.dwo testfile-world4.dwo 733 testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc --dwarf-skeleton=testfile-splitdwarf-4 testfile-hello4.dwo testfile-world4.dwo <<\EOF 734 735 testfile-hello4.dwo: 736 737 738 DWARF section [ 3] '.debug_loc.dwo' at offset 0x253: 739 740 CU [ b] base: 0x0000000000401160 <foo> 741 [ 0] range 401160, 40116a 742 0x0000000000401160 <foo>.. 743 0x0000000000401169 <foo+0x9> 744 [ 0] reg5 745 range 40116a, 401194 746 0x000000000040116a <foo+0xa>.. 747 0x0000000000401193 <foo+0x33> 748 [ 0] GNU_entry_value: 749 [ 0] reg5 750 [ 3] stack_value 751 [ 16] range 40117b, 40118d 752 0x000000000040117b <foo+0x1b>.. 753 0x000000000040118c <foo+0x2c> 754 [ 0] GNU_addr_index [18] 0x404038 <m> 755 [ 21] range 40117b, 401181 756 0x000000000040117b <foo+0x1b>.. 757 0x0000000000401180 <foo+0x20> 758 [ 0] reg5 759 [ 2b] range 40117b, 401187 760 0x000000000040117b <foo+0x1b>.. 761 0x0000000000401186 <foo+0x26> 762 [ 0] reg5 763 range 401189, 40118d 764 0x0000000000401189 <foo+0x29>.. 765 0x000000000040118c <foo+0x2c> 766 [ 0] reg5 767 [ 3e] range 401181, 401187 768 0x0000000000401181 <foo+0x21>.. 769 0x0000000000401186 <foo+0x26> 770 [ 0] reg5 771 range 401189, 40118d 772 0x0000000000401189 <foo+0x29>.. 773 0x000000000040118c <foo+0x2c> 774 [ 0] reg5 775 [ 51] range 401181, 40118d 776 0x0000000000401181 <foo+0x21>.. 777 0x000000000040118c <foo+0x2c> 778 [ 0] reg5 779 [ 5b] range 40118d, 401193 780 0x000000000040118d <foo+0x2d>.. 781 0x0000000000401192 <foo+0x32> 782 [ 0] reg5 783 [ 65] range 4011a0, 4011af 784 0x00000000004011a0 <baz>.. 785 0x00000000004011ae <baz+0xe> 786 [ 0] reg5 787 range 4011af, 4011b1 788 0x00000000004011af <baz+0xf>.. 789 0x00000000004011b0 <baz+0x10> 790 [ 0] GNU_entry_value: 791 [ 0] reg5 792 [ 3] stack_value 793 [ 7b] range 4011a0, 4011b0 794 0x00000000004011a0 <baz>.. 795 0x00000000004011af <baz+0xf> 796 [ 0] reg5 797 798 testfile-world4.dwo: 799 800 801 DWARF section [ 3] '.debug_loc.dwo' at offset 0x225: 802 803 CU [ b] base: 000000000000000000 804 [ 0] range 401060, 401074 805 0x0000000000401060 <main>.. 806 0x0000000000401073 <main+0x13> 807 [ 0] reg5 808 range 401074, 401080 809 0x0000000000401074 <main+0x14>.. 810 0x000000000040107f <main+0x1f> 811 [ 0] GNU_entry_value: 812 [ 0] reg5 813 [ 3] stack_value 814 [ 16] range 401060, 401078 815 0x0000000000401060 <main>.. 816 0x0000000000401077 <main+0x17> 817 [ 0] reg4 818 range 401078, 40107e 819 0x0000000000401078 <main+0x18>.. 820 0x000000000040107d <main+0x1d> 821 [ 0] GNU_entry_value: 822 [ 0] reg4 823 [ 3] stack_value 824 [ 2c] range 401071, 401078 825 0x0000000000401071 <main+0x11>.. 826 0x0000000000401077 <main+0x17> 827 [ 0] reg0 828 [ 36] range 4011c0, 4011c8 829 0x00000000004011c0 <calc>.. 830 0x00000000004011c7 <calc+0x7> 831 [ 0] reg5 832 range 4011c8, 4011eb 833 0x00000000004011c8 <calc+0x8>.. 834 0x00000000004011ea <calc+0x2a> 835 [ 0] GNU_entry_value: 836 [ 0] reg5 837 [ 3] stack_value 838 [ 4c] range 4011d8, 4011e3 839 0x00000000004011d8 <calc+0x18>.. 840 0x00000000004011e2 <calc+0x22> 841 [ 0] reg0 842 [ 56] range 4011d8, 4011da 843 0x00000000004011d8 <calc+0x18>.. 844 0x00000000004011d9 <calc+0x19> 845 [ 0] reg1 846 range 4011da, 4011df 847 0x00000000004011da <calc+0x1a>.. 848 0x00000000004011de <calc+0x1e> 849 [ 0] reg5 850 range 4011df, 4011e3 851 0x00000000004011df <calc+0x1f>.. 852 0x00000000004011e2 <calc+0x22> 853 [ 0] GNU_entry_value: 854 [ 0] reg5 855 [ 3] deref_size 1 856 [ 5] const1u 56 857 [ 7] shl 858 [ 8] const1u 56 859 [10] shra 860 [11] stack_value 861 [ 7d] range 4011d8, 4011da 862 0x00000000004011d8 <calc+0x18>.. 863 0x00000000004011d9 <calc+0x19> 864 [ 0] reg1 865 range 4011da, 4011e3 866 0x00000000004011da <calc+0x1a>.. 867 0x00000000004011e2 <calc+0x22> 868 [ 0] reg5 869 EOF 870 871 # Partial dwarf-4 and partial GNU DebugFission split-dwarf. 872 # 873 # = popcount.c = 874 # 875 # int popcount (unsigned char u) 876 # { 877 # int c = 0; 878 # while (u != 0) 879 # { 880 # if ((u & 1) == 1) 881 # c++; 882 # u >>= 1; 883 # } 884 # return c; 885 # } 886 # 887 # = splitdwarf4-not-split4.c = 888 # 889 # extern int popcount (unsigned char); 890 # 891 # int main (int argc, char **argv) 892 # { 893 # int i; 894 # int p = argc; 895 # for (i = 0; i < argc; ++i) 896 # p += popcount (argv[i][0]); 897 # i += p; 898 # return i; 899 # } 900 # 901 # gcc -gdwarf-4 -O2 -c popcount.c 902 # gcc -gdwarf-4 -gsplit-dwarf -O2 -c splitdwarf4-not-split4.c 903 # gcc -o testfile-splitdwarf4-not-split4 splitdwarf4-not-split4.o popcount.o 904 # eu-strip -f testfile-splitdwarf4-not-split4.debug \ 905 # testfile-splitdwarf4-not-split4 906 907 testfiles testfile-splitdwarf4-not-split4.debug 908 testfiles splitdwarf4-not-split4.dwo 909 910 testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=info+ --debug-dump=loc testfile-splitdwarf4-not-split4.debug <<\EOF 911 912 DWARF section [28] '.debug_info' at offset 0x330: 913 [Offset] 914 Compilation unit at offset 0: 915 Version: 4, Abbreviation section offset: 0, Address size: 8, Offset size: 4 916 Unit type: skeleton (4), Unit id: 0x3d909d7bd0e69c0b 917 [ b] compile_unit abbrev: 1 918 ranges (sec_offset) range list [ 0] 919 low_pc (addr) 000000000000000000 920 stmt_list (sec_offset) 0 921 GNU_dwo_name (strp) "splitdwarf4-not-split4.dwo" 922 comp_dir (strp) "/tmp" 923 GNU_pubnames (flag_present) yes 924 GNU_addr_base (sec_offset) address base [ 0] 925 GNU_dwo_id (data8) 0x3d909d7bd0e69c0b 926 GNU_ranges_base (sec_offset) 0 927 Split compilation unit at offset 0: 928 Version: 4, Abbreviation section offset: 0, Address size: 8, Offset size: 4 929 Unit type: skeleton (4), Unit id: 0x3d909d7bd0e69c0b 930 { b} compile_unit abbrev: 1 931 producer (GNU_str_index) "GNU C17 9.0.0 20180528 (experimental) -mtune=generic -march=x86-64 -gdwarf-4 -gsplit-dwarf -O2" 932 language (data1) C99 (12) 933 name (GNU_str_index) "splitdwarf4-not-split4.c" 934 comp_dir (GNU_str_index) "/tmp" 935 GNU_dwo_id (data8) 0x3d909d7bd0e69c0b 936 { 18} subprogram abbrev: 2 937 external (flag_present) yes 938 name (GNU_str_index) "main" 939 decl_file (data1) splitdwarf4-not-split4.c (1) 940 decl_line (data1) 3 941 decl_column (data1) 5 942 prototyped (flag_present) yes 943 type (ref4) { 6d} 944 low_pc (GNU_addr_index) [4] 0x0000000000401050 <main> 945 high_pc (data8) 76 (0x000000000040109c <_start>) 946 frame_base (exprloc) 947 [ 0] call_frame_cfa 948 GNU_all_call_sites (flag_present) yes 949 sibling (ref4) { 6d} 950 { 30} formal_parameter abbrev: 3 951 name (GNU_str_index) "argc" 952 decl_file (data1) splitdwarf4-not-split4.c (1) 953 decl_line (data1) 3 954 decl_column (data1) 15 955 type (ref4) { 6d} 956 location (sec_offset) location list [ 0] 957 { 3d} formal_parameter abbrev: 3 958 name (GNU_str_index) "argv" 959 decl_file (data1) splitdwarf4-not-split4.c (1) 960 decl_line (data1) 3 961 decl_column (data1) 28 962 type (ref4) { 74} 963 location (sec_offset) location list [ 28] 964 { 4a} variable abbrev: 4 965 name (string) "i" 966 decl_file (data1) splitdwarf4-not-split4.c (1) 967 decl_line (data1) 5 968 decl_column (data1) 7 969 type (ref4) { 6d} 970 location (sec_offset) location list [ 47] 971 { 58} variable abbrev: 4 972 name (string) "p" 973 decl_file (data1) splitdwarf4-not-split4.c (1) 974 decl_line (data1) 6 975 decl_column (data1) 7 976 type (ref4) { 6d} 977 location (sec_offset) location list [ 73] 978 { 66} GNU_call_site abbrev: 5 979 low_pc (GNU_addr_index) [1] 0x000000000040107f <main+0x2f> 980 abstract_origin (ref4) { 84} 981 { 6d} base_type abbrev: 6 982 byte_size (data1) 4 983 encoding (data1) signed (5) 984 name (string) "int" 985 { 74} pointer_type abbrev: 7 986 byte_size (data1) 8 987 type (ref4) { 7a} 988 { 7a} pointer_type abbrev: 7 989 byte_size (data1) 8 990 type (ref4) { 80} 991 { 80} base_type abbrev: 8 992 byte_size (data1) 1 993 encoding (data1) signed_char (6) 994 name (GNU_str_index) "char" 995 { 84} subprogram abbrev: 9 996 external (flag_present) yes 997 declaration (flag_present) yes 998 linkage_name (GNU_str_index) "popcount" 999 name (GNU_str_index) "popcount" 1000 decl_file (data1) splitdwarf4-not-split4.c (1) 1001 decl_line (data1) 1 1002 decl_column (data1) 12 1003 Compilation unit at offset 52: 1004 Version: 4, Abbreviation section offset: 29, Address size: 8, Offset size: 4 1005 [ 3f] compile_unit abbrev: 1 1006 producer (strp) "GNU C17 9.0.0 20180528 (experimental) -mtune=generic -march=x86-64 -gdwarf-4 -O2" 1007 language (data1) C99 (12) 1008 name (strp) "popcount.c" 1009 comp_dir (strp) "/tmp" 1010 low_pc (addr) 0x0000000000401180 <popcount> 1011 high_pc (data8) 33 (0x00000000004011a1) 1012 stmt_list (sec_offset) 145 1013 [ 61] subprogram abbrev: 2 1014 external (flag_present) yes 1015 name (strp) "popcount" 1016 decl_file (data1) popcount.c (1) 1017 decl_line (data1) 1 1018 decl_column (data1) 5 1019 prototyped (flag_present) yes 1020 type (ref4) [ a0] 1021 low_pc (addr) 0x0000000000401180 <popcount> 1022 high_pc (data8) 33 (0x00000000004011a1) 1023 frame_base (exprloc) 1024 [ 0] call_frame_cfa 1025 GNU_all_call_sites (flag_present) yes 1026 sibling (ref4) [ a0] 1027 [ 83] formal_parameter abbrev: 3 1028 name (string) "u" 1029 decl_file (data1) popcount.c (1) 1030 decl_line (data1) 1 1031 decl_column (data1) 29 1032 type (ref4) [ a7] 1033 location (sec_offset) location list [ 0] 1034 [ 91] variable abbrev: 4 1035 name (string) "c" 1036 decl_file (data1) popcount.c (1) 1037 decl_line (data1) 3 1038 decl_column (data1) 7 1039 type (ref4) [ a0] 1040 location (sec_offset) location list [ 60] 1041 [ a0] base_type abbrev: 5 1042 byte_size (data1) 4 1043 encoding (data1) signed (5) 1044 name (string) "int" 1045 [ a7] base_type abbrev: 6 1046 byte_size (data1) 1 1047 encoding (data1) unsigned_char (8) 1048 name (strp) "unsigned char" 1049 1050 DWARF section [32] '.debug_loc' at offset 0x5ef: 1051 1052 CU [ 3f] base: 0x0000000000401180 <popcount> 1053 [ 0] range 0, 9 1054 0x0000000000401180 <popcount>.. 1055 0x0000000000401188 <popcount+0x8> 1056 [ 0] reg5 1057 range 9, 1b 1058 0x0000000000401189 <popcount+0x9>.. 1059 0x000000000040119a <popcount+0x1a> 1060 [ 0] reg1 1061 range 1b, 1d 1062 0x000000000040119b <popcount+0x1b>.. 1063 0x000000000040119c <popcount+0x1c> 1064 [ 0] breg1 0 1065 [ 2] lit1 1066 [ 3] shr 1067 [ 4] stack_value 1068 range 1d, 21 1069 0x000000000040119d <popcount+0x1d>.. 1070 0x00000000004011a0 <popcount+0x20> 1071 [ 0] reg1 1072 [ 60] range 0, 9 1073 0x0000000000401180 <popcount>.. 1074 0x0000000000401188 <popcount+0x8> 1075 [ 0] lit0 1076 [ 1] stack_value 1077 range 9, 20 1078 0x0000000000401189 <popcount+0x9>.. 1079 0x000000000040119f <popcount+0x1f> 1080 [ 0] reg0 1081 range 20, 21 1082 0x00000000004011a0 <popcount+0x20>.. 1083 0x00000000004011a0 <popcount+0x20> 1084 [ 0] lit0 1085 [ 1] stack_value 1086 EOF 1087 1088 testrun_compare ${abs_top_builddir}/src/readelf --dwarf-skeleton=testfile-splitdwarf4-not-split4.debug --debug-dump=loc splitdwarf4-not-split4.dwo <<\EOF 1089 1090 DWARF section [ 3] '.debug_loc.dwo' at offset 0x15b: 1091 1092 CU [ b] base: 000000000000000000 1093 [ 0] range 401050, 40106e 1094 0x0000000000401050 <main>.. 1095 0x000000000040106d <main+0x1d> 1096 [ 0] reg5 1097 range 40106e, 401086 1098 0x000000000040106e <main+0x1e>.. 1099 0x0000000000401085 <main+0x35> 1100 [ 0] reg12 1101 range 401086, 401095 1102 0x0000000000401086 <main+0x36>.. 1103 0x0000000000401094 <main+0x44> 1104 [ 0] GNU_entry_value: 1105 [ 0] reg5 1106 [ 3] stack_value 1107 range 401095, 40109c 1108 0x0000000000401095 <main+0x45>.. 1109 0x000000000040109b <main+0x4b> 1110 [ 0] reg5 1111 [ 28] range 401050, 40106e 1112 0x0000000000401050 <main>.. 1113 0x000000000040106d <main+0x1d> 1114 [ 0] reg4 1115 range 40106e, 401095 1116 0x000000000040106e <main+0x1e>.. 1117 0x0000000000401094 <main+0x44> 1118 [ 0] GNU_entry_value: 1119 [ 0] reg4 1120 [ 3] stack_value 1121 range 401095, 40109c 1122 0x0000000000401095 <main+0x45>.. 1123 0x000000000040109b <main+0x4b> 1124 [ 0] reg4 1125 [ 47] range 401050, 40106e 1126 0x0000000000401050 <main>.. 1127 0x000000000040106d <main+0x1d> 1128 [ 0] lit0 1129 [ 1] stack_value 1130 range 401086, 40108e 1131 0x0000000000401086 <main+0x36>.. 1132 0x000000000040108d <main+0x3d> 1133 [ 0] breg12 0 1134 [ 2] breg6 0 1135 [ 4] plus 1136 [ 5] stack_value 1137 range 40108e, 401095 1138 0x000000000040108e <main+0x3e>.. 1139 0x0000000000401094 <main+0x44> 1140 [ 0] reg0 1141 range 401095, 40109c 1142 0x0000000000401095 <main+0x45>.. 1143 0x000000000040109b <main+0x4b> 1144 [ 0] lit0 1145 [ 1] stack_value 1146 [ 73] range 401050, 40106e 1147 0x0000000000401050 <main>.. 1148 0x000000000040106d <main+0x1d> 1149 [ 0] reg5 1150 range 40106e, 401090 1151 0x000000000040106e <main+0x1e>.. 1152 0x000000000040108f <main+0x3f> 1153 [ 0] reg6 1154 range 401095, 40109c 1155 0x0000000000401095 <main+0x45>.. 1156 0x000000000040109b <main+0x4b> 1157 [ 0] reg5 1158 EOF 1159 1160 exit 0 1161