| Summary: | infinite loop in ARM-64 version of instrumentation with ouptput VG_ calls at superblock and instruction level | ||
|---|---|---|---|
| Product: | [Developer tools] valgrind | Reporter: | newhall |
| Component: | vex | Assignee: | Julian Seward <jseward> |
| Status: | REPORTED --- | ||
| Severity: | normal | CC: | mark, pjfloyd |
| Priority: | NOR | ||
| Version First Reported In: | 3.19.0 | ||
| Target Milestone: | --- | ||
| Platform: | unspecified | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
newhall
2022-10-24 16:31:10 UTC
the bug is also in valgrind version 3.20.0 still a bug in 3.21.0 run lackey on an executable with no infinite loop: valgrind --tool=lackey --trace-superblocks=yes ./a.out valgrind stuck in infinite loop of same 2 superblocks: SB 04954ecc SB 04954ed8 ... forever Have you tried printing out the problematic blocks as described in README_DEVELOPERS:
Printing out problematic blocks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you want to print out a disassembly of a particular block that
causes a crash, do the following.
Try running with "--vex-guest-chase=no --trace-flags=10000000
--trace-notbelow=999999". This should print one line for each block
translated, and that includes the address.
Then re-run with 999999 changed to the highest bb number shown.
This will print the one line per block, and also will print a
disassembly of the block in which the fault occurred.
See also valgrind --help-debug for a description of --trace-flags
Tracing and profile control:
--trace-flags and --profile-flags values (omit the middle space):
1000 0000 show conversion into IR
0100 0000 show after initial opt
0010 0000 show after instrumentation
0001 0000 show after second opt
0000 1000 show after tree building
0000 0100 show selecting insns
0000 0010 show after reg-alloc
0000 0001 show final assembly
0000 0000 show summary profile only
(Nb: you need --trace-notbelow and/or --trace-notabove
with --trace-flags for full details)
This is what we get when run with those flags (it is in libc code called from _start): valgrind -v --vex-guest-chase=no --trace-flags=10000000 --trace-notbelow=999999 --tool=lackey --trace-superblocks=yes ./a.out ... a lot of ouput ... SB 0400dffc SB 0400e008 SB 04014080 ==== SB 1427 (evchecks 6793) [tid 1] 0x4866d30 (below main) /usr/lib/aarch64-linux-gnu/libc-2.31.so+0x20d30 SB 04866d30 ==== SB 1428 (evchecks 6794) [tid 1] 0x4866d78 (below main)+72 /usr/lib/aarch64-linux-gnu/libc-2.31.so+0x20d78 SB 04866d78 ==== SB 1429 (evchecks 6795) [tid 1] 0x4866d84 (below main)+84 /usr/lib/aarch64-linux-gnu/libc-2.31.so+0x20d84 SB 04866d84 ==== SB 1430 (evchecks 6796) [tid 1] 0x487cc40 __cxa_atexit /usr/lib/aarch64-linux-gnu/libc-2.31.so+0x36c40 SB 0487cc40 ==== SB 1431 (evchecks 6797) [tid 1] 0x487cb30 __internal_atexit /usr/lib/aarch64-linux-gnu/libc-2.31.so+0x36b30 SB 0487cb30 ==== SB 1432 (evchecks 6798) [tid 1] 0x487cb48 __internal_atexit+24 /usr/lib/aarch64-linux-gnu/libc-2.31.so+0x36b48 SB 0487cb48 ==== SB 1433 (evchecks 6799) [tid 1] 0x4954eb0 __aarch64_cas4_acq /usr/lib/aarch64-linux-gnu/libc-2.31.so+0x10eeb0 SB 04954eb0 ==== SB 1434 (evchecks 6800) [tid 1] 0x4954ec8 __aarch64_cas4_acq+24 /usr/lib/aarch64-linux-gnu/libc-2.31.so+0x10eec8 SB 04954ec8 ==== SB 1435 (evchecks 6801) [tid 1] 0x4954ed8 __aarch64_cas4_acq+40 /usr/lib/aarch64-linux-gnu/libc-2.31.so+0x10eed8 SB 04954ed8 ==== SB 1436 (evchecks 6802) [tid 1] 0x4954ecc __aarch64_cas4_acq+28 /usr/lib/aarch64-linux-gnu/libc-2.31.so+0x10eecc SB 04954ecc SB 04954ed8 SB 04954ecc SB 04954ed8 SB 04954ecc SB 04954ed8 SB 04954ecc SB 04954ed8 SB 04954ecc ... continues on forever |